diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644
index 0000000..13eecc8
--- /dev/null
+++ b/Gruntfile.js
@@ -0,0 +1,79 @@
+// Gruntfile
+module.exports = function(grunt) {
+var autoprefixer = require('autoprefixer-core');
+require('load-grunt-tasks')(grunt);
+
+ // Project configuration.
+ grunt.initConfig({
+
+ pkg: grunt.file.readJSON('package.json'),
+
+ watch: {
+ css: {
+ files: ['_sass/*.scss'],
+ tasks: ['sass', 'postcss', 'shell:jekyllBuild'],
+ options: {
+ spawn: false,
+ interrupt: true,
+ atBegin: true
+ }
+ },
+
+ jekyll: {
+ files: ['index.html', '_includes/*.html', 'filters/*.*', '_layouts/*.*', '_posts/*.*'],
+ tasks: ['shell:jekyllBuild']
+ }
+
+ },
+
+ sass: {
+ dist: {
+ options: {
+ style: 'expanded',
+ sourcemap: 'none'
+ },
+ files: {
+ '_site/css/main.css':'_sass/main.scss'
+ }
+ }
+ },
+
+ shell: {
+ jekyllServe: {
+ command: 'jekyll serve --no-watch'
+ },
+
+ jekyllBuild: {
+ command: 'jekyll build'
+ }
+ },
+
+
+ postcss: {
+ options: {
+ map: true,
+ processors: [
+ autoprefixer({ browsers: ['last 2 version'] }).postcss
+ ]
+ },
+ dist: {
+ src: '_site/css/*.css'
+ }
+ },
+
+ concurrent: {
+ tasks: ['shell:jekyllServe', 'watch'],
+ options: {
+ logConcurrentOutput: true
+ }
+ }
+ });
+
+ grunt.loadNpmTasks('grunt-contrib-watch');
+ grunt.loadNpmTasks('grunt-contrib-sass');
+ grunt.loadNpmTasks('grunt-postcss');
+ grunt.loadNpmTasks('grunt-concurrent');
+
+ // grunt.registerTask('default', ['shell:jekyllServe', 'watch']);
+ grunt.registerTask('default', ['concurrent']);
+};
diff --git a/_config.yml b/_config.yml
index 757437b..a5c0b0f 100644
--- a/_config.yml
+++ b/_config.yml
@@ -8,3 +8,5 @@ collections:
exclude:
- README.md
- CNAME
+ - node_modules
+keep_files: ['css']
diff --git a/_includes/head.html b/_includes/head.html
index 9a126ca..03b5888 100644
--- a/_includes/head.html
+++ b/_includes/head.html
@@ -6,7 +6,7 @@
{% if page.title %}{{ page.title }} – {% endif %}{{ site.data.site.title }}
-
+
diff --git a/css/main.scss b/_sass/main.scss
similarity index 96%
rename from css/main.scss
rename to _sass/main.scss
index 864c694..69df343 100755
--- a/css/main.scss
+++ b/_sass/main.scss
@@ -1,6 +1,3 @@
----
-# Liquid Docs Main Styles
----
@charset "utf-8";
@@ -18,7 +15,7 @@ $color-blue-2: #B4DCED;
$color-blue-3: #91C9E8;
$color-blue-4: #67B8DE;
$color-blue-5: #3399CC;
-$color-white: #fff;
+$color-white: #ffffff;
$color-slate: #5E5E5E;
/*
@@ -27,7 +24,7 @@ $grey-color-light: lighten($grey-color, 40%);
$grey-color-dark: darken($grey-color, 25%);
*/
-// Width of the content area
+// Width of the cont s sent area
$sidebar-width: 250px;
$content-width: 900px;
$on-palm: 600px;
@@ -49,8 +46,8 @@ $on-laptop: 900px;
// Import partials from `sass_dir` (defaults to `_sass`)
@import
- "base",
- "syntax-highlighting"
+ "modules/base",
+ "vendors/syntax-highlighting"
;
* {
diff --git a/_sass/_base.scss b/_sass/modules/_base.scss
similarity index 100%
rename from _sass/_base.scss
rename to _sass/modules/_base.scss
diff --git a/_sass/_syntax-highlighting.scss b/_sass/vendors/_syntax-highlighting.scss
similarity index 100%
rename from _sass/_syntax-highlighting.scss
rename to _sass/vendors/_syntax-highlighting.scss
diff --git a/filters.md b/filters.md
deleted file mode 100644
index d10a793..0000000
--- a/filters.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Filters
-permalink: /filters/
-layout: page
----
-
-{% for doc in site.filters %}
-{{ doc.title }}
-
-{% endfor %}
diff --git a/_filters/append.md b/filters/append.md
similarity index 100%
rename from _filters/append.md
rename to filters/append.md
diff --git a/_filters/capitalize.md b/filters/capitalize.md
similarity index 100%
rename from _filters/capitalize.md
rename to filters/capitalize.md
diff --git a/_filters/ceil.md b/filters/ceil.md
similarity index 96%
rename from _filters/ceil.md
rename to filters/ceil.md
index 13e4c2a..43a00a6 100644
--- a/_filters/ceil.md
+++ b/filters/ceil.md
@@ -1,5 +1,6 @@
---
title: ceil
+layout: default
---
`ceil` rounds the input up to the nearest whole number.
diff --git a/_filters/date.md b/filters/date.md
similarity index 100%
rename from _filters/date.md
rename to filters/date.md
diff --git a/_filters/default.md b/filters/default.md
similarity index 100%
rename from _filters/default.md
rename to filters/default.md
diff --git a/_filters/divided_by.md b/filters/divided_by.md
similarity index 100%
rename from _filters/divided_by.md
rename to filters/divided_by.md
diff --git a/_filters/downcase.md b/filters/downcase.md
similarity index 100%
rename from _filters/downcase.md
rename to filters/downcase.md
diff --git a/_filters/escape.md b/filters/escape.md
similarity index 100%
rename from _filters/escape.md
rename to filters/escape.md
diff --git a/_filters/escape_once.md b/filters/escape_once.md
similarity index 100%
rename from _filters/escape_once.md
rename to filters/escape_once.md
diff --git a/_filters/first.md b/filters/first.md
similarity index 100%
rename from _filters/first.md
rename to filters/first.md
diff --git a/_filters/floor.md b/filters/floor.md
similarity index 100%
rename from _filters/floor.md
rename to filters/floor.md
diff --git a/_filters/h.md b/filters/h.md
similarity index 100%
rename from _filters/h.md
rename to filters/h.md
diff --git a/filters/index.html b/filters/index.html
new file mode 100644
index 0000000..133f08c
--- /dev/null
+++ b/filters/index.html
@@ -0,0 +1,9 @@
+---
+layout: default
+---
+
+
+
+ FILTERS
+
+
diff --git a/_filters/join.md b/filters/join.md
similarity index 100%
rename from _filters/join.md
rename to filters/join.md
diff --git a/_filters/last.md b/filters/last.md
similarity index 100%
rename from _filters/last.md
rename to filters/last.md
diff --git a/_filters/lstrip.md b/filters/lstrip.md
similarity index 100%
rename from _filters/lstrip.md
rename to filters/lstrip.md
diff --git a/_filters/map.md b/filters/map.md
similarity index 100%
rename from _filters/map.md
rename to filters/map.md
diff --git a/_filters/minus.md b/filters/minus.md
similarity index 100%
rename from _filters/minus.md
rename to filters/minus.md
diff --git a/_filters/modulo.md b/filters/modulo.md
similarity index 100%
rename from _filters/modulo.md
rename to filters/modulo.md
diff --git a/_filters/newline_to_br.md b/filters/newline_to_br.md
similarity index 100%
rename from _filters/newline_to_br.md
rename to filters/newline_to_br.md
diff --git a/_filters/plus.md b/filters/plus.md
similarity index 100%
rename from _filters/plus.md
rename to filters/plus.md
diff --git a/_filters/prepend.md b/filters/prepend.md
similarity index 100%
rename from _filters/prepend.md
rename to filters/prepend.md
diff --git a/_filters/remove.md b/filters/remove.md
similarity index 100%
rename from _filters/remove.md
rename to filters/remove.md
diff --git a/_filters/remove_first.md b/filters/remove_first.md
similarity index 100%
rename from _filters/remove_first.md
rename to filters/remove_first.md
diff --git a/_filters/replace.md b/filters/replace.md
similarity index 100%
rename from _filters/replace.md
rename to filters/replace.md
diff --git a/_filters/replace_first.md b/filters/replace_first.md
similarity index 100%
rename from _filters/replace_first.md
rename to filters/replace_first.md
diff --git a/_filters/reverse.md b/filters/reverse.md
similarity index 100%
rename from _filters/reverse.md
rename to filters/reverse.md
diff --git a/_filters/round.md b/filters/round.md
similarity index 100%
rename from _filters/round.md
rename to filters/round.md
diff --git a/_filters/rstrip.md b/filters/rstrip.md
similarity index 100%
rename from _filters/rstrip.md
rename to filters/rstrip.md
diff --git a/_filters/size.md b/filters/size.md
similarity index 100%
rename from _filters/size.md
rename to filters/size.md
diff --git a/_filters/slice.md b/filters/slice.md
similarity index 100%
rename from _filters/slice.md
rename to filters/slice.md
diff --git a/_filters/sort.md b/filters/sort.md
similarity index 100%
rename from _filters/sort.md
rename to filters/sort.md
diff --git a/_filters/split.md b/filters/split.md
similarity index 100%
rename from _filters/split.md
rename to filters/split.md
diff --git a/_filters/strip.md b/filters/strip.md
similarity index 100%
rename from _filters/strip.md
rename to filters/strip.md
diff --git a/_filters/strip_html.md b/filters/strip_html.md
similarity index 100%
rename from _filters/strip_html.md
rename to filters/strip_html.md
diff --git a/_filters/strip_newlines.md b/filters/strip_newlines.md
similarity index 100%
rename from _filters/strip_newlines.md
rename to filters/strip_newlines.md
diff --git a/_filters/times.md b/filters/times.md
similarity index 100%
rename from _filters/times.md
rename to filters/times.md
diff --git a/_filters/truncate.md b/filters/truncate.md
similarity index 100%
rename from _filters/truncate.md
rename to filters/truncate.md
diff --git a/_filters/truncatewords.md b/filters/truncatewords.md
similarity index 100%
rename from _filters/truncatewords.md
rename to filters/truncatewords.md
diff --git a/_filters/uniq.md b/filters/uniq.md
similarity index 100%
rename from _filters/uniq.md
rename to filters/uniq.md
diff --git a/_filters/upcase.md b/filters/upcase.md
similarity index 100%
rename from _filters/upcase.md
rename to filters/upcase.md
diff --git a/_filters/url_encode.md b/filters/url_encode.md
similarity index 100%
rename from _filters/url_encode.md
rename to filters/url_encode.md
diff --git a/index.html b/index.html
index 45d5a2a..813fbd2 100644
--- a/index.html
+++ b/index.html
@@ -19,6 +19,7 @@ layout: default
It was developed for usage in Ruby on Rails web applications and integrates seamlessly as a plugin but it also works excellently as a stand alone library.
- # What does it look like?
+ # What does it look like???
+
diff --git a/node_modules/.bin/csswring b/node_modules/.bin/csswring
new file mode 120000
index 0000000..04f1f5f
--- /dev/null
+++ b/node_modules/.bin/csswring
@@ -0,0 +1 @@
+../csswring/bin/csswring
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/ChangeLog.md b/node_modules/autoprefixer-core/ChangeLog.md
new file mode 100644
index 0000000..0d67f75
--- /dev/null
+++ b/node_modules/autoprefixer-core/ChangeLog.md
@@ -0,0 +1,493 @@
+## 5.1.8
+* Fix gradients in `mask` and `mask-image` properties.
+* Fix old webkit prefix on some unsupported gradients.
+
+## 5.1.7
+* Fix placeholder selector (by Vincent De Oliveira).
+
+## 5.1.6
+* Use official `::placeholder-shown` selector (by Vincent De Oliveira).
+
+## 5.1.5
+* Add transition support for CSS Masks properties.
+
+## 5.1.4
+* Use `-webkit-` prefix for Opera Mobile 24.
+
+## 5.1.3
+* Add IE support for `image-rendering: crisp-edges`.
+
+## 5.1.2
+* Add never existed `@-ms-keyframes` to common mistake.
+
+## 5.1.1
+* Safer value split in `flex` hack.
+
+## 5.1 “Jianyuan”
+* Add support for resolution media query (by 一丝).
+* Higher accuracy while removing prefixes in values.
+* Add support for logical properties (by 一丝).
+* Add `@viewport` support.
+* Add `text-overflow` support (by 一丝).
+* Add `text-emphasis` support (by 一丝).
+* Add `image-rendering: crisp-edges` support.
+* Add `text-align-last` support.
+* Return `autoprefixer.defaults` as alias to current `browserslist.defaults`.
+* Save code style while adding prefixes to `@keyframes` and `@viewport`.
+* Do not remove `-webkit-background-clip` with non-spec `text` value.
+* Fix `-webkit-filter` in `transition`.
+* Better support for browser versions joined on Can I Use
+ like `ios_saf 7.0-7.1` (by Vincent De Oliveira).
+* Fix compatibility with `postcss-import` (by Jason Kuhrt).
+* Fix Flexbox prefixes for BlackBerry and UC Browser.
+* Fix gradient prefixes for old Chrome.
+
+## 5.0 “Pravda vítězí”
+* Use PostCSS 4.0.
+* Use Browserslist to parse browsers queries.
+* Use global `browserslist` config.
+* Add `> 5% in US` query to select browsers by usage in some country.
+* Add `object-fit` and `object-position` properties support.
+* Add CSS Shape properties support.
+* Fix UC Browser name in debug info.
+* Remove `autoprefixer.defaults` and use defaults from Browserslist.
+
+## 4.0.2
+* Remove `o-border-radius`, which is common mistake in legacy CSS.
+
+## 4.0.1
+* Fix `@supports` support with brackets in values (by Vincent De Oliveira).
+
+## 4.0 “Indivisibiliter ac Inseparabiliter”
+* Become 2.5 times fatser by new PostCSS 3.0 parser.
+* Do not remove outdated prefixes by `remove: false` option.
+* `map.inline` and `map.sourcesContent` options are now `true` by default.
+* Add `box-decoration-break` support.
+* Do not add old `-webkit-` prefix for gradients with `px` units.
+* Use previous source map to show origin source of CSS syntax error.
+* Use `from` option from previous source map `file` field.
+* Set `to` value to `from` if `to` option is missing.
+* Trim Unicode BOM on source maps parsing.
+* Parse at-rules without spaces like `@import"file"`.
+* Better previous `sourceMappingURL` annotation comment cleaning.
+* Do not remove previous `sourceMappingURL` comment on `map.annotation: false`.
+
+## 3.1.2
+* Update Firefox ESR version from 24 to 31.
+
+## 3.1.1
+* Use Flexbox 2009 spec for Android stock browser < 4.4.
+
+## 3.1 “Satyameva Jayate”
+* Do not remove comments from prefixed values (by Eitan Rousso).
+* Allow Safari 6.1 to use final Flexbox spec (by John Kreitlow).
+* Fix `filter` value in `transition` in Webkits.
+* Show greetings if your browsers don’t require any prefixes.
+* Add `<=` and `<` browsers requirement (by Andreas Lind).
+
+## 3.0.1
+* Fix `autoprefixer.postcss` in callbacks.
+
+## 3.0 “Liberté, Égalité, Fraternité”
+* Project was split to autoprefixer (with CLI) and autoprefixer-core.
+* `autoprefixer()` now receives only `options` object with `browsers` key.
+* GNU format for syntax error messages from PostCSS 2.2.
+
+## 2.2 “Mobilis in mobili”
+* Allow to disable Autoprefixer for some rule by control comment.
+* Use PostCSS 2.1 with Safe Mode option and broken source line
+ in CSS syntax error messages.
+
+## 2.1.1
+* Fix `-webkit-background-size` hack for `contain` and `cover` values.
+* Don’t add `-webkit-` prefix to `filter` with SVG (by Vincent De Oliveira).
+
+## 2.1 “Eleftheria i thanatos”
+* Add support for `clip-path` and `mask` properties.
+* Return `-webkit-` prefix to `filter` with SVG URI.
+
+## 2.0.2
+* Add readable names for new browsers from 2.0 release.
+* Don’t add `-webkit-` prefix to `filter` with SVG URI.
+* Don’t add `-o-` prefix 3D transforms.
+
+## 2.0.1
+* Save declaration style, when clone declaration to prefix.
+
+## 2.0 “Hongik Ingan”
+* Based on PostCSS 1.0.
+ See [options changes](https://github.com/postcss/postcss/releases/tag/1.0.0).
+* Restore visual cascade after declaration removing.
+* Enable visual cascade by default.
+* Prefix declareation in `@supports` at-rule conditions.
+* Add all browsers from Can I Use: `ie_mob`, `and_chr`, `and_ff`,
+ `op_mob` and `op_mini`.
+* Allow to use latest Autoprefixer from GitHub by npm.
+* Add `--no-cascade`, `--annotation` and `--sources-content` options to binary.
+
+## 1.3.1
+* Fix gradient hack, when `background` property contains color.
+
+## 1.3 “Tenka Fubu”
+* Add `text-size-adjust` support.
+* Add `background-size` to support Android 2.
+
+## 1.2 “Meiji”
+* Use Can I Use data from official `caniuse-db` npm package.
+* Remove package data update from binary.
+* Use increment value instead of current date in minor versions.
+
+## 1.1 “Nutrisco et extingo”
+* Add source map annotation comment support.
+* Add inline source map support.
+* Autodetect previous source map.
+* Fix source maps support on Windows.
+* Fix source maps support in subdirectory.
+* Prefix selector even if it is already prefixed by developer.
+* Add option `cascade` to create nice visual cascade of prefixes.
+* Fix flexbox support for IE 10 (by Roland Warmerdam).
+* Better `break-inside` support.
+* Fix prefixing, when two same properties are near.
+
+### 20140222:
+* Add `touch-action` support.
+
+### 20140226:
+* Chrome 33 is moved to released versions.
+* Add Chrome 36 data.
+
+### 20140302:
+* Add `text-decoration-*` properties support.
+* Update browsers usage statistics.
+* Use new PostCSS version.
+
+### 20140319:
+* Check already prefixed properties after current declaration.
+* Normalize spaces before already prefixed check.
+* Firefox 28 is moved to released versions.
+* Add Firefox 31 data.
+* Add some Blackberry data.
+
+### 20140327:
+* Don’t use `-ms-transform` in `@keyframes`, because IE 9 doesn’t support
+ animations.
+* Update BlackBerry 10 data.
+
+### 20140403:
+* Update browsers usage statistics.
+* Opera 20 is moved to released versions.
+* Add Opera 22 data.
+
+### 20140410:
+* Chrome 34 is moved to released versions.
+* Add Chrome 37 data.
+* Fix Chrome 36 data.
+
+### 20140429:
+* Fix `display: inline-flex` support by 2009 spec.
+* Fix old WebKit gradient converter (by Sergey Belov).
+* Fix CSS 3 cursors data (by Nick Schonning).
+
+### 20140430:
+* Separate 2D and 3D transform prefixes to clean unnecessary `-ms-` prefixes.
+* Firefox 29 is moved to released versions.
+* Add Firefox 32 data.
+
+### 20140510
+* Do not add `-ms-` prefix for `transform` with 3D functions.
+* Update browsers global usage statistics.
+
+### 20140512
+* Remove unnecessary `-moz-` prefix for `wavy` in `text-decoration`.
+* Update Safari data for font properties.
+
+### 20140521
+* Chrome 36 is moved to released versions.
+* Add Chrome 38 data.
+
+### 20140523
+* Opera 21 is moved to released versions.
+* Add Opera 23 data.
+
+### 20140605
+* Allow to parse gradients without space between color and position.
+* Add iOS 8, Safari 8 and Android 4.4.3 data.
+* Update browsers usage statistics.
+
+## 1.0 “Plus ultra”
+* Source map support.
+* Save origin indents and code formatting.
+* Change CSS parser to PostCSS.
+* Preserve vendor-prefixed properties put right after unprefixed ones.
+* Rename `compile()` to `process()` and return result object,
+ instead of CSS string.
+* Rename `inspect()` to `info()`.
+* Add in binary `-d` option to specify output directory.
+* Binary now will not concat output files.
+* Allow to select last versions for specified browser.
+* Add full browser names aliases: `firefox`, `explorer` and `blackberry`.
+* Ignore case in browser names.
+* Change license to MIT.
+* Add prefixes inside custom at-rules.
+* Add only necessary prefixes to selector inside prefixed at-rule.
+* Safer backgrounds list parser in gradient hack.
+* Prefix `@keyframes` inside `@media`.
+* Don’t prefix values for CSS3 PIE properties.
+* Binary now shows file name in syntax error.
+* Use browserify to build standalone version.
+
+### 20131225:
+* Fix deprecated API convertor.
+* Add `::placeholder` support for Firefix >= 18.
+* Fix vendor prefixes order.
+
+### 20140103:
+* Add `-webkit-` prefix for `sticky` position.
+* Update browsers popularity statistics.
+
+### 20140109:
+* Add selectors and at-rules sections to debug info.
+* Fix outdated prefixes cleaning.
+
+### 20140110:
+* Add `Firefox ESR` browser requirement.
+* Opera 18 is moved to released versions.
+* Add Opera 20 data.
+
+### 20140117:
+* Chrome 32 is moved to released versions.
+* Add Opera 34 data.
+
+### 20140130:
+* Fix flexbox properties names in transitions.
+* Add Chrome 35 and Firefox 29 data.
+
+### 20140203:
+* Android 4.4 stock browser and Opera 19 are moved to released versions.
+* Add Opera 21 data.
+* Update browsers usage statistics.
+
+### 20140213:
+* Add case insensitive to IE’s filter hack (by Dominik Schilling).
+* Improve selector prefixing in some rare cases (by Simon Lydell).
+* Firefox 27 is moved to released versions.
+* Add Firefox 30 data.
+
+## 0.8 “Unbowed, Unbent, Unbroken”
+* Add more browsers to defaults ("> 1%, last 2 versions, ff 17, opera 12.1"
+ instead of just "last 2 browsers").
+* Keep vendor prefixes without unprefixed version (like vendor-specific hacks).
+* Convert gradients to old WebKit syntax (actual for Android 2.3).
+* Better support for several syntaxes with one prefix (like Flexbox and
+ gradients in WebKit).
+* Add intrinsic and extrinsic sizing values support.
+* Remove never existed prefixes from common mistakes (like -ms-transition).
+* Add Opera 17 data.
+* Fix selector prefixes order.
+* Fix browser versions order in inspect.
+
+### 20130903:
+* Fix old WebKit gradients convertor on rgba() colors.
+* Allow to write old direction syntax in gradients.
+
+### 20130906:
+* Fix direction syntax in radial gradients.
+* Don’t prefix IE filter with modern syntax.
+
+### 20130911:
+* Fix parsing property name with spaces.
+
+### 20130919:
+* Fix processing custom framework prefixes (by Johannes J. Schmidt).
+* Concat outputs if several files compiled to one output.
+* Decrease standalone build size by removing unnecessary Binary class.
+* iOS 7 is moved to released versions.
+* Clean up binary code (by Simon Lydell).
+
+### 20130923:
+* Firefox 24 is moved to released versions.
+
+### 20131001:
+* Add support for grab, grabbing, zoom-in and zoom-out cursor values.
+
+### 20131006:
+* Chrome 30 is moved to released versions.
+
+### 20131007:
+* Don’t add another prefixes in rule with prefixed selector.
+
+### 20131009:
+* Opera 17 is moved to released versions.
+
+### 20131015:
+* Fix converting multiple gradients to old webkit syntax (by Aleksei Androsov).
+
+### 20131017:
+* Fix @host at-rule parsing.
+
+### 20131020:
+* IE 11 and Andrid 4.3 is moved to released versions.
+* Add Opera 18 data.
+* Add @namespace support.
+* Sort browser versions in data file.
+
+### 20131029:
+* Add Safari 6.1 data.
+* Add fx alias for Firefox.
+
+### 20131104:
+* Update Android future version to 4.4.
+* Google Chrome 32 added to future versions list.
+* Firefox 25 now is actual version, 27 and 28 added to future versions.
+* Browsers statistics are updated.
+
+### 20131205:
+* Google Chrome 33 added to future releases list.
+* Google Chrome 31 moved to current releases list.
+
+### 20131209:
+* Use old webkit gradients for old iOS and Safari (by Chad von Nau).
+* Fix direction conversion for old webkit gradients (by Chad von Nau).
+* Update browsers popularity statistics.
+
+### 20131213:
+* Firefox ESR in default browsers was changed to 24 version.
+* Firefox 26 was moved to current releases list.
+* Firefox 28 was added to future releases list.
+
+## 0.7 “We Do Not Sow”
+* Add vendor prefixes to selectors.
+* Add ::selection and ::placeholder selectors support.
+* Allow to load support data from Can I Use pull requests.
+* Remove deprecated API.
+
+### 20130806:
+* Add hyphens support.
+
+### 20130807:
+* Add tab-size support.
+* Add :fullscreen support.
+
+### 20130808:
+* Allow to select browser versions by > and >= operator.
+* Fix flex properties in transition.
+
+### 20130810:
+* Add Firefox 25 data.
+
+### 20130824:
+* Add Chrome 31 and 30 data.
+* Fix CSS comments parsing (by vladkens).
+
+## 0.6 “As High As Honor”
+* New faster API, which cache preprocessed data. Old API is deprecated.
+* A lot of perfomance improvements.
+* Add Opera 15 -webkit- prefix support.
+* Update Chrome 29 and Safari 7 prefixes data.
+* Add minor browsers in popularity select.
+* Better syntax error messages.
+
+### 20130721:
+* Add Chrome 30 data.
+
+### 20130728:
+* Don’t remove non-standard -webkit-background-clip: text.
+* Don’t remove IE hack on CSS parse.
+
+### 20130729:
+* Add Opera 16 data.
+* Fix “Invalid range in character class” error on Firefox.
+
+### 20130730:
+* Fix correct clone comments inside keyframes (by Alexey Plutalov).
+* Fix angle recalculation in gradients (by Roman Komarov).
+
+### 20130731:
+* Add border-image support.
+
+## 0.5 “Ours is the Fury”
+* Rewrite Autoprefixer to be more flexible.
+* Use css, instead of Rework, to fix CSS parsing errors faster.
+* Fix a lot of CSS parsing errors.
+
+### 20130616:
+* More useful message for CSS parsing errors.
+* Remove old WebKit gradient syntax.
+* Fix parsing error on comment with braces.
+
+### 20130617:
+* Remove old Mozilla border-radius.
+* Don’t prefix old IE filter.
+* Remove old background-clip, background-size and background-origin prefixes.
+* Speed up regexps in values.
+* Allow to hack property declarations.
+
+### 20130625:
+* Convert flexbox properties to 2009 and 2012 specifications.
+* Improve messages on syntax errors.
+
+### 20130626:
+* Add Firefox 24 data.
+* Add prefixes for font-feature-settings.
+
+### 20130629:
+* Fix convert flex properties to old box-flex.
+
+## 0.4 “Winter Is Coming”
+* Remove outdated prefixes.
+* Add border-radius and box-shadow properties to database.
+* Change degrees in webkit gradients.
+
+### 20130515:
+* Add old syntax in gradient direction.
+* Add old syntax for display: flex.
+* Update browser global usage statistics.
+
+### 20130521:
+* Add Firefox 23 data.
+
+### 20130524:
+* Add Chrome 29 data.
+
+### 20130528:
+* Fix compatibilty with Rework from git master.
+* Add minor browsers to data, which can be selected only directly.
+
+### 20130530:
+* Add Opera 15 and iOS 6.1 data.
+* Fix iOS versions in properties and values data.
+
+### 20130603:
+* Use latest Rework 0.15 with a lot of CSS parsing fixes.
+* Update browsers usage statistics.
+
+## 0.3 “Growing Strong”
+* Rename `autoprefixer.filter()` to `autoprefixer.rework()`.
+* Use own filters instead of Rework’s `prefix` and `prefixValue`.
+* Smarter value prefixer without false match “order” in “border”.
+* 40% faster.
+* Don’t add unnecessary properties instead of Rework’s `prefixValue`.
+* Don’t change properties order.
+* Sort properties and values in inspect output.
+* Add main to component config (by Jonathan Ong).
+* Fix documentation (by Sergey Leschina and Mark Vasilkov).
+
+### 20130424:
+* Fix value override in prefixer.
+
+### 20130427:
+* Prefix several same values in one property.
+* Fix Windows support in binary.
+* Improve print errors in binary.
+
+### 20130502:
+* Don’t add -webkit- prefix to IE filter.
+* Don’t duplicate prefixes on second run.
+
+## 0.2 “Hear Me Roar!”
+* Update parse libraries.
+* Use component package manager to build standalone script.
+* Add inspect to standalone script.
+
+## 0.1 “Fire and Blood”
+* Initial release.
diff --git a/node_modules/autoprefixer-core/LICENSE b/node_modules/autoprefixer-core/LICENSE
new file mode 100644
index 0000000..da057b4
--- /dev/null
+++ b/node_modules/autoprefixer-core/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2013 Andrey Sitnik
+
+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/node_modules/autoprefixer-core/README.md b/node_modules/autoprefixer-core/README.md
new file mode 100644
index 0000000..97a5e96
--- /dev/null
+++ b/node_modules/autoprefixer-core/README.md
@@ -0,0 +1,194 @@
+# Autoprefixer Core [](https://travis-ci.org/postcss/autoprefixer-core)
+
+
+
+[PostCSS] plugin to parse CSS and add vendor prefixes using values
+from [Can I Use].
+
+This is core package to build Autoprefixer plugin for some environment
+(like [grunt‑autoprefixer]). For end-user documentation, features
+and plugins list visit [main Autoprefixer] project.
+
+
+
+
+
+[grunt‑autoprefixer]: https://github.com/nDmitry/grunt-autoprefixer
+[main Autoprefixer]: https://github.com/postcss/autoprefixer
+[Can I Use]: http://caniuse.com/
+[PostCSS]: https://github.com/postcss/postcss
+
+## Quick Example
+
+Write your CSS rules without vendor prefixes (in fact, forget about them
+entirely):
+
+```css
+:fullscreen a {
+ display: flex
+}
+```
+
+Process your CSS by Autoprefixer:
+
+```js
+var autoprefixer = require('autoprefixer-core');
+var prefixed = autoprefixer.process(css).css;
+```
+
+It will use the data based on current browser popularity and property support
+to apply prefixes for you:
+
+```css
+:-webkit-full-screen a {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex
+}
+:-moz-full-screen a {
+ display: flex
+}
+:-ms-fullscreen a {
+ display: -ms-flexbox;
+ display: flex
+}
+:fullscreen a {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex
+}
+```
+
+## Usage
+
+To process your CSS you need to make 2 steps:
+
+1. Build processor for your options and browsers supported in your project.
+2. Process CSS throw this processor.
+
+Function `autoprefixer(options)` returns new processor object:
+
+```js
+var processor = autoprefixer({ browsers: ['> 1%', 'IE 7'], cascade: false });
+```
+
+There are 2 options:
+
+* `browsers` (array): list of browsers, which are supported in your project.
+ You can directly specify browser version (like `iOS 7`) or use selections
+ (like `last 2 version` or `> 5%`). See [Browserslist docs] for available
+ queries and default value.
+* `cascade` (boolean): should Autoprefixer uses [Visual Cascade],
+ if CSS will be uncompressed.
+
+Processor object had:
+
+* `.process(css, opts)` method, which will add prefixes to `css`.
+* `.info()` method, which returns debug information: which browsers are selected
+ and which properties will be prefixed
+* `.postcss` property returns [PostCSS] processor to use in chain
+ with other [PostCSS processors].
+
+You can use processor object to process several CSS files
+to increase perfomance.
+
+There are `autoprefixer.process()`, `autoprefixer.info()`
+and `autoprefixer.postcss` shortcuts, which use default browsers and options.
+
+[PostCSS processors]: https://github.com/postcss/postcss#built-with-postcss
+[Browserslist docs]: https://github.com/ai/browserslist
+[Visual Cascade]: https://github.com/postcss/autoprefixer#visual-cascade
+[PostCSS]: https://github.com/postcss/postcss
+
+## CSS Processing
+
+Method `process(css, opts)` from Autoprefixer processor is a PostCSS’s method.
+
+You must set `from` and `to` options with file names to generates corrects
+source maps and useful error messages.
+
+Options:
+
+* `from` (path): file path to origin CSS files.
+* `to` (path): file path to future CSS file, which will
+ contain processed CSS with prefixes.
+* `safe` (boolean): enables [Safe Mode] in PostCSS. By default `false`.
+* `map` contains options for source maps:
+
+ * `inline: false` to force save map to separated file, instead of inline it
+ to CSS in special comment by base64.
+ * `prev` (string or object): map content from previous processing step
+ (like Sass compilation).
+
+ If you set `map: false`, PostCSS will remove source map.
+
+You can read more about the source map options in [PostCSS documentation].
+
+[PostCSS documentation]: https://github.com/postcss/postcss#source-map-1
+[Safe Mode]: https://github.com/postcss/postcss#safe-mode
+
+## PostCSS Chain
+
+You parse CSS only once and then process it through array of PostCSS processors.
+
+For example, you can use [gulp-postcss]:
+
+```js
+var postcss = require('gulp-postcss');
+var sourcemaps = require('gulp-sourcemaps');
+
+gulp.task('css', function () {
+ var processors = [
+ require('autoprefixer')('last 1 version'),
+ require('css-mqpacker'),
+ require('csswring')
+ ];
+ return gulp.src('./src/style.css')
+ .pipe(sourcemaps.init())
+ .pipe(postcss(processors))
+ .pipe(sourcemaps.write('.'))
+ .pipe(gulp.dest('./dest'));
+});
+```
+
+[gulp-postcss]: https://github.com/w0rm/gulp-postcss
+
+## Safe Mode
+
+PostCSS has a special safe mode to parse broken CSS. If you set the `safe: true`
+option to the `process` method, it will parse `a {` as `a {}`:
+
+```js
+autoprefixer.process('a {'); // will throw “Unclosed block”
+autoprefixer.process('a {', { safe: true }); // will process as a closed block
+```
+
+It is useful for legacy code when using several hacks, or interactive
+tools with live input, like [Autoprefixer demo].
+
+[Autoprefixer demo]: http://simevidas.jsbin.com/gufoko/quiet
+
+## Cleaning
+
+By default, Autoprefixer not only add new prefixes, but also remove outdated.
+You can remove this behaviour by `remove: false` option:
+
+```js
+autoprefixer()
+ .process('a { -webkit-border-radius: 2px; border-radius: 2px }');
+// remove outdated -webkit-border-radius
+
+autoprefixer({ remove: false })
+ .process('a { -webkit-border-radius: 2px; border-radius: 2px }');
+// keeps -webkit-border-radius
+```
+
+## Debug
+
+You can check which browsers are selected and which properties will be prefixed:
+
+```js
+info = autoprefixer({ browsers: ['last 1 version'] }).info();
+console.log(info);
+```
diff --git a/node_modules/autoprefixer-core/data/prefixes.js b/node_modules/autoprefixer-core/data/prefixes.js
new file mode 100644
index 0000000..1c6b8b2
--- /dev/null
+++ b/node_modules/autoprefixer-core/data/prefixes.js
@@ -0,0 +1,433 @@
+(function() {
+ var add, crispedges, feature, flexbox, gradients, logicalProps, prefix, resolution, result, sort, textDecoration,
+ slice = [].slice;
+
+ sort = function(array) {
+ return array.sort(function(a, b) {
+ a = a.split(' ');
+ b = b.split(' ');
+ if (a[0] > b[0]) {
+ return 1;
+ } else if (a[0] < b[0]) {
+ return -1;
+ } else {
+ return parseFloat(a[1]) - parseFloat(b[1]);
+ }
+ });
+ };
+
+ feature = function(data, opts, callback) {
+ var browser, match, need, ref, ref1, support, version, versions;
+ if (!callback) {
+ ref = [opts, {}], callback = ref[0], opts = ref[1];
+ }
+ match = opts.match || /\sx($|\s)/;
+ need = [];
+ ref1 = data.stats;
+ for (browser in ref1) {
+ versions = ref1[browser];
+ for (version in versions) {
+ support = versions[version];
+ if (support.match(match)) {
+ need.push(browser + ' ' + version);
+ }
+ }
+ }
+ return callback(sort(need));
+ };
+
+ result = {};
+
+ prefix = function() {
+ var data, i, j, k, len, name, names, results;
+ names = 2 <= arguments.length ? slice.call(arguments, 0, j = arguments.length - 1) : (j = 0, []), data = arguments[j++];
+ results = [];
+ for (k = 0, len = names.length; k < len; k++) {
+ name = names[k];
+ result[name] = {};
+ results.push((function() {
+ var results1;
+ results1 = [];
+ for (i in data) {
+ results1.push(result[name][i] = data[i]);
+ }
+ return results1;
+ })());
+ }
+ return results;
+ };
+
+ add = function() {
+ var data, j, k, len, name, names, results;
+ names = 2 <= arguments.length ? slice.call(arguments, 0, j = arguments.length - 1) : (j = 0, []), data = arguments[j++];
+ results = [];
+ for (k = 0, len = names.length; k < len; k++) {
+ name = names[k];
+ results.push(result[name].browsers = sort(result[name].browsers.concat(data.browsers)));
+ }
+ return results;
+ };
+
+ module.exports = result;
+
+ feature(require('caniuse-db/features-json/border-radius'), function(browsers) {
+ return prefix('border-radius', 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius', {
+ mistakes: ['-ms-', '-o-'],
+ transition: true,
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-boxshadow'), function(browsers) {
+ return prefix('box-shadow', {
+ transition: true,
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-animation'), function(browsers) {
+ return prefix('animation', 'animation-name', 'animation-duration', 'animation-delay', 'animation-direction', 'animation-fill-mode', 'animation-iteration-count', 'animation-play-state', 'animation-timing-function', '@keyframes', {
+ mistakes: ['-ms-'],
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-transitions'), function(browsers) {
+ return prefix('transition', 'transition-property', 'transition-duration', 'transition-delay', 'transition-timing-function', {
+ mistakes: ['-ms-'],
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/transforms2d'), function(browsers) {
+ return prefix('transform', 'transform-origin', {
+ transition: true,
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/transforms3d'), function(browsers) {
+ prefix('perspective', 'perspective-origin', {
+ transition: true,
+ browsers: browsers
+ });
+ return prefix('transform-style', 'backface-visibility', {
+ browsers: browsers
+ });
+ });
+
+ gradients = require('caniuse-db/features-json/css-gradients');
+
+ feature(gradients, {
+ match: /y\sx/
+ }, function(browsers) {
+ return prefix('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', {
+ props: ['background', 'background-image', 'border-image', 'list-style', 'list-style-image', 'content', 'mask-image', 'mask'],
+ mistakes: ['-ms-'],
+ browsers: browsers
+ });
+ });
+
+ feature(gradients, {
+ match: /a\sx/
+ }, function(browsers) {
+ browsers = browsers.map(function(i) {
+ if (/op/.test(i)) {
+ return i;
+ } else {
+ return i + " old";
+ }
+ });
+ return add('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css3-boxsizing'), function(browsers) {
+ return prefix('box-sizing', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-filters'), function(browsers) {
+ return prefix('filter', {
+ transition: true,
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/multicolumn'), function(browsers) {
+ prefix('columns', 'column-width', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', {
+ transition: true,
+ browsers: browsers
+ });
+ return prefix('column-count', 'column-rule-style', 'column-span', 'column-fill', 'break-before', 'break-after', 'break-inside', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/user-select-none'), function(browsers) {
+ return prefix('user-select', {
+ browsers: browsers
+ });
+ });
+
+ flexbox = require('caniuse-db/features-json/flexbox');
+
+ feature(flexbox, {
+ match: /a\sx/
+ }, function(browsers) {
+ browsers = browsers.map(function(i) {
+ if (/ie|firefox/.test(i)) {
+ return i;
+ } else {
+ return i + " 2009";
+ }
+ });
+ prefix('display-flex', 'inline-flex', {
+ props: ['display'],
+ browsers: browsers
+ });
+ prefix('flex', 'flex-grow', 'flex-shrink', 'flex-basis', {
+ transition: true,
+ browsers: browsers
+ });
+ return prefix('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', {
+ browsers: browsers
+ });
+ });
+
+ feature(flexbox, {
+ match: /y\sx/
+ }, function(browsers) {
+ add('display-flex', 'inline-flex', {
+ browsers: browsers
+ });
+ add('flex', 'flex-grow', 'flex-shrink', 'flex-basis', {
+ browsers: browsers
+ });
+ return add('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/calc'), function(browsers) {
+ return prefix('calc', {
+ props: ['*'],
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/background-img-opts'), function(browsers) {
+ return prefix('background-clip', 'background-origin', 'background-size', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/font-feature'), function(browsers) {
+ return prefix('font-feature-settings', 'font-variant-ligatures', 'font-language-override', 'font-kerning', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/border-image'), function(browsers) {
+ return prefix('border-image', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-selection'), function(browsers) {
+ return prefix('::selection', {
+ selector: true,
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-placeholder'), function(browsers) {
+ browsers = browsers.map(function(i) {
+ var name, ref, version;
+ ref = i.split(' '), name = ref[0], version = ref[1];
+ if (name === 'firefox' && parseFloat(version) <= 18) {
+ return i + ' old';
+ } else {
+ return i;
+ }
+ });
+ return prefix(':placeholder-shown', '::placeholder', {
+ selector: true,
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-hyphens'), function(browsers) {
+ return prefix('hyphens', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/fullscreen'), function(browsers) {
+ return prefix(':fullscreen', {
+ selector: true,
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css3-tabsize'), function(browsers) {
+ return prefix('tab-size', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/intrinsic-width'), function(browsers) {
+ return prefix('max-content', 'min-content', 'fit-content', 'fill-available', {
+ props: ['width', 'min-width', 'max-width', 'height', 'min-height', 'max-height'],
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css3-cursors-newer'), function(browsers) {
+ prefix('zoom-in', 'zoom-out', {
+ props: ['cursor'],
+ browsers: browsers.concat(['chrome 3'])
+ });
+ return prefix('grab', 'grabbing', {
+ props: ['cursor'],
+ browsers: browsers.concat(['firefox 24', 'firefox 25', 'firefox 26'])
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-sticky'), function(browsers) {
+ return prefix('sticky', {
+ props: ['position'],
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/pointer'), function(browsers) {
+ return prefix('touch-action', {
+ browsers: browsers
+ });
+ });
+
+ textDecoration = require('caniuse-db/features-json/text-decoration');
+
+ feature(textDecoration, function(browsers) {
+ return prefix('text-decoration-style', {
+ browsers: browsers
+ });
+ });
+
+ feature(textDecoration, {
+ match: /y\sx($|\s)/
+ }, function(browsers) {
+ return prefix('text-decoration-line', 'text-decoration-color', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/text-size-adjust'), function(browsers) {
+ return prefix('text-size-adjust', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-masks'), function(browsers) {
+ prefix('mask-clip', 'mask-composite', 'mask-image', 'mask-origin', 'mask-repeat', {
+ browsers: browsers
+ });
+ return prefix('clip-path', 'mask', 'mask-position', 'mask-size', {
+ transition: true,
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-boxdecorationbreak'), function(brwsrs) {
+ return prefix('box-decoration-break', {
+ browsers: brwsrs
+ });
+ });
+
+ feature(require('caniuse-db/features-json/object-fit'), function(browsers) {
+ return prefix('object-fit', 'object-position', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-shapes'), function(browsers) {
+ return prefix('shape-margin', 'shape-outside', 'shape-image-threshold', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/text-overflow'), function(browsers) {
+ return prefix('text-overflow', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/text-emphasis'), function(browsers) {
+ return prefix('text-emphasis', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-deviceadaptation'), function(browsers) {
+ return prefix('@viewport', {
+ browsers: browsers
+ });
+ });
+
+ resolution = require('caniuse-db/features-json/css-media-resolution');
+
+ feature(resolution, {
+ match: /( x($| )|a #3)/
+ }, function(browsers) {
+ return prefix('@resolution', {
+ browsers: browsers
+ });
+ });
+
+ feature(require('caniuse-db/features-json/css-text-align-last'), function(browsers) {
+ return prefix('text-align-last', {
+ browsers: browsers
+ });
+ });
+
+ crispedges = require('caniuse-db/features-json/css-crisp-edges');
+
+ feature(crispedges, {
+ match: /y x/
+ }, function(browsers) {
+ return prefix('crisp-edges', {
+ props: ['image-rendering'],
+ browsers: browsers
+ });
+ });
+
+ feature(crispedges, {
+ match: /a x/
+ }, function(browsers) {
+ return prefix('image-rendering', {
+ browsers: browsers
+ });
+ });
+
+ logicalProps = require('caniuse-db/features-json/css-logical-props');
+
+ feature(logicalProps, function(browsers) {
+ return prefix('border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', {
+ transition: true,
+ browsers: browsers
+ });
+ });
+
+ feature(logicalProps, {
+ match: /x\s#2/
+ }, function(browsers) {
+ return prefix('border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', {
+ transition: true,
+ browsers: browsers
+ });
+ });
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/at-rule.js b/node_modules/autoprefixer-core/lib/at-rule.js
new file mode 100644
index 0000000..9b51076
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/at-rule.js
@@ -0,0 +1,51 @@
+(function() {
+ var AtRule, Prefixer,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Prefixer = require('./prefixer');
+
+ AtRule = (function(superClass) {
+ extend(AtRule, superClass);
+
+ function AtRule() {
+ return AtRule.__super__.constructor.apply(this, arguments);
+ }
+
+ AtRule.prototype.add = function(rule, prefix) {
+ var already, cloned, prefixed;
+ prefixed = prefix + rule.name;
+ already = rule.parent.some(function(i) {
+ return i.name === prefixed && i.params === rule.params;
+ });
+ if (already) {
+ return;
+ }
+ cloned = this.clone(rule, {
+ name: prefixed
+ });
+ return rule.parent.insertBefore(rule, cloned);
+ };
+
+ AtRule.prototype.process = function(node) {
+ var j, len, parent, prefix, ref, results;
+ parent = this.parentPrefix(node);
+ ref = this.prefixes;
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ prefix = ref[j];
+ if (parent && parent !== prefix) {
+ continue;
+ }
+ results.push(this.add(node, prefix));
+ }
+ return results;
+ };
+
+ return AtRule;
+
+ })(Prefixer);
+
+ module.exports = AtRule;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/autoprefixer.js b/node_modules/autoprefixer-core/lib/autoprefixer.js
new file mode 100644
index 0000000..1e41c04
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/autoprefixer.js
@@ -0,0 +1,109 @@
+(function() {
+ var Autoprefixer, Browsers, Prefixes, autoprefixer, browserslist, infoCache, isPlainObject, postcss,
+ slice = [].slice,
+ bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+ browserslist = require('browserslist');
+
+ postcss = require('postcss');
+
+ Browsers = require('./browsers');
+
+ Prefixes = require('./prefixes');
+
+ infoCache = null;
+
+ isPlainObject = function(obj) {
+ return Object.prototype.toString.apply(obj) === '[object Object]';
+ };
+
+ autoprefixer = function() {
+ var options, reqs;
+ reqs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+ if (reqs.length === 1 && isPlainObject(reqs[0])) {
+ options = reqs[0];
+ reqs = void 0;
+ } else if (reqs.length === 0 || (reqs.length === 1 && (reqs[0] == null))) {
+ reqs = void 0;
+ } else if (reqs.length <= 2 && (reqs[0] instanceof Array || (reqs[0] == null))) {
+ options = reqs[1];
+ reqs = reqs[0];
+ } else if (typeof reqs[reqs.length - 1] === 'object') {
+ options = reqs.pop();
+ }
+ if ((options != null ? options.browsers : void 0) != null) {
+ reqs = options.browsers;
+ }
+ return new Autoprefixer(autoprefixer.data, reqs, options);
+ };
+
+ autoprefixer.data = {
+ browsers: require('caniuse-db/data').agents,
+ prefixes: require('../data/prefixes')
+ };
+
+ Autoprefixer = (function() {
+ function Autoprefixer(data, reqs1, options1) {
+ this.data = data;
+ this.reqs = reqs1;
+ this.options = options1 != null ? options1 : {};
+ this.postcss = bind(this.postcss, this);
+ }
+
+ Autoprefixer.prototype.process = function(str, options) {
+ if (options == null) {
+ options = {};
+ }
+ return postcss(this.postcss).process(str, options);
+ };
+
+ Autoprefixer.prototype.postcss = function(css) {
+ var prefixes;
+ prefixes = this.prefixes({
+ from: css.source.input.file
+ });
+ if (this.options.remove !== false) {
+ prefixes.processor.remove(css);
+ }
+ return prefixes.processor.add(css);
+ };
+
+ Autoprefixer.prototype.prefixes = function(opts) {
+ var browsers;
+ browsers = new Browsers(autoprefixer.data.browsers, this.reqs, opts);
+ return new Prefixes(autoprefixer.data.prefixes, browsers, this.options);
+ };
+
+ Autoprefixer.prototype.info = function(opts) {
+ infoCache || (infoCache = require('./info'));
+ return infoCache(this.prefixes(opts));
+ };
+
+ return Autoprefixer;
+
+ })();
+
+ autoprefixer.defaults = browserslist.defaults;
+
+ autoprefixer.loadDefault = function() {
+ return this.defaultCache || (this.defaultCache = autoprefixer());
+ };
+
+ autoprefixer.process = function(str, options) {
+ if (options == null) {
+ options = {};
+ }
+ return this.loadDefault().process(str, options);
+ };
+
+ autoprefixer.postcss = function(css) {
+ return autoprefixer.loadDefault().postcss(css);
+ };
+
+ autoprefixer.info = function() {
+ return this.loadDefault().info();
+ };
+
+ module.exports = autoprefixer;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/browsers.js b/node_modules/autoprefixer-core/lib/browsers.js
new file mode 100644
index 0000000..45906b7
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/browsers.js
@@ -0,0 +1,83 @@
+(function() {
+ var Browsers, browserslist, utils;
+
+ browserslist = require('browserslist');
+
+ utils = require('./utils');
+
+ Browsers = (function() {
+ Browsers.prefixes = function() {
+ var data, i, name;
+ if (this.prefixesCache) {
+ return this.prefixesCache;
+ }
+ data = require('caniuse-db/data').agents;
+ return this.prefixesCache = utils.uniq((function() {
+ var results;
+ results = [];
+ for (name in data) {
+ i = data[name];
+ results.push("-" + i.prefix + "-");
+ }
+ return results;
+ })()).sort(function(a, b) {
+ return b.length - a.length;
+ });
+ };
+
+ Browsers.withPrefix = function(value) {
+ if (!this.prefixesRegexp) {
+ this.prefixesRegexp = RegExp("" + (this.prefixes().join('|')));
+ }
+ return this.prefixesRegexp.test(value);
+ };
+
+ function Browsers(data1, requirements, options) {
+ this.data = data1;
+ this.options = options;
+ this.selected = this.parse(requirements);
+ }
+
+ Browsers.prototype.parse = function(requirements) {
+ var ref;
+ return browserslist(requirements, {
+ path: (ref = this.options) != null ? ref.from : void 0
+ });
+ };
+
+ Browsers.prototype.browsers = function(criteria) {
+ var browser, data, ref, selected, versions;
+ selected = [];
+ ref = this.data;
+ for (browser in ref) {
+ data = ref[browser];
+ versions = criteria(data).map(function(version) {
+ return browser + " " + version;
+ });
+ selected = selected.concat(versions);
+ }
+ return selected;
+ };
+
+ Browsers.prototype.prefix = function(browser) {
+ var data, name, prefix, ref, version;
+ ref = browser.split(' '), name = ref[0], version = ref[1];
+ data = this.data[name];
+ if (data.prefix_exceptions) {
+ prefix = data.prefix_exceptions[version];
+ }
+ prefix || (prefix = data.prefix);
+ return '-' + prefix + '-';
+ };
+
+ Browsers.prototype.isSelected = function(browser) {
+ return this.selected.indexOf(browser) !== -1;
+ };
+
+ return Browsers;
+
+ })();
+
+ module.exports = Browsers;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/declaration.js b/node_modules/autoprefixer-core/lib/declaration.js
new file mode 100644
index 0000000..91b411d
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/declaration.js
@@ -0,0 +1,153 @@
+(function() {
+ var Browsers, Declaration, Prefixer, utils, vendor,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Prefixer = require('./prefixer');
+
+ Browsers = require('./browsers');
+
+ vendor = require('postcss/lib/vendor');
+
+ utils = require('./utils');
+
+ Declaration = (function(superClass) {
+ extend(Declaration, superClass);
+
+ function Declaration() {
+ return Declaration.__super__.constructor.apply(this, arguments);
+ }
+
+ Declaration.prototype.check = function(decl) {
+ return true;
+ };
+
+ Declaration.prototype.prefixed = function(prop, prefix) {
+ return prefix + prop;
+ };
+
+ Declaration.prototype.normalize = function(prop) {
+ return prop;
+ };
+
+ Declaration.prototype.otherPrefixes = function(value, prefix) {
+ var j, len, other, ref;
+ ref = Browsers.prefixes();
+ for (j = 0, len = ref.length; j < len; j++) {
+ other = ref[j];
+ if (other === prefix) {
+ continue;
+ }
+ if (value.indexOf(other) !== -1) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ Declaration.prototype.set = function(decl, prefix) {
+ decl.prop = this.prefixed(decl.prop, prefix);
+ return decl;
+ };
+
+ Declaration.prototype.needCascade = function(decl) {
+ return decl._autoprefixerCascade || (decl._autoprefixerCascade = this.all.options.cascade !== false && decl.style('before').indexOf('\n') !== -1);
+ };
+
+ Declaration.prototype.maxPrefixed = function(prefixes, decl) {
+ var j, len, max, prefix;
+ if (decl._autoprefixerMax) {
+ return decl._autoprefixerMax;
+ }
+ max = 0;
+ for (j = 0, len = prefixes.length; j < len; j++) {
+ prefix = prefixes[j];
+ prefix = utils.removeNote(prefix);
+ if (prefix.length > max) {
+ max = prefix.length;
+ }
+ }
+ return decl._autoprefixerMax = max;
+ };
+
+ Declaration.prototype.calcBefore = function(prefixes, decl, prefix) {
+ var before, diff, i, j, max, ref;
+ if (prefix == null) {
+ prefix = '';
+ }
+ before = decl.style('before');
+ max = this.maxPrefixed(prefixes, decl);
+ diff = max - utils.removeNote(prefix).length;
+ for (i = j = 0, ref = diff; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
+ before += ' ';
+ }
+ return before;
+ };
+
+ Declaration.prototype.restoreBefore = function(decl) {
+ var lines, min;
+ lines = decl.style('before').split("\n");
+ min = lines[lines.length - 1];
+ this.all.group(decl).up(function(prefixed) {
+ var array, last;
+ array = prefixed.style('before').split("\n");
+ last = array[array.length - 1];
+ if (last.length < min.length) {
+ return min = last;
+ }
+ });
+ lines[lines.length - 1] = min;
+ return decl.before = lines.join("\n");
+ };
+
+ Declaration.prototype.insert = function(decl, prefix, prefixes) {
+ var cloned;
+ cloned = this.set(this.clone(decl), prefix);
+ if (!cloned) {
+ return;
+ }
+ if (this.needCascade(decl)) {
+ cloned.before = this.calcBefore(prefixes, decl, prefix);
+ }
+ return decl.parent.insertBefore(decl, cloned);
+ };
+
+ Declaration.prototype.add = function(decl, prefix, prefixes) {
+ var already, prefixed;
+ prefixed = this.prefixed(decl.prop, prefix);
+ already = this.all.group(decl).up(function(i) {
+ return i.prop === prefixed;
+ });
+ already || (already = this.all.group(decl).down(function(i) {
+ return i.prop === prefixed;
+ }));
+ if (already || this.otherPrefixes(decl.value, prefix)) {
+ return;
+ }
+ return this.insert(decl, prefix, prefixes);
+ };
+
+ Declaration.prototype.process = function(decl) {
+ var prefixes;
+ if (this.needCascade(decl)) {
+ prefixes = Declaration.__super__.process.apply(this, arguments);
+ if (prefixes != null ? prefixes.length : void 0) {
+ this.restoreBefore(decl);
+ return decl.before = this.calcBefore(prefixes, decl);
+ }
+ } else {
+ return Declaration.__super__.process.apply(this, arguments);
+ }
+ };
+
+ Declaration.prototype.old = function(prop, prefix) {
+ return [this.prefixed(prop, prefix)];
+ };
+
+ return Declaration;
+
+ })(Prefixer);
+
+ module.exports = Declaration;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/align-content.js b/node_modules/autoprefixer-core/lib/hacks/align-content.js
new file mode 100644
index 0000000..627c91e
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/align-content.js
@@ -0,0 +1,57 @@
+(function() {
+ var AlignContent, Declaration, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ AlignContent = (function(superClass) {
+ extend(AlignContent, superClass);
+
+ function AlignContent() {
+ return AlignContent.__super__.constructor.apply(this, arguments);
+ }
+
+ AlignContent.names = ['align-content', 'flex-line-pack'];
+
+ AlignContent.oldValues = {
+ 'flex-end': 'end',
+ 'flex-start': 'start',
+ 'space-between': 'justify',
+ 'space-around': 'distribute'
+ };
+
+ AlignContent.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2012) {
+ return prefix + 'flex-line-pack';
+ } else {
+ return AlignContent.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ AlignContent.prototype.normalize = function(prop) {
+ return 'align-content';
+ };
+
+ AlignContent.prototype.set = function(decl, prefix) {
+ var spec;
+ spec = flexSpec(prefix)[0];
+ if (spec === 2012) {
+ decl.value = AlignContent.oldValues[decl.value] || decl.value;
+ return AlignContent.__super__.set.call(this, decl, prefix);
+ } else if (spec === 'final') {
+ return AlignContent.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return AlignContent;
+
+ })(Declaration);
+
+ module.exports = AlignContent;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/align-items.js b/node_modules/autoprefixer-core/lib/hacks/align-items.js
new file mode 100644
index 0000000..cae3ef1
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/align-items.js
@@ -0,0 +1,57 @@
+(function() {
+ var AlignItems, Declaration, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ AlignItems = (function(superClass) {
+ extend(AlignItems, superClass);
+
+ function AlignItems() {
+ return AlignItems.__super__.constructor.apply(this, arguments);
+ }
+
+ AlignItems.names = ['align-items', 'flex-align', 'box-align'];
+
+ AlignItems.oldValues = {
+ 'flex-end': 'end',
+ 'flex-start': 'start'
+ };
+
+ AlignItems.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2009) {
+ return prefix + 'box-align';
+ } else if (spec === 2012) {
+ return prefix + 'flex-align';
+ } else {
+ return AlignItems.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ AlignItems.prototype.normalize = function(prop) {
+ return 'align-items';
+ };
+
+ AlignItems.prototype.set = function(decl, prefix) {
+ var spec;
+ spec = flexSpec(prefix)[0];
+ if (spec === 2009 || spec === 2012) {
+ decl.value = AlignItems.oldValues[decl.value] || decl.value;
+ return AlignItems.__super__.set.call(this, decl, prefix);
+ } else {
+ return AlignItems.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return AlignItems;
+
+ })(Declaration);
+
+ module.exports = AlignItems;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/align-self.js b/node_modules/autoprefixer-core/lib/hacks/align-self.js
new file mode 100644
index 0000000..7103cf7
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/align-self.js
@@ -0,0 +1,55 @@
+(function() {
+ var AlignSelf, Declaration, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ AlignSelf = (function(superClass) {
+ extend(AlignSelf, superClass);
+
+ function AlignSelf() {
+ return AlignSelf.__super__.constructor.apply(this, arguments);
+ }
+
+ AlignSelf.names = ['align-self', 'flex-item-align'];
+
+ AlignSelf.oldValues = {
+ 'flex-end': 'end',
+ 'flex-start': 'start'
+ };
+
+ AlignSelf.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2012) {
+ return prefix + 'flex-item-align';
+ } else {
+ return AlignSelf.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ AlignSelf.prototype.normalize = function(prop) {
+ return 'align-self';
+ };
+
+ AlignSelf.prototype.set = function(decl, prefix) {
+ var spec;
+ spec = flexSpec(prefix)[0];
+ if (spec === 2012) {
+ decl.value = AlignSelf.oldValues[decl.value] || decl.value;
+ return AlignSelf.__super__.set.call(this, decl, prefix);
+ } else if (spec === 'final') {
+ return AlignSelf.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return AlignSelf;
+
+ })(Declaration);
+
+ module.exports = AlignSelf;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/background-size.js b/node_modules/autoprefixer-core/lib/hacks/background-size.js
new file mode 100644
index 0000000..6109b0a
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/background-size.js
@@ -0,0 +1,32 @@
+(function() {
+ var BackgroundSize, Declaration,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ BackgroundSize = (function(superClass) {
+ extend(BackgroundSize, superClass);
+
+ function BackgroundSize() {
+ return BackgroundSize.__super__.constructor.apply(this, arguments);
+ }
+
+ BackgroundSize.names = ['background-size'];
+
+ BackgroundSize.prototype.set = function(decl, prefix) {
+ var value;
+ value = decl.value.toLowerCase();
+ if (prefix === '-webkit-' && value.indexOf(' ') === -1 && value !== 'contain' && value !== 'cover') {
+ decl.value = decl.value + ' ' + decl.value;
+ }
+ return BackgroundSize.__super__.set.call(this, decl, prefix);
+ };
+
+ return BackgroundSize;
+
+ })(Declaration);
+
+ module.exports = BackgroundSize;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/block-logical.js b/node_modules/autoprefixer-core/lib/hacks/block-logical.js
new file mode 100644
index 0000000..261cab2
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/block-logical.js
@@ -0,0 +1,35 @@
+(function() {
+ var BlockLogical, Declaration,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ BlockLogical = (function(superClass) {
+ extend(BlockLogical, superClass);
+
+ function BlockLogical() {
+ return BlockLogical.__super__.constructor.apply(this, arguments);
+ }
+
+ BlockLogical.names = ['border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', 'border-before', 'border-after', 'margin-before', 'margin-after', 'padding-before', 'padding-after'];
+
+ BlockLogical.prototype.prefixed = function(prop, prefix) {
+ return prefix + (prop.indexOf('-start') !== -1 ? prop.replace('-block-start', '-before') : prop.replace('-block-end', '-after'));
+ };
+
+ BlockLogical.prototype.normalize = function(prop) {
+ if (prop.indexOf('-before') !== -1) {
+ return prop.replace('-before', '-block-start');
+ } else {
+ return prop.replace('-after', '-block-end');
+ }
+ };
+
+ return BlockLogical;
+
+ })(Declaration);
+
+ module.exports = BlockLogical;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/border-image.js b/node_modules/autoprefixer-core/lib/hacks/border-image.js
new file mode 100644
index 0000000..a08f36b
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/border-image.js
@@ -0,0 +1,28 @@
+(function() {
+ var BorderImage, Declaration,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ BorderImage = (function(superClass) {
+ extend(BorderImage, superClass);
+
+ function BorderImage() {
+ return BorderImage.__super__.constructor.apply(this, arguments);
+ }
+
+ BorderImage.names = ['border-image'];
+
+ BorderImage.prototype.set = function(decl, prefix) {
+ decl.value = decl.value.replace(/\s+fill(\s)/, '$1');
+ return BorderImage.__super__.set.call(this, decl, prefix);
+ };
+
+ return BorderImage;
+
+ })(Declaration);
+
+ module.exports = BorderImage;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/border-radius.js b/node_modules/autoprefixer-core/lib/hacks/border-radius.js
new file mode 100644
index 0000000..71452e3
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/border-radius.js
@@ -0,0 +1,56 @@
+(function() {
+ var BorderRadius, Declaration,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ BorderRadius = (function(superClass) {
+ var hor, i, j, len, len1, mozilla, normal, ref, ref1, ver;
+
+ extend(BorderRadius, superClass);
+
+ function BorderRadius() {
+ return BorderRadius.__super__.constructor.apply(this, arguments);
+ }
+
+ BorderRadius.names = ['border-radius'];
+
+ BorderRadius.toMozilla = {};
+
+ BorderRadius.toNormal = {};
+
+ ref = ['top', 'bottom'];
+ for (i = 0, len = ref.length; i < len; i++) {
+ ver = ref[i];
+ ref1 = ['left', 'right'];
+ for (j = 0, len1 = ref1.length; j < len1; j++) {
+ hor = ref1[j];
+ normal = "border-" + ver + "-" + hor + "-radius";
+ mozilla = "border-radius-" + ver + hor;
+ BorderRadius.names.push(normal);
+ BorderRadius.names.push(mozilla);
+ BorderRadius.toMozilla[normal] = mozilla;
+ BorderRadius.toNormal[mozilla] = normal;
+ }
+ }
+
+ BorderRadius.prototype.prefixed = function(prop, prefix) {
+ if (prefix === '-moz-') {
+ return prefix + (BorderRadius.toMozilla[prop] || prop);
+ } else {
+ return BorderRadius.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ BorderRadius.prototype.normalize = function(prop) {
+ return BorderRadius.toNormal[prop] || prop;
+ };
+
+ return BorderRadius;
+
+ })(Declaration);
+
+ module.exports = BorderRadius;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/break-inside.js b/node_modules/autoprefixer-core/lib/hacks/break-inside.js
new file mode 100644
index 0000000..2122aac
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/break-inside.js
@@ -0,0 +1,54 @@
+(function() {
+ var BreakInside, Declaration,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ BreakInside = (function(superClass) {
+ extend(BreakInside, superClass);
+
+ function BreakInside() {
+ return BreakInside.__super__.constructor.apply(this, arguments);
+ }
+
+ BreakInside.names = ['break-inside', 'page-break-inside', 'column-break-inside'];
+
+ BreakInside.prototype.prefixed = function(prop, prefix) {
+ if (prefix === '-webkit-') {
+ return prefix + 'column-break-inside';
+ } else if (prefix === '-moz-') {
+ return 'page-break-inside';
+ } else {
+ return BreakInside.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ BreakInside.prototype.normalize = function() {
+ return 'break-inside';
+ };
+
+ BreakInside.prototype.set = function(decl, prefix) {
+ if (decl.value === 'avoid-column' || decl.value === 'avoid-page') {
+ decl.value = 'avoid';
+ }
+ return BreakInside.__super__.set.apply(this, arguments);
+ };
+
+ BreakInside.prototype.insert = function(decl, prefix, prefixes) {
+ if (decl.value === 'avoid-region') {
+
+ } else if (decl.value === 'avoid-page' && prefix === '-webkit-') {
+
+ } else {
+ return BreakInside.__super__.insert.apply(this, arguments);
+ }
+ };
+
+ return BreakInside;
+
+ })(Declaration);
+
+ module.exports = BreakInside;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/crisp-edges.js b/node_modules/autoprefixer-core/lib/hacks/crisp-edges.js
new file mode 100644
index 0000000..bb04dc0
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/crisp-edges.js
@@ -0,0 +1,31 @@
+(function() {
+ var CrispEdges, Value,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Value = require('../value');
+
+ CrispEdges = (function(superClass) {
+ extend(CrispEdges, superClass);
+
+ function CrispEdges() {
+ return CrispEdges.__super__.constructor.apply(this, arguments);
+ }
+
+ CrispEdges.names = ['crisp-edges'];
+
+ CrispEdges.prototype.replace = function(string, prefix) {
+ if (prefix === '-webkit-') {
+ return string.replace(this.regexp(), '$1-webkit-optimize-contrast');
+ } else {
+ return CrispEdges.__super__.replace.apply(this, arguments);
+ }
+ };
+
+ return CrispEdges;
+
+ })(Value);
+
+ module.exports = CrispEdges;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/display-flex.js b/node_modules/autoprefixer-core/lib/hacks/display-flex.js
new file mode 100644
index 0000000..87a1455
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/display-flex.js
@@ -0,0 +1,68 @@
+(function() {
+ var DisplayFlex, OldDisplayFlex, OldValue, Value, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ OldValue = require('../old-value');
+
+ Value = require('../value');
+
+ OldDisplayFlex = (function(superClass) {
+ extend(OldDisplayFlex, superClass);
+
+ function OldDisplayFlex(unprefixed, prefixed1) {
+ this.unprefixed = unprefixed;
+ this.prefixed = prefixed1;
+ }
+
+ OldDisplayFlex.prototype.check = function(value) {
+ return value === this.name;
+ };
+
+ return OldDisplayFlex;
+
+ })(OldValue);
+
+ DisplayFlex = (function(superClass) {
+ extend(DisplayFlex, superClass);
+
+ DisplayFlex.names = ['display-flex', 'inline-flex'];
+
+ function DisplayFlex(name, prefixes) {
+ DisplayFlex.__super__.constructor.apply(this, arguments);
+ if (name === 'display-flex') {
+ this.name = 'flex';
+ }
+ }
+
+ DisplayFlex.prototype.check = function(decl) {
+ return decl.value === this.name;
+ };
+
+ DisplayFlex.prototype.prefixed = function(prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ return prefix + (spec === 2009 ? this.name === 'flex' ? 'box' : 'inline-box' : spec === 2012 ? this.name === 'flex' ? 'flexbox' : 'inline-flexbox' : spec === 'final' ? this.name : void 0);
+ };
+
+ DisplayFlex.prototype.replace = function(string, prefix) {
+ return this.prefixed(prefix);
+ };
+
+ DisplayFlex.prototype.old = function(prefix) {
+ var prefixed;
+ prefixed = this.prefixed(prefix);
+ if (prefixed) {
+ return new OldValue(this.name, prefixed);
+ }
+ };
+
+ return DisplayFlex;
+
+ })(Value);
+
+ module.exports = DisplayFlex;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/fill-available.js b/node_modules/autoprefixer-core/lib/hacks/fill-available.js
new file mode 100644
index 0000000..f7d92c9
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/fill-available.js
@@ -0,0 +1,41 @@
+(function() {
+ var FillAvailable, OldValue, Value,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ OldValue = require('../old-value');
+
+ Value = require('../value');
+
+ FillAvailable = (function(superClass) {
+ extend(FillAvailable, superClass);
+
+ function FillAvailable() {
+ return FillAvailable.__super__.constructor.apply(this, arguments);
+ }
+
+ FillAvailable.names = ['fill-available'];
+
+ FillAvailable.prototype.replace = function(string, prefix) {
+ if (prefix === '-moz-') {
+ return string.replace(this.regexp(), '$1-moz-available$3');
+ } else {
+ return FillAvailable.__super__.replace.apply(this, arguments);
+ }
+ };
+
+ FillAvailable.prototype.old = function(prefix) {
+ if (prefix === '-moz-') {
+ return new OldValue(this.name, '-moz-available');
+ } else {
+ return FillAvailable.__super__.old.apply(this, arguments);
+ }
+ };
+
+ return FillAvailable;
+
+ })(Value);
+
+ module.exports = FillAvailable;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/filter-value.js b/node_modules/autoprefixer-core/lib/hacks/filter-value.js
new file mode 100644
index 0000000..40c4b44
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/filter-value.js
@@ -0,0 +1,69 @@
+(function() {
+ var FilterValue, OldFilterValue, OldValue, Value, utils,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ OldValue = require('../old-value');
+
+ Value = require('../value');
+
+ utils = require('../utils');
+
+ OldFilterValue = (function(superClass) {
+ extend(OldFilterValue, superClass);
+
+ function OldFilterValue() {
+ return OldFilterValue.__super__.constructor.apply(this, arguments);
+ }
+
+ OldFilterValue.prototype.clean = function(decl) {
+ return decl.value = utils.editList(decl.value, (function(_this) {
+ return function(props) {
+ if (props.every(function(i) {
+ return i.indexOf(_this.unprefixed) !== 0;
+ })) {
+ return props;
+ }
+ return props.filter(function(i) {
+ return i.indexOf(_this.prefixed) === -1;
+ });
+ };
+ })(this));
+ };
+
+ return OldFilterValue;
+
+ })(OldValue);
+
+ FilterValue = (function(superClass) {
+ extend(FilterValue, superClass);
+
+ function FilterValue() {
+ return FilterValue.__super__.constructor.apply(this, arguments);
+ }
+
+ FilterValue.names = ['filter'];
+
+ FilterValue.prototype.replace = function(value, prefix) {
+ if (prefix === '-webkit-') {
+ if (value.indexOf('-webkit-filter') === -1) {
+ return FilterValue.__super__.replace.apply(this, arguments) + ', ' + value;
+ } else {
+ return value;
+ }
+ } else {
+ return FilterValue.__super__.replace.apply(this, arguments);
+ }
+ };
+
+ FilterValue.prototype.old = function(prefix) {
+ return new OldFilterValue(this.name, prefix + this.name);
+ };
+
+ return FilterValue;
+
+ })(Value);
+
+ module.exports = FilterValue;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/filter.js b/node_modules/autoprefixer-core/lib/hacks/filter.js
new file mode 100644
index 0000000..213cb13
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/filter.js
@@ -0,0 +1,29 @@
+(function() {
+ var Declaration, Filter,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ Filter = (function(superClass) {
+ extend(Filter, superClass);
+
+ function Filter() {
+ return Filter.__super__.constructor.apply(this, arguments);
+ }
+
+ Filter.names = ['filter'];
+
+ Filter.prototype.check = function(decl) {
+ var v;
+ v = decl.value;
+ return v.toLowerCase().indexOf('alpha(') === -1 && v.indexOf('DXImageTransform.Microsoft') === -1 && v.indexOf('data:image/svg+xml') === -1;
+ };
+
+ return Filter;
+
+ })(Declaration);
+
+ module.exports = Filter;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex-basis.js b/node_modules/autoprefixer-core/lib/hacks/flex-basis.js
new file mode 100644
index 0000000..62ec0f9
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex-basis.js
@@ -0,0 +1,47 @@
+(function() {
+ var Declaration, FlexBasis, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ FlexBasis = (function(superClass) {
+ extend(FlexBasis, superClass);
+
+ function FlexBasis() {
+ return FlexBasis.__super__.constructor.apply(this, arguments);
+ }
+
+ FlexBasis.names = ['flex-basis', 'flex-preferred-size'];
+
+ FlexBasis.prototype.normalize = function() {
+ return 'flex-basis';
+ };
+
+ FlexBasis.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2012) {
+ return prefix + 'flex-preferred-size';
+ } else {
+ return FlexBasis.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ FlexBasis.prototype.set = function(decl, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2012 || spec === 'final') {
+ return FlexBasis.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return FlexBasis;
+
+ })(Declaration);
+
+ module.exports = FlexBasis;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex-direction.js b/node_modules/autoprefixer-core/lib/hacks/flex-direction.js
new file mode 100644
index 0000000..e0f3cfa
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex-direction.js
@@ -0,0 +1,71 @@
+(function() {
+ var Declaration, FlexDirection, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ FlexDirection = (function(superClass) {
+ extend(FlexDirection, superClass);
+
+ function FlexDirection() {
+ return FlexDirection.__super__.constructor.apply(this, arguments);
+ }
+
+ FlexDirection.names = ['flex-direction', 'box-direction', 'box-orient'];
+
+ FlexDirection.prototype.normalize = function(prop) {
+ return 'flex-direction';
+ };
+
+ FlexDirection.prototype.insert = function(decl, prefix, prefixes) {
+ var already, cloned, dir, orient, ref, spec, value;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2009) {
+ already = decl.parent.some(function(i) {
+ return i.prop === prefix + 'box-orient' || i.prop === prefix + 'box-direction';
+ });
+ if (already) {
+ return;
+ }
+ value = decl.value;
+ orient = value.indexOf('row') !== -1 ? 'horizontal' : 'vertical';
+ dir = value.indexOf('reverse') !== -1 ? 'reverse' : 'normal';
+ cloned = this.clone(decl);
+ cloned.prop = prefix + 'box-orient';
+ cloned.value = orient;
+ if (this.needCascade(decl)) {
+ cloned.before = this.calcBefore(prefixes, decl, prefix);
+ }
+ decl.parent.insertBefore(decl, cloned);
+ cloned = this.clone(decl);
+ cloned.prop = prefix + 'box-direction';
+ cloned.value = dir;
+ if (this.needCascade(decl)) {
+ cloned.before = this.calcBefore(prefixes, decl, prefix);
+ }
+ return decl.parent.insertBefore(decl, cloned);
+ } else {
+ return FlexDirection.__super__.insert.apply(this, arguments);
+ }
+ };
+
+ FlexDirection.prototype.old = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2009) {
+ return [prefix + 'box-orient', prefix + 'box-direction'];
+ } else {
+ return FlexDirection.__super__.old.apply(this, arguments);
+ }
+ };
+
+ return FlexDirection;
+
+ })(Declaration);
+
+ module.exports = FlexDirection;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex-flow.js b/node_modules/autoprefixer-core/lib/hacks/flex-flow.js
new file mode 100644
index 0000000..a929cbe
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex-flow.js
@@ -0,0 +1,35 @@
+(function() {
+ var Declaration, FlexFlow, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ FlexFlow = (function(superClass) {
+ extend(FlexFlow, superClass);
+
+ function FlexFlow() {
+ return FlexFlow.__super__.constructor.apply(this, arguments);
+ }
+
+ FlexFlow.names = ['flex-flow'];
+
+ FlexFlow.prototype.set = function(decl, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2012) {
+ return FlexFlow.__super__.set.apply(this, arguments);
+ } else if (spec === 'final') {
+ return FlexFlow.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return FlexFlow;
+
+ })(Declaration);
+
+ module.exports = FlexFlow;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex-grow.js b/node_modules/autoprefixer-core/lib/hacks/flex-grow.js
new file mode 100644
index 0000000..5bd598f
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex-grow.js
@@ -0,0 +1,41 @@
+(function() {
+ var Declaration, Flex, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ Flex = (function(superClass) {
+ extend(Flex, superClass);
+
+ function Flex() {
+ return Flex.__super__.constructor.apply(this, arguments);
+ }
+
+ Flex.names = ['flex-grow', 'flex-positive'];
+
+ Flex.prototype.normalize = function() {
+ return 'flex';
+ };
+
+ Flex.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2009) {
+ return prefix + 'box-flex';
+ } else if (spec === 2012) {
+ return prefix + 'flex-positive';
+ } else {
+ return Flex.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ return Flex;
+
+ })(Declaration);
+
+ module.exports = Flex;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex-shrink.js b/node_modules/autoprefixer-core/lib/hacks/flex-shrink.js
new file mode 100644
index 0000000..66610d6
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex-shrink.js
@@ -0,0 +1,47 @@
+(function() {
+ var Declaration, FlexShrink, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ FlexShrink = (function(superClass) {
+ extend(FlexShrink, superClass);
+
+ function FlexShrink() {
+ return FlexShrink.__super__.constructor.apply(this, arguments);
+ }
+
+ FlexShrink.names = ['flex-shrink', 'flex-negative'];
+
+ FlexShrink.prototype.normalize = function() {
+ return 'flex-shrink';
+ };
+
+ FlexShrink.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2012) {
+ return prefix + 'flex-negative';
+ } else {
+ return FlexShrink.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ FlexShrink.prototype.set = function(decl, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2012 || spec === 'final') {
+ return FlexShrink.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return FlexShrink;
+
+ })(Declaration);
+
+ module.exports = FlexShrink;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex-spec.js b/node_modules/autoprefixer-core/lib/hacks/flex-spec.js
new file mode 100644
index 0000000..59ec38e
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex-spec.js
@@ -0,0 +1,11 @@
+(function() {
+ module.exports = function(prefix) {
+ var spec;
+ spec = prefix === '-webkit- 2009' || prefix === '-moz-' ? 2009 : prefix === '-ms-' ? 2012 : prefix === '-webkit-' ? 'final' : void 0;
+ if (prefix === '-webkit- 2009') {
+ prefix = '-webkit-';
+ }
+ return [spec, prefix];
+ };
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex-values.js b/node_modules/autoprefixer-core/lib/hacks/flex-values.js
new file mode 100644
index 0000000..856c783
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex-values.js
@@ -0,0 +1,37 @@
+(function() {
+ var FlexValues, OldValue, Value,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ OldValue = require('../old-value');
+
+ Value = require('../value');
+
+ FlexValues = (function(superClass) {
+ extend(FlexValues, superClass);
+
+ function FlexValues() {
+ return FlexValues.__super__.constructor.apply(this, arguments);
+ }
+
+ FlexValues.names = ['flex', 'flex-grow', 'flex-shrink', 'flex-basis'];
+
+ FlexValues.prototype.prefixed = function(prefix) {
+ return this.all.prefixed(this.name, prefix);
+ };
+
+ FlexValues.prototype.replace = function(string, prefix) {
+ return string.replace(this.regexp(), '$1' + this.prefixed(prefix) + '$3');
+ };
+
+ FlexValues.prototype.old = function(prefix) {
+ return new OldValue(this.name, this.prefixed(prefix));
+ };
+
+ return FlexValues;
+
+ })(Value);
+
+ module.exports = FlexValues;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex-wrap.js b/node_modules/autoprefixer-core/lib/hacks/flex-wrap.js
new file mode 100644
index 0000000..6d13542
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex-wrap.js
@@ -0,0 +1,33 @@
+(function() {
+ var Declaration, FlexWrap, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ FlexWrap = (function(superClass) {
+ extend(FlexWrap, superClass);
+
+ function FlexWrap() {
+ return FlexWrap.__super__.constructor.apply(this, arguments);
+ }
+
+ FlexWrap.names = ['flex-wrap'];
+
+ FlexWrap.prototype.set = function(decl, prefix) {
+ var spec;
+ spec = flexSpec(prefix)[0];
+ if (spec !== 2009) {
+ return FlexWrap.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return FlexWrap;
+
+ })(Declaration);
+
+ module.exports = FlexWrap;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/flex.js b/node_modules/autoprefixer-core/lib/hacks/flex.js
new file mode 100644
index 0000000..baee68a
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/flex.js
@@ -0,0 +1,58 @@
+(function() {
+ var Declaration, Flex, flexSpec, list,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ list = require('postcss/lib/list');
+
+ Flex = (function(superClass) {
+ extend(Flex, superClass);
+
+ function Flex() {
+ return Flex.__super__.constructor.apply(this, arguments);
+ }
+
+ Flex.names = ['flex', 'box-flex'];
+
+ Flex.oldValues = {
+ 'auto': '1',
+ 'none': '0'
+ };
+
+ Flex.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2009) {
+ return prefix + 'box-flex';
+ } else {
+ return Flex.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ Flex.prototype.normalize = function() {
+ return 'flex';
+ };
+
+ Flex.prototype.set = function(decl, prefix) {
+ var spec;
+ spec = flexSpec(prefix)[0];
+ if (spec === 2009) {
+ decl.value = list.space(decl.value)[0];
+ decl.value = Flex.oldValues[decl.value] || decl.value;
+ return Flex.__super__.set.call(this, decl, prefix);
+ } else {
+ return Flex.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return Flex;
+
+ })(Declaration);
+
+ module.exports = Flex;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/fullscreen.js b/node_modules/autoprefixer-core/lib/hacks/fullscreen.js
new file mode 100644
index 0000000..d7a3ccd
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/fullscreen.js
@@ -0,0 +1,33 @@
+(function() {
+ var Fullscreen, Selector,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Selector = require('../selector');
+
+ Fullscreen = (function(superClass) {
+ extend(Fullscreen, superClass);
+
+ function Fullscreen() {
+ return Fullscreen.__super__.constructor.apply(this, arguments);
+ }
+
+ Fullscreen.names = [':fullscreen'];
+
+ Fullscreen.prototype.prefixed = function(prefix) {
+ if ('-webkit-' === prefix) {
+ return ':-webkit-full-screen';
+ } else if ('-moz-' === prefix) {
+ return ':-moz-full-screen';
+ } else {
+ return ":" + prefix + "fullscreen";
+ }
+ };
+
+ return Fullscreen;
+
+ })(Selector);
+
+ module.exports = Fullscreen;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/gradient.js b/node_modules/autoprefixer-core/lib/hacks/gradient.js
new file mode 100644
index 0000000..e1e42d8
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/gradient.js
@@ -0,0 +1,234 @@
+(function() {
+ var Gradient, OldValue, Value, isDirection, list, utils,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ OldValue = require('../old-value');
+
+ Value = require('../value');
+
+ utils = require('../utils');
+
+ list = require('postcss/lib/list');
+
+ isDirection = /top|left|right|bottom/gi;
+
+ Gradient = (function(superClass) {
+ extend(Gradient, superClass);
+
+ function Gradient() {
+ return Gradient.__super__.constructor.apply(this, arguments);
+ }
+
+ Gradient.names = ['linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient'];
+
+ Gradient.prototype.replace = function(string, prefix) {
+ return list.space(string).map((function(_this) {
+ return function(value) {
+ var after, args, close, params;
+ if (value.slice(0, +_this.name.length + 1 || 9e9) !== _this.name + '(') {
+ return value;
+ }
+ close = value.lastIndexOf(')');
+ after = value.slice(close + 1);
+ args = value.slice(_this.name.length + 1, +(close - 1) + 1 || 9e9);
+ params = list.comma(args);
+ params = _this.newDirection(params);
+ if (prefix === '-webkit- old') {
+ return _this.oldWebkit(value, args, params, after);
+ } else {
+ _this.convertDirection(params);
+ return prefix + _this.name + '(' + params.join(', ') + ')' + after;
+ }
+ };
+ })(this)).join(' ');
+ };
+
+ Gradient.prototype.directions = {
+ top: 'bottom',
+ left: 'right',
+ bottom: 'top',
+ right: 'left'
+ };
+
+ Gradient.prototype.oldDirections = {
+ 'top': 'left bottom, left top',
+ 'left': 'right top, left top',
+ 'bottom': 'left top, left bottom',
+ 'right': 'left top, right top',
+ 'top right': 'left bottom, right top',
+ 'top left': 'right bottom, left top',
+ 'right top': 'left bottom, right top',
+ 'right bottom': 'left top, right bottom',
+ 'bottom right': 'left top, right bottom',
+ 'bottom left': 'right top, left bottom',
+ 'left top': 'right bottom, left top',
+ 'left bottom': 'right top, left bottom'
+ };
+
+ Gradient.prototype.newDirection = function(params) {
+ var first, value;
+ first = params[0];
+ if (first.indexOf('to ') === -1 && isDirection.test(first)) {
+ first = first.split(' ');
+ first = (function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = first.length; j < len; j++) {
+ value = first[j];
+ results.push(this.directions[value.toLowerCase()] || value);
+ }
+ return results;
+ }).call(this);
+ params[0] = 'to ' + first.join(' ');
+ }
+ return params;
+ };
+
+ Gradient.prototype.oldWebkit = function(value, args, params, after) {
+ if (args.indexOf('px') !== -1) {
+ return value;
+ }
+ if (this.name !== 'linear-gradient') {
+ return value;
+ }
+ if (params[0] && params[0].indexOf('deg') !== -1) {
+ return value;
+ }
+ if (args.indexOf('-corner') !== -1) {
+ return value;
+ }
+ if (args.indexOf('-side') !== -1) {
+ return value;
+ }
+ params = this.oldDirection(params);
+ params = this.colorStops(params);
+ return '-webkit-gradient(linear, ' + params.join(', ') + ')' + after;
+ };
+
+ Gradient.prototype.convertDirection = function(params) {
+ if (params.length > 0) {
+ if (params[0].slice(0, 3) === 'to ') {
+ return params[0] = this.fixDirection(params[0]);
+ } else if (params[0].indexOf('deg') !== -1) {
+ return params[0] = this.fixAngle(params[0]);
+ } else if (params[0].indexOf(' at ') !== -1) {
+ return this.fixRadial(params);
+ }
+ }
+ };
+
+ Gradient.prototype.fixDirection = function(param) {
+ var value;
+ param = param.split(' ');
+ param.splice(0, 1);
+ param = (function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = param.length; j < len; j++) {
+ value = param[j];
+ results.push(this.directions[value.toLowerCase()] || value);
+ }
+ return results;
+ }).call(this);
+ return param.join(' ');
+ };
+
+ Gradient.prototype.roundFloat = function(float, digits) {
+ return parseFloat(float.toFixed(digits));
+ };
+
+ Gradient.prototype.fixAngle = function(param) {
+ param = parseFloat(param);
+ param = Math.abs(450 - param) % 360;
+ param = this.roundFloat(param, 3);
+ return param + "deg";
+ };
+
+ Gradient.prototype.oldDirection = function(params) {
+ var direction;
+ if (params.length === 0) {
+ params;
+ }
+ if (params[0].indexOf('to ') !== -1) {
+ direction = params[0].replace(/^to\s+/, '');
+ direction = this.oldDirections[direction];
+ params[0] = direction;
+ return params;
+ } else {
+ direction = this.oldDirections.bottom;
+ return [direction].concat(params);
+ }
+ };
+
+ Gradient.prototype.colorStops = function(params) {
+ return params.map(function(param, i) {
+ var color, match, position, ref;
+ if (i === 0) {
+ return param;
+ }
+ ref = list.space(param), color = ref[0], position = ref[1];
+ if (position == null) {
+ match = param.match(/^(.*\))(\d.*)$/);
+ if (match) {
+ color = match[1];
+ position = match[2];
+ }
+ }
+ if (position && position.indexOf(')') !== -1) {
+ color += ' ' + position;
+ position = void 0;
+ }
+ if (i === 1 && (position === void 0 || position === '0%')) {
+ return "from(" + color + ")";
+ } else if (i === params.length - 1 && (position === void 0 || position === '100%')) {
+ return "to(" + color + ")";
+ } else if (position) {
+ return "color-stop(" + position + ", " + color + ")";
+ } else {
+ return "color-stop(" + color + ")";
+ }
+ });
+ };
+
+ Gradient.prototype.fixRadial = function(params) {
+ var first;
+ first = params[0].split(/\s+at\s+/);
+ return params.splice(0, 1, first[1], first[0]);
+ };
+
+ Gradient.prototype.old = function(prefix) {
+ var regexp, string, type;
+ if (prefix === '-webkit-') {
+ type = this.name === 'linear-gradient' ? 'linear' : 'radial';
+ string = '-gradient';
+ regexp = utils.regexp("-webkit-(" + type + "-gradient|gradient\\(\\s*" + type + ")", false);
+ return new OldValue(this.name, prefix + this.name, string, regexp);
+ } else {
+ return Gradient.__super__.old.apply(this, arguments);
+ }
+ };
+
+ Gradient.prototype.add = function(decl, prefix) {
+ var p;
+ p = decl.prop;
+ if (p.indexOf('mask') !== -1) {
+ if (prefix === '-webkit-' || prefix === '-webkit- old') {
+ return Gradient.__super__.add.apply(this, arguments);
+ }
+ } else if (p === 'list-style' || p === 'list-style-image' || p === 'content') {
+ if (prefix === '-webkit-' || prefix === '-webkit- old') {
+ return Gradient.__super__.add.apply(this, arguments);
+ }
+ } else {
+ return Gradient.__super__.add.apply(this, arguments);
+ }
+ };
+
+ return Gradient;
+
+ })(Value);
+
+ module.exports = Gradient;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/image-rendering.js b/node_modules/autoprefixer-core/lib/hacks/image-rendering.js
new file mode 100644
index 0000000..b1ccd9a
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/image-rendering.js
@@ -0,0 +1,49 @@
+(function() {
+ var Declaration, ImageRendering,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ ImageRendering = (function(superClass) {
+ extend(ImageRendering, superClass);
+
+ function ImageRendering() {
+ return ImageRendering.__super__.constructor.apply(this, arguments);
+ }
+
+ ImageRendering.names = ['image-rendering', 'interpolation-mode'];
+
+ ImageRendering.prototype.check = function(decl) {
+ return decl.value === 'crisp-edges';
+ };
+
+ ImageRendering.prototype.prefixed = function(prop, prefix) {
+ if (prefix === '-ms-') {
+ return '-ms-interpolation-mode';
+ } else {
+ return ImageRendering.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ ImageRendering.prototype.set = function(decl, prefix) {
+ if (prefix === '-ms-') {
+ decl.prop = '-ms-interpolation-mode';
+ decl.value = 'nearest-neighbor';
+ return decl;
+ } else {
+ return ImageRendering.__super__.set.apply(this, arguments);
+ }
+ };
+
+ ImageRendering.prototype.normalize = function(prop) {
+ return 'image-rendering';
+ };
+
+ return ImageRendering;
+
+ })(Declaration);
+
+ module.exports = ImageRendering;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/inline-logical.js b/node_modules/autoprefixer-core/lib/hacks/inline-logical.js
new file mode 100644
index 0000000..7a698fe
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/inline-logical.js
@@ -0,0 +1,31 @@
+(function() {
+ var Declaration, InlineLogical,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ InlineLogical = (function(superClass) {
+ extend(InlineLogical, superClass);
+
+ function InlineLogical() {
+ return InlineLogical.__super__.constructor.apply(this, arguments);
+ }
+
+ InlineLogical.names = ['border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', 'border-start', 'border-end', 'margin-start', 'margin-end', 'padding-start', 'padding-end'];
+
+ InlineLogical.prototype.prefixed = function(prop, prefix) {
+ return prefix + prop.replace('-inline', '');
+ };
+
+ InlineLogical.prototype.normalize = function(prop) {
+ return prop.replace(/(margin|padding|border)-(start|end)/, '$1-inline-$2');
+ };
+
+ return InlineLogical;
+
+ })(Declaration);
+
+ module.exports = InlineLogical;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/justify-content.js b/node_modules/autoprefixer-core/lib/hacks/justify-content.js
new file mode 100644
index 0000000..eed29eb
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/justify-content.js
@@ -0,0 +1,62 @@
+(function() {
+ var Declaration, JustifyContent, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ JustifyContent = (function(superClass) {
+ extend(JustifyContent, superClass);
+
+ function JustifyContent() {
+ return JustifyContent.__super__.constructor.apply(this, arguments);
+ }
+
+ JustifyContent.names = ['justify-content', 'flex-pack', 'box-pack'];
+
+ JustifyContent.oldValues = {
+ 'flex-end': 'end',
+ 'flex-start': 'start',
+ 'space-between': 'justify',
+ 'space-around': 'distribute'
+ };
+
+ JustifyContent.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2009) {
+ return prefix + 'box-pack';
+ } else if (spec === 2012) {
+ return prefix + 'flex-pack';
+ } else {
+ return JustifyContent.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ JustifyContent.prototype.normalize = function(prop) {
+ return 'justify-content';
+ };
+
+ JustifyContent.prototype.set = function(decl, prefix) {
+ var spec, value;
+ spec = flexSpec(prefix)[0];
+ if (spec === 2009 || spec === 2012) {
+ value = JustifyContent.oldValues[decl.value] || decl.value;
+ decl.value = value;
+ if (spec !== 2009 || value !== 'distribute') {
+ return JustifyContent.__super__.set.call(this, decl, prefix);
+ }
+ } else if (spec === 'final') {
+ return JustifyContent.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return JustifyContent;
+
+ })(Declaration);
+
+ module.exports = JustifyContent;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/order.js b/node_modules/autoprefixer-core/lib/hacks/order.js
new file mode 100644
index 0000000..592b064
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/order.js
@@ -0,0 +1,52 @@
+(function() {
+ var Declaration, Order, flexSpec,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ flexSpec = require('./flex-spec');
+
+ Declaration = require('../declaration');
+
+ Order = (function(superClass) {
+ extend(Order, superClass);
+
+ function Order() {
+ return Order.__super__.constructor.apply(this, arguments);
+ }
+
+ Order.names = ['order', 'flex-order', 'box-ordinal-group'];
+
+ Order.prototype.prefixed = function(prop, prefix) {
+ var ref, spec;
+ ref = flexSpec(prefix), spec = ref[0], prefix = ref[1];
+ if (spec === 2009) {
+ return prefix + 'box-ordinal-group';
+ } else if (spec === 2012) {
+ return prefix + 'flex-order';
+ } else {
+ return Order.__super__.prefixed.apply(this, arguments);
+ }
+ };
+
+ Order.prototype.normalize = function(prop) {
+ return 'order';
+ };
+
+ Order.prototype.set = function(decl, prefix) {
+ var spec;
+ spec = flexSpec(prefix)[0];
+ if (spec === 2009) {
+ decl.value = (parseInt(decl.value) + 1).toString();
+ return Order.__super__.set.call(this, decl, prefix);
+ } else {
+ return Order.__super__.set.apply(this, arguments);
+ }
+ };
+
+ return Order;
+
+ })(Declaration);
+
+ module.exports = Order;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/placeholder.js b/node_modules/autoprefixer-core/lib/hacks/placeholder.js
new file mode 100644
index 0000000..423d202
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/placeholder.js
@@ -0,0 +1,39 @@
+(function() {
+ var Placeholder, Selector,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Selector = require('../selector');
+
+ Placeholder = (function(superClass) {
+ extend(Placeholder, superClass);
+
+ function Placeholder() {
+ return Placeholder.__super__.constructor.apply(this, arguments);
+ }
+
+ Placeholder.names = [':placeholder-shown', '::placeholder'];
+
+ Placeholder.prototype.possible = function() {
+ return Placeholder.__super__.possible.apply(this, arguments).concat('-moz- old');
+ };
+
+ Placeholder.prototype.prefixed = function(prefix) {
+ if ('-webkit-' === prefix) {
+ return '::-webkit-input-placeholder';
+ } else if ('-ms-' === prefix) {
+ return ':-ms-input-placeholder';
+ } else if ('-moz- old' === prefix) {
+ return ':-moz-placeholder';
+ } else {
+ return "::" + prefix + "placeholder";
+ }
+ };
+
+ return Placeholder;
+
+ })(Selector);
+
+ module.exports = Placeholder;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/transform-decl.js b/node_modules/autoprefixer-core/lib/hacks/transform-decl.js
new file mode 100644
index 0000000..295a6ec
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/transform-decl.js
@@ -0,0 +1,66 @@
+(function() {
+ var Declaration, TransformDecl,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Declaration = require('../declaration');
+
+ TransformDecl = (function(superClass) {
+ extend(TransformDecl, superClass);
+
+ function TransformDecl() {
+ return TransformDecl.__super__.constructor.apply(this, arguments);
+ }
+
+ TransformDecl.names = ['transform', 'transform-origin'];
+
+ TransformDecl.functions3d = ['matrix3d', 'translate3d', 'translateZ', 'scale3d', 'scaleZ', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'perspective'];
+
+ TransformDecl.prototype.keykrameParents = function(decl) {
+ var parent;
+ parent = decl.parent;
+ while (parent) {
+ if (parent.type === 'atrule' && parent.name === 'keyframes') {
+ return true;
+ }
+ parent = parent.parent;
+ }
+ return false;
+ };
+
+ TransformDecl.prototype.contain3d = function(decl) {
+ var func, i, len, ref;
+ if (decl.prop === 'transform-origin') {
+ return false;
+ }
+ ref = TransformDecl.functions3d;
+ for (i = 0, len = ref.length; i < len; i++) {
+ func = ref[i];
+ if (decl.value.indexOf(func + "(") !== -1) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ TransformDecl.prototype.insert = function(decl, prefix, prefixes) {
+ if (prefix === '-ms-') {
+ if (!this.contain3d(decl) && !this.keykrameParents(decl)) {
+ return TransformDecl.__super__.insert.apply(this, arguments);
+ }
+ } else if (prefix === '-o-') {
+ if (!this.contain3d(decl)) {
+ return TransformDecl.__super__.insert.apply(this, arguments);
+ }
+ } else {
+ return TransformDecl.__super__.insert.apply(this, arguments);
+ }
+ };
+
+ return TransformDecl;
+
+ })(Declaration);
+
+ module.exports = TransformDecl;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/hacks/transform-value.js b/node_modules/autoprefixer-core/lib/hacks/transform-value.js
new file mode 100644
index 0000000..8f74d65
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/hacks/transform-value.js
@@ -0,0 +1,31 @@
+(function() {
+ var TransformValue, Value,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Value = require('../value');
+
+ TransformValue = (function(superClass) {
+ extend(TransformValue, superClass);
+
+ function TransformValue() {
+ return TransformValue.__super__.constructor.apply(this, arguments);
+ }
+
+ TransformValue.names = ['transform'];
+
+ TransformValue.prototype.replace = function(value, prefix) {
+ if (prefix === '-ms-') {
+ return value;
+ } else {
+ return TransformValue.__super__.replace.apply(this, arguments);
+ }
+ };
+
+ return TransformValue;
+
+ })(Value);
+
+ module.exports = TransformValue;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/info.js b/node_modules/autoprefixer-core/lib/info.js
new file mode 100644
index 0000000..b6bb1a3
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/info.js
@@ -0,0 +1,122 @@
+(function() {
+ var capitalize, names, prefix;
+
+ capitalize = function(str) {
+ return str.slice(0, 1).toUpperCase() + str.slice(1);
+ };
+
+ names = {
+ ie: 'IE',
+ ie_mob: 'IE Mobile',
+ ios_saf: 'iOS',
+ op_mini: 'Opera Mini',
+ op_mob: 'Opera Mobile',
+ and_chr: 'Chrome for Android',
+ and_ff: 'Firefox for Android',
+ and_uc: 'UC for Android'
+ };
+
+ prefix = function(name, transition, prefixes) {
+ var out;
+ out = ' ' + name + (transition ? '*' : '') + ': ';
+ out += prefixes.map(function(i) {
+ return i.replace(/^-(.*)-$/g, '$1');
+ }).join(', ');
+ out += "\n";
+ return out;
+ };
+
+ module.exports = function(prefixes) {
+ var atrules, browser, data, j, k, l, len, len1, len2, list, name, needTransition, out, props, ref, ref1, ref2, ref3, ref4, ref5, ref6, selector, selectors, string, transitionProp, useTransition, value, values, version, versions;
+ if (prefixes.browsers.selected.length === 0) {
+ return "No browsers selected";
+ }
+ versions = [];
+ ref = prefixes.browsers.selected;
+ for (j = 0, len = ref.length; j < len; j++) {
+ browser = ref[j];
+ ref1 = browser.split(' '), name = ref1[0], version = ref1[1];
+ name = names[name] || capitalize(name);
+ if (versions[name]) {
+ versions[name].push(version);
+ } else {
+ versions[name] = [version];
+ }
+ }
+ out = "Browsers:\n";
+ for (browser in versions) {
+ list = versions[browser];
+ list = list.sort(function(a, b) {
+ return parseFloat(b) - parseFloat(a);
+ });
+ out += ' ' + browser + ': ' + list.join(', ') + "\n";
+ }
+ atrules = '';
+ ref2 = prefixes.add;
+ for (name in ref2) {
+ data = ref2[name];
+ if (name[0] === '@' && data.prefixes) {
+ atrules += prefix(name, false, data.prefixes);
+ }
+ }
+ if (atrules !== '') {
+ out += "\nAt-Rules:\n" + atrules;
+ }
+ selectors = '';
+ ref3 = prefixes.add.selectors;
+ for (k = 0, len1 = ref3.length; k < len1; k++) {
+ selector = ref3[k];
+ if (selector.prefixes) {
+ selectors += prefix(selector.name, false, selector.prefixes);
+ }
+ }
+ if (selectors !== '') {
+ out += "\nSelectors:\n" + selectors;
+ }
+ values = '';
+ props = '';
+ useTransition = false;
+ needTransition = (ref4 = prefixes.add.transition) != null ? ref4.prefixes : void 0;
+ ref5 = prefixes.add;
+ for (name in ref5) {
+ data = ref5[name];
+ if (name[0] !== '@' && data.prefixes) {
+ transitionProp = needTransition && prefixes.data[name].transition;
+ if (transitionProp) {
+ useTransition = true;
+ }
+ props += prefix(name, transitionProp, data.prefixes);
+ }
+ if (!data.values) {
+ continue;
+ }
+ if (prefixes.transitionProps.some(function(i) {
+ return i === name;
+ })) {
+ continue;
+ }
+ ref6 = data.values;
+ for (l = 0, len2 = ref6.length; l < len2; l++) {
+ value = ref6[l];
+ string = prefix(value.name, false, value.prefixes);
+ if (values.indexOf(string) === -1) {
+ values += string;
+ }
+ }
+ }
+ if (useTransition) {
+ props += " * - can be used in transition\n";
+ }
+ if (props !== '') {
+ out += "\nProperties:\n" + props;
+ }
+ if (values !== '') {
+ out += "\nValues:\n" + values;
+ }
+ if (atrules === '' && selectors === '' && props === '' && values === '') {
+ out += '\nAwesome! Your browsers don\'t require any vendor prefixes.' + '\nNow you can remove Autoprefixer from build steps.';
+ }
+ return out;
+ };
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/old-selector.js b/node_modules/autoprefixer-core/lib/old-selector.js
new file mode 100644
index 0000000..732d9dc
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/old-selector.js
@@ -0,0 +1,68 @@
+(function() {
+ var OldSelector;
+
+ OldSelector = (function() {
+ function OldSelector(selector, prefix1) {
+ var i, len, prefix, ref;
+ this.prefix = prefix1;
+ this.prefixed = selector.prefixed(this.prefix);
+ this.regexp = selector.regexp(this.prefix);
+ this.prefixeds = [];
+ ref = selector.possible();
+ for (i = 0, len = ref.length; i < len; i++) {
+ prefix = ref[i];
+ this.prefixeds.push([selector.prefixed(prefix), selector.regexp(prefix)]);
+ }
+ this.unprefixed = selector.name;
+ this.nameRegexp = selector.regexp();
+ }
+
+ OldSelector.prototype.isHack = function(rule) {
+ var before, i, index, len, ref, ref1, regexp, rules, some, string;
+ index = rule.parent.index(rule) + 1;
+ rules = rule.parent.nodes;
+ while (index < rules.length) {
+ before = rules[index].selector;
+ if (!before) {
+ return true;
+ }
+ if (before.indexOf(this.unprefixed) !== -1 && before.match(this.nameRegexp)) {
+ return false;
+ }
+ some = false;
+ ref = this.prefixeds;
+ for (i = 0, len = ref.length; i < len; i++) {
+ ref1 = ref[i], string = ref1[0], regexp = ref1[1];
+ if (before.indexOf(string) !== -1 && before.match(regexp)) {
+ some = true;
+ break;
+ }
+ }
+ if (!some) {
+ return true;
+ }
+ index += 1;
+ }
+ return true;
+ };
+
+ OldSelector.prototype.check = function(rule) {
+ if (rule.selector.indexOf(this.prefixed) === -1) {
+ return false;
+ }
+ if (!rule.selector.match(this.regexp)) {
+ return false;
+ }
+ if (this.isHack(rule)) {
+ return false;
+ }
+ return true;
+ };
+
+ return OldSelector;
+
+ })();
+
+ module.exports = OldSelector;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/old-value.js b/node_modules/autoprefixer-core/lib/old-value.js
new file mode 100644
index 0000000..58651e6
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/old-value.js
@@ -0,0 +1,30 @@
+(function() {
+ var OldValue, utils;
+
+ utils = require('./utils');
+
+ OldValue = (function() {
+ function OldValue(unprefixed, prefixed, string, regexp) {
+ this.unprefixed = unprefixed;
+ this.prefixed = prefixed;
+ this.string = string;
+ this.regexp = regexp;
+ this.regexp || (this.regexp = utils.regexp(this.prefixed));
+ this.string || (this.string = this.prefixed);
+ }
+
+ OldValue.prototype.check = function(value) {
+ if (value.indexOf(this.string) !== -1) {
+ return !!value.match(this.regexp);
+ } else {
+ return false;
+ }
+ };
+
+ return OldValue;
+
+ })();
+
+ module.exports = OldValue;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/prefixer.js b/node_modules/autoprefixer-core/lib/prefixer.js
new file mode 100644
index 0000000..b8966ca
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/prefixer.js
@@ -0,0 +1,119 @@
+(function() {
+ var Browsers, Prefixer, clone, utils, vendor,
+ hasProp = {}.hasOwnProperty;
+
+ Browsers = require('./browsers');
+
+ utils = require('./utils');
+
+ vendor = require('postcss/lib/vendor');
+
+ clone = function(obj, parent) {
+ var cloned, i, value;
+ if (typeof obj !== 'object') {
+ return obj;
+ }
+ cloned = new obj.constructor();
+ for (i in obj) {
+ if (!hasProp.call(obj, i)) continue;
+ value = obj[i];
+ if (i === 'parent' && typeof value === 'object') {
+ if (parent) {
+ cloned[i] = parent;
+ }
+ } else if (i === 'source') {
+ cloned[i] = value;
+ } else if (value instanceof Array) {
+ cloned[i] = value.map(function(i) {
+ return clone(i, cloned);
+ });
+ } else if (i !== '_autoprefixerPrefix' && i !== '_autoprefixerValues') {
+ cloned[i] = clone(value, cloned);
+ }
+ }
+ return cloned;
+ };
+
+ Prefixer = (function() {
+ Prefixer.hack = function(klass) {
+ var j, len, name, ref, results;
+ this.hacks || (this.hacks = {});
+ ref = klass.names;
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ name = ref[j];
+ results.push(this.hacks[name] = klass);
+ }
+ return results;
+ };
+
+ Prefixer.load = function(name, prefixes, all) {
+ var klass, ref;
+ klass = (ref = this.hacks) != null ? ref[name] : void 0;
+ if (klass) {
+ return new klass(name, prefixes, all);
+ } else {
+ return new this(name, prefixes, all);
+ }
+ };
+
+ Prefixer.clone = function(node, overrides) {
+ var cloned, name;
+ cloned = clone(node);
+ for (name in overrides) {
+ cloned[name] = overrides[name];
+ }
+ return cloned;
+ };
+
+ function Prefixer(name1, prefixes1, all1) {
+ this.name = name1;
+ this.prefixes = prefixes1;
+ this.all = all1;
+ }
+
+ Prefixer.prototype.parentPrefix = function(node) {
+ var prefix;
+ prefix = node._autoprefixerPrefix != null ? node._autoprefixerPrefix : node.type === 'decl' && node.prop[0] === '-' ? vendor.prefix(node.prop) : node.type === 'root' ? false : node.type === 'rule' && node.selector.indexOf(':-') !== -1 ? node.selector.match(/:(-\w+-)/)[1] : node.type === 'atrule' && node.name[0] === '-' ? vendor.prefix(node.name) : this.parentPrefix(node.parent);
+ if (Browsers.prefixes().indexOf(prefix) === -1) {
+ prefix = false;
+ }
+ return node._autoprefixerPrefix = prefix;
+ };
+
+ Prefixer.prototype.process = function(node) {
+ var added, j, k, len, len1, parent, prefix, prefixes, ref;
+ if (!this.check(node)) {
+ return;
+ }
+ parent = this.parentPrefix(node);
+ prefixes = [];
+ ref = this.prefixes;
+ for (j = 0, len = ref.length; j < len; j++) {
+ prefix = ref[j];
+ if (parent && parent !== utils.removeNote(prefix)) {
+ continue;
+ }
+ prefixes.push(prefix);
+ }
+ added = [];
+ for (k = 0, len1 = prefixes.length; k < len1; k++) {
+ prefix = prefixes[k];
+ if (this.add(node, prefix, added.concat([prefix]))) {
+ added.push(prefix);
+ }
+ }
+ return added;
+ };
+
+ Prefixer.prototype.clone = function(node, overrides) {
+ return Prefixer.clone(node, overrides);
+ };
+
+ return Prefixer;
+
+ })();
+
+ module.exports = Prefixer;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/prefixes.js b/node_modules/autoprefixer-core/lib/prefixes.js
new file mode 100644
index 0000000..e55d852
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/prefixes.js
@@ -0,0 +1,368 @@
+(function() {
+ var AtRule, Browsers, Declaration, Prefixes, Processor, Resolution, Selector, Supports, Value, declsCache, utils, vendor;
+
+ Declaration = require('./declaration');
+
+ Resolution = require('./resolution');
+
+ Processor = require('./processor');
+
+ Supports = require('./supports');
+
+ Browsers = require('./browsers');
+
+ Selector = require('./selector');
+
+ AtRule = require('./at-rule');
+
+ Value = require('./value');
+
+ utils = require('./utils');
+
+ vendor = require('postcss/lib/vendor');
+
+ Selector.hack(require('./hacks/fullscreen'));
+
+ Selector.hack(require('./hacks/placeholder'));
+
+ Declaration.hack(require('./hacks/flex'));
+
+ Declaration.hack(require('./hacks/order'));
+
+ Declaration.hack(require('./hacks/filter'));
+
+ Declaration.hack(require('./hacks/flex-flow'));
+
+ Declaration.hack(require('./hacks/flex-grow'));
+
+ Declaration.hack(require('./hacks/flex-wrap'));
+
+ Declaration.hack(require('./hacks/align-self'));
+
+ Declaration.hack(require('./hacks/flex-basis'));
+
+ Declaration.hack(require('./hacks/align-items'));
+
+ Declaration.hack(require('./hacks/flex-shrink'));
+
+ Declaration.hack(require('./hacks/break-inside'));
+
+ Declaration.hack(require('./hacks/border-image'));
+
+ Declaration.hack(require('./hacks/align-content'));
+
+ Declaration.hack(require('./hacks/border-radius'));
+
+ Declaration.hack(require('./hacks/block-logical'));
+
+ Declaration.hack(require('./hacks/inline-logical'));
+
+ Declaration.hack(require('./hacks/transform-decl'));
+
+ Declaration.hack(require('./hacks/flex-direction'));
+
+ Declaration.hack(require('./hacks/image-rendering'));
+
+ Declaration.hack(require('./hacks/justify-content'));
+
+ Declaration.hack(require('./hacks/background-size'));
+
+ Value.hack(require('./hacks/gradient'));
+
+ Value.hack(require('./hacks/crisp-edges'));
+
+ Value.hack(require('./hacks/flex-values'));
+
+ Value.hack(require('./hacks/display-flex'));
+
+ Value.hack(require('./hacks/filter-value'));
+
+ Value.hack(require('./hacks/fill-available'));
+
+ Value.hack(require('./hacks/transform-value'));
+
+ declsCache = {};
+
+ Prefixes = (function() {
+ function Prefixes(data1, browsers, options) {
+ var ref;
+ this.data = data1;
+ this.browsers = browsers;
+ this.options = options != null ? options : {};
+ ref = this.preprocess(this.select(this.data)), this.add = ref[0], this.remove = ref[1];
+ this.processor = new Processor(this);
+ }
+
+ Prefixes.prototype.transitionProps = ['transition', 'transition-property'];
+
+ Prefixes.prototype.cleaner = function() {
+ var empty;
+ if (!this.cleanerCache) {
+ if (this.browsers.selected.length) {
+ empty = new Browsers(this.browsers.data, []);
+ this.cleanerCache = new Prefixes(this.data, empty, this.options);
+ } else {
+ return this;
+ }
+ }
+ return this.cleanerCache;
+ };
+
+ Prefixes.prototype.select = function(list) {
+ var add, all, data, name, notes, selected;
+ selected = {
+ add: {},
+ remove: {}
+ };
+ for (name in list) {
+ data = list[name];
+ add = data.browsers.map(function(i) {
+ var params;
+ params = i.split(' ');
+ return {
+ browser: params[0] + ' ' + params[1],
+ note: params[2]
+ };
+ });
+ notes = add.filter(function(i) {
+ return i.note;
+ }).map((function(_this) {
+ return function(i) {
+ return _this.browsers.prefix(i.browser) + ' ' + i.note;
+ };
+ })(this));
+ notes = utils.uniq(notes);
+ add = add.filter((function(_this) {
+ return function(i) {
+ return _this.browsers.isSelected(i.browser);
+ };
+ })(this)).map((function(_this) {
+ return function(i) {
+ var prefix;
+ prefix = _this.browsers.prefix(i.browser);
+ if (i.note) {
+ return prefix + ' ' + i.note;
+ } else {
+ return prefix;
+ }
+ };
+ })(this));
+ add = this.sort(utils.uniq(add));
+ all = data.browsers.map((function(_this) {
+ return function(i) {
+ return _this.browsers.prefix(i);
+ };
+ })(this));
+ if (data.mistakes) {
+ all = all.concat(data.mistakes);
+ }
+ all = all.concat(notes);
+ all = utils.uniq(all);
+ if (add.length) {
+ selected.add[name] = add;
+ if (add.length < all.length) {
+ selected.remove[name] = all.filter(function(i) {
+ return add.indexOf(i) === -1;
+ });
+ }
+ } else {
+ selected.remove[name] = all;
+ }
+ }
+ return selected;
+ };
+
+ Prefixes.prototype.sort = function(prefixes) {
+ return prefixes.sort(function(a, b) {
+ var aLength, bLength;
+ aLength = utils.removeNote(a).length;
+ bLength = utils.removeNote(b).length;
+ if (aLength === bLength) {
+ return b.length - a.length;
+ } else {
+ return bLength - aLength;
+ }
+ });
+ };
+
+ Prefixes.prototype.preprocess = function(selected) {
+ var add, j, k, l, len, len1, len2, len3, len4, len5, len6, m, n, name, o, old, olds, p, prefix, prefixed, prefixes, prop, props, ref, ref1, ref2, remove, selector, value, values;
+ add = {
+ selectors: [],
+ '@supports': new Supports(this)
+ };
+ ref = selected.add;
+ for (name in ref) {
+ prefixes = ref[name];
+ if (name === '@keyframes' || name === '@viewport') {
+ add[name] = new AtRule(name, prefixes, this);
+ } else if (name === '@resolution') {
+ add[name] = new Resolution(name, prefixes, this);
+ } else if (this.data[name].selector) {
+ add.selectors.push(Selector.load(name, prefixes, this));
+ } else {
+ props = this.data[name].transition ? this.transitionProps : this.data[name].props;
+ if (props) {
+ value = Value.load(name, prefixes, this);
+ for (j = 0, len = props.length; j < len; j++) {
+ prop = props[j];
+ if (!add[prop]) {
+ add[prop] = {
+ values: []
+ };
+ }
+ add[prop].values.push(value);
+ }
+ }
+ if (!this.data[name].props) {
+ values = ((ref1 = add[name]) != null ? ref1.values : void 0) || [];
+ add[name] = Declaration.load(name, prefixes, this);
+ add[name].values = values;
+ }
+ }
+ }
+ remove = {
+ selectors: []
+ };
+ ref2 = selected.remove;
+ for (name in ref2) {
+ prefixes = ref2[name];
+ if (this.data[name].selector) {
+ selector = Selector.load(name, prefixes);
+ for (k = 0, len1 = prefixes.length; k < len1; k++) {
+ prefix = prefixes[k];
+ remove.selectors.push(selector.old(prefix));
+ }
+ } else if (name === '@keyframes' || name === '@viewport') {
+ for (l = 0, len2 = prefixes.length; l < len2; l++) {
+ prefix = prefixes[l];
+ prefixed = '@' + prefix + name.slice(1);
+ remove[prefixed] = {
+ remove: true
+ };
+ }
+ } else if (name === '@resolution') {
+ remove[name] = new Resolution(name, prefixes, this);
+ } else {
+ props = this.data[name].transition ? this.transitionProps : this.data[name].props;
+ if (props) {
+ value = Value.load(name, [], this);
+ for (m = 0, len3 = prefixes.length; m < len3; m++) {
+ prefix = prefixes[m];
+ old = value.old(prefix);
+ if (old) {
+ for (n = 0, len4 = props.length; n < len4; n++) {
+ prop = props[n];
+ if (!remove[prop]) {
+ remove[prop] = {};
+ }
+ if (!remove[prop].values) {
+ remove[prop].values = [];
+ }
+ remove[prop].values.push(old);
+ }
+ }
+ }
+ }
+ if (!this.data[name].props) {
+ for (o = 0, len5 = prefixes.length; o < len5; o++) {
+ prefix = prefixes[o];
+ prop = vendor.unprefixed(name);
+ olds = this.decl(name).old(name, prefix);
+ for (p = 0, len6 = olds.length; p < len6; p++) {
+ prefixed = olds[p];
+ if (!remove[prefixed]) {
+ remove[prefixed] = {};
+ }
+ remove[prefixed].remove = true;
+ }
+ }
+ }
+ }
+ }
+ return [add, remove];
+ };
+
+ Prefixes.prototype.decl = function(prop) {
+ var decl;
+ decl = declsCache[prop];
+ if (decl) {
+ return decl;
+ } else {
+ return declsCache[prop] = Declaration.load(prop);
+ }
+ };
+
+ Prefixes.prototype.unprefixed = function(prop) {
+ prop = vendor.unprefixed(prop);
+ return this.decl(prop).normalize(prop);
+ };
+
+ Prefixes.prototype.prefixed = function(prop, prefix) {
+ prop = vendor.unprefixed(prop);
+ return this.decl(prop).prefixed(prop, prefix);
+ };
+
+ Prefixes.prototype.values = function(type, prop) {
+ var data, global, ref, ref1, values;
+ data = this[type];
+ global = (ref = data['*']) != null ? ref.values : void 0;
+ values = (ref1 = data[prop]) != null ? ref1.values : void 0;
+ if (global && values) {
+ return utils.uniq(global.concat(values));
+ } else {
+ return global || values || [];
+ }
+ };
+
+ Prefixes.prototype.group = function(decl) {
+ var checker, index, length, rule, unprefixed;
+ rule = decl.parent;
+ index = rule.index(decl);
+ length = rule.nodes.length;
+ unprefixed = this.unprefixed(decl.prop);
+ checker = (function(_this) {
+ return function(step, callback) {
+ var other;
+ index += step;
+ while (index >= 0 && index < length) {
+ other = rule.nodes[index];
+ if (other.type === 'decl') {
+ if (step === -1 && other.prop === unprefixed) {
+ if (!Browsers.withPrefix(other.value)) {
+ break;
+ }
+ }
+ if (_this.unprefixed(other.prop) !== unprefixed) {
+ break;
+ } else if (callback(other) === true) {
+ return true;
+ }
+ if (step === +1 && other.prop === unprefixed) {
+ if (!Browsers.withPrefix(other.value)) {
+ break;
+ }
+ }
+ }
+ index += step;
+ }
+ return false;
+ };
+ })(this);
+ return {
+ up: function(callback) {
+ return checker(-1, callback);
+ },
+ down: function(callback) {
+ return checker(+1, callback);
+ }
+ };
+ };
+
+ return Prefixes;
+
+ })();
+
+ module.exports = Prefixes;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/processor.js b/node_modules/autoprefixer-core/lib/processor.js
new file mode 100644
index 0000000..6f27b49
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/processor.js
@@ -0,0 +1,213 @@
+(function() {
+ var Processor, Value, utils, vendor;
+
+ vendor = require('postcss/lib/vendor');
+
+ Value = require('./value');
+
+ utils = require('./utils');
+
+ Processor = (function() {
+ function Processor(prefixes) {
+ this.prefixes = prefixes;
+ }
+
+ Processor.prototype.add = function(css) {
+ var keyframes, resolution, supports, viewport;
+ resolution = this.prefixes.add['@resolution'];
+ keyframes = this.prefixes.add['@keyframes'];
+ viewport = this.prefixes.add['@viewport'];
+ supports = this.prefixes.add['@supports'];
+ css.eachAtRule((function(_this) {
+ return function(rule) {
+ if (rule.name === 'keyframes') {
+ if (!_this.disabled(rule)) {
+ return keyframes != null ? keyframes.process(rule) : void 0;
+ }
+ } else if (rule.name === 'viewport') {
+ if (!_this.disabled(rule)) {
+ return viewport != null ? viewport.process(rule) : void 0;
+ }
+ } else if (rule.name === 'supports') {
+ if (!_this.disabled(rule)) {
+ return supports.process(rule);
+ }
+ } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) {
+ if (!_this.disabled(rule)) {
+ return resolution != null ? resolution.process(rule) : void 0;
+ }
+ }
+ };
+ })(this));
+ css.eachRule((function(_this) {
+ return function(rule) {
+ var j, len, ref, results, selector;
+ if (_this.disabled(rule)) {
+ return;
+ }
+ ref = _this.prefixes.add.selectors;
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ selector = ref[j];
+ results.push(selector.process(rule));
+ }
+ return results;
+ };
+ })(this));
+ css.eachDecl((function(_this) {
+ return function(decl) {
+ var prefix;
+ prefix = _this.prefixes.add[decl.prop];
+ if (prefix && prefix.prefixes) {
+ if (!_this.disabled(decl)) {
+ return prefix.process(decl);
+ }
+ }
+ };
+ })(this));
+ return css.eachDecl((function(_this) {
+ return function(decl) {
+ var j, len, ref, unprefixed, value;
+ if (_this.disabled(decl)) {
+ return;
+ }
+ unprefixed = _this.prefixes.unprefixed(decl.prop);
+ ref = _this.prefixes.values('add', unprefixed);
+ for (j = 0, len = ref.length; j < len; j++) {
+ value = ref[j];
+ value.process(decl);
+ }
+ return Value.save(_this.prefixes, decl);
+ };
+ })(this));
+ };
+
+ Processor.prototype.remove = function(css) {
+ var checker, j, len, ref, resolution;
+ resolution = this.prefixes.remove['@resolution'];
+ css.eachAtRule((function(_this) {
+ return function(rule, i) {
+ if (_this.prefixes.remove['@' + rule.name]) {
+ if (!_this.disabled(rule)) {
+ return rule.parent.remove(i);
+ }
+ } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) {
+ return resolution != null ? resolution.clean(rule) : void 0;
+ }
+ };
+ })(this));
+ ref = this.prefixes.remove.selectors;
+ for (j = 0, len = ref.length; j < len; j++) {
+ checker = ref[j];
+ css.eachRule((function(_this) {
+ return function(rule, i) {
+ if (checker.check(rule)) {
+ if (!_this.disabled(rule)) {
+ return rule.parent.remove(i);
+ }
+ }
+ };
+ })(this));
+ }
+ return css.eachDecl((function(_this) {
+ return function(decl, i) {
+ var k, len1, notHack, ref1, ref2, rule, unprefixed;
+ if (_this.disabled(decl)) {
+ return;
+ }
+ rule = decl.parent;
+ unprefixed = _this.prefixes.unprefixed(decl.prop);
+ if ((ref1 = _this.prefixes.remove[decl.prop]) != null ? ref1.remove : void 0) {
+ notHack = _this.prefixes.group(decl).down(function(other) {
+ return other.prop === unprefixed;
+ });
+ if (notHack && !_this.withHackValue(decl)) {
+ if (decl.style('before').indexOf("\n") > -1) {
+ _this.reduceSpaces(decl);
+ }
+ rule.remove(i);
+ return;
+ }
+ }
+ ref2 = _this.prefixes.values('remove', unprefixed);
+ for (k = 0, len1 = ref2.length; k < len1; k++) {
+ checker = ref2[k];
+ if (checker.check(decl.value)) {
+ unprefixed = checker.unprefixed;
+ notHack = _this.prefixes.group(decl).down(function(other) {
+ return other.value.indexOf(unprefixed) !== -1;
+ });
+ if (notHack) {
+ rule.remove(i);
+ return;
+ } else if (checker.clean) {
+ checker.clean(decl);
+ return;
+ }
+ }
+ }
+ };
+ })(this));
+ };
+
+ Processor.prototype.withHackValue = function(decl) {
+ return decl.prop === '-webkit-background-clip' && decl.value === 'text';
+ };
+
+ Processor.prototype.disabled = function(node) {
+ var status;
+ if (node._autoprefixerDisabled != null) {
+ return node._autoprefixerDisabled;
+ } else if (node.nodes) {
+ status = void 0;
+ node.each(function(i) {
+ if (i.type !== 'comment') {
+ return;
+ }
+ if (i.text === 'autoprefixer: off') {
+ status = false;
+ return false;
+ } else if (i.text === 'autoprefixer: on') {
+ status = true;
+ return false;
+ }
+ });
+ return node._autoprefixerDisabled = status != null ? !status : node.parent ? this.disabled(node.parent) : false;
+ } else {
+ return node._autoprefixerDisabled = this.disabled(node.parent);
+ }
+ };
+
+ Processor.prototype.reduceSpaces = function(decl) {
+ var diff, parts, prevMin, stop;
+ stop = false;
+ this.prefixes.group(decl).up(function(other) {
+ return stop = true;
+ });
+ if (stop) {
+ return;
+ }
+ parts = decl.style('before').split("\n");
+ prevMin = parts[parts.length - 1].length;
+ diff = false;
+ return this.prefixes.group(decl).down(function(other) {
+ var last;
+ parts = other.style('before').split("\n");
+ last = parts.length - 1;
+ if (parts[last].length > prevMin) {
+ if (diff === false) {
+ diff = parts[last].length - prevMin;
+ }
+ parts[last] = parts[last].slice(0, -diff);
+ return other.before = parts.join("\n");
+ }
+ });
+ };
+
+ return Processor;
+
+ })();
+
+ module.exports = Processor;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/resolution.js b/node_modules/autoprefixer-core/lib/resolution.js
new file mode 100644
index 0000000..44147ce
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/resolution.js
@@ -0,0 +1,98 @@
+(function() {
+ var Prefixer, Resolution, n2f, regexp, split, utils,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Prefixer = require('./prefixer');
+
+ utils = require('./utils');
+
+ n2f = require('num2fraction');
+
+ regexp = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpi)/gi;
+
+ split = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpi)/i;
+
+ Resolution = (function(superClass) {
+ extend(Resolution, superClass);
+
+ function Resolution() {
+ return Resolution.__super__.constructor.apply(this, arguments);
+ }
+
+ Resolution.prototype.prefixName = function(prefix, name) {
+ return name = prefix === '-moz-' ? name + '--moz-device-pixel-ratio' : prefix + name + '-device-pixel-ratio';
+ };
+
+ Resolution.prototype.prefixQuery = function(prefix, name, colon, value, units) {
+ if (units === 'dpi') {
+ value = Number(value / 96);
+ }
+ if (prefix === '-o-') {
+ value = n2f(value);
+ }
+ return this.prefixName(prefix, name) + colon + value;
+ };
+
+ Resolution.prototype.clean = function(rule) {
+ var j, len, prefix, ref;
+ if (!this.bad) {
+ this.bad = [];
+ ref = this.prefixes;
+ for (j = 0, len = ref.length; j < len; j++) {
+ prefix = ref[j];
+ this.bad.push(this.prefixName(prefix, 'min'));
+ this.bad.push(this.prefixName(prefix, 'max'));
+ }
+ }
+ return rule.params = utils.editList(rule.params, (function(_this) {
+ return function(queries) {
+ return queries.filter(function(query) {
+ return _this.bad.every(function(i) {
+ return query.indexOf(i) === -1;
+ });
+ });
+ };
+ })(this));
+ };
+
+ Resolution.prototype.process = function(rule) {
+ var parent, prefixes;
+ parent = this.parentPrefix(rule);
+ prefixes = parent ? [parent] : this.prefixes;
+ return rule.params = utils.editList(rule.params, (function(_this) {
+ return function(origin, prefixed) {
+ var j, k, len, len1, prefix, processed, query;
+ for (j = 0, len = origin.length; j < len; j++) {
+ query = origin[j];
+ if (query.indexOf('min-resolution') === -1 && query.indexOf('max-resolution') === -1) {
+ prefixed.push(query);
+ continue;
+ }
+ for (k = 0, len1 = prefixes.length; k < len1; k++) {
+ prefix = prefixes[k];
+ if (prefix === '-moz-' && rule.params.indexOf('dpi') !== -1) {
+ continue;
+ } else {
+ processed = query.replace(regexp, function(str) {
+ var parts;
+ parts = str.match(split);
+ return _this.prefixQuery(prefix, parts[1], parts[2], parts[3], parts[4]);
+ });
+ prefixed.push(processed);
+ }
+ }
+ prefixed.push(query);
+ }
+ return utils.uniq(prefixed);
+ };
+ })(this));
+ };
+
+ return Resolution;
+
+ })(Prefixer);
+
+ module.exports = Resolution;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/selector.js b/node_modules/autoprefixer-core/lib/selector.js
new file mode 100644
index 0000000..07866fd
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/selector.js
@@ -0,0 +1,117 @@
+(function() {
+ var Browsers, OldSelector, Prefixer, Selector, utils,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ OldSelector = require('./old-selector');
+
+ Prefixer = require('./prefixer');
+
+ Browsers = require('./browsers');
+
+ utils = require('./utils');
+
+ Selector = (function(superClass) {
+ extend(Selector, superClass);
+
+ function Selector(name1, prefixes, all) {
+ this.name = name1;
+ this.prefixes = prefixes;
+ this.all = all;
+ this.regexpCache = {};
+ }
+
+ Selector.prototype.check = function(rule) {
+ if (rule.selector.indexOf(this.name) !== -1) {
+ return !!rule.selector.match(this.regexp());
+ } else {
+ return false;
+ }
+ };
+
+ Selector.prototype.prefixed = function(prefix) {
+ return this.name.replace(/^([^\w]*)/, '$1' + prefix);
+ };
+
+ Selector.prototype.regexp = function(prefix) {
+ var name;
+ if (this.regexpCache[prefix]) {
+ return this.regexpCache[prefix];
+ }
+ name = prefix ? this.prefixed(prefix) : this.name;
+ return this.regexpCache[prefix] = RegExp("(^|[^:\"'=])" + (utils.escapeRegexp(name)), "gi");
+ };
+
+ Selector.prototype.possible = function() {
+ return Browsers.prefixes();
+ };
+
+ Selector.prototype.prefixeds = function(rule) {
+ var i, len, prefix, prefixeds, ref;
+ if (rule._autoprefixerPrefixeds) {
+ return rule._autoprefixerPrefixeds;
+ }
+ prefixeds = {};
+ ref = this.possible();
+ for (i = 0, len = ref.length; i < len; i++) {
+ prefix = ref[i];
+ prefixeds[prefix] = this.replace(rule.selector, prefix);
+ }
+ return rule._autoprefixerPrefixeds = prefixeds;
+ };
+
+ Selector.prototype.already = function(rule, prefixeds, prefix) {
+ var before, index, key, prefixed, some;
+ index = rule.parent.index(rule) - 1;
+ while (index >= 0) {
+ before = rule.parent.nodes[index];
+ if (before.type !== 'rule') {
+ return false;
+ }
+ some = false;
+ for (key in prefixeds) {
+ prefixed = prefixeds[key];
+ if (before.selector === prefixed) {
+ if (prefix === key) {
+ return true;
+ } else {
+ some = true;
+ break;
+ }
+ }
+ }
+ if (!some) {
+ return false;
+ }
+ index -= 1;
+ }
+ return false;
+ };
+
+ Selector.prototype.replace = function(selector, prefix) {
+ return selector.replace(this.regexp(), '$1' + this.prefixed(prefix));
+ };
+
+ Selector.prototype.add = function(rule, prefix) {
+ var cloned, prefixeds;
+ prefixeds = this.prefixeds(rule);
+ if (this.already(rule, prefixeds, prefix)) {
+ return;
+ }
+ cloned = this.clone(rule, {
+ selector: prefixeds[prefix]
+ });
+ return rule.parent.insertBefore(rule, cloned);
+ };
+
+ Selector.prototype.old = function(prefix) {
+ return new OldSelector(this, prefix);
+ };
+
+ return Selector;
+
+ })(Prefixer);
+
+ module.exports = Selector;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/supports.js b/node_modules/autoprefixer-core/lib/supports.js
new file mode 100644
index 0000000..b89476a
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/supports.js
@@ -0,0 +1,115 @@
+(function() {
+ var Prefixes, Supports, Value, findCondition, findDecl, list, postcss, split, utils;
+
+ Prefixes = require('./prefixes');
+
+ Value = require('./value');
+
+ utils = require('./utils');
+
+ postcss = require('postcss');
+
+ list = require('postcss/lib/list');
+
+ split = /\(\s*([^\(\):]+)\s*:([^\)]+)/;
+
+ findDecl = /\(\s*([^\(\):]+)\s*:\s*(.+)\s*\)/g;
+
+ findCondition = /(not\s*)?\(\s*([^\(\):]+)\s*:\s*(.+?(?!\s*or\s*).+?)\s*\)*\s*\)\s*or\s*/gi;
+
+ Supports = (function() {
+ function Supports(all1) {
+ this.all = all1;
+ }
+
+ Supports.prototype.virtual = function(prop, value) {
+ var rule;
+ rule = postcss.parse('a{}').first;
+ rule.append({
+ prop: prop,
+ value: value,
+ before: ''
+ });
+ return rule;
+ };
+
+ Supports.prototype.prefixed = function(prop, value) {
+ var decl, j, k, len, len1, prefixer, ref, ref1, rule;
+ rule = this.virtual(prop, value);
+ prefixer = this.all.add[prop];
+ if (prefixer != null) {
+ if (typeof prefixer.process === "function") {
+ prefixer.process(rule.first);
+ }
+ }
+ ref = rule.nodes;
+ for (j = 0, len = ref.length; j < len; j++) {
+ decl = ref[j];
+ ref1 = this.all.values('add', prop);
+ for (k = 0, len1 = ref1.length; k < len1; k++) {
+ value = ref1[k];
+ value.process(decl);
+ }
+ Value.save(this.all, decl);
+ }
+ return rule.nodes;
+ };
+
+ Supports.prototype.clean = function(params) {
+ return params.replace(findCondition, (function(_this) {
+ return function(all) {
+ var _, check, checker, j, len, prop, ref, ref1, ref2, unprefixed, value;
+ if (all.slice(0, 3).toLowerCase() === 'not') {
+ return all;
+ }
+ ref = all.match(split), _ = ref[0], prop = ref[1], value = ref[2];
+ unprefixed = _this.all.unprefixed(prop);
+ if ((ref1 = _this.all.cleaner().remove[prop]) != null ? ref1.remove : void 0) {
+ check = new RegExp('(\\(|\\s)' + utils.escapeRegexp(unprefixed) + ':');
+ if (check.test(params)) {
+ return '';
+ }
+ }
+ ref2 = _this.all.cleaner().values('remove', unprefixed);
+ for (j = 0, len = ref2.length; j < len; j++) {
+ checker = ref2[j];
+ if (checker.check(value)) {
+ return '';
+ }
+ }
+ return all;
+ };
+ })(this)).replace(/\(\s*\((.*)\)\s*\)/g, '($1)');
+ };
+
+ Supports.prototype.process = function(rule) {
+ rule.params = this.clean(rule.params);
+ return rule.params = rule.params.replace(findDecl, (function(_this) {
+ return function(all, prop, value) {
+ var i, stringed;
+ stringed = (function() {
+ var j, len, ref, results;
+ ref = this.prefixed(prop, value);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ i = ref[j];
+ results.push("(" + i.prop + ": " + i.value + ")");
+ }
+ return results;
+ }).call(_this);
+ if (stringed.length === 1) {
+ return stringed[0];
+ } else {
+ return '(' + stringed.join(' or ') + ')';
+ }
+ };
+ })(this));
+ };
+
+ return Supports;
+
+ })();
+
+ module.exports = Supports;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/utils.js b/node_modules/autoprefixer-core/lib/utils.js
new file mode 100644
index 0000000..4334cca
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/utils.js
@@ -0,0 +1,57 @@
+(function() {
+ var list;
+
+ list = require('postcss/lib/list');
+
+ module.exports = {
+ error: function(text) {
+ var err;
+ err = new Error(text);
+ err.autoprefixer = true;
+ throw err;
+ },
+ uniq: function(array) {
+ var filtered, i, j, len;
+ filtered = [];
+ for (j = 0, len = array.length; j < len; j++) {
+ i = array[j];
+ if (filtered.indexOf(i) === -1) {
+ filtered.push(i);
+ }
+ }
+ return filtered;
+ },
+ removeNote: function(string) {
+ if (string.indexOf(' ') === -1) {
+ return string;
+ } else {
+ return string.split(' ')[0];
+ }
+ },
+ escapeRegexp: function(string) {
+ return string.replace(/[.?*+\^\$\[\]\\(){}|\-]/g, '\\$&');
+ },
+ regexp: function(word, escape) {
+ if (escape == null) {
+ escape = true;
+ }
+ if (escape) {
+ word = this.escapeRegexp(word);
+ }
+ return RegExp("(^|[\\s,(])(" + word + "($|[\\s(,]))", "gi");
+ },
+ editList: function(value, callback) {
+ var changed, join, origin;
+ origin = list.comma(value);
+ changed = callback(origin, []);
+ if (origin === changed) {
+ return value;
+ } else {
+ join = value.match(/,\s*/);
+ join = join ? join[0] : ', ';
+ return changed.join(join);
+ }
+ }
+ };
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/lib/value.js b/node_modules/autoprefixer-core/lib/value.js
new file mode 100644
index 0000000..6f9bd52
--- /dev/null
+++ b/node_modules/autoprefixer-core/lib/value.js
@@ -0,0 +1,103 @@
+(function() {
+ var OldValue, Prefixer, Value, utils, vendor,
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+
+ Prefixer = require('./prefixer');
+
+ OldValue = require('./old-value');
+
+ utils = require('./utils');
+
+ vendor = require('postcss/lib/vendor');
+
+ Value = (function(superClass) {
+ extend(Value, superClass);
+
+ function Value() {
+ return Value.__super__.constructor.apply(this, arguments);
+ }
+
+ Value.save = function(prefixes, decl) {
+ var already, cloned, prefix, prefixed, propPrefix, ref, results, rule, trimmed, value;
+ ref = decl._autoprefixerValues;
+ results = [];
+ for (prefix in ref) {
+ value = ref[prefix];
+ if (value === decl.value) {
+ continue;
+ }
+ propPrefix = vendor.prefix(decl.prop);
+ if (propPrefix === prefix) {
+ results.push(decl.value = value);
+ } else if (propPrefix === '-pie-') {
+ continue;
+ } else {
+ prefixed = prefixes.prefixed(decl.prop, prefix);
+ rule = decl.parent;
+ if (rule.every(function(i) {
+ return i.prop !== prefixed;
+ })) {
+ trimmed = value.replace(/\s+/, ' ');
+ already = rule.some(function(i) {
+ return i.prop === decl.prop && i.value.replace(/\s+/, ' ') === trimmed;
+ });
+ if (!already) {
+ if (value.indexOf('-webkit-filter') !== -1 && (decl.prop === 'transition' || decl.prop === 'trasition-property')) {
+ results.push(decl.value = value);
+ } else {
+ cloned = this.clone(decl, {
+ value: value
+ });
+ results.push(decl.parent.insertBefore(decl, cloned));
+ }
+ } else {
+ results.push(void 0);
+ }
+ } else {
+ results.push(void 0);
+ }
+ }
+ }
+ return results;
+ };
+
+ Value.prototype.check = function(decl) {
+ var value;
+ value = decl.value;
+ if (value.indexOf(this.name) !== -1) {
+ return !!value.match(this.regexp());
+ } else {
+ return false;
+ }
+ };
+
+ Value.prototype.regexp = function() {
+ return this.regexpCache || (this.regexpCache = utils.regexp(this.name));
+ };
+
+ Value.prototype.replace = function(string, prefix) {
+ return string.replace(this.regexp(), '$1' + prefix + '$2');
+ };
+
+ Value.prototype.add = function(decl, prefix) {
+ var ref, value;
+ decl._autoprefixerValues || (decl._autoprefixerValues = {});
+ value = decl._autoprefixerValues[prefix] || ((ref = decl._value) != null ? ref.raw : void 0) || decl.value;
+ value = this.replace(value, prefix);
+ if (value) {
+ return decl._autoprefixerValues[prefix] = value;
+ }
+ };
+
+ Value.prototype.old = function(prefix) {
+ return new OldValue(this.name, prefix + this.name);
+ };
+
+ return Value;
+
+ })(Prefixer);
+
+ module.exports = Value;
+
+}).call(this);
diff --git a/node_modules/autoprefixer-core/node_modules/browserslist/.npmignore b/node_modules/autoprefixer-core/node_modules/browserslist/.npmignore
new file mode 100644
index 0000000..1aa2d59
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/browserslist/.npmignore
@@ -0,0 +1,8 @@
+.gitignore
+
+node_modules/
+
+test/
+.travis.yml
+
+gulpfile.js
diff --git a/node_modules/autoprefixer-core/node_modules/browserslist/ChangeLog.md b/node_modules/autoprefixer-core/node_modules/browserslist/ChangeLog.md
new file mode 100644
index 0000000..fe4ee0c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/browserslist/ChangeLog.md
@@ -0,0 +1,15 @@
+## 0.2
+* Return Can I Use joined versions as `ios_saf 7.0-7.1`.
+
+## 0.1.3
+* Better work with Can I Use joined versions like `ios_saf 7.0-7.1`.
+* Browserslist now understands `ios_saf 7.0` or `ios_saf 7`.
+
+## 0.1.2
+* Do not create global `browserslist` var (by Maxime Thirouin).
+
+## 0.1.1
+* Sort browsers by name and version.
+
+## 0.1
+* Initial release.
diff --git a/node_modules/autoprefixer-core/node_modules/browserslist/LICENSE b/node_modules/autoprefixer-core/node_modules/browserslist/LICENSE
new file mode 100644
index 0000000..1ae47a2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/browserslist/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2014 Andrey Sitnik
+
+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/node_modules/autoprefixer-core/node_modules/browserslist/README.md b/node_modules/autoprefixer-core/node_modules/browserslist/README.md
new file mode 100644
index 0000000..dd95701
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/browserslist/README.md
@@ -0,0 +1,100 @@
+# Browserslist [](https://travis-ci.org/ai/browserslist)
+
+Get browser versions that match given criteria.
+Useful for tools like [Autoprefixer].
+
+You can select browsers by passing a string. This library will use Can I Use
+data to return the appropriate list of all matching versions.
+
+For example, the last version of each major browser and version,
+with a usage of over 5% in global usage statistics:
+
+```js
+browserslist('> 5%, last 1 version');
+//=> ['and_chr 40', 'chrome 40', 'chrome 39', 'firefox 35', 'firefox 34',
+// 'ie 11', 'ie_mob 11', 'ios_saf 8.1', 'opera 26', 'safari 8']
+```
+
+If you don't provide an argument, Browserslist will look for a `browserslist`
+config file in current or parent directories.
+
+If no config file is found, Browserslist will use the default list:
+`> 1%, last 2 versions, Firefox ESR, Opera 12.1`.
+
+
+
+
+
+[Autoprefixer]: https://github.com/postcss/autoprefixer
+
+## Queries
+
+You can specify the browsers by queries (case insensitive):
+
+* `last 2 versions`: the last 2 versions for each major browser.
+* `last 2 Chrome versions`: the last 2 versions of Chrome browser.
+* `> 5%`: versions selected by global usage statistics.
+* `> 5% in US`: uses USA usage statistics. It accepts [two-letter country code].
+* `Firefox > 20`: versions of Firefox newer than 20.
+* `Firefox >= 20`: versions of Firefox newer than or equal to 20.
+* `Firefox < 20`: versions of Firefox less than 20.
+* `Firefox <= 20`: versions of Firefox less than or equal to 20.
+* `Firefox ESR`: the latest [Firefox ESR] version.
+* `iOS 7`: the iOS browser version 7 directly.
+
+Blackberry and Android WebView will not be used in `last n versions`.
+You should add them by name.
+
+[two-letter country codes]: http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
+
+## Browsers
+
+Names are case insensitive:
+
+* `Android` for Android WebView.
+* `BlackBerry` or `bb` for Blackberry browser.
+* `Chrome` for Google Chrome.
+* `Firefox` or `ff` for Mozilla Firefox.
+* `Explorer` or `ie` for Internet Explorer.
+* `iOS` or `ios_saf` for iOS Safari.
+* `Opera` for Opera.
+* `Safari` for desktop Safari.
+* `OperaMobile` or `op_mob` for Opera Mobile.
+* `OperaMini` or `op_mini` for Opera Mini.
+* `ChromeAndroid` or `and_chr` for Chrome for Android
+ (mostly same as common `Chrome`).
+* `FirefoxAndroid` or `and_ff` for Firefox for Android.
+* `ExplorerMobile` or `ie_mob` for Internet Explorer Mobile.
+
+
+## Usage
+
+```js
+var browserslist = require('browserslist');
+
+// Your CSS/JS build tool code
+var process = function (css, opts) {
+ var browsers = browserslist(opts.browsers, { path: opts.file });
+ // Your code to add features for selected browsers
+}
+```
+
+If a list is missing, Browserslist will look for a config file.
+You can provide a `path` option (that can be a file) to find the config file
+relatively to it.
+
+Queries can be a string `"> 5%, last 1 version"`
+or and array `['> 5%', 'last 1 version']`.
+
+## Config File
+
+Browserslist’s config should be named `browserslist` and have browsers queries
+split by a new line. You can write a comment after `#`:
+
+```yaml
+# Browsers that we support
+
+> 1%
+Last 2 versions
+IE 8 # sorry
+```
diff --git a/node_modules/autoprefixer-core/node_modules/browserslist/index.js b/node_modules/autoprefixer-core/node_modules/browserslist/index.js
new file mode 100644
index 0000000..17f82e8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/browserslist/index.js
@@ -0,0 +1,327 @@
+var caniuse = require('caniuse-db/data').agents;
+var path = require('path');
+var fs = require('fs');
+
+var uniq = function (array) {
+ var filtered = [];
+ for ( var i = 0; i < array.length; i++ ) {
+ if ( filtered.indexOf(array[i]) == -1 ) filtered.push(array[i]);
+ }
+ return filtered;
+};
+
+normalizeVersion = function (data, version) {
+ if ( data.versions.indexOf(version) != -1 ) {
+ return version;
+ } else {
+ var alias = browserslist.versionAliases[data.name][version];
+ if ( alias ) return alias;
+ }
+};
+
+// Return array of browsers by selection queries:
+//
+// browserslist('IE >= 10, IE 8') //=> ['ie 11', 'ie 10', 'ie 8']
+var browserslist = function (selections, opts) {
+ if ( typeof(opts) == 'undefined' ) opts = { };
+
+ if ( typeof(selections) == 'undefined' || selections === null ) {
+ var config = browserslist.readConfig(opts.path);
+ if ( config === false ) {
+ selections = browserslist.defaults;
+ } else {
+ selections = config;
+ }
+ }
+
+ if ( typeof(selections) == 'string' ) {
+ selections = selections.split(/,\s*/);
+ }
+
+ var result = [];
+
+ var query, match, array, used;
+ selections.forEach(function (selection) {
+ if ( selection.trim() === '' ) return;
+ used = false;
+
+ for ( var i in browserslist.queries ) {
+ query = browserslist.queries[i];
+ match = selection.match(query.regexp);
+ if ( match ) {
+ array = query.select.apply(browserslist, match.slice(1));
+ result = result.concat(array);
+ used = true;
+ break;
+ }
+ }
+
+ if ( !used ) {
+ throw 'Unknown browser query `' + selection + '`';
+ }
+ });
+
+ return uniq(result).sort(function (name1, name2) {
+ name1 = name1.split(' ');
+ name2 = name2.split(' ');
+ if ( name1[0] == name2[0] ) {
+ return parseFloat(name2[1]) - parseFloat(name1[1]);
+ } else {
+ return name1[0].localeCompare(name2[0]);
+ }
+ });
+};
+
+// Will be filled by Can I Use data below
+browserslist.data = { };
+browserslist.usage = {
+ global: { }
+};
+
+// Default browsers query
+browserslist.defaults = [
+ '> 1%',
+ 'last 2 versions',
+ 'Firefox ESR',
+ 'Opera 12.1'
+];
+
+// What browsers will be used in `last n version` query
+browserslist.major = ['safari', 'opera', 'ios_saf', 'ie_mob', 'ie',
+ 'firefox', 'chrome'];
+
+// Browser names aliases
+browserslist.aliases = {
+ fx: 'firefox',
+ ff: 'firefox',
+ ios: 'ios_saf',
+ explorer: 'ie',
+ blackberry: 'bb',
+ explorermobile: 'ie_mob',
+ operamini: 'op_mini',
+ operamobile: 'op_mob',
+ chromeandroid: 'and_chr',
+ firefoxandroid: 'and_ff'
+};
+
+// Aliases ot work with joined versions like `ios_saf 7.0-7.1`
+browserslist.versionAliases = { };
+
+// Get browser data by alias or case insensitive name
+browserslist.byName = function (name) {
+ name = name.toLowerCase();
+ name = browserslist.aliases[name] || name;
+
+ var data = browserslist.data[name];
+ if ( !data ) throw 'Unknown browser ' + name;
+ return data;
+};
+
+// Find config, read file and parse it
+browserslist.readConfig = function (from) {
+ if ( from === false ) return false;
+ if ( !fs.readFileSync ) return false;
+ if ( typeof(from) == 'undefined' ) from = '.';
+
+ var dirs = path.resolve(from).split(path.sep);
+ var config, stat;
+ while ( dirs.length ) {
+ config = dirs.concat(['browserslist']).join(path.sep);
+
+ if ( fs.existsSync(config) && fs.lstatSync(config).isFile() ) {
+ return browserslist.parseConfig( fs.readFileSync(config) );
+ }
+
+ dirs.pop();
+ }
+
+ return false;
+};
+
+// Return array of queries from config content
+browserslist.parseConfig = function (string) {
+ return string.toString()
+ .replace(/#[^\n]*/g, '')
+ .split(/\n/)
+ .map(function (i) {
+ return i.trim();
+ })
+ .filter(function (i) {
+ return i !== '';
+ });
+};
+
+browserslist.queries = {
+
+ lastVersions: {
+ regexp: /^last (\d+) versions?$/i,
+ select: function (versions) {
+ var selected = [];
+ browserslist.major.forEach(function (name) {
+ var data = browserslist.byName(name);
+ var array = data.released.slice(-versions);
+
+ array = array.map(function (v) {
+ return data.name + ' ' + v;
+ });
+ selected = selected.concat(array);
+ });
+ return selected;
+ }
+ },
+
+ lastByBrowser: {
+ regexp: /^last (\d+) (\w+) versions?$/i,
+ select: function (versions, name) {
+ var data = browserslist.byName(name);
+ return data.released.slice(-versions).map(function (v) {
+ return data.name + ' ' + v;
+ });
+ }
+ },
+
+ globalStatistics: {
+ regexp: /^> (\d+\.?\d*)%$/,
+ select: function (popularity) {
+ popularity = parseFloat(popularity);
+ var result = [];
+
+ for ( var version in browserslist.usage.global ) {
+ if ( browserslist.usage.global[version] > popularity ) {
+ result.push(version);
+ }
+ }
+
+ return result;
+ }
+ },
+
+ countryStatistics: {
+ regexp: /^> (\d+\.?\d*)% in (\w\w)$/,
+ select: function (popularity, country) {
+ popularity = parseFloat(popularity);
+ country = country.toUpperCase();
+ var result = [];
+
+ var usage = browserslist.usage[country];
+ if ( !usage ) {
+ usage = { };
+ var data = require('caniuse-db/region-usage-json/' + country);
+ for ( var i in data.data ) {
+ fillUsage(usage, i, data.data[i]);
+ }
+ browserslist.usage[country] = usage;
+ }
+
+ for ( var version in usage ) {
+ if ( usage[version] > popularity ) {
+ result.push(version);
+ }
+ }
+
+ return result;
+ }
+ },
+
+ versions: {
+ regexp: /^(\w+) (>=?|<=?)\s*([\d\.]+)/,
+ select: function (name, sign, version) {
+ var data = browserslist.byName(name);
+ version = parseFloat(version);
+
+ var filter;
+ if ( sign == '>' ) {
+ filter = function (v) {
+ return parseFloat(v) > version;
+ };
+ } else if ( sign == '>=' ) {
+ filter = function (v) {
+ return parseFloat(v) >= version;
+ };
+ } else if ( sign == '<' ) {
+ filter = function (v) {
+ return parseFloat(v) < version;
+ };
+ } else if ( sign == '<=' ) {
+ filter = function (v) {
+ return parseFloat(v) <= version;
+ };
+ }
+
+ return data.released.filter(filter).map(function (v) {
+ return data.name + ' ' + v;
+ });
+ }
+ },
+
+ esr: {
+ regexp: /^(firefox|ff|fx) esr$/i,
+ select: function (versions) {
+ return ['firefox 31'];
+ }
+ },
+
+ direct: {
+ regexp: /^(\w+) ([\d\.]+)$/,
+ select: function (name, version) {
+ var data = browserslist.byName(name);
+ var alias = normalizeVersion(data, version);
+ if ( alias ) {
+ version = alias;
+ } else {
+ if ( version.indexOf('.') == -1 ) {
+ alias = version + '.0';
+ } else if ( /\.0$/.test(version) ) {
+ alias = version.replace(/\.0$/, '');
+ }
+ alias = normalizeVersion(data, alias);
+ if ( alias ) {
+ version = alias;
+ } else {
+ throw 'Unknown version ' + version + ' of ' + name;
+ }
+ }
+
+ return [data.name + ' ' + version];
+ }
+ }
+
+};
+
+// Get and convert Can I Use data
+
+var normalize = function (versions) {
+ return versions.filter(function (version) {
+ return typeof(version) == 'string';
+ });
+};
+
+var fillUsage = function (result, name, data) {
+ for ( var i in data ) {
+ result[name + ' ' + i] = data[i];
+ }
+};
+
+for ( var name in caniuse ) {
+ browserslist.data[name] = {
+ name: name,
+ versions: normalize(caniuse[name].versions),
+ released: normalize(caniuse[name].versions.slice(0, -3))
+ };
+ fillUsage(browserslist.usage.global, name, caniuse[name].usage_global);
+
+ browserslist.versionAliases[name] = { };
+ for ( var i = 0; i < caniuse[name].versions.length; i++ ) {
+ if ( !caniuse[name].versions[i] ) continue;
+ var full = caniuse[name].versions[i];
+
+ if ( full.indexOf('-') != -1 ) {
+ var interval = full.split('-');
+ for ( var j = 0; j < interval.length; j++ ) {
+ browserslist.versionAliases[name][ interval[j] ] = full;
+ }
+ }
+ }
+}
+
+module.exports = browserslist;
diff --git a/node_modules/autoprefixer-core/node_modules/browserslist/package.json b/node_modules/autoprefixer-core/node_modules/browserslist/package.json
new file mode 100644
index 0000000..f06e852
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/browserslist/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "browserslist",
+ "version": "0.2.0",
+ "description": "Get browsers versions that matches given criterias like in Autoprefixer",
+ "keywords": [
+ "caniuse",
+ "browsers"
+ ],
+ "author": {
+ "name": "Andrey Sitnik",
+ "email": "andrey@sitnik.ru"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/ai/browserslist.git"
+ },
+ "dependencies": {
+ "caniuse-db": "^1.0.30000054"
+ },
+ "devDependencies": {
+ "jshint-stylish": "1.0.0",
+ "gulp-jshint": "1.9.0",
+ "gulp-mocha": "2.0.0",
+ "mocha": "2.1.0",
+ "chai": "1.10.0",
+ "gulp": "3.8.10"
+ },
+ "scripts": {
+ "test": "gulp"
+ },
+ "gitHead": "c6b2e8770f7dace8e2ba0642bcd85aa5c923579e",
+ "bugs": {
+ "url": "https://github.com/ai/browserslist/issues"
+ },
+ "homepage": "https://github.com/ai/browserslist",
+ "_id": "browserslist@0.2.0",
+ "_shasum": "e5b7cf311cccb70772cd22d4f61c7bb80523ecd2",
+ "_from": "browserslist@~0.2.0",
+ "_npmVersion": "2.1.18",
+ "_nodeVersion": "0.10.33",
+ "_npmUser": {
+ "name": "ai",
+ "email": "andrey@sitnik.ru"
+ },
+ "maintainers": [
+ {
+ "name": "ai",
+ "email": "andrey@sitnik.ru"
+ }
+ ],
+ "dist": {
+ "shasum": "e5b7cf311cccb70772cd22d4f61c7bb80523ecd2",
+ "tarball": "http://registry.npmjs.org/browserslist/-/browserslist-0.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/browserslist/-/browserslist-0.2.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/.npmignore b/node_modules/autoprefixer-core/node_modules/caniuse-db/.npmignore
new file mode 100644
index 0000000..c23eb6f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/.npmignore
@@ -0,0 +1,8 @@
+.gitignore
+.gitattributes
+
+.travis.yml
+validator/
+
+Contributing.md
+sample-data.json
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/CONTRIBUTING.md b/node_modules/autoprefixer-core/node_modules/caniuse-db/CONTRIBUTING.md
new file mode 100644
index 0000000..c638f4e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/CONTRIBUTING.md
@@ -0,0 +1,87 @@
+# Contributing to the caniuse data
+
+## Filing issues
+
+Issues can be filed on existing **caniuse support data** or on **site functionality**. If you'd like to propose a new web technology feature to be added, please submit/vote for the issue on [Google Moderator](http://www.google.com/moderator/#15/e=ae425&t=ae425.40) rather than submitting an issue. This way features can be added based on the popularity of the feature.
+
+## Caniuse data
+
+The `features-json` directory includes JSON files for every feature found on [the caniuse.com website](http://caniuse.com/).
+Maintaining these files on GitHub allows anyone to update or contribute to the support data on the site.
+
+**Note:** when submitting a patch, don’t modify the minified `data.json` file in the root — that is done automatically. Only modify the contents of the `features-json` directory.
+
+### How it works
+
+The data on the site is stored in a database.
+This data is periodically exported to the JSON files on GitHub.
+Once a change or new file here has been approved, it is integrated back into the database
+and the subsequent export files should be the same as the imported ones.
+Not too confusing, I hope. :)
+
+### Supported changes
+
+Currently the following feature information can be modified:
+* **title** — Feature name (used for the title of the table)
+* **description** — Brief description of feature
+* **spec** — Spec URL
+* **status** — Spec status, one of the following:
+ * `ls` - WHATWG Living Standard
+ * `rec` - W3C Recommendation
+ * `pr` - W3C Proposed Recommendation
+ * `cr` - W3C Candidate Recommendation
+ * `wd` - W3C Working Draft
+ * `other` - Non-W3C, but reputable
+ * `unoff` - Unofficial or W3C "Note"
+* **links** — Array of "link" objects consisting of URL and short description of link
+* **bugs** — Array of "bug" objects consisting of a bug description
+* **categories** — Array of categories, any of the following:
+ * `HTML5`
+ * `CSS`
+ * `CSS2`
+ * `CSS3`
+ * `SVG`
+ * `PNG`
+ * `JS API`
+ * `Canvas`
+ * `DOM`
+ * `Other`
+* **stats** — The collection of support data for a given set of browsers/versions. Only the support value strings can be modified. Values are space-separated characters with these meanings, and must answer the question "*Can I use* the feature by default?":
+ * `y` - (**Y**)es, supported by default
+ * `a` - (**A**)lmost supported (aka Partial support)
+ * `n` - (**N**)o support, or disabled by default
+ * `p` - No support, but has (**P**)olyfill
+ * `u` - Support (**u**)nknown
+ * `x` - Requires prefi(**x**) to work
+ * `d` - (**D**)isabled by default (need to enable flag or something)
+ * `#n` - Where n is a number, starting with 1, corresponds to the **notes_by_num** note. For example: `"42":"y #1"` means version 42 is supported by default and see note 1.
+* **notes** — Notes on feature support, often to explain what partial support refers to
+* **notes_by_num** - Map of numbers corresponding to notes. Used in conjection with the #n notation under **stats**. Each key should be a number (no hash), the value is the related note. For example: `"1": "Foo"`
+* **ucprefix** — Prefix should start with an uppercase letter
+* **parent** — ID of parent feature
+* **keywords** — Comma separated words that will match the feature in a search
+* **ie_id** — Comma separated IDs used by [status.modern.ie](http://status.modern.ie) - Each ID is the string in the feature's URL
+* **chrome_id** — Comma separated IDs used by [chromestatus.com](http://chromestatus.com) - Each ID is the number in the feature's URL
+* **shown** — Whether or not feature is ready to be shown on the site. This can be left as false if the support data or information for other fields is still being collected
+
+### Adding a feature
+
+To add a feature, simply add another JSON file, following the [example](/sample-data.json), to the `features-json` directory with the base file name as the feature ID (only alphanumeric characters and hyphens please). If you want to submit a feature but don't have all information available for it yet, make sure you set the "shown" flag to false.
+
+### Unsupported changes
+
+Currently it is not possible to:
+* Add a new browser or browser version (this will be made possible later)
+* Add a test for any given feature (should also come later)
+* Add any object properties not already defined above
+* Modify the **usage\_perc\_y** or **usage\_perc\_a** values (these values are generated)
+
+### Testing
+Make sure you have NodeJS installed on your system.
+
+Run
+
+`node validator/validate-jsons.js`
+
+If something is wrong, it will throw an error.
+Everything is ok otherwise.
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/README.md b/node_modules/autoprefixer-core/node_modules/caniuse-db/README.md
new file mode 100644
index 0000000..009bef4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/README.md
@@ -0,0 +1,13 @@
+This repo contains raw data from the caniuse.com support tables. It serves two purposes:
+
+1. The ability for anyone interested to update or add to the support data on the site. If you are interested in this, please read the [CONTRIBUTING file](CONTRIBUTING.md).
+
+2. Access to the site's data for other projects. For this use the [data.json](data.json) file which includes all support data.
+
+The data in this repo is available for use under a CC BY 3.0 license (http://creativecommons.org/licenses/by/3.0/). For attribution just mention somewhere that the source is caniuse.com. While usage of the data for alternative tools, visualizations, etc. is encouraged, it is not permitted to use it directly to create another browser support website. If you have any questions about using the data for your project please contact me here: http://a.deveria.com/contact
+
+Thanks,
+
+Alexis Deveria
+ http://caniuse.com
+ http://a.deveria.com
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/data.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/data.json
new file mode 100644
index 0000000..c361324
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/data.json
@@ -0,0 +1 @@
+{"eras":{"e-37":"37 versions back","e-36":"36 versions back","e-35":"35 versions back","e-34":"34 versions back","e-33":"33 versions back","e-32":"32 versions back","e-31":"31 versions back","e-30":"30 versions back","e-29":"29 versions back","e-28":"28 versions back","e-27":"27 versions back","e-26":"26 versions back","e-25":"25 versions back","e-24":"24 versions back","e-23":"23 versions back","e-22":"22 versions back","e-21":"21 versions back","e-20":"20 versions back","e-19":"19 versions back","e-18":"18 versions back","e-17":"17 versions back","e-16":"16 versions back","e-15":"15 versions back","e-14":"14 versions back","e-13":"13 versions back","e-12":"12 versions back","e-11":"11 versions back","e-10":"10 versions back","e-9":"9 versions back","e-8":"8 versions back","e-7":"7 versions back","e-6":"6 versions back","e-5":"5 versions back","e-4":"4 versions back","e-3":"3 versions back","e-2":"2 versions back","e-1":"Previous version","e0":"Current","e1":"Near future","e2":"Farther future","e3":"3 versions ahead"},"agents":{"ie":{"browser":"IE","abbr":"IE","prefix":"ms","type":"desktop","usage_global":{"5.5":0.009298,"6":0.104359,"7":0.125231,"8":2.90119,"9":1.82281,"10":1.44016,"11":8.02175,"TP":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.5","6","7","8","9","10","11","TP",null,null]},"firefox":{"browser":"Firefox","abbr":"FF","prefix":"moz","type":"desktop","usage_global":{"2":0.013404,"3":0.040212,"3.5":0.013404,"3.6":0.093828,"4":0.020106,"5":0.013404,"6":0.020106,"7":0.013404,"8":0.046914,"9":0.013404,"10":0.026808,"11":0.03351,"12":0.053616,"13":0.020106,"14":0.026808,"15":0.03351,"16":0.046914,"17":0.03351,"18":0.03351,"19":0.026808,"20":0.03351,"21":0.053616,"22":0.026808,"23":0.040212,"24":0.060318,"25":0.060318,"26":0.046914,"27":0.127338,"28":0.046914,"29":0.073722,"30":0.10053,"31":0.455736,"32":0.281484,"33":0.174252,"34":0.321696,"35":8.93377,"36":0.717114,"37":0.020106,"38":0,"39":0},"versions":[null,"2","3","3.5","3.6","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39"]},"chrome":{"browser":"Chrome","abbr":"Chr.","prefix":"webkit","type":"desktop","usage_global":{"4":0.013404,"5":0.013404,"6":0.013404,"7":0.006702,"8":0.013404,"9":0.006702,"10":0.026808,"11":0.080424,"12":0.03351,"13":0.020106,"14":0.020106,"15":0.020106,"16":0.013404,"17":0.013404,"18":0.03351,"19":0.013404,"20":0.013404,"21":0.073722,"22":0.080424,"23":0.020106,"24":0.053616,"25":0.026808,"26":0.053616,"27":0.053616,"28":0.046914,"29":0.080424,"30":0.127338,"31":0.750624,"32":0.080424,"33":0.288186,"34":0.227868,"35":0.388716,"36":0.6702,"37":0.817644,"38":0.683604,"39":1.97039,"40":27.3777,"41":0.187656,"42":0.174252,"43":0,"44":0},"versions":["4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44"]},"safari":{"browser":"Safari","abbr":"Saf.","prefix":"webkit","type":"desktop","usage_global":{"3.1":0,"3.2":0.008692,"4":0.060318,"5":0.120636,"5.1":0.36861,"6":0.073722,"6.1":0.261378,"7":0.361908,"7.1":0.589776,"8":1.327},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.1","3.2","4","5","5.1","6","6.1","7","7.1","8",null,null,null]},"opera":{"browser":"Opera","abbr":"Op.","prefix":"webkit","type":"desktop","usage_global":{"9":0.0082,"9.5-9.6":0.00685,"10.0-10.1":0.020106,"10.5":0.008392,"10.6":0.007296,"11":0.014996,"11.1":0.008219,"11.5":0.006702,"11.6":0.013404,"12":0.013404,"12.1":0.227868,"15":0.00685,"16":0.00685,"17":0.00685,"18":0.006702,"19":0.006597,"20":0.013404,"21":0.006597,"22":0.006597,"23":0.013434,"24":0.006702,"25":0.013404,"26":0.03351,"27":0.697008,"28":0.013404,"29":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9","9.5-9.6","10.0-10.1","10.5","10.6","11","11.1","11.5","11.6","12","12.1","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29",null],"prefix_exceptions":{"9":"o","9.5-9.6":"o","10.0-10.1":"o","10.5":"o","10.6":"o","11":"o","11.1":"o","11.5":"o","11.6":"o","12":"o","12.1":"o"}},"ios_saf":{"browser":"iOS Safari","abbr":"iOS","prefix":"webkit","type":"mobile","usage_global":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0412818,"6.0-6.1":0.126742,"7.0-7.1":1.6042,"8":0.344739,"8.1":5.09577},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.2","4.0-4.1","4.2-4.3","5.0-5.1","6.0-6.1","7.0-7.1","8","8.1",null,null,null]},"op_mini":{"browser":"Opera Mini","abbr":"O.Mini","prefix":"o","type":"mobile","usage_global":{"5.0-8.0":2.82765},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.0-8.0",null,null,null]},"android":{"browser":"Android Browser","abbr":"And.","prefix":"webkit","type":"mobile","usage_global":{"2.1":0,"2.2":0,"2.3":0.124295,"3":0,"4":0.251206,"4.1":0.809224,"4.2-4.3":1.36986,"4.4":2.55916,"4.4.3-4.4.4":1.17884,"37":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"2.1","2.2","2.3","3","4","4.1","4.2-4.3","4.4","4.4.3-4.4.4","37",null,null,null]},"op_mob":{"browser":"Opera Mobile","abbr":"O.Mob","prefix":"o","type":"mobile","usage_global":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0040598,"12.1":0.0243588,"24":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11","11.1","11.5","12","12.1","24",null,null,null],"prefix_exceptions":{"24":"webkit"}},"bb":{"browser":"Blackberry Browser","abbr":"BB","prefix":"webkit","type":"mobile","usage_global":{"7":0.0816255,"10":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"7","10",null,null,null]},"and_chr":{"browser":"Chrome for Android","abbr":"Chr/And.","prefix":"webkit","type":"mobile","usage_global":{"41":10.5137},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"41",null,null,null]},"and_ff":{"browser":"Firefox for Android","abbr":"FF/And.","prefix":"moz","type":"mobile","usage_global":{"36":0.13192},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"36",null,null,null]},"ie_mob":{"browser":"IE Mobile","abbr":"IE.Mob","prefix":"ms","type":"mobile","usage_global":{"10":0.224915,"11":0.477559},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11",null,null,null]},"and_uc":{"browser":"UC Browser for Android","abbr":"UC","prefix":"webkit","type":"mobile","usage_global":{"9.9":3.84217},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9.9",null,null,null],"prefix_exceptions":{"9.9":"webkit"}}},"statuses":{"rec":"W3C Recommendation","pr":"W3C Proposed Recommendation","cr":"W3C Candidate Recommendation","wd":"W3C Working Draft","ls":"WHATWG Living Standard","other":"Other","unoff":"Unofficial / Note"},"cats":{"CSS":["CSS3","CSS","CSS2"],"HTML5":["Canvas","HTML5"],"JS API":["JS API"],"Other":["PNG","Other","DOM"],"SVG":["SVG"]},"updated":1427431772,"data":{"png-alpha":{"title":"PNG alpha transparency","description":"Semi-transparent areas in PNG files","spec":"http://www.w3.org/TR/PNG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Portable_Network_Graphics","title":"Wikipedia"},{"url":"http://dillerdesign.com/experiment/DD_belatedPNG/","title":"Workaround for IE6"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs.","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"apng":{"title":"Animated PNG (APNG)","description":"Like animated GIFs, but allowing 24-bit colors and alpha transparency","spec":"https://wiki.mozilla.org/APNG_Specification","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/APNG","title":"Wikipedia"},{"url":"https://github.com/davidmz/apng-canvas","title":"Polyfill using canvas"},{"url":"https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp","title":"Chrome extension providing support"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Where support for APNG is missing, only the first frame is displayed","notes_by_num":{},"usage_perc_y":19.44,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"video":{"title":"Video element","description":"Method of playing videos on webpages (without requiring a plug-in).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element","status":"ls","links":[{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://webmproject.org","title":"WebM format information"},{"url":"http://camendesign.co.uk/code/video_for_everybody","title":"Video for Everybody"},{"url":"http://diveintohtml5.info/video.html","title":"Video on the Web - includes info on Android support"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/video","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Different browsers have support for different video formats, see sub-features for details. \r\n\r\nThe Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"audio":{"title":"Audio element","description":"Method of playing sound on webpages (without requiring a plug-in).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-audio-element","status":"ls","links":[{"url":"http://html5doctor.com/native-audio-in-the-browser/","title":"HTML5 Doctor article"},{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://www.jplayer.org/latest/demos/","title":"Demos of audio player that uses the audio element"},{"url":"http://24ways.org/2010/the-state-of-html5-audio","title":"Detailed article on support"},{"url":"http://textopia.org/androidsoundformats.html","title":"File format test page"},{"url":"http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio","title":"The State of HTML5 Audio"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/audio.js#audio","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/audio","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"contenteditable":{"title":"contenteditable attribute (basic support)","description":"Method of making any HTML element editable.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#contenteditable","status":"ls","links":[{"url":"http://html5demos.com/contenteditable","title":"Demo page"},{"url":"https://blog.whatwg.org/the-road-to-html-5-contenteditable","title":"WHATWG blog post"},{"url":"http://accessgarage.wordpress.com/2009/05/08/how-to-hack-your-app-to-make-contenteditable-work/","title":"Blog post on usage problems"},{"url":"http://docs.webplatform.org/wiki/html/attributes/contentEditable","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"This support only refers to very basic editing capability, implementations vary significantly on how certain elements can be edited.","notes_by_num":{},"usage_perc_y":94.18,"usage_perc_a":0.04,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"dragndrop":{"title":"Drag and Drop","description":"Method of easily dragging and dropping elements on a page, requiring minimal JavaScript.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#dnd","status":"ls","links":[{"url":"http://html5doctor.com/native-drag-and-drop/","title":"HTML5 Doctor article"},{"url":"http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html","title":"Shopping cart demo"},{"url":"http://html5demos.com/drag","title":"Demo with link blocks"},{"url":"http://docs.webplatform.org/wiki/dom/DragEvent","title":"WebPlatform Docs"},{"url":"https://github.com/MihaiValentin/setDragImage-IE","title":"Polyfill for setDragImage in IE"},{"url":"http://blog.teamtreehouse.com/implementing-native-drag-and-drop","title":"Implementing Native Drag and Drop"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #2","11":"a #2","TP":"a #2"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM elements attached to the DOM and within the viewport of the browser for `.setDragImage`.","notes_by_num":{"1":"Partial support refers to no support for the `dataTransfer.files` or `.types` objects and limited supported formats for `dataTransfer.setData`/`getData`.","2":"Partial support refers to not supporting `.setDragImage`"},"usage_perc_y":51.71,"usage_perc_a":14.42,"ucprefix":false,"parent":"","keywords":"draganddrop","ie_id":"","chrome_id":""},"internationalization":{"title":"Internationalization API","description":"Locale-sensitive collation (string comparison), number formatting, and date and time formatting.","spec":"http://www.ecma-international.org/ecma-402/1.0/","status":"other","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl","title":"MDN reference"},{"url":"http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/","title":"The ECMAScript Internationalization API"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"u","4.4.3-4.4.4":"u","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":65.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"Intl,Collator,NumberFormat,DateTimeFormat","ie_id":"ecmascriptinternationalizationapi","chrome_id":""},"queryselector":{"title":"querySelector/querySelectorAll","description":"Method of accessing DOM elements using CSS selectors","spec":"http://www.w3.org/TR/selectors-api/","status":"rec","links":[{"url":"https://developer.mozilla.org/en/DOM/element.querySelector","title":"MDN article on querySelector"},{"url":"https://developer.mozilla.org/En/DOM/Element.querySelectorAll","title":"MDN article on querySelectorAll"},{"url":"http://cjihrig.com/blog/javascripts-selectors-api/","title":"Blog post"},{"url":"http://docs.webplatform.org/wiki/css/selectors_api/querySelector","title":"WebPlatform Docs"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"a #1","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in IE8 is due to being limited to [CSS 2.1 selectors](/#feat=css-sel2). Additionally, it will have trouble with selectors including unrecognized tags (for example HTML5 ones)."},"usage_perc_y":93.98,"usage_perc_a":2.9,"ucprefix":false,"parent":"","keywords":"query,selectors,selectors api","ie_id":"","chrome_id":""},"getelementsbyclassname":{"title":"getElementsByClassName","description":"Method of accessing DOM elements by class name","spec":"http://www.w3.org/TR/dom/#dom-document-getelementsbyclassname","status":"wd","links":[{"url":"http://www.quirksmode.org/dom/tests/basics.html#getElementsByClassName","title":"Test page"},{"url":"http://docs.webplatform.org/wiki/dom/HTMLElement/getElementsByClassName","title":"WebPlatform Docs"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"byclassname","ie_id":"","chrome_id":""},"forms":{"title":"HTML5 form features","description":"Expanded form options, including things like date pickers, sliders, validation, placeholders and multiple file uploads. Previously known as \"Web forms 2.0\".","spec":"https://html.spec.whatwg.org/multipage/forms.html#forms","status":"ls","links":[{"url":"https://miketaylr.com/code/input-type-attr.html","title":"HTML5 inputs and attribute support page"},{"url":"https://github.com/westonruter/webforms2","title":"Cross-browser JS implementation (based on original spec)"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"p","3.2":"p","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":7.03,"usage_perc_a":82.39,"ucprefix":false,"parent":"","keywords":"input,datepicker","ie_id":"","chrome_id":""},"html5semantic":{"title":"New semantic elements","description":"HTML5 offers some new elements, primarily for semantic purposes. The elements include: section, article, aside, header, footer, nav, figure, figcaption, time, mark, main.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#sections","status":"ls","links":[{"url":"https://blog.whatwg.org/supporting-new-elements-in-ie","title":"Workaround for IE"},{"url":"https://blog.whatwg.org/styling-ie-noscript","title":"Alternate workaround"},{"url":"http://oli.jp/2009/html5-structure3/","title":"Article on structural elements"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-html5-elements","title":"has.js test"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y #1","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"n","3":"a #1","3.5":"a #1","3.6":"a #1","4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"y #1","5.1":"y #1","6":"y #1","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a #1","9.5-9.6":"a #1","10.0-10.1":"a #1","10.5":"a #1","10.6":"a #1","11":"a #1","11.1":"y #1","11.5":"y #1","11.6":"y #1","12":"y #1","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a #1","4.0-4.1":"y #1","4.2-4.3":"y #1","5.0-5.1":"y #1","6.0-6.1":"y #1","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"a #1","2.2":"y #1","2.3":"y #1","3":"y #1","4":"y #1","4.1":"y #1","4.2-4.3":"y #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y #1","10":"y #1"},"op_mob":{"10":"a #1","11":"y #1","11.1":"y #1","11.5":"y #1","12":"y #1","12.1":"y #1","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y #1"}},"notes":"Partial support refers to missing the default styling. This is easily taken care of by using display:block for all new elements (except time and mark, these should be display:inline anyway). IE11 and older versions of other browsers do not support the element.","notes_by_num":{"1":"Does not include support for the element "},"usage_perc_y":90.9,"usage_perc_a":3.14,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"offline-apps":{"title":"Offline web applications","description":"Method of defining web page files to be cached using a cache manifest file, allowing them to work offline on subsequent visits to the page","spec":"https://html.spec.whatwg.org/multipage/browsers.html#offline","status":"ls","links":[{"url":"http://www.sitepoint.com/offline-web-application-tutorial/","title":"Sitepoint tutorial"},{"url":"http://diveintohtml5.info/offline.html","title":"Dive Into HTML5 article"},{"url":"http://hacks.mozilla.org/2010/01/offline-web-applications/","title":"Mozilla Hacks article/demo"},{"url":"http://docs.webplatform.org/wiki/apis/appcache/ApplicationCache","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":89.29,"usage_perc_a":0.04,"ucprefix":false,"parent":"","keywords":"appcache,app cache,application cache,online","ie_id":"applicationcache","chrome_id":"6192449487634432"},"webworkers":{"title":"Web Workers","description":"Method of running scripts in the background, isolated from the web page","spec":"https://html.spec.whatwg.org/multipage/workers.html","status":"ls","links":[{"url":"https://developer.mozilla.org/En/Using_web_workers","title":"MDN article"},{"url":"http://nerget.com/rayjs-mt/rayjs.html","title":"Web Worker demo"},{"url":"http://code.google.com/p/ie-web-worker/","title":"Polyfill for IE (single threaded)"},{"url":"http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/","title":"Tutorial"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":86.74,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"fontface":{"title":"@font-face Web fonts","description":"Method of displaying fonts downloaded from websites","spec":"http://www.w3.org/TR/css3-webfonts/","status":"cr","links":[{"url":"http://webfonts.info","title":"News and information site"},{"url":"http://en.wikipedia.org/wiki/Web_typography","title":"Wikipedia"},{"url":"http://www.css3files.com/font/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@font-face","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"a","2.3":"a","3":"a","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support before IE9 refers to only supporting EOT fonts. Safari for iOS 4.1 and below only supports SVG fonts.","notes_by_num":{},"usage_perc_y":90.95,"usage_perc_a":3.35,"ucprefix":false,"parent":"","keywords":"font face","ie_id":"","chrome_id":""},"eot":{"title":"EOT - Embedded OpenType fonts","description":"Type of font that can be derived from a regular font, allowing small files and legal use of high-quality fonts. Usage is restricted by the file being tied to the website","spec":"http://www.w3.org/Submission/EOT/","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/Embedded_OpenType","title":"Wikipedia"},{"url":"http://www.microsoft.com/typography/web/embedding/default.aspx","title":"Example pages"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Proposal by Microsoft, being considered for W3C standardization.","notes_by_num":{},"usage_perc_y":14.42,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"woff":{"title":"WOFF - Web Open Font Format","description":"Compressed TrueType/OpenType font that contains information about the font's source.","spec":"http://www.w3.org/TR/WOFF/","status":"rec","links":[{"url":"http://hacks.mozilla.org/2009/10/woff/","title":"Mozilla hacks blog post"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Reported to be supported in some modified versions of the Android 4.0 browser.","notes_by_num":{},"usage_perc_y":88.33,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"multibackgrounds":{"title":"CSS3 Multiple backgrounds","description":"Method of using multiple images as a background","spec":"http://www.w3.org/TR/css3-background/","status":"cr","links":[{"url":"http://www.css3.info/preview/multiple-backgrounds/","title":"Demo & information page"},{"url":"http://www.css3files.com/background/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/background-image","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"border-image":{"title":"CSS3 Border images","description":"Method of using images for borders","spec":"http://www.w3.org/TR/css3-background/#the-border-image","status":"cr","links":[{"url":"http://www.css3files.com/border/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/border-image","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"a x","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a x","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"a","10.6":"a","11":"a x","11.1":"a x","11.5":"a x","11.6":"a x","12":"a x","12.1":"a x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a x"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x","10":"y"},"op_mob":{"10":"n","11":"a x","11.1":"a x","11.5":"a x","12":"a x","12.1":"a x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Note that both the border-style and border-width must be specified for border-images to work according to spec, though older implementations may not have this requirement. Partial support refers to supporting the shorthand syntax, but not the individual properties (border-image-source, border-image-slice, etc). ","notes_by_num":{},"usage_perc_y":83.44,"usage_perc_a":7.04,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"background-img-opts":{"title":"CSS3 Background-image options","description":"New properties to affect background images, including background-clip, background-origin and background-size","spec":"http://www.w3.org/TR/css3-background/#backgrounds","status":"cr","links":[{"url":"http://www.standardista.com/css3/css3-background-properties","title":"Detailed compatibility tables and demos"},{"url":"http://www.css3files.com/background/","title":"Information page"},{"url":"https://github.com/louisremi/background-size-polyfill","title":"Polyfill for IE7-8"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #2 #3","3.2":"a #2 #3","4":"a #2 #3","5":"a #2 #3","5.1":"a #2 #3","6":"a #2 #3","6.1":"a #2 #3","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"a x","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a #3","6.0-6.1":"a","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"a x","2.2":"a x #3","2.3":"a x #3","3":"a #3","4":"a #3","4.1":"a #3","4.2-4.3":"a #3","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in Opera Mini refers to not supporting background sizing or background attachments. However Opera Mini 7.5 supports background sizing (including cover and contain values).","2":"Partial support in Safari 6 refers to not supporting background sizing offset from edges syntax.","3":"Does not support `background-size` values in the `background` shorthand"},"usage_perc_y":87.16,"usage_perc_a":6.81,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-table":{"title":"CSS Table display","description":"Method of displaying elements as tables, rows, and cells","spec":"http://www.w3.org/TR/CSS21/tables.html","status":"rec","links":[{"url":"http://www.onenaught.com/posts/201/use-css-displaytable-for-layout","title":"Blog post on usage"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"display:table, display: table,table-cell,table-row,table-layout","ie_id":"","chrome_id":""},"css-gencontent":{"title":"CSS Generated content for pseudo-elements","description":"Method of displaying text or images before or after the given element's contents using the ::before and ::after pseudo-elements. All browsers with support also support the `attr()` notation in the `content` property. ","spec":"http://www.w3.org/TR/CSS21/generate.html","status":"rec","links":[{"url":"http://www.westciv.com/style_master/academy/css_tutorial/advanced/generated_content.html","title":"Guide on usage"},{"url":"https://dev.opera.com/articles/view/css-generated-content-techniques/","title":"Dev.Opera article"},{"url":"http://docs.webplatform.org/wiki/css/generated_and_replaced_content","title":"WebPlatform Docs"}],"categories":["CSS2","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE8 only supports the single-colon CSS 2.1 syntax (i.e. :pseudo-class). It does not support the double-colon CSS3 syntax (i.e. ::pseudo-element)\r\n\r\nFor content to appear in pseudo-elements, the `content` property must be set (but may be an empty string).","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":2.9,"ucprefix":false,"parent":"","keywords":"before,after","ie_id":"","chrome_id":""},"css-fixed":{"title":"CSS position:fixed","description":"Method of keeping an element in a fixed location regardless of scroll position","spec":"http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning","status":"rec","links":[{"url":"http://www.css-101.org/fixed-positioning/05.php","title":"Workaround for IE6"},{"url":"http://bradfrostweb.com/blog/mobile/fixed-position/","title":"Article on mobile support"},{"url":"http://docs.webplatform.org/wiki/css/properties/position","title":"WebPlatform Docs"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Only works in Android 2.2+ by using the following meta tag: . \r\n\r\nPartial support in older iOS Safari refers to [buggy behavior](http://remysharp.com/2012/05/24/issues-with-position-fixed-scrolling-on-ios/).","notes_by_num":{},"usage_perc_y":92.35,"usage_perc_a":1.9,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"hashchange":{"title":"Hashchange event","description":"Event triggered in JavaScript when the URL's hash has changed (for example: page.html#foo to page.html#bar) ","spec":"https://html.spec.whatwg.org/multipage/browsers.html#the-hashchangeevent-interface","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/window.onhashchange","title":"MDN article"},{"url":"http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx","title":"MSDN article"},{"url":"http://www.quirksmode.org/dom/events/tests/hashchange.html","title":"Simple demo"},{"url":"http://github.com/3nr1c/jUri.js","title":"Polyfill"},{"url":"http://docs.webplatform.org/wiki/dom/Element/hashchange","title":"WebPlatform Docs"}],"categories":["HTML5","JS API"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.93,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"onhashchange,HashChangeEvent","ie_id":"","chrome_id":""},"css-sel2":{"title":"CSS 2.1 selectors","description":"Basic CSS selectors including: `*` (universal selector), `>` (child selector), `:first-child`, `:link`, `:visited`, `:active`, `:hover`, `:focus`, `:lang()`, `+` (adjacent sibling selector), `[attr]`, `[attr=\"val\"]`, `[attr~=\"val\"]`, `[attr|=\"bar\"]`, `.foo` (class selector), `#foo` (id selector)","spec":"http://www.w3.org/TR/CSS21/selector.html","status":"rec","links":[{"url":"http://www.quirksmode.org/css/contents.html","title":"Detailed support information"},{"url":"http://www.yourhtmlsource.com/stylesheets/advancedselectors.html","title":"Examples of advanced selectors"},{"url":"http://selectivizr.com","title":"Selectivizr: Polyfill for IE6-8"},{"url":"http://docs.webplatform.org/wiki/css/selectors","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-sel3":{"title":"CSS3 selectors","description":"Advanced element selection using selectors including: `[foo^=\"bar\"]`, `[foo$=\"bar\"]`, `[foo*=\"bar\"]`, `:root`, `:nth-child()`, `:nth-last-child()`, `nth-of-type`, `nth-last-of-type()`, `:last-child`, `:first-of-type`, `:last-of-type`, `:only-child`, `:only-of-type`, `:empty`, `:target`, `:enabled`, `:disabled`, `:checked`, `:not()`, `~` (general sibling)","spec":"http://www.w3.org/TR/css3-selectors/","status":"rec","links":[{"url":"http://www.quirksmode.org/css/selectors/","title":"Detailed support information"},{"url":"http://www.css3.info/selectors-test/","title":"Automated CSS3 selector test"},{"url":"http://selectivizr.com","title":"Selectivizr: Polyfill for IE6-8"},{"url":"http://docs.webplatform.org/wiki/css/selectors","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"p","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE7 and IE8 support only these CSS3 selectors: General siblings (`element1~element2`) and Attribute selectors `[attr^=val]`, `[attr$=val]`, and `[attr*=val]`","notes_by_num":{},"usage_perc_y":93.99,"usage_perc_a":3.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-textshadow":{"title":"CSS3 Text-shadow","description":"Method of applying one or more shadow or blur effects to text","spec":"http://www.w3.org/TR/css-text-decor-3/#text-shadow-property","status":"wd","links":[{"url":"http://hacks.mozilla.org/2009/06/text-shadow/","title":"Mozilla hacks article"},{"url":"http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_text-shadow.htm","title":"Live editor"},{"url":"http://www.css3files.com/shadow/#textshadow","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/text-shadow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y"}},"notes":"Opera Mini ignores the blur-radius set, so no blur effect is visible. Text-shadow behavior can be somewhat emulated in older IE versions using the non-standard \"dropshadow\" or \"glow\" filters. ","notes_by_num":{"1":"IE 10+ supports a fourth length value for the shadow's \"spread\". This is not (yet) part of the specification. "},"usage_perc_y":89.25,"usage_perc_a":2.92,"ucprefix":false,"parent":"","keywords":"text shadow","ie_id":"","chrome_id":""},"css-boxshadow":{"title":"CSS3 Box-shadow","description":"Method of displaying an inner or outer shadow effect to elements","spec":"http://www.w3.org/TR/css3-background/#box-shadow","status":"cr","links":[{"url":"https://developer.mozilla.org/En/CSS/-moz-box-shadow","title":"MDN article"},{"url":"http://westciv.com/tools/boxshadows/index.html","title":"Live editor"},{"url":"http://tests.themasta.com/blogstuff/boxshadowdemo.html","title":"Demo of various effects"},{"url":"http://www.css3files.com/shadow/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/box-shadow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y x","3.6":"y x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"y x","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y x","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Can be partially emulated in older IE versions using the non-standard \"shadow\" filter. Partial support in Safari, iOS Safari and Android Browser refers to missing \"inset\" and blur radius value support.","notes_by_num":{},"usage_perc_y":90.94,"usage_perc_a":0.19,"ucprefix":false,"parent":"","keywords":"box-shadows,boxshadows,box shadow,shaow","ie_id":"","chrome_id":""},"css3-colors":{"title":"CSS3 Colors","description":"Method of describing colors using Hue, Saturation and Lightness (hsl()) rather than just RGB, as well as allowing alpha-transparency with rgba() and hsla().","spec":"http://www.w3.org/TR/css3-color/","status":"rec","links":[{"url":"https://dev.opera.com/articles/view/color-in-opera-10-hsl-rgb-and-alpha-transparency/","title":"Dev.Opera article"},{"url":"http://www.css3files.com/color/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/color#RGBA_Notation","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.02,"usage_perc_a":0.02,"ucprefix":false,"parent":"","keywords":"rgb,hsl,rgba,hsla","ie_id":"","chrome_id":""},"css3-boxsizing":{"title":"CSS3 Box-sizing","description":"Method of specifying whether or not an element's borders and padding should be included in size units","spec":"http://www.w3.org/TR/css3-ui/#box-sizing","status":"wd","links":[{"url":"https://developer.mozilla.org/En/CSS/Box-sizing","title":"MDN article"},{"url":"http://www.456bereastreet.com/archive/201104/controlling_width_with_css3_box-sizing/","title":"Blog post"},{"url":"https://github.com/Schepp/box-sizing-polyfill","title":"Polyfill for IE"},{"url":"http://css-tricks.com/box-sizing/","title":"CSS Tricks"},{"url":"http://docs.webplatform.org/wiki/css/properties/box-sizing","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a x","10":"a"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to supporting only the `content-box` and `border-box` values, not `padding-box` (which was added to the spec later).","notes_by_num":{},"usage_perc_y":12.33,"usage_perc_a":84.61,"ucprefix":false,"parent":"","keywords":"border-box,content-box,padding-box","ie_id":"","chrome_id":""},"css-mediaqueries":{"title":"CSS3 Media Queries","description":"Method of applying styles based on media information. Includes things like page and device dimensions","spec":"http://www.w3.org/TR/css3-mediaqueries/","status":"rec","links":[{"url":"http://ie.microsoft.com/testdrive/HTML5/85CSS3_MediaQueries/","title":"IE demo page with information"},{"url":"http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries","title":"Media Queries tutorial"},{"url":"https://github.com/scottjehl/Respond","title":"Polyfill for IE"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@media","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Incomplete support by older webkit browsers refers to only acknowledging different media rules on page reload","notes_by_num":{},"usage_perc_y":93.98,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"@media","ie_id":"","chrome_id":""},"multicolumn":{"title":"CSS3 Multiple column layout","description":"Method of flowing information in multiple columns","spec":"http://www.w3.org/TR/css3-multicol/","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/css3-multi-column-layout/","title":"Dev.Opera article"},{"url":"http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/an-introduction-to-the-css3-multiple-column-layout-module/","title":"Introduction page"},{"url":"http://docs.webplatform.org/wiki/css/properties/column-width","title":"WebPlatform Docs"},{"url":"https://github.com/BetleyWhitehorne/CSS3MultiColumn","title":"Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"a x","3.5":"a x","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to not supporting the `break-before`, `break-after`, `break-inside` properties. Webkit browsers do have equivalent support for the non-standard `-webkit-column-break-*` properties while Firefox supports `page-break-*` to accomplish the same result.","notes_by_num":{},"usage_perc_y":13.29,"usage_perc_a":78.87,"ucprefix":false,"parent":"","keywords":"column-count","ie_id":"multicolumnfullsupport","chrome_id":"6526151266664448"},"border-radius":{"title":"CSS3 Border-radius (rounded corners)","description":"Method of making the border corners round","spec":"http://www.w3.org/TR/css3-background/#the-border-radius","status":"cr","links":[{"url":"http://border-radius.com","title":"Border-radius CSS Generator"},{"url":"http://muddledramblings.com/table-of-css3-border-radius-compliance","title":"Detailed compliance table"},{"url":"http://www.css3files.com/border/#borderradius","title":"Information page"},{"url":"http://css3pie.com/","title":"Polyfill which includes border-radius"},{"url":"http://docs.webplatform.org/wiki/css/properties/border-radius","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"y x","3.5":"y x","3.6":"y x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y","5.1":"y #1","6":"y #1","6.1":"y #1","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Safari 6.1 and earlier did not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128"},"usage_perc_y":91.17,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"roundedcorners, border radius,-moz-border-radius","ie_id":"","chrome_id":""},"transforms2d":{"title":"CSS3 Transforms","description":"Method of transforming an element including rotating, scaling, etc.","spec":"http://www.w3.org/TR/css3-2d-transforms/","status":"wd","links":[{"url":"http://www.westciv.com/tools/transforms/","title":"Live editor"},{"url":"https://developer.mozilla.org/en/CSS/-moz-transform","title":"MDN article"},{"url":"http://www.webresourcesdepot.com/cross-browser-css-transforms-csssandpaper/","title":"Workaround script for IE"},{"url":"http://www.css3files.com/transform/","title":"Information page"},{"url":"http://www.useragentman.com/IETransformsTranslator/","title":"Converter for IE"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/transforms/transform","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y x","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y x","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"The scale transform can be emulated in IE < 9 using Microsoft's \"zoom\" extension, others are (not easily) possible using the MS Matrix filter","notes_by_num":{},"usage_perc_y":91.13,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"transformation,translate,rotation,rotate,scale,css-transforms","ie_id":"transforms","chrome_id":"6437640580628480"},"use-strict":{"title":"ECMAScript 5 Strict Mode","description":"Method of placing code in a \"strict\" operating context.","spec":"http://ecma-international.org/ecma-262/5.1/#sec-14.1","status":"other","links":[{"url":"http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/","title":"Information page"},{"url":"http://javascriptweblog.wordpress.com/2011/05/03/javascript-strict-mode/","title":"Article with test suite"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari refers to strict mode still accepting a lot of JS that should be considered invalid.","notes_by_num":{},"usage_perc_y":88.27,"usage_perc_a":0.49,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"transforms3d":{"title":"CSS3 3D Transforms","description":"Method of transforming an element in the third dimension using the `transform` property. Includes support for the `perspective` property to set the perspective in z-space and the `backface-visibility` property to toggle display of the reverse side of a 3D-transformed element.","spec":"http://www.w3.org/TR/css3-3d-transforms/","status":"wd","links":[{"url":"http://css3.bradshawenterprises.com/flip/","title":"Multi-browser demo"},{"url":"http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/","title":"Mozilla hacks article"},{"url":"http://thewebrocks.com/demos/3D-css-tester/","title":"3D CSS Tester"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/transforms/transform","title":"WebPlatform Docs"},{"url":"http://desandro.github.io/3dtransforms/","title":"Intro to CSS 3D transforms"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in IE refers to not supporting [the transform-style: preserve-3d property](http://msdn.microsoft.com/en-us/library/ie/hh673529%28v=vs.85%29.aspx#the_ms_transform_style_property). This prevents nesting 3D transformed elements.","notes_by_num":{},"usage_perc_y":78.28,"usage_perc_a":10.16,"ucprefix":false,"parent":"","keywords":"css 3d,3dtransforms,translate3d,backface visibility,perspective","ie_id":"transforms,csstransformspreserve3d","chrome_id":"6437640580628480"},"sharedworkers":{"title":"Shared Web Workers","description":"Method of allowing multiple scripts to communicate with a single web worker.","spec":"https://html.spec.whatwg.org/multipage/workers.html#shared-workers-introduction","status":"ls","links":[{"url":"http://www.sitepoint.com/javascript-shared-web-workers-html5/","title":"Sitepoint article"},{"url":"http://greenido.wordpress.com/2011/11/03/web-workers-part-3-out-of-3-shared-wrokers/","title":"Blog post"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":51.61,"usage_perc_a":0,"ucprefix":false,"parent":"webworkers","keywords":"shared worker","ie_id":"sharedwebworkers","chrome_id":""},"css-hyphens":{"title":"CSS Hyphenation","description":"Method of controlling when words at the end of lines should be hyphenated using the \"hyphens\" property.","spec":"http://www.w3.org/TR/css3-text/#hyphenation","status":"wd","links":[{"url":"https://developer.mozilla.org/en/CSS/hyphens","title":"MDN article"},{"url":"http://blog.fontdeck.com/post/9037028497/hyphens","title":"Blog post"},{"url":"http://docs.webplatform.org/wiki/css/properties/hyphens","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","TP":"y x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x"}},"notes":"Chrome 29- and Android 4.0 Browser support \"-webkit-hyphens: none\", but not the \"auto\" property. Chrome 30+ doesn't support it either. It is [advisable to set the @lang attribute](http://blog.adrianroselli.com/2015/01/on-use-of-lang-attribute.html) on the HTML element to enable hyphenation support and improve accessibility.","notes_by_num":{},"usage_perc_y":31.79,"usage_perc_a":3.84,"ucprefix":false,"parent":"","keywords":"hyphen,shy","ie_id":"","chrome_id":""},"css-transitions":{"title":"CSS3 Transitions","description":"Simple method of animating certain properties of an element","spec":"http://www.w3.org/TR/css3-transitions/","status":"wd","links":[{"url":"http://www.webdesignerdepot.com/2010/01/css-transitions-101/","title":"Article on usage"},{"url":"http://www.css3files.com/transition/","title":"Information page"},{"url":"http://www.the-art-of-web.com/css/timing-function/","title":"Examples on timing functions"},{"url":"http://www.opera.com/docs/specs/presto2.12/css/transitions/","title":"Animation of property types support in Opera"},{"url":"http://docs.webplatform.org/wiki/css/properties/transition","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y x","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y x","10":"y"},"op_mob":{"10":"y x","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":89.2,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css transition","ie_id":"","chrome_id":""},"font-feature":{"title":"Font feature settings","description":"Method of applying advanced typographic and language-specific font features to supported OpenType fonts.","spec":"http://w3.org/TR/css3-fonts/#font-rend-props","status":"wd","links":[{"url":"http://ie.microsoft.com/testdrive/Graphics/opentype/","title":"Demo pages (IE/Firefox only)"},{"url":"http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/","title":"Mozilla hacks article"},{"url":"http://html5accessibility.com/","title":"Detailed tables on accessability support"},{"url":"http://docs.webplatform.org/wiki/css/properties/font-feature-settings","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in older Firefox versions refers to using an older syntax. Partial support in older Chrome versions refers to lacking support in Mac OS X. ","notes_by_num":{},"usage_perc_y":74.51,"usage_perc_a":1.17,"ucprefix":false,"parent":"","keywords":"font-feature,font-feature-settings,kern,kerning,font-variant-alternates,ligatures,font-variant-ligatures","ie_id":"","chrome_id":""},"css-animation":{"title":"CSS3 Animation","description":"Complex method of animating certain properties of an element","spec":"http://www.w3.org/TR/css3-animations/","status":"wd","links":[{"url":"http://robertnyman.com/2010/05/06/css3-animations/","title":"Blog post on usage"},{"url":"http://www.css3files.com/animation/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/animations","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y x","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in Android browser refers to buggy behavior in different scenarios.","notes_by_num":{},"usage_perc_y":88.99,"usage_perc_a":0.12,"ucprefix":false,"parent":"","keywords":"animations,css-animations,keyframe,keyframes","ie_id":"","chrome_id":""},"css-gradients":{"title":"CSS Gradients","description":"Method of defining a linear or radial color gradient as a CSS image.","spec":"http://www.w3.org/TR/css3-images/","status":"cr","links":[{"url":"http://www.colorzilla.com/gradient-editor/","title":"Cross-browser editor"},{"url":"http://www.css3files.com/gradient/","title":"Information page"},{"url":"http://css3pie.com/","title":"Tool to emulate support in IE"},{"url":"http://docs.webplatform.org/wiki/css/functions/linear-gradient","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"a x","5":"a x","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"a x","11.5":"a x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Syntax used by browsers with prefixed support may be incompatible with that for proper support. \r\n\r\nPartial support in Opera 11.10 and 11.50 also refers to only having support for linear gradients.\r\n\r\nSupport can be somewhat emulated in older IE versions using the non-standard \"gradient\" filter. \r\n\r\nFirefox 10+, Opera 11.6+, Chrome 26+ and IE10+ also support the new \"to (side)\" syntax.","notes_by_num":{},"usage_perc_y":88.79,"usage_perc_a":0.47,"ucprefix":false,"parent":"","keywords":"linear,linear-gradient,gradiant","ie_id":"gradients","chrome_id":"5785905063264256"},"css-canvas":{"title":"CSS Canvas Drawings","description":"Method of using HTML5 Canvas as a background image. Not currently part of any specification.","spec":"http://webkit.org/blog/176/css-canvas-drawing/","status":"unoff","links":[{"url":"http://webkit.org/blog/176/css-canvas-drawing/","title":"Webkit blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"A similar effect can be achieved in Firefox 4+ using the -moz-element() background property","notes_by_num":{},"usage_perc_y":66.53,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-reflections":{"title":"CSS Reflections","description":"Method of displaying a reflection of an element","spec":"http://webkit.org/blog/182/css-reflections/","status":"unoff","links":[{"url":"http://webkit.org/blog/182/css-reflections/","title":"Webkit blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Similar effect can be achieved in Firefox 4+ using the -moz-element() background property","notes_by_num":{},"usage_perc_y":62.69,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"box-reflect","ie_id":"","chrome_id":"5627300510957568"},"css-masks":{"title":"CSS Masks","description":"Method of displaying part of an element, using a selected image as a mask","spec":"http://www.w3.org/TR/css-masking/","status":"cr","links":[{"url":"http://docs.webplatform.org/wiki/css/properties/mask","title":"WebPlatform Docs"},{"url":"http://www.html5rocks.com/en/tutorials/masking/adobe/","title":"HTML5 Rocks article"},{"url":"http://thenittygritty.co/css-masking","title":"Detailed blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"a x","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x"}},"notes":"Partial support in WebKit/Blink browsers refers to supporting the mask-image and mask-box-image properties, but lacks support for other parts of the spec. Partial support in Firefox refers to only support for inline SVG mask elements i.e. mask: url(#foo).","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":78.81,"ucprefix":false,"parent":"","keywords":"","ie_id":"masks","chrome_id":"5381559662149632"},"svg":{"title":"SVG (basic support)","description":"Method of displaying basic Vector Graphics features using the embed or object elements. Refers to the SVG 1.1 spec.","spec":"http://www.w3.org/TR/SVG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Scalable_Vector_Graphics","title":"Wikipedia"},{"url":"http://www.alistapart.com/articles/using-svg-for-flexible-scalable-and-fun-backgrounds-part-i","title":"A List Apart article"},{"url":"http://svg-wow.org/","title":"SVG showcase site"},{"url":"http://code.google.com/p/svgweb/","title":"SVG Web: Flash-based polyfill"},{"url":"http://svg-edit.googlecode.com","title":"Web-based SVG editor"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg","title":"has.js test"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y #2","10":"y #2","11":"y #2","TP":"y #2"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a #1","4":"a #1","4.1":"a #1","4.2-4.3":"a #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #2","11":"y #2"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in Android 3 & 4 refers to not supporting masking.","2":"IE9-11 desktop & mobile don't properly scale SVG files. [Adding height, width, viewBox, and CSS rules](http://codepen.io/tomByrer/pen/qEBbzw?editors=110) seem to be the best workaround."},"usage_perc_y":91.48,"usage_perc_a":2.44,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-css":{"title":"SVG in CSS backgrounds","description":"Method of using SVG images as CSS backgrounds","spec":"http://www.w3.org/TR/css3-background/#background-image","status":"cr","links":[{"url":"http://designfestival.com/a-farewell-to-css3-gradients/","title":"Tutorial for advanced effects"}],"categories":["CSS3","SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Firefox and Opera Mini/Mobile refers to SVG images being blurry when scaled. Partial support in iOS Safari and older Safari versions refers to failing to support tiling or the background-position property.","notes_by_num":{},"usage_perc_y":90.2,"usage_perc_a":3.56,"ucprefix":false,"parent":"","keywords":"svg-in-css,svgincss,css-svg","ie_id":"","chrome_id":""},"svg-smil":{"title":"SVG SMIL animation","description":"Method of using animation elements to animate SVG images","spec":"http://www.w3.org/TR/SVG/animate.html","status":"rec","links":[{"url":"http://svg-wow.org/blog/category/animation/","title":"Examples on SVG WOW"},{"url":"https://developer.mozilla.org/en/SVG/SVG_animation_with_SMIL","title":"MDN article"},{"url":"http://leunen.me/fakesmile/","title":"JS library to support SMIL in SVG"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg-smil","title":"has.js test"},{"url":"https://github.com/madsgraphics/SVGEventListener","title":"Polyfill for SMIL animate events on SVG"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"a","5":"a","5.1":"a","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Safari refers to not working in HTML files.","notes_by_num":{},"usage_perc_y":78.26,"usage_perc_a":0.68,"ucprefix":false,"parent":"","keywords":"","ie_id":"svgsmilanimation","chrome_id":""},"svg-fonts":{"title":"SVG fonts","description":"Method of using fonts defined as SVG shapes. Considered among a number of browser vendors as a deprecated feature with support being removed.","spec":"http://www.w3.org/TR/SVG/fonts.html","status":"rec","links":[{"url":"http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different","title":"Blog post"},{"url":"http://opentype.info/blog/2010/04/13/the-ipad-and-svg-fonts-in-mobile-safari/","title":"Blog post on usage for iPad"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"n #1","39":"n #1","40":"n #1","41":"n #1","42":"n #1","43":"n #1","44":"n #1"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"n #1","26":"n #1","27":"n #1","28":"n #1","29":"n #1"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n #2"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"n #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Chrome 38 and newer support SVG fonts only on Windows Vista and XP.","2":"Supported in Opera Mini in SVG images only, not in HTML."},"usage_perc_y":25.12,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":"5930075908210688"},"svg-filters":{"title":"SVG filters","description":"Method of using photoshop-like effects on SVG objects including blurring and color manipulation.","spec":"http://www.w3.org/TR/SVG/filters.html","status":"rec","links":[{"url":"http://electricbeach.org/?p=950","title":"Experiments with filter effects"},{"url":"http://svg-wow.org/blog/category/filters/","title":"SVG filter demos"},{"url":"http://docs.webplatform.org/wiki/svg/elements/filter","title":"WebPlatform Docs"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"a","6":"a","7":"a","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.93,"usage_perc_a":0.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-html":{"title":"SVG effects for HTML","description":"Method of using SVG transforms, filters, etc on HTML elements using either CSS or the foreignObject element","spec":"http://www.w3.org/TR/SVG11/extend.html#ForeignObjectElement","status":"wd","links":[{"url":"https://developer.mozilla.org/en/SVG/Tutorial/Other_content_in_SVG","title":"MDN Tutorial"},{"url":"https://developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content","title":"MDN Reference page"},{"url":"http://www.w3.org/TR/filter-effects/","title":"Filter Effects draft"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support refers to lack of filter support or buggy result from effects. A [CSS Filter Effects](http://www.w3.org/TR/filter-effects/) specification is in the works that would replace this method.","notes_by_num":{},"usage_perc_y":12.28,"usage_perc_a":71.74,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-html5":{"title":"Inline SVG in HTML5","description":"Method of using SVG tags directly in HTML documents. Requires HTML5 parser.","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#svg-0","status":"ls","links":[{"url":"http://hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more/","title":"Mozilla Hacks blog post"},{"url":"http://samples.msdn.microsoft.com/ietestcenter/html5/svghtml_harness.htm?url=SVG_HTML_Elements_001","title":"Test suite"}],"categories":["HTML5","SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.45,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"canvas":{"title":"Canvas (basic support)","description":"Method of generating fast, dynamic graphics using JavaScript.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element","status":"ls","links":[{"url":"https://developer.mozilla.org/en/Canvas_tutorial","title":"Tutorial by Mozilla"},{"url":"http://www.canvasdemos.com/","title":"Showcase site"},{"url":"http://glimr.rubyforge.org/cake/canvas.html","title":"Animation kit "},{"url":"http://diveintohtml5.info/canvas.html","title":"Another tutorial"},{"url":"http://explorercanvas.googlecode.com/","title":"Implementation for Internet Explorer"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas","title":"has.js test"}],"categories":["Canvas","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Opera Mini supports the canvas element, but is unable to play animations or run other more complex applications. Android 2.x supports canvas except the toDataURL() function. See http://code.google.com/p/android/issues/detail?id=7901 Some (slow) workarounds are described here: http://stackoverflow.com/q/10488033/841830","notes_by_num":{},"usage_perc_y":91.1,"usage_perc_a":2.95,"ucprefix":false,"parent":"","keywords":"","ie_id":"canvas","chrome_id":"5100084685438976"},"canvas-text":{"title":"Text API for Canvas","description":"Method of displaying text on Canvas elements","spec":"https://html.spec.whatwg.org/multipage/scripting.html#drawing-text-to-the-bitmap","status":"ls","links":[{"url":"https://developer.mozilla.org/en/Drawing_text_using_a_canvas#Additional_examples","title":"Examples by Mozilla"},{"url":"http://code.google.com/p/canvas-text/","title":"Support library"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas-text","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/canvas/CanvasRenderingContext2D/fillText","title":"WebPlatform Docs"}],"categories":["Canvas","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0,"ucprefix":false,"parent":"canvas","keywords":"","ie_id":"","chrome_id":""},"namevalue-storage":{"title":"Web Storage - name/value pairs","description":"Method of storing data locally like cookies, but for larger amounts of data (sessionStorage and localStorage, used to fall under HTML5).","spec":"http://www.w3.org/TR/webstorage/#storage","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API","title":"MDN article"},{"url":"http://code.google.com/p/sessionstorage/","title":"Support library"},{"url":"http://html5demos.com/storage","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-localstorage;native-sessionstorage","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/web-storage/Storage/localStorage","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0.05,"ucprefix":false,"parent":"","keywords":"webstorage,local storage","ie_id":"webstorage","chrome_id":"5345825534246912"},"sql-storage":{"title":"Web SQL Database","description":"Method of storing data client-side, allows Sqlite database queries for access and manipulation","spec":"http://www.w3.org/TR/webdatabase/","status":"unoff","links":[{"url":"http://html5doctor.com/introducing-web-sql-databases/","title":"HTML5 Doctor article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-sql-db","title":"has.js test"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"The Web SQL Database specification is no longer being maintained and support may be dropped in future versions.","notes_by_num":{},"usage_perc_y":66.87,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"db-storage,websql","ie_id":"websqldatabase","chrome_id":"6330987952734208"},"indexeddb":{"title":"IndexedDB","description":"Method of storing data client-side, allows indexed database queries.","spec":"http://www.w3.org/TR/IndexedDB/","status":"cr","links":[{"url":"http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/","title":"Mozilla Hacks article"},{"url":"https://github.com/axemclion/IndexedDBShim","title":"Polyfill for browsers supporting WebSQL"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-indexeddb","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/indexedDB","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"n","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"a #2","8":"a #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"a #2","8.1":"a #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"n","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"p"}},"notes":"","notes_by_num":{"1":"Partial support in IE 10 & 11 refers to a number of subfeatures [not being supported](http://codepen.io/cemerick/pen/Itymi).","2":"Partial support in iOS 8 refers to [seriously buggy behavior](http://www.raymondcamden.com/2014/9/25/IndexedDB-on-iOS-8--Broken-Bad)."},"usage_perc_y":61.21,"usage_perc_a":18.06,"ucprefix":false,"parent":"","keywords":"indexdb","ie_id":"indexeddb","chrome_id":"6507459568992256"},"online-status":{"title":"Online/offline status","description":"Events to indicate when the user's connected (`online` and `offline` events) and the `navigator.onLine` property to see current status.","spec":"https://html.spec.whatwg.org/multipage/browsers.html#browser-state","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine.onLine#Specification","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a #2","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"a #3","16":"a #3","17":"a #3","18":"a #3","19":"a #3","20":"a #3","21":"a #3","22":"a #3","23":"a #3","24":"a #3","25":"a #3","26":"a #3","27":"a #3","28":"a #3","29":"a #3","30":"a #3","31":"a #3","32":"a #3","33":"a #3","34":"a #3","35":"a #3","36":"a #3","37":"a #3","38":"a #3","39":"a #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"u","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"u","2.2":"u","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a #1","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"\"online\" does not always mean connection to the internet, it can also just mean connection to some network.\r\n\r\nEarly versions of Chrome and Safari always reported \"true\" for `navigator.onLine`","notes_by_num":{"1":"Seems to support `navigator.onLine` but not `online`/`offline` events.","2":"IE8 only supports the `online`/`offline` events on `document.body`, rather than `window`.","3":"Desktop Firefox responds to the status of its \"Work Offline\" mode. If not in that mode, `navigator.onLine` is always `true`, regardless of the actual network connectivity status."},"usage_perc_y":74.55,"usage_perc_a":19.09,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"eventsource":{"title":"Server-sent events","description":"Method of continuously sending data from a server to the browser, rather than repeatedly requesting it (EventSource interface, used to fall under HTML5)","spec":"http://www.w3.org/TR/eventsource/","status":"pr","links":[{"url":"http://www.html5rocks.com/tutorials/eventsource/basics/","title":"HTML5 Rocks tutorial"},{"url":"http://samshull.blogspot.com/2010/10/ajax-push-in-ios-safari-and-chrome-with.html","title":"Blog post with demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-eventsource","title":"has.js test"},{"url":"https://github.com/Yaffle/EventSource","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":76.34,"usage_perc_a":0.05,"ucprefix":false,"parent":"","keywords":"serversent,s-sent-events","ie_id":"serversenteventseventsource","chrome_id":"5311740673785856"},"x-doc-messaging":{"title":"Cross-document messaging","description":"Method of sending information from a page on one domain to a page on a different one (using postMessage)","spec":"https://html.spec.whatwg.org/multipage/comms.html#crossDocumentMessages","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/window.postMessage","title":"MDN article"},{"url":"http://html5demos.com/postmessage2","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-crosswindowmessaging","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/web-messaging/MessagePort/postMessage","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE8-9 refers to only working in frames/iframes (not other tabs/windows). Also in IE 9 and below an object cannot be sent using postMessage. Partial support in IE10 refers to [limitations in certain conditions](http://stackoverflow.com/questions/16226924/is-cross-origin-postmessage-broken-in-ie10)","notes_by_num":{},"usage_perc_y":82.03,"usage_perc_a":14.89,"ucprefix":false,"parent":"","keywords":"","ie_id":"postmessage","chrome_id":"4786174115708928"},"datauri":{"title":"Data URIs","description":"Method of embedding images and other files in webpages as a string of text","spec":"http://www.ietf.org/rfc/rfc2397.txt","status":"other","links":[{"url":"http://css-tricks.com/data-uris/","title":"Information page"},{"url":"http://en.wikipedia.org/wiki/data_URI_scheme","title":"Wikipedia"},{"url":"http://www.websiteoptimization.com/speed/tweak/inline-images/","title":"Data URL converter"},{"url":"http://klevjers.com/papers/phishing.pdf","title":"Information on security issues"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Support in Internet Explorer 8 is limited to images and linked resources like CSS files, not HTML files. Max URI length in IE8 is 32KB. In IE9+ JavaScript files are supported too and the maximum size limit set to 4GB.","notes_by_num":{},"usage_perc_y":82.06,"usage_perc_a":14.89,"ucprefix":false,"parent":"","keywords":"data url,datauris,data uri,dataurl,dataurls,base64","ie_id":"","chrome_id":""},"mathml":{"title":"MathML","description":"Special tags that allow mathematical formulas and notations to be written on web pages.","spec":"http://www.w3.org/TR/MathML/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/MathML","title":"Wikipedia"},{"url":"http://www.mozilla.org/projects/mathml/demo/","title":"MathML demos"},{"url":"http://www.mathjax.org","title":"Cross-browser support script"},{"url":"https://developer.mozilla.org/en/MathML/Element","title":"MDN element reference"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"y","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a"}},"notes":"Opera's support is limited to a CSS profile of MathML. Support was added in Chrome 24, but removed afterwards due to instability.","notes_by_num":{},"usage_perc_y":22.58,"usage_perc_a":4.17,"ucprefix":false,"parent":"","keywords":"","ie_id":"mathml","chrome_id":"5240822173794304"},"css-featurequeries":{"title":"CSS Feature Queries","description":"CSS Feature Queries allow authors to condition rules based on whether particular property declarations are supported in CSS using the @supports at rule.","spec":"http://www.w3.org/TR/css3-conditional/#at-supports","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/@supports","title":"MDN Article"},{"url":"http://mcc.id.au/blog/2012/08/supports","title":"@supports in Firefox"},{"url":"http://dabblet.com/gist/3895764","title":"Test case"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@supports","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"See also the [CSS.supports() DOM API](#feat=css-supports-api)","notes_by_num":{},"usage_perc_y":60.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"supports,conditional","ie_id":"conditionalrules","chrome_id":"4993981813358592"},"xhtml":{"title":"XHTML served as application/xhtml+xml","description":"A strict form of HTML, and allows embedding of other XML languages","spec":"http://www.w3.org/TR/xhtml1/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/XHTML","title":"Wikipedia"},{"url":"http://www.xmlplease.com/xhtml/xhtml5polyglot/","title":"Information on XHTML5"},{"url":"http://docs.webplatform.org/wiki/concepts/internet_and_web/the_web_standards_model#What_is_XHTML.3F","title":"WebPlatform Docs"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"The XHTML syntax is very close to HTML, and thus is almost always ([incorrectly](https://developer.mozilla.org/en-US/docs/XHTML#MIME_type_versus_DOCTYPE)) served as text/html on the web.","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"xhtml+xml","ie_id":"","chrome_id":""},"xhtmlsmil":{"title":"XHTML+SMIL animation","description":"Method of using SMIL animation in web pages","spec":"http://www.w3.org/TR/XHTMLplusSMIL/","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/XHTML%2BSMIL","title":"Wikipedia"},{"url":"http://leunen.me/fakesmile/","title":"JS library to support XHTML+SMIL"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"a","7":"a","8":"a","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"p"}},"notes":"Internet Explorer supports the W3C proposal HTML+TIME, which is largely the same as XHTML+SMIL","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":3.13,"ucprefix":false,"parent":"xhtml","keywords":"","ie_id":"","chrome_id":""},"wai-aria":{"title":"WAI-ARIA Accessibility features","description":"Method of providing ways for people with disabilities to use dynamic web content and web applications.","spec":"http://www.w3.org/TR/wai-aria/","status":"rec","links":[{"url":"http://www.w3.org/WAI/intro/aria","title":"Information page"},{"url":"http://www.paciellogroup.com/blog/2011/10/browser-assistive-technology-tests-redux/","title":"Links to various test results"},{"url":"http://en.wikipedia.org/wiki/WAI-ARIA","title":"Wikipedia"},{"url":"http://www.alistapart.com/articles/the-accessibility-of-wai-aria/","title":"ALA Article"},{"url":"http://zufelt.ca/blog/are-you-confused-html5-and-wai-aria-yet","title":"HTML5/WAI-ARIA information"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":27.2,"usage_perc_a":63.25,"ucprefix":false,"parent":"","keywords":"wai,aria","ie_id":"","chrome_id":""},"geolocation":{"title":"Geolocation","description":"Method of informing a website of the user's geographical location","spec":"http://www.w3.org/TR/geolocation-API/","status":"cr","links":[{"url":"http://html5demos.com/geo","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-geolocation","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/geolocation","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.04,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"","ie_id":"geolocation","chrome_id":"6348855016685568"},"flexbox":{"title":"Flexible Box Layout Module","description":"Method of positioning elements in horizontal or vertical stacks. Support includes the support for the all properties prefixed with `flex` as well as `align-content`, `align-items`, `align-self`, and `justify-content`.","spec":"http://www.w3.org/TR/css3-flexbox/","status":"wd","links":[{"url":"http://bennettfeely.com/flexplorer/","title":"Flexbox CSS generator"},{"url":"http://www.adobe.com/devnet/html5/articles/working-with-flexbox-the-new-spec.html","title":"Article on using the latest spec"},{"url":"https://dev.opera.com/articles/view/advanced-cross-browser-flexbox/","title":"Tutorial on cross-browser support"},{"url":"http://philipwalton.github.io/solved-by-flexbox/","title":"Examples on how to solve common layout problems with flexbox"},{"url":"http://css-tricks.com/snippets/css/a-guide-to-flexbox/","title":"A Complete Guide to Flexbox"},{"url":"http://the-echoplex.net/flexyboxes/","title":"Flexbox playground and code generator"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #2","11":"y","TP":"y"},"firefox":{"2":"a x #1","3":"a x #1","3.5":"a x #1","3.6":"a x #1","4":"a x #1","5":"a x #1","6":"a x #1","7":"a x #1","8":"a x #1","9":"a x #1","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"a x #1","22":"a #3","23":"a #3","24":"a #3","25":"a #3","26":"a #3","27":"a #3","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x #1","5":"a x #1","6":"a x #1","7":"a x #1","8":"a x #1","9":"a x #1","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x #1","3.2":"a x #1","4":"a x #1","5":"a x #1","5.1":"a x #1","6":"a x #1","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x #1","4.0-4.1":"a x #1","4.2-4.3":"a x #1","5.0-5.1":"a x #1","6.0-6.1":"a x #1","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"a x #1","2.2":"a x #1","2.3":"a x #1","3":"a x #1","4":"a x #1","4.1":"a x #1","4.2-4.3":"a x #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x #1","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a x #2","11":"y"},"and_uc":{"9.9":"a x #1"}},"notes":"Most partial support refers to supporting an [older version](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/) of the specification or an [older syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/).","notes_by_num":{"1":"Only supports the [old flexbox](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723) specification and does not support wrapping.","2":"Only supports the [2012 syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)","3":"Does not support flex-wrap or flex-flow properties"},"usage_perc_y":81.74,"usage_perc_a":10.37,"ucprefix":false,"parent":"","keywords":"flex-box,flex-direction,flex-wrap,flex-flow,flex-grow,flex-basis","ie_id":"flexbox","chrome_id":"4837301406400512"},"webgl":{"title":"WebGL - 3D Canvas graphics","description":"Method of generating dynamic 3D graphics using JavaScript, accelerated through hardware","spec":"https://www.khronos.org/registry/webgl/specs/1.0/","status":"other","links":[{"url":"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation","title":"Instructions on enabling WebGL"},{"url":"http://www.khronos.org/webgl/wiki/Tutorial","title":"Tutorial"},{"url":"http://hacks.mozilla.org/2009/12/webgl-draft-released-today/","title":"Firefox blog post"},{"url":"http://webkit.org/blog/603/webgl-now-available-in-webkit-nightlies/","title":"Webkit blog post"},{"url":"https://github.com/iewebgl/iewebgl","title":"Polyfill for IE"}],"categories":["Canvas"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"a"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"p","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Support listed as \"partial\" refers to the fact that not all users with these browsers have WebGL access. This is due to the additional requirement for users to have [up to date video drivers](http://www.khronos.org/webgl/wiki/BlacklistsAndWhitelists). This problem was [solved in Chrome on Windows](http://blog.chromium.org/2012/02/gpu-accelerating-2d-canvas-and-enabling.html) as of version 18.\r\n\r\nNote that WebGL is part of the [Khronos Group](http://www.khronos.org/webgl/), not the W3C.","notes_by_num":{},"usage_perc_y":52.08,"usage_perc_a":27.02,"ucprefix":false,"parent":"canvas","keywords":"web gl","ie_id":"webglcanvas3d,webglinstancingextension","chrome_id":"6049512976023552"},"fileapi":{"title":"File API","description":"Method of manipulating file objects in web applications client-side, as well as programmatically selecting them and accessing their data.","spec":"http://www.w3.org/TR/FileAPI/","status":"wd","links":[{"url":"https://developer.mozilla.org/en/Using_files_from_web_applications","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/apis/file","title":"WebPlatform Docs"},{"url":"https://github.com/moxiecode/moxie","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari and other WebKit browsers refers to lacking FileReader support. ","notes_by_num":{},"usage_perc_y":85.6,"usage_perc_a":3.06,"ucprefix":false,"parent":"","keywords":"FileReader","ie_id":"","chrome_id":""},"shadowdom":{"title":"Shadow DOM","description":"Method of establishing and maintaining functional boundaries between DOM trees and how these trees interact with each other within a document, thus enabling better functional encapsulation within the DOM.","spec":"http://www.w3.org/TR/shadow-dom/","status":"wd","links":[{"url":"http://html5-demos.appspot.com/static/shadowdom-visualizer/index.html","title":"Shadow DOM Visualizer"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/shadowdom/","title":"HTML5Rocks - Shadow DOM 101 article"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `dom.webcomponents.enabled` flag."},"usage_perc_y":49.1,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"shadowdomunprefixed","chrome_id":"4507242028072960"},"websockets":{"title":"Web Sockets","description":"Bidirectional communication technology for web apps","spec":"http://www.w3.org/TR/websockets/","status":"cr","links":[{"url":"http://websocket.org/aboutwebsocket.html","title":"WebSockets information"},{"url":"http://updates.html5rocks.com/2011/08/What-s-different-in-the-new-WebSocket-protocol","title":"Details on newer protocol"},{"url":"http://en.wikipedia.org/wiki/WebSocket","title":"Wikipedia"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-websockets","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/websocket","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a #1","5":"a #1","6":"a x #2","7":"a x #2","8":"a x #2","9":"a x #2","10":"a x #2","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #2","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a #1","5.1":"a #1","6":"a #2","6.1":"a #2","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"a #1","11.1":"a #1","11.5":"a #1","11.6":"a #1","12":"a #1","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a #1","5.0-5.1":"a #1","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y #1","10":"y"},"op_mob":{"10":"n","11":"a #1","11.1":"a #1","11.5":"a #1","12":"a #1","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support refers to the websockets implementation using an older version of the protocol and/or the implementation being disabled by default (due to security issues with the older protocol).","2":"Partial support refers to lacking support for binary data. "},"usage_perc_y":85.22,"usage_perc_a":1.35,"ucprefix":true,"parent":"","keywords":"","ie_id":"websocket","chrome_id":"6555138000945152"},"hidden":{"title":"hidden attribute","description":"The `hidden` attribute may be applied to any element, and effectively hides elements similar to `display: none` in CSS.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute","status":"ls","links":[{"url":"http://davidwalsh.name/html5-hidden","title":"Article on hidden attribute"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"The hidden state can be easily overridden with a CSS `display` property set to anything other than `none`.","notes_by_num":{},"usage_perc_y":89.91,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"script-async":{"title":"async attribute for external scripts","description":"The boolean async attribute on script elements allows the external JavaScript file to run when it's available, without delaying page load first.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-script-async","status":"ls","links":[{"url":"https://developer.mozilla.org/en/HTML/Element/script#Attributes","title":"MDN article"},{"url":"http://ie.microsoft.com/testdrive/Performance/AsyncScripts/Default.html","title":"Demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-async","title":"has.js test"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Using script.async = false; to maintain execution order for dynamically-added scripts isn't supported in Safari 5.0","notes_by_num":{},"usage_perc_y":88.61,"usage_perc_a":0.12,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"cors":{"title":"Cross-Origin Resource Sharing","description":"Method of performing XMLHttpRequests across domains","spec":"http://www.w3.org/TR/cors/","status":"rec","links":[{"url":"http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/","title":"Mozilla Hacks blog post"},{"url":"http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx","title":"Alternative implementation by IE8"},{"url":"https://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/","title":"DOM access using CORS"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-cors-xhr","title":"has.js test"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Supported somewhat in IE8 and IE9 using the XDomainRequest object (but has [limitations]( http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx))","notes_by_num":{},"usage_perc_y":89.24,"usage_perc_a":4.72,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"calc":{"title":"calc() as CSS unit value","description":"Method of allowing calculated values for length units, i.e. `width: calc(100% - 3em)`","spec":"http://www.w3.org/TR/css3-values/#calc","status":"cr","links":[{"url":"http://hacks.mozilla.org/2010/06/css3-calc/","title":"Mozilla Hacks article"},{"url":"https://developer.mozilla.org/en/CSS/-moz-calc","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/functions/calc","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"Support can be somewhat emulated in older versions of IE using the non-standard `expression()` syntax. Partial support in IE9 refers to the browser crashing when used as a `background-position` value. Partial support in Android Browser 4.4 refers to the browser lacking the ability to multiply and divide values.","notes_by_num":{},"usage_perc_y":77.73,"usage_perc_a":5.56,"ucprefix":false,"parent":"","keywords":"","ie_id":"csscalc","chrome_id":"5765241438732288"},"ruby":{"title":"Ruby annotation","description":"Method of adding pronunciation or other annotations using ruby elements (primarily used in East Asian typography).","spec":"https://html.spec.whatwg.org/multipage/semantics.html#the-ruby-element","status":"ls","links":[{"url":"http://html5doctor.com/ruby-rt-rp-element/","title":"HTML5 Doctor article"},{"url":"http://docs.webplatform.org/wiki/html/elements/ruby","title":"WebPlatform Docs"},{"url":"https://addons.mozilla.org/firefox/addon/1935/","title":"Add-on \"XHTML Ruby Support\" for Firefox"},{"url":"https://addons.mozilla.org/firefox/addon/6812/","title":"Addon \"HTML Ruby\" for Firefox support"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"y","39":"y"},"chrome":{"4":"p","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"p","10":"a"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"p"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Browsers without native support can still simulate support using CSS. Partial support refers to only supporting basic ruby, may still be missing writing-mode, Complex ruby and CSS3 Ruby.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":81.38,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-opacity":{"title":"CSS3 Opacity","description":"Method of setting the transparency level of an element","spec":"http://www.w3.org/TR/css3-color/","status":"rec","links":[{"url":"http://www.css3files.com/color/#opacity","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/opacity","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Transparency for elements in IE8 and older can be achieved using the proprietary \"filter\" property and does not work well with PNG images using alpha transparency.","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":3.14,"ucprefix":false,"parent":"","keywords":"transparent,transparency,alpha","ie_id":"","chrome_id":""},"form-validation":{"title":"Form validation","description":"Method of setting required fields and field types without requiring JavaScript.","spec":"https://html.spec.whatwg.org/multipage/forms.html#client-side-form-validation","status":"ls","links":[{"url":"http://docs.webplatform.org/wiki/html/attributes/required","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Safari refers to lack of notice when form with required fields is attempted to be submitted. Partial support in IE10 mobile refers to lack of warning when blocking submission.","notes_by_num":{},"usage_perc_y":72.87,"usage_perc_a":3.81,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":"6091813840486400"},"history":{"title":"Session history management","description":"Method of manipulating the user's browser's session history in JavaScript using history.pushState, history.replaceState and the popstate event.","spec":"https://html.spec.whatwg.org/multipage/browsers.html#dom-history-pushstate","status":"ls","links":[{"url":"http://www.adequatelygood.com/2010/7/Saner-HTML5-History-Management","title":"Introduction to history management"},{"url":"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history","title":"MDN article"},{"url":"http://html5demos.com/history","title":"Demo page"},{"url":"https://github.com/browserstate/history.js","title":"History.js polyfill "},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-history-state","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/dom/History","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"n","4":"n","4.1":"n","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Older iOS versions and Android 4.0.4 claim support, but implementation is too buggy to be useful.","notes_by_num":{},"usage_perc_y":83.69,"usage_perc_a":4.33,"ucprefix":false,"parent":"","keywords":"onpushstate,onreplacestate","ie_id":"","chrome_id":""},"json":{"title":"JSON parsing","description":"Method of converting JavaScript objects to JSON strings and JSON back to objects using JSON.stringify() and JSON.parse()","spec":"http://es5.github.com/#x15.12","status":"other","links":[{"url":"https://developer.mozilla.org/En/Using_native_JSON","title":"MDN article"},{"url":"http://www.json.org/js.html","title":"JSON in JS (includes script w/support)"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/json.js#json","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/json","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Requires document to be in IE8+ [standards mode](http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx) to work in IE8.","notes_by_num":{},"usage_perc_y":96.85,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"classlist":{"title":"classList (DOMTokenList )","description":"Method of easily manipulating classes on elements, using the DOMTokenList object.","spec":"http://www.w3.org/TR/dom/#dom-element-classlist","status":"wd","links":[{"url":"http://hacks.mozilla.org/2010/01/classlist-in-firefox-3-6/","title":"Mozilla Hacks article"},{"url":"https://github.com/eligrey/classList.js","title":"Polyfill script"},{"url":"http://docs.webplatform.org/wiki/dom/Element/classList","title":"WebPlatform Docs"},{"url":"http://www.sitepoint.com/exploring-classlist-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/classlist-api-demo.html","title":"Demo using classList"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Element.classList","title":"MDN article"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"p","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.9,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"text-overflow":{"title":"CSS3 Text-overflow","description":"Append ellipsis when text overflows its containing element","spec":"http://www.w3.org/TR/css3-ui/#text-overflow0","status":"wd","links":[{"url":"https://github.com/rmorse/AutoEllipsis","title":"jQuery polyfill for Firefox"},{"url":"https://developer.mozilla.org/En/CSS/Text-overflow","title":"MDN article"},{"url":"http://www.css3files.com/text/","title":"Information page"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-text-overflow","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/properties/text-overflow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y x","9.5-9.6":"y x","10.0-10.1":"y x","10.5":"y x","10.6":"y x","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y x","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.97,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"textoverflow,ellipsis","ie_id":"","chrome_id":""},"webm":{"title":"WebM video format","description":"Multimedia format designed to provide a royalty-free, high-quality open video compression format for use with HTML5 video. WebM supports the video codec VP8 and VP9.","spec":"http://www.webmproject.org/","status":"other","links":[{"url":"https://tools.google.com/dlpage/webmmf","title":"Codec for IE9 support"},{"url":"http://www.broken-links.com/2010/09/01/playing-webm-in-safari-with-plugins/","title":"Info on supporting WebM in Safari"},{"url":"http://webmproject.org","title":"Official website"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video-webm","title":"has.js test"},{"url":"http://perian.org/","title":"Perian :Mac OSX Webm Codec install"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Will work in IE9+ and Safari/MacOSX provided the user has the WebM codecs installed. Partial support indicates that at least one codec is supported but not all.","notes_by_num":{},"usage_perc_y":60.45,"usage_perc_a":8.06,"ucprefix":false,"parent":"video","keywords":"matroska","ie_id":"webmvideo","chrome_id":"6362186595172352"},"mpeg4":{"title":"MPEG-4/H.264 video format","description":"Commonly used video compression format (not royalty-free)","spec":"http://ip.hhi.de/imagecom_G1/assets/pdfs/csvt_overview_0305.pdf","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC","title":"Wikipedia article"},{"url":"http://www.interoperabilitybridges.com/html5-extension-for-wmp-plugin","title":"Firefox extension allowing support in Win7"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"a"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"The Android 2.3 browser currently requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to play videos\r\n\r\nFirefox supports H.264 on Windows 7 and later since version 21. Firefox supports H.264 on Linux since version 26 if the appropriate gstreamer plug-ins are installed.\r\n\r\nPartial support for Firefox refers to the lack of support in OSX & some Linux platforms, for Android Firefox it refers to the inability of hardware acceleration.","notes_by_num":{},"usage_perc_y":81.75,"usage_perc_a":8.4,"ucprefix":false,"parent":"video","keywords":"avc,mp4,mpv,mov,aac,h264","ie_id":"","chrome_id":""},"ogv":{"title":"Ogg/Theora video format","description":"Free lossy video compression format.","spec":"http://theora.org/doc/","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/Theora","title":"Wikipedia article"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":51.85,"usage_perc_a":0,"ucprefix":false,"parent":"video","keywords":"xiph","ie_id":"","chrome_id":""},"wordwrap":{"title":"CSS3 Overflow-wrap","description":"Allows lines to be broken within words if an otherwise unbreakable string is too long to fit. Currently mostly supported using the `word-wrap` property.","spec":"http://www.w3.org/TR/css3-text/#overflow-wrap","status":"wd","links":[{"url":"https://developer.mozilla.org/En/CSS/Word-wrap","title":"MDN article"},{"url":"http://www.css3files.com/text/#wordwrap","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/word-wrap","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to requiring the legacy name \"word-wrap\" (rather than overflow-wrap) to work.","notes_by_num":{},"usage_perc_y":58.98,"usage_perc_a":38.12,"ucprefix":false,"parent":"","keywords":"wordwrap,word-wrap","ie_id":"","chrome_id":""},"progressmeter":{"title":"Progress & Meter","description":"Method of indicating a progress state (progress element) or the current level of a gauge (meter element).\r\n","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-progress-element","status":"ls","links":[{"url":"https://dev.opera.com/articles/new-form-features-in-html5/#newoutput","title":"Dev.Opera article"},{"url":"http://html5doctor.com/measure-up-with-the-meter-tag/","title":"HTML5 Doctor on meter element"},{"url":"http://peter.sh/examples/?/html/meter-progress.html","title":"Examples of progress and meter elements"},{"url":"http://docs.webplatform.org/wiki/html/elements/progress","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Firefox 6-15, IE10 & iOS7 Safari refers to supporting the progress element, but not the meter element. iOS7 Safari also does not support \"indeterminate\" progress elements.\r\n\r\nFor styling progress bars, [see this article](http://css-tricks.com/html5-progress-element/)","notes_by_num":{},"usage_perc_y":68.33,"usage_perc_a":17.5,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"object-fit":{"title":"CSS3 object-fit/object-position","description":"Method of specifying how an object (image or video) should fit inside its box. object-fit options include \"contain\" (fit according to aspect ratio), \"fill\" (stretches object to fill) and \"cover\" (overflows box but maintains ratio), where object-position allows the object to be repositioned like background-image does.","spec":"http://www.w3.org/TR/css3-images/","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/css3-object-fit-object-position/","title":"Dev.Opera article"},{"url":"http://docs.webplatform.org/wiki/css/properties/object-fit","title":"WebPlatform Docs"},{"url":"https://github.com/anselmh/object-fit","title":"object-fit JavaScript-Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a #1","8":"a #1"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y x","15":"n","16":"n","17":"n","18":"n","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a #1","8.1":"a #1"},"op_mini":{"5.0-8.0":"y x"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support in Safari refers to support for `object-fit` but not `object-position`."},"usage_perc_y":50.14,"usage_perc_a":7.36,"ucprefix":false,"parent":"","keywords":"objectfit,objectposition","ie_id":"objectfitandobjectposition","chrome_id":"5302669702856704"},"xhr2":{"title":"XMLHttpRequest 2","description":"Adds more functionality to AJAX requests like file uploads, transfer progress information and the ability to send form data.","spec":"https://xhr.spec.whatwg.org/","status":"ls","links":[{"url":"https://developer.mozilla.org/en/XMLHttpRequest/FormData","title":"MDN article on FormData"},{"url":"https://github.com/3nr1c/jUri.js","title":"Polyfill for FormData object"},{"url":"http://docs.webplatform.org/wiki/apis/xhr/XMLHttpRequest","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"u","6":"u","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.91,"usage_perc_a":0.11,"ucprefix":false,"parent":"","keywords":"formdata","ie_id":"","chrome_id":""},"minmaxwh":{"title":"CSS min/max-width/height","description":"Method of setting a minimum or maximum width or height to an element. ","spec":"http://www.w3.org/TR/CSS21/visudet.html#min-max-widths","status":"rec","links":[{"url":"http://code.google.com/p/ie7-js/","title":"JS library with support"},{"url":"http://docs.webplatform.org/wiki/css/properties/min-width","title":"WebPlatform Docs"},{"url":"http://www.impressivewebs.com/min-max-width-height-css/","title":"CSS Basics post"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE7 does not support \"inherit\" as a value on any of these properties. IE8 has some bugs with max-width/height combined with overflow: auto/scroll.","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"min-width,min-height,max-width,max-height","ie_id":"","chrome_id":""},"details":{"title":"Details & Summary elements","description":"The element generates a simple no-JavaScript widget to show/hide element contents, optionally by clicking on its child element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-details-element","status":"ls","links":[{"url":"https://mathiasbynens.be/notes/html5-details-jquery","title":"jQuery fallback script"},{"url":"https://gist.github.com/370590","title":"Fallback script"},{"url":"http://html5doctor.com/summary-figcaption-element/","title":"HTML5 Doctor article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-details","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/details","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":65.56,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"detailssummary","chrome_id":"5348024557502464"},"text-stroke":{"title":"CSS text-stroke","description":"Method of declaring the outline (stroke) width and color for text.","spec":"http://developer.apple.com/library/safari/documentation/appleapplications/reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-_webkit_text_stroke","status":"unoff","links":[{"url":"http://css-tricks.com/7405-adding-stroke-to-web-text/","title":"Information & workarounds"},{"url":"http://www.westciv.com/tools/textStroke/","title":"Live editor"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"a x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Does not yet appear in any W3C specification. Was briefly included in a spec as the \"text-outline\" property, but this was removed.","notes_by_num":{},"usage_perc_y":62.7,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"textstroke,stroke-color,stroke-width,fill-color","ie_id":"","chrome_id":""},"inline-block":{"title":"CSS inline-block","description":"Method of displaying an element as a block while flowing it with text. ","spec":"http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning","status":"rec","links":[{"url":"http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/","title":"Blog post w/info"},{"url":"http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/","title":"Info on cross browser support"},{"url":"http://docs.webplatform.org/wiki/css/properties/display","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Only supported in IE6 and IE7 on elements with a display of \"inline\" by default. [Alternative properties](http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/) are available to provide complete cross-browser support.","notes_by_num":{},"usage_perc_y":96.94,"usage_perc_a":0.25,"ucprefix":false,"parent":"","keywords":"inlineblock","ie_id":"","chrome_id":""},"notifications":{"title":"Web Notifications","description":"Method of alerting the user outside of a web page by displaying notifications (that do not require interaction by the user).","spec":"http://www.w3.org/TR/notifications/","status":"wd","links":[{"url":"http://www.html5rocks.com/tutorials/notifications/quick/","title":"HTML5 Rocks tutorial"},{"url":"http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification","title":"Chromium API"},{"url":"https://addons.mozilla.org/en-us/firefox/addon/221523/","title":"Add-on "},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/notification","title":"MDN Notifications"},{"url":"http://www.sitepoint.com/introduction-web-notifications-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/web-notifications-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":49.15,"usage_perc_a":4.15,"ucprefix":false,"parent":"","keywords":"","ie_id":"webnotifications","chrome_id":"5064350557536256"},"stream":{"title":"getUserMedia/Stream API","description":"Method of accessing external device data (such as a webcam video stream). Formerly this was envisioned as the element.","spec":"http://www.w3.org/TR/mediacapture-streams/","status":"wd","links":[{"url":"https://dev.opera.com/blog/webcam-orientation-preview/","title":"Technology preview from Opera"},{"url":"http://docs.webplatform.org/wiki/dom/Navigator/getUserMedia","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":61.48,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"camera,device,getUserMedia,media stream,Media Capture API","ie_id":"mediacaptureandstreams","chrome_id":"6067380039974912,6605041225957376"},"svg-img":{"title":"SVG in HTML img element","description":"Method of displaying SVG images in HTML using .","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html","status":"ls","links":[{"url":"http://blog.dholbert.org/2010/10/svg-as-image.html","title":"Blog post with examples"},{"url":"http://www.codedread.com/blog/","title":"Blog with SVGs an images"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.76,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"svg-as-img,svg-in-img","ie_id":"","chrome_id":""},"datalist":{"title":"Datalist element","description":"Method of setting a list of options for a user to select in a text field, while leaving the ability to enter a custom value.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element","status":"ls","links":[{"url":"http://hacks.mozilla.org/2010/11/firefox-4-html5-forms/","title":"Mozilla Hacks article"},{"url":"http://afarkas.github.com/webshim/demos/","title":"HTML5 Library including datalist support"},{"url":"https://developer.mozilla.org/en/HTML/Element/datalist","title":"MDN reference"},{"url":"http://docs.webplatform.org/wiki/html/elements/datalist","title":"WebPlatform Docs"},{"url":"http://demo.agektmr.com/datalist/","title":"Eiji Kitamura's options demos & tests"},{"url":"http://github.com/thgreasi/datalist-polyfill","title":"Minimal Datalist polyfill w/tutorial"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"p"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE10 refers to [significantly buggy behavior](http://playground.onereason.eu/2013/04/ie10s-lousy-support-for-datalists/). Firefox doesn't support [datalist association with inputs of type `number`](http://codepen.io/graste/pen/bNoVKW).","notes_by_num":{},"usage_perc_y":63.15,"usage_perc_a":9.46,"ucprefix":false,"parent":"forms","keywords":"list attribute","ie_id":"datalistelement","chrome_id":"6090950820495360"},"dataset":{"title":"dataset & data-* attributes","description":"Method of applying and accessing custom data to elements.","spec":"https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes","status":"ls","links":[{"url":"http://html5doctor.com/html5-custom-data-attributes/","title":"HTML5 Doctor article"},{"url":"http://html5demos.com/dataset","title":"Demo using dataset"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-dataset","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/data-*","title":"WebPlatform Docs"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset","title":"MDN Reference - dataset"},{"url":"https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes","title":"MDN Guide - Using data-* attributes"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"a","3.6":"a","4":"a","5":"a","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support refers to being able to use `data-*` attributes and access them using `getAttribute`. \r\n\r\n\"Supported\" refers to accessing the values using the `dataset` property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements.","notes_by_num":{},"usage_perc_y":87.12,"usage_perc_a":10.07,"ucprefix":false,"parent":"","keywords":"DOMStringMap","ie_id":"","chrome_id":""},"css-grid":{"title":"CSS Grid Layout","description":"Method of using a grid concept to lay out content, providing a mechanism for authors to divide available space for lay out into columns and rows using a set of predictable sizing behaviors","spec":"http://www.w3.org/TR/css3-grid-layout/","status":"wd","links":[{"url":"http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx","title":"IE Blog post"},{"url":"https://bugs.webkit.org/show_bug.cgi?id=60731","title":"Webkit (Chrome, Safari, etc.) feature request"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=616605","title":"Mozilla (Firefox) feature request"},{"url":"https://github.com/codler/Grid-Layout-Polyfill","title":"Polyfill based on old spec"},{"url":"https://github.com/FremyCompany/css-grid-polyfill/","title":"Polyfill based on new spec"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"a x #2","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"p","26":"p","27":"p","28":"p","29":"p d #1","30":"p d #1","31":"p d #1","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1","40":"p d #1","41":"p d #1","42":"p d #1","43":"p d #1","44":"p d #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"p d #1","29":"p d #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"a x #2","11":"a x #2"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Partial support in IE refers to supporting an [older version](http://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/) of the specification."},"usage_perc_y":0,"usage_perc_a":10.16,"ucprefix":false,"parent":"","keywords":"grids,grid-row,grid-column","ie_id":"grid","chrome_id":"4589636412243968"},"menu":{"title":"Toolbar/context menu","description":"Method of defining a toolbar menu, a context menu or a list of (interactive) options using the element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-menu-element","status":"ls","links":[{"url":"https://bug617528.bugzilla.mozilla.org/attachment.cgi?id=554309","title":"Demo"},{"url":"http://addyosmani.github.com/jQuery-contextMenu/","title":"jQuery polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/events.js#event-contextmenu","title":"has.js test"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Firefox refers to being limited to context menus, not toolbar menus.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":11.97,"ucprefix":false,"parent":"","keywords":"contextmenu,menuitem,command","ie_id":"","chrome_id":""},"rem":{"title":"rem (root em) units","description":"Type of unit similar to \"em\", but relative only to the root element, not any parent element. Thus compounding does not occur as it does with \"em\" units.","spec":"http://www.w3.org/TR/css3-values/#font-relative-lengths","status":"cr","links":[{"url":"http://snook.ca/archives/html_and_css/font-size-with-rem","title":"Article on usage"},{"url":"https://github.com/chuckcarpenter/REM-unit-polyfill","title":"REM Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"u","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"rems","ie_id":"","chrome_id":""},"ttf":{"title":"TTF/OTF - TrueType and OpenType font support","description":"Support for the TrueType (.ttf)and OpenType (.otf) outline font formats in @font-face. ","spec":"http://developer.apple.com/fonts/TTRefMan/index.html","status":"other","links":[{"url":"http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer","title":"What is the status of TTF support in Internet Explorer?"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"u","11":"u"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE9 refers to the fonts only working [when set to be \"installable\"](http://blogs.msdn.com/b/ie/archive/2010/07/15/the-css-corner-better-web-typography-for-better-design.aspx).","notes_by_num":{},"usage_perc_y":79.17,"usage_perc_a":11.28,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"touch":{"title":"Touch events","description":"Method of registering when, where and how the interface is touched, for devices with a touch screen. These DOM events are similar to mousedown, mousemove, etc.","spec":"http://www.w3.org/TR/touch-events/","status":"rec","links":[{"url":"http://www.quirksmode.org/mobile/tableTouch.html","title":"Detailed support tables"},{"url":"http://www.quirksmode.org/m/tests/drag2.html","title":"Multi-touch demo"},{"url":"http://schepers.cc/getintouch","title":"Information on the spec development"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh673557(v=vs.85).aspx","title":"Internet Explorer's gesture and touch implementation."},{"url":"http://github.com/CamHenlin/TouchPolyfill","title":"Touch polyfill for supporting touch events on Internet Explorer"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"a #2"},"and_uc":{"9.9":"y"}},"notes":"Internet Explorer implements Pointer Events specification which supports more input devices than Touch Events one.\r\n\r\nThere is a library on GitHub that is working toward bringing W3C touch events to IE 10 and 11: https://github.com/CamHenlin/TouchPolyfill \r\n\r\nRemoved support in Firefox refers to desktop Firefox only.","notes_by_num":{"1":"Can be enabled in Firefox using the dom.w3c_touch_events.enabled flag (disabled by default for site compatibility reasons)","2":"Supported on IE11 Mobile for phones with \"[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""},"usage_perc_y":63.38,"usage_perc_a":0.88,"ucprefix":false,"parent":"","keywords":"touchstart,touchend,touchmove,touchenter,touchleave,touchcancel","ie_id":"touchevents","chrome_id":"6156165603917824"},"matchesselector":{"title":"matches() DOM method","description":"Method of testing whether or not a DOM element matches a given selector. Formerly known (and largely supported with prefix) as matchesSelector.","spec":"https://dom.spec.whatwg.org/#dom-element-matches","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/Element.mozMatchesSelector","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/dom/HTMLElement/matchesSelector","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a x","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"a x","11.6":"a x","12":"a x","12.1":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"y"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"a x","12.1":"a x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to supporting the older specification's \"matchesSelector\" name rather than just \"matches\".","notes_by_num":{},"usage_perc_y":61.28,"usage_perc_a":29.73,"ucprefix":false,"parent":"","keywords":" matchesSelector","ie_id":"","chrome_id":""},"pointer-events":{"title":"CSS pointer-events (for HTML)","description":"This CSS property, when set to \"none\" allows elements to not receive hover/click events, instead the event will occur on anything behind it. ","spec":"http://wiki.csswg.org/spec/css4-ui#pointer-events","status":"unoff","links":[{"url":"http://robertnyman.com/2010/03/22/css-pointer-events-to-allow-clicks-on-underlying-elements/","title":"Article & tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-pointerevents","title":"has.js test"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Already part of the SVG specification, and all SVG-supporting browsers appear to support the property on SVG elements.","notes_by_num":{},"usage_perc_y":87.29,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"pointerevents","ie_id":"csspointerevents","chrome_id":""},"blobbuilder":{"title":"Blob constructing","description":"Construct Blobs (binary large objects) either using the BlobBuilder API (deprecated) or the Blob constructor.","spec":"http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/BlobBuilder","title":"MDN article on BlobBuilder"},{"url":"https://developer.mozilla.org/en-US/docs/DOM/Blob","title":"MDN article on Blobs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to only supporting the now deprecated BlobBuilder to create blobs.","notes_by_num":{},"usage_perc_y":77.73,"usage_perc_a":10.51,"ucprefix":true,"parent":"fileapi","keywords":"","ie_id":"blob","chrome_id":"5328783104016384"},"filereader":{"title":"FileReader API","description":"Method of reading the contents of a File or Blob object into memory","spec":"http://www.w3.org/TR/FileAPI/#dfn-filereader","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/FileReader","title":"FileReader API"},{"url":"http://docs.webplatform.org/wiki/apis/file/FileReader","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.43,"usage_perc_a":0,"ucprefix":false,"parent":"fileapi","keywords":"","ie_id":"filereader","chrome_id":"5171003185430528"},"filesystem":{"title":"Filesystem & FileWriter API","description":"Method of reading and writing files to a sandboxed file system.","spec":"http://www.w3.org/TR/file-system-api/","status":"unoff","links":[{"url":"http://www.html5rocks.com/en/tutorials/file/filesystem/","title":"HTML5 Rocks tutorial"},{"url":"http://docs.webplatform.org/wiki/apis/filesystem","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"The File API: Directories and System specification is no longer being maintained and support may be dropped in future versions.","notes_by_num":{},"usage_perc_y":45.73,"usage_perc_a":0.16,"ucprefix":false,"parent":"","keywords":"filewriter","ie_id":"filewriter","chrome_id":"5452478162141184"},"bloburls":{"title":"Blob URLs","description":"Method of creating URL handles to the specified File or Blob object.","spec":"http://www.w3.org/TR/FileAPI/#url","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/window.URL.createObjectURL","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":87.8,"usage_perc_a":0,"ucprefix":false,"parent":"fileapi","keywords":"createobjecturl","ie_id":"","chrome_id":""},"rellist":{"title":"relList (DOMTokenList)","description":"Method of easily manipulating rel attribute values on elements, using the DOMTokenList object (similar to classList).","spec":"https://html.spec.whatwg.org/multipage/semantics.html#dom-a-rellist","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/DOM/DOMTokenList","title":"MDN - DOMTokenList"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.14,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"typedarrays":{"title":"Typed Arrays","description":"JavaScript typed arrays provide a mechanism for accessing raw binary data much more efficiently.\r\n","spec":"http://www.khronos.org/registry/typedarray/specs/latest/","status":"other","links":[{"url":"https://developer.mozilla.org/en/javascript_typed_arrays","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a #2","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a #2","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"IE10 (and IE 10&11 mobile) does not support `Uint8ClampedArray`"},"usage_perc_y":86.21,"usage_perc_a":2.51,"ucprefix":false,"parent":"","keywords":"float64array,dataview,uint8array","ie_id":"typedarrays","chrome_id":"5135818813341696"},"deviceorientation":{"title":"DeviceOrientation events","description":"API for detecting orientation and motion events from the device running the browser.","spec":"http://www.w3.org/TR/orientation-event/","status":"wd","links":[{"url":"http://www.html5rocks.com/en/tutorials/device/orientation/","title":"HTML5 Rocks tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-orientation","title":"has.js test"},{"url":"http://html5labs.interoperabilitybridges.com/prototypes/device-orientation-events/device-orientation-events/info","title":"DeviceOrientation implementation prototype for IE10"},{"url":"http://aurelio.audero.it/demo/device-orientation-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a #1","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"p","4":"p","5":"p","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to the lack of compassneedscalibration event. Partial support also refers to the lack of devicemotion event support for Chrome 30- and Opera. Opera Mobile 14 lost the ondevicemotion event support. Firefox 3.6, 4 and 5 support the non-standard [MozOrientation](https://developer.mozilla.org/en/DOM/MozOrientation) event.","notes_by_num":{"1":"`compassneedscalibration` supported in IE11 only for compatible devices with Windows 8.1+."},"usage_perc_y":0.51,"usage_perc_a":83.28,"ucprefix":false,"parent":"","keywords":"","ie_id":"deviceorientation,devicemotion","chrome_id":"5874690627207168,5556931766779904"},"script-defer":{"title":"defer attribute for external scripts","description":"The boolean defer attribute on script elements allows the external JavaScript file to run when the DOM is loaded, without delaying page load first.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-script-defer","status":"ls","links":[{"url":"https://developer.mozilla.org/en/HTML/Element/script#Attributes","title":"MDN article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-defer","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/defer","title":"WebPlatform Docs"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older IE refers to a buggy implementation (see issue).","notes_by_num":{},"usage_perc_y":88.74,"usage_perc_a":4.96,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"nav-timing":{"title":"Navigation Timing API","description":"API for accessing timing information related to navigation and elements.","spec":"http://www.w3.org/TR/navigation-timing/","status":"rec","links":[{"url":"https://developer.mozilla.org/en/API/navigationTiming","title":"MDN article"},{"url":"http://www.html5rocks.com/en/tutorials/webperformance/basics/","title":"HTML5 Rocks tutorial"},{"url":"http://docs.webplatform.org/wiki/apis/navigation_timing","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Removed in iOS 8.1 due to poor performance.","notes_by_num":{},"usage_perc_y":81.7,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,performance.timing","ie_id":"navigationtimingapi","chrome_id":"5584144679567360"},"audio-api":{"title":"Web Audio API","description":"High-level JavaScript API for processing and synthesizing audio","spec":"http://www.w3.org/TR/webaudio/","status":"wd","links":[{"url":"https://github.com/corbanbrook/audionode.js","title":"Polyfill to support Web Audio API in Firefox"},{"url":"http://docs.webplatform.org/wiki/apis/webaudio","title":"WebPlatform Docs"},{"url":"http://www.doboism.com/projects/webaudio-compatibility/","title":"Additional browser compatibility tests for specific features"},{"url":"https://github.com/g200kg/WAAPISim","title":"Polyfill to enable Web Audio API through Firefox Audio Data api or flash"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Firefox versions < 25 support an alternative, deprecated audio API.\r\n\r\nChrome support [went through some changes](http://updates.html5rocks.com/2014/07/Web-Audio-Changes-in-m36) as of version 36.","notes_by_num":{},"usage_perc_y":67.15,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web-audio","ie_id":"webaudioapi","chrome_id":"6261718720184320"},"css-regions":{"title":"CSS Regions","description":"Method of flowing content into multiple elements.","spec":"http://www.w3.org/TR/css3-regions/","status":"wd","links":[{"url":"http://html.adobe.com/webstandards/cssregions/","title":"Adobe demos and samples"},{"url":"http://msdn.microsoft.com/en-us/ie/hh272902#_CSSConnected","title":"IE10 developer guide info"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@region","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"n d","20":"n d","21":"n d","22":"n d","23":"n d","24":"n d","25":"n d","26":"n d","27":"n d","28":"n d","29":"n d","30":"n d","31":"n d","32":"n d","33":"n d","34":"n d","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"y x"}},"notes":"Support in IE10 and IE11 is limited to using an iframe as a content source with the `-ms-flow-into: flow_name;` and `-ms-flow-from: flow_name;` syntax. ","notes_by_num":{},"usage_perc_y":13.43,"usage_perc_a":10.24,"ucprefix":false,"parent":"","keywords":"","ie_id":"regions","chrome_id":"5655612935372800"},"spellcheck-attribute":{"title":"Spellcheck attribute","description":"Attribute for `input`/`textarea` fields to enable/disable the browser's spellchecker.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#spelling-and-grammar-checking","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/HTML/Controlling_spell_checking_in_HTML_formsControlling_spell_checking_in_HTML_forms","title":"MDN article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"The partial support in mobile browsers results from their OS generally having built-in spell checking instead of using the wavy underline to indicate misspelled words. `spellcheck=\"false\"` does not seem to have any effect in these browsers.","notes_by_num":{},"usage_perc_y":60.31,"usage_perc_a":31.63,"ucprefix":false,"parent":"","keywords":"spelling","ie_id":"","chrome_id":""},"fullscreen":{"title":"Full Screen API","description":"API for allowing content (like a video or canvas element) to take up the entire screen.","spec":"http://www.w3.org/TR/fullscreen/","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/Using_full-screen_mode","title":"MDN article"},{"url":"http://jlongster.com/2011/11/21/canvas.html","title":"Blog post"},{"url":"http://hacks.mozilla.org/2012/01/using-the-fullscreen-api-in-web-browsers/","title":"Mozilla hacks article"},{"url":"http://docs.webplatform.org/wiki/dom/Element/requestFullscreen","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"n","11":"y x"},"and_uc":{"9.9":"n"}},"notes":"Partial support refers to supporting an earlier draft of the spec.","notes_by_num":{},"usage_perc_y":56.94,"usage_perc_a":12.5,"ucprefix":false,"parent":"","keywords":"full-screen","ie_id":"fullscreenapi","chrome_id":"5259513871466496"},"requestanimationframe":{"title":"requestAnimationFrame","description":"API allowing a more efficient way of running script-based animation, compared to traditional methods using timeouts.","spec":"http://www.w3.org/TR/animation-timing/#requestAnimationFrame","status":"cr","links":[{"url":"http://paulirish.com/2011/requestanimationframe-for-smart-animating/","title":"Blog post"},{"url":"http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/","title":"Mozilla Hacks article"},{"url":"http://docs.webplatform.org/wiki/dom/Window/requestAnimationFrame","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":85.57,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"requestanimationframe","chrome_id":"5233400470306816"},"input-range":{"title":"Range input type","description":"Form field type that allows the user to select a value using a slider widget.","spec":"https://html.spec.whatwg.org/multipage/forms.html#range-state-(type=range)","status":"ls","links":[{"url":"https://github.com/fryn/html5slider","title":"Polyfill for Firefox"},{"url":"https://github.com/freqdec/fd-slider","title":"Cross-browser polyfill"},{"url":"http://tutorialzine.com/2011/12/what-you-need-to-know-html5-range-input/","title":"Tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-range","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/range","title":"WebPlatform Docs"},{"url":"https://github.com/andreruffert/rangeslider.js","title":"rangeslider.js polyfill"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Currently all Android browsers with partial support hide the slider input field by default. However, the element [can be styled](http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/) to be made visible and usable.","notes_by_num":{},"usage_perc_y":87.46,"usage_perc_a":1.18,"ucprefix":false,"parent":"forms","keywords":"input type=\"range\"","ie_id":"","chrome_id":""},"matchmedia":{"title":"matchMedia","description":"API for finding out whether or not a media query applies to the document.","spec":"http://www.w3.org/TR/cssom-view/#dom-window-matchmedia","status":"wd","links":[{"url":"https://github.com/paulirish/matchMedia.js/","title":"matchMedia.js polyfill"},{"url":"https://developer.mozilla.org/en/DOM/window.matchMedia","title":"MDN article"},{"url":"https://developer.mozilla.org/en/CSS/Using_media_queries_from_code","title":"MDN tutorial"},{"url":"http://docs.webplatform.org/wiki/css/media_queries/apis/matchMedia","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.64,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"mediaquerylist","ie_id":"matchmedia","chrome_id":"4677872220372992"},"input-datetime":{"title":"Date and time input types","description":"Form field widget to easily allow users to enter a date or a time, generally by using a calendar/time input widget. Previously there was also a single field for both date & time, but this has been deprecated.","spec":"https://html.spec.whatwg.org/multipage/forms.html#date-state-(type=date)","status":"ls","links":[{"url":"http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-browser-datepickers-within-minutes/","title":"Datepicker tutorial w/polyfill"},{"url":"https://github.com/zoltan-dulac/html5Forms.js","title":"Polyfill for HTML5 forms"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-datetime;input-type-datetime-local","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/date","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Partial support in iOS refers to a lack of support for attributes like step, min, or max.\r\n\r\nOlder versions of Safari provide date-formatted text fields, but no real calendar widget.\r\n\r\nSome modified versions of the Android 4.x browser do have support for date/time fields.","notes_by_num":{},"usage_perc_y":60.76,"usage_perc_a":0,"ucprefix":false,"parent":"forms","keywords":"datepicker,timepicker,input type=\"date\",input type=\"time\"","ie_id":"daterelatedinputtypes,timerelatedinputtypes","chrome_id":"6640933999214592"},"input-color":{"title":"Color input type","description":"Form field allowing the user to select a color.","spec":"https://html.spec.whatwg.org/multipage/forms.html#color-state-(type=color)","status":"ls","links":[{"url":"http://www.html5tutorial.info/html5-color.php","title":"Tutorial"},{"url":"https://github.com/jonstipe/color-polyfill","title":"Polyfill"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/color","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a"}},"notes":"","notes_by_num":{},"usage_perc_y":60.93,"usage_perc_a":3.84,"ucprefix":false,"parent":"forms","keywords":"colour,input type=\"color\"","ie_id":"","chrome_id":""},"input-number":{"title":"Number input type","description":"Form field type for numbers.","spec":"https://html.spec.whatwg.org/multipage/forms.html#number-state-(type=number)","status":"ls","links":[{"url":"http://www.html5tutorial.info/html5-number.php","title":"Tutorial"},{"url":"https://github.com/jonstipe/number-polyfill","title":"Polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-number","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/number","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"iOS Safari, Android 4, Chrome for Android show number input, but do not use \"step\", \"min\" or \"max\" attributes or show increment/decrement buttons. Internet Explorer 10 and 11 do not show increment/decrement buttons. Firefox doesn't support [autocomplete content via datalist](http://codepen.io/graste/pen/bNoVKW) elements.","notes_by_num":{},"usage_perc_y":49.95,"usage_perc_a":38.03,"ucprefix":false,"parent":"forms","keywords":"spinner,input type=\"number\"","ie_id":"","chrome_id":""},"iframe-sandbox":{"title":"sandbox attribute for iframes","description":"Method of running external site pages with reduced privileges (e.g. no JavaScript) in iframes.","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-sandbox","status":"ls","links":[{"url":"http://blog.chromium.org/2010/05/security-in-depth-html5s-sandbox.html","title":"Chromium blog article"},{"url":"http://msdn.microsoft.com/en-us/hh563496","title":"MSDN article"},{"url":"http://docs.webplatform.org/wiki/html/attributes/sandbox","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":87.89,"usage_perc_a":0.54,"ucprefix":false,"parent":"","keywords":"","ie_id":"iframesandboxattribute","chrome_id":"5715536319086592"},"css-counters":{"title":"CSS Counters","description":"Method of controlling number values in generated content, using the counter-reset and counter-increment properties.","spec":"http://www.w3.org/TR/CSS21/generate.html#counters","status":"wd","links":[{"url":"http://onwebdev.blogspot.com/2012/02/css-counters-tutorial.html","title":"Tutorial and information"},{"url":"https://developer.mozilla.org/en/CSS_Counters","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/counter-reset","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-resize":{"title":"CSS resize property","description":"Method of allowing an element to be resized by the user, with options to limit to a given direction. ","spec":"http://www.w3.org/TR/css3-ui/#resize","status":"wd","links":[{"url":"http://css-tricks.com/almanac/properties/r/resize/","title":"CSS Tricks info"},{"url":"http://davidwalsh.name/textarea-resize","title":"On textarea resizing"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Opera 12.10+ currently only supports the resize property for textarea elements.","notes_by_num":{},"usage_perc_y":61.27,"usage_perc_a":0.23,"ucprefix":false,"parent":"","keywords":"horizontal,vertical","ie_id":"","chrome_id":""},"input-placeholder":{"title":"input placeholder attribute","description":"Method of setting placeholder text for text-like input fields, to suggest the expected inserted information.","spec":"https://html.spec.whatwg.org/multipage/forms.html#attr-input-placeholder","status":"ls","links":[{"url":"http://www.zachleat.com/web/placeholder/","title":"Article on usage"},{"url":"https://github.com/mathiasbynens/jquery-placeholder","title":"Polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-attr-placeholder","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/placeholder","title":"WebPlatform Docs"},{"url":"https://code.google.com/p/android/issues/detail?id=24626","title":"Issue 24626: Placeholder text for an input type="}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"a","11.1":"a","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari and Opera versions refers to lacking placeholder support on textarea elements. ","notes_by_num":{},"usage_perc_y":88.04,"usage_perc_a":1.15,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"spdy":{"title":"HTTP/2 protocol / SPDY","description":"Networking protocol for low-latency transport of content over the web. Originally started out from the SPDY protocol, now standardized as HTTP version 2.","spec":"http://http2.github.io/http2-spec/index.html","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/HTTP/2","title":"Wikipedia"},{"url":"http://dev.chromium.org/spdy/spdy-whitepaper","title":"SPDY whitepaper"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"u"}},"notes":"","notes_by_num":{},"usage_perc_y":71.53,"usage_perc_a":8.02,"ucprefix":false,"parent":"","keywords":"http2","ie_id":"http2","chrome_id":"5152586365665280"},"css-repeating-gradients":{"title":"CSS Repeating Gradients","description":"Method of defining a repeating linear or radial color gradient as a CSS image.","spec":"http://www.w3.org/TR/css3-images/#repeating-gradients","status":"cr","links":[{"url":"https://developer.mozilla.org/en/CSS/repeating-linear-gradient","title":"MDN article"},{"url":"http://www.css3files.com/gradient/#repeatinglineargradient","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/repeating-linear-gradient","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"a x","11.5":"a x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Firefox 10+, Chrome 26+ and Opera 11.6+ also support the new \"to (side)\" syntax.","notes_by_num":{},"usage_perc_y":88.79,"usage_perc_a":0.01,"ucprefix":false,"parent":"css-gradients","keywords":"","ie_id":"","chrome_id":""},"css-filters":{"title":"CSS Filter Effects","description":"Method of applying filter effects (like blur, grayscale, brightness, contrast and hue) to elements, previously only possible by using SVG.","spec":"http://www.w3.org/TR/filter-effects/","status":"wd","links":[{"url":"http://html5-demos.appspot.com/static/css/filters/index.html","title":"Demo file for WebKit browsers"},{"url":"http://www.html5rocks.com/en/tutorials/filters/understanding-css/","title":"HTML5Rocks article"},{"url":"http://dl.dropbox.com/u/3260327/angular/CSS3ImageManipulation.html","title":"Filter editor"},{"url":"http://bennettfeely.com/filters/","title":"Filter Playground"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a d #1","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"Note that this property is significantly different from and incompatible with Microsoft's [older \"filter\" property](http://msdn.microsoft.com/en-us/library/ie/ms530752%28v=vs.85%29.aspx).\r\n\r\nPartial support in Firefox before version 34 [only implemented the url() function of the filter property](https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Browser_compatibility)","notes_by_num":{"1":"Supported in Firefox under the `layout.css.filters.enabled` flag."},"usage_perc_y":72.81,"usage_perc_a":2.46,"ucprefix":false,"parent":"","keywords":"sepia,hue-rotate,invert,saturate","ie_id":"filters","chrome_id":"5822463824887808"},"getcomputedstyle":{"title":"getComputedStyle","description":"API to get the current computed CSS styles applied to an element. This may be the current value applied by an animation or as set by a stylesheet.","spec":"http://www.w3.org/TR/cssom/#dom-window-getcomputedstyle","status":"rec","links":[{"url":"https://developer.mozilla.org/en/DOM/window.getComputedStyle","title":"MDN article"},{"url":"http://ie.microsoft.com/testdrive/HTML5/getComputedStyle/","title":"Demo"},{"url":"http://snipplr.com/view/13523/","title":"Polyfill for IE"},{"url":"http://docs.webplatform.org/wiki/css/cssom/methods/getComputedStyle","title":"WebPlatform Docs"}],"categories":["CSS3","DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"a","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Firefox versions refers to requiring the second parameter to be included.\r\n\r\nPartial support in all other browsers refers to not supporting getComputedStyle on pseudo-elements.","notes_by_num":{},"usage_perc_y":90.65,"usage_perc_a":3.39,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"word-break":{"title":"CSS3 word-break","description":"Property to prevent or allow words to be broken over multiple lines between letters.","spec":"http://www.w3.org/TR/css3-text/#word-break","status":"wd","links":[{"url":"https://developer.mozilla.org/en/CSS/word-break","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/word-break","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to supporting the \"break-all\" value, but not the \"keep-all\" value.","notes_by_num":{},"usage_perc_y":27.01,"usage_perc_a":66.54,"ucprefix":false,"parent":"","keywords":"break-all,keep-all","ie_id":"","chrome_id":""},"viewport-units":{"title":"Viewport units: vw, vh, vmin, vmax","description":"Length units representing 1% of the viewport size for viewport width (vw), height (vh), the smaller of the two (vmin), or the larger of the two (vmax).","spec":"http://www.w3.org/TR/css3-values/#viewport-relative-lengths","status":"cr","links":[{"url":"http://css-tricks.com/viewport-sized-typography/","title":"Blog post"},{"url":"https://github.com/saabi/vminpoly","title":"Polyfill"},{"url":"https://github.com/rodneyrehm/viewport-units-buggyfill","title":"Buggyfill - Polyfill that fixes buggy support"},{"url":"http://blog.rodneyrehm.de/archives/34-iOS7-Mobile-Safari-And-Viewport-Units.html","title":"Back-Forward issue blog post"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"a","7.0-7.1":"a","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE9 refers to supporting \"vm\" instead of \"vmin\".\r\n\r\nPartial support in iOS7 is due to buggy behavior of the \"vh\" unit (see [workaround](https://gist.github.com/pburtchaell/e702f441ba9b3f76f587)).\r\n\r\nAll other partial support refers to not supporting the \"vmax\" unit. ","notes_by_num":{},"usage_perc_y":68.78,"usage_perc_a":14.06,"ucprefix":false,"parent":"","keywords":"vm,viewport-percentage","ie_id":"","chrome_id":""},"contentsecuritypolicy":{"title":"Content Security Policy 1.0","description":"Mitigate cross-site scripting attacks by whitelisting allowed sources of script, style, and other resources.","spec":"http://www.w3.org/TR/CSP/","status":"cr","links":[{"url":"http://html5rocks.com/en/tutorials/security/content-security-policy/","title":"HTML5Rocks article"},{"url":"http://content-security-policy.com/","title":"CSP Examples & Quick Reference"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"a #1","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y #2","15":"y #2","16":"y #2","17":"y #2","18":"y #2","19":"y #2","20":"y #2","21":"y #2","22":"y #2","23":"y #2","24":"y #2","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a #2","6":"y #2","6.1":"y #2","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a #2","6.0-6.1":"y #2","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y #2"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y x"}},"notes":"The standard HTTP header is `Content-Security-Policy` which is used unless otherwise noted.","notes_by_num":{"1":"Supported through the `X-Content-Security-Policy` header","2":"Supported through the `X-Webkit-CSP` header"},"usage_perc_y":75.25,"usage_perc_a":10.57,"ucprefix":false,"parent":"","keywords":"csp,security,header","ie_id":"contentsecuritypolicy","chrome_id":"5205088045891584"},"pagevisibility":{"title":"Page Visibility","description":"JavaScript API for determining whether a document is visible on the display","spec":"http://www.w3.org/TR/page-visibility/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/apis/timing/properties/visibilityState","title":"WebPlatform Docs"},{"url":"http://www.sitepoint.com/introduction-to-page-visibility-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/page-visibility-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y #1","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":85.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"visibilitystate","ie_id":"pagevisibilityapi","chrome_id":"5689697795833856"},"stricttransportsecurity":{"title":"Strict Transport Security","description":"Declare that a website is only accessible over a secure connection (HTTPS).","spec":"http://tools.ietf.org/html/rfc6797","status":"other","links":[{"url":"http://dev.chromium.org/sts","title":"Chromium article"},{"url":"https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security","title":"MDN article"},{"url":"https://www.owasp.org/index.php/HTTP_Strict_Transport_Security","title":"OWASP article"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"u","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"u"}},"notes":"The HTTP header is 'Strict-Transport-Security'.","notes_by_num":{},"usage_perc_y":69.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"sts,hsts,security,header","ie_id":"httpstricttransportsecurityhsts","chrome_id":"4941480133132288"},"style-scoped":{"title":"Scoped CSS","description":"Allows CSS rules to be scoped to part of the document, based on the position of the style element.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#attr-style-scoped","status":"ls","links":[{"url":"https://github.com/PM5544/scoped-polyfill","title":"Polyfill"},{"url":"http://html5doctor.com/the-scoped-attribute/","title":"HTML5 Doctor article"},{"url":"http://updates.html5rocks.com/2012/03/A-New-Experimental-Feature-style-scoped","title":"HTML5Rocks article"}],"categories":["CSS","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d #1","21":"n d #1","22":"n d #1","23":"n d #1","24":"n d #1","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"u","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":15.51,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"scope","ie_id":"scopedstyles","chrome_id":"5374137958662144"},"svg-fragment":{"title":"SVG fragment identifiers","description":"Method of displaying only a part of an SVG image by defining a view ID or view box dimensions as the file's fragment identifier.","spec":"http://www.w3.org/TR/SVG/linking.html#SVGFragmentIdentifiers","status":"rec","links":[{"url":"http://www.broken-links.com/2012/08/14/better-svg-sprites-with-fragment-identifiers/","title":"Blog post"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"u","11.1":"u","11.5":"u","11.6":"u","12":"u","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":75.65,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"fragments,sprite","ie_id":"","chrome_id":""},"outline":{"title":"CSS outline","description":"The CSS outline property is a shorthand property for setting one or more of the individual outline properties outline-style, outline-width and outline-color in a single rule. In most cases the use of this shortcut is preferable and more convenient.","spec":"http://www.w3.org/TR/CSS2/ui.html#propdef-outline","status":"rec","links":[{"url":"http://dev.w3.org/csswg/css3-ui/#outline","title":"CSS Basic User Interface Module Level 3"},{"url":"https://developer.mozilla.org/en-US/docs/CSS/outline","title":"Mozilla Developer Network: outline"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y #1","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Also supports the value of `invert` for `outline-color`. (support of this value is optional for browsers)"},"usage_perc_y":94.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"-moz-outline,outline-width,outline-style,outline-color","ie_id":"","chrome_id":""},"download":{"title":"Download attribute","description":"When used on an anchor, this attribute signifies that the browser should download the resource the anchor points to rather than navigate to it.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#downloading-resources","status":"ls","links":[{"url":"http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download","title":"HTML5Rocks post"},{"url":"http://html5-demos.appspot.com/static/a.download.html","title":"Demo: creating a text file and downloading it."}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":61.16,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"download,a.download,a[download],download attribute","ie_id":"adownloadattribute","chrome_id":"6473924464345088"},"pointer":{"title":"Pointer events","description":"This specification integrates various inputs from mice, touchscreens, and pens, making separate implementations no longer necessary and authoring for cross-device pointers easier. Not to be mistaken with the unrelated \"pointer-events\" CSS property.","spec":"http://www.w3.org/TR/pointerevents/","status":"rec","links":[{"url":"http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx","title":"Implementation of Pointer Events in IE10"},{"url":"http://blogs.msdn.com/b/eternalcoding/archive/2013/01/16/hand-js-a-polyfill-for-supporting-pointer-events-on-every-browser.aspx","title":"Hand.js, the polyfill for browsers only supporting Touch Events"},{"url":"http://blogs.msdn.com/b/davrous/archive/2013/02/20/handling-touch-in-your-html5-apps-thanks-to-the-pointer-events-of-ie10-and-windows-8.aspx","title":"Article & tutorial"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"u","7":"u","7.1":"u","8":"u"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"n","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"a x","11":"y"},"and_uc":{"9.9":"p"}},"notes":"Partial support in IE10 refers the lack of pointerenter and pointerleave events. Firefox Nightly provides 'dom.w3c_pointer_events.enabled' option to support this specification starting with version 28.","notes_by_num":{},"usage_perc_y":8.5,"usage_perc_a":1.67,"ucprefix":false,"parent":"","keywords":"pointerdown,pointermove,pointerup,pointercancel,pointerover,pointerout,pointerenter,pointerleave","ie_id":"pointerevents","chrome_id":"4504699138998272"},"user-select-none":{"title":"CSS user-select: none","description":"Method of preventing text/element selection using CSS. ","spec":"https://developer.mozilla.org/en-US/docs/CSS/user-select","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/CSS/user-select","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/u/user-select/","title":"CSS Tricks article"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh781492(v=vs.85).aspx","title":"MSDN Documentation"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","TP":"y x"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"u","5":"u","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y x","11":"y x"},"and_uc":{"9.9":"y x"}},"notes":"Currently the user-select property does not appear in any W3C specification. Support information here is only for \"none\" value, not others.","notes_by_num":{},"usage_perc_y":89.01,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"webp":{"title":"WebP image format","description":"Image format that supports lossy and lossless compression, as well as animation and alpha transparency.","spec":"https://developers.google.com/speed/webp/","status":"other","links":[{"url":"https://developers.google.com/speed/webp/","title":"Official website"},{"url":"http://antimatter15.github.io/weppy/demo.html","title":"Polyfill for browsers with WebM support"},{"url":"http://libwebpjs.appspot.com/","title":"Decoder in JS"},{"url":"http://webpjs.appspot.com/","title":"Polyfill for browsers with or without WebM support (i.e. IE6-IE9, Safari/iOS version 6.1 and below; Firefox versions 24 and bel"},{"url":"https://developers.google.com/speed/webp/faq#which_web_browsers_natively_support_webp","title":"Official website FAQ - Which web browsers natively support WebP?"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"n","5":"n","6":"p","7":"p","8":"p","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"p","11":"p","11.1":"a","11.5":"a","11.6":"a","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Chrome, Opera and Android refers to browser not supporting lossless and alpha versions of WebP. Animated webp images are supported in Chrome 32+ and Opera 19+.","notes_by_num":{},"usage_perc_y":57.48,"usage_perc_a":1.54,"ucprefix":false,"parent":"","keywords":"","ie_id":"webpimageformatsupport","chrome_id":"6471725441089536,4785074604081152"},"intrinsic-width":{"title":"Intrinsic & Extrinsic Sizing","description":"Allows for the heights and widths to be specified in intrinsic values using the fill-available, max-content, min-content, and fit-content properties.","spec":"http://www.w3.org/TR/css3-sizing/","status":"wd","links":[{"url":"http://demosthenes.info/blog/662/Design-From-the-Inside-Out-With-CSS-MinContent","title":"Min-Content tutorial"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Prefixes are on the values, not the property names (e.g. -webkit-min-content) Firefox currently supports the \"-moz-available\" property rather than \"-moz-fill-available\".","notes_by_num":{},"usage_perc_y":71,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"fill-available,max-content,min-content,fit-content,contain-floats","ie_id":"cssintrinsicsizing","chrome_id":"5901353784180736"},"cryptography":{"title":"Web Cryptography","description":"JavaScript API for performing basic cryptographic operations in web applications","spec":"http://www.w3.org/TR/WebCryptoAPI/","status":"wd","links":[{"url":"http://www.slideshare.net/Channy/the-history-and-status-of-web-crypto-api","title":"The History and Status of Web Crypto API"},{"url":"http://research.microsoft.com/en-us/projects/msrjscrypto/","title":"Microsoft Research JavaScript Cryptography Library"},{"url":"http://bitwiseshiftleft.github.io/sjcl/","title":"Cross-browser cryptography library"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"a x #1","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"n d #2","33":"n d #2","34":"a #4","35":"a #4","36":"a #4","37":"a #4","38":"a #4","39":"a #4"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"y x #3","8":"y x #3"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"y x #3","8.1":"y x #3"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"y"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"p","11":"a x #1"},"and_uc":{"9.9":"p"}},"notes":"Many browsers support the `[crypto.getRandomValues()](#feat=getrandomvalues)` method, but not actual cryptography functionality under `crypto.subtle`. \r\n\r\nFirefox also has support for [unofficial features](https://developer.mozilla.org/en-US/docs/JavaScript_crypto). \r\n\r\nIn Chrome the API is only usable over secure connections. ([corresponding bug](https://code.google.com/p/chromium/issues/detail?id=373032))","notes_by_num":{"1":"Support in IE11 is based an older version of the specification. ","2":"Supported in Firefox behind the `dom.webcrypto.enabled` flag. ","3":"Supported in Safari using the `crypto.webkitSubtle` prefix","4":"Partial support in Firefox is [described here](https://docs.google.com/spreadsheet/ccc?key=0AiAcidBZRLxndE9LWEs2R1oxZ0xidUVoU3FQbFFobkE#gid=1)"},"usage_perc_y":49.85,"usage_perc_a":18.49,"ucprefix":false,"parent":"","keywords":"subtle,subtlecrypto","ie_id":"webcryptoapi","chrome_id":"5030265697075200"},"template":{"title":"HTML templates","description":"Method of declaring a portion of reusable markup that is parsed but not rendered until cloned.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-template-element","status":"ls","links":[{"url":"http://www.html5rocks.com/en/tutorials/webcomponents/template/","title":"HTML5Rocks - HTML's New template Tag"},{"url":"http://polymer-project.org","title":"Polymer project (polyfill & web components framework)"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":68.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components, template","ie_id":"templateelement","chrome_id":"5207287069147136"},"opus":{"title":"Opus","description":"Royalty-free open audio codec by IETF, which incorporated SILK from Skype and CELT from Xiph.org, to serve higher sound quality and lower latency at the same bitrate.","spec":"http://tools.ietf.org/html/rfc6716","status":"other","links":[{"url":"https://hacks.mozilla.org/2012/07/firefox-beta-15-supports-the-new-opus-audio-format/","title":"Introduction of Opus by Mozilla"},{"url":"http://www.ietf.org/mail-archive/web/rtcweb/current/msg04953.html","title":"Google's statement about the use of VP8 and Opus codec for WebRTC standard"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"For Opera the Linux version may be able to play it when the GStreamer module is up to date and the served mime-type is 'audio/ogg'.","notes_by_num":{},"usage_perc_y":45.47,"usage_perc_a":0,"ucprefix":false,"parent":"audio","keywords":"","ie_id":"","chrome_id":"4891189287321600"},"jpegxr":{"title":"JPEG XR image format","description":"The latest JPEG image format of Joint Photographic Experts Group which boasts better compression and supports lossless compression, alpha channel, and 48-bit deep color over normal jpg format.","spec":"http://www.itu.int/rec/T-REC-T.832","status":"other","links":[{"url":"http://msdn.microsoft.com/en-us/library/windows/desktop/hh707223(v=vs.85).aspx","title":"Microsoft JPEG XR Codec Overview"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.99,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"channel-messaging":{"title":"Channel messaging","description":"Method for having two-way communication between browsing contexts (using MessageChannel)","spec":"http://www.w3.org/TR/webmessaging/#channel-messaging","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/window-postmessage-messagechannel/#channel","title":"An Introduction to HTML5 web messaging"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `dom.messageChannel.enabled` flag. Reported to not work in web workers."},"usage_perc_y":74.4,"usage_perc_a":0,"ucprefix":false,"parent":"x-doc-messaging","keywords":"","ie_id":"messagechannels","chrome_id":"6710044586409984"},"css3-tabsize":{"title":"CSS3 tab-size","description":"Method of customizing the width of the tab character. Only effective using 'white-space: pre' or 'white-space: pre-wrap'.","spec":"http://www.w3.org/TR/css3-text/#tab-size1","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/tab-size","title":"MDN article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y x"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":74.31,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"tab-size,tab-width","ie_id":"","chrome_id":""},"mutationobserver":{"title":"Mutation Observer","description":"Method for observing and reacting to changes to the DOM. Replaces MutationEvents, which is deprecated.","spec":"http://www.w3.org/TR/dom/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver","title":"MutationObserver from MDN"},{"url":"https://github.com/webcomponents/webcomponentsjs","title":"Polyfill"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"p","4.1":"p","4.2-4.3":"p","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"When the content of a node with a single CharacterData child node is changed by innerHTML attribute and the node have a single different one as a result, WebKit browsers consider it as a characterData mutation of the child CharacterData node, while other browsers think it as a childList mutation of the parent node.","notes_by_num":{},"usage_perc_y":83.42,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"MutationObserver","ie_id":"mutationobservers","chrome_id":"5021194726146048"},"css-selection":{"title":"::selection CSS pseudo-element","description":"The ::selection CSS pseudo-element applies rules to the portion of a document that has been highlighted (e.g., selected with the mouse or another pointing device) by the user.","spec":"https://developer.mozilla.org/en-US/docs/Web/CSS/::selection","status":"unoff","links":[{"url":"http://quirksmode.org/css/selectors/selection.html","title":"::selection test"},{"url":"http://docs.webplatform.org/wiki/css/selectors/pseudo-elements/::selection","title":"WebPlatform Docs"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":77.52,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"::selection,selection","ie_id":"","chrome_id":""},"css-placeholder":{"title":":placeholder-shown CSS pseudo-class","description":"The :placeholder-shown pseudo-class represents the placeholder contents of a form field with placeholder text.","spec":"http://www.w3.org/TR/selectors4/#placeholder","status":"wd","links":[{"url":"http://msdn.microsoft.com/en-us/library/ie/hh772745(v=vs.85).aspx","title":"MSDN article"},{"url":"http://css-tricks.com/snippets/css/style-placeholder-text/","title":"CSS-Tricks article with all prefixes"},{"url":"http://wiki.csswg.org/ideas/placeholder-styling","title":"CSSWG discussion"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"u","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to support for alternative syntax: ::-webkit-input-placeholder (Chrome/Safari/Opera),\r\n::-moz-placeholder (Firefox) and \r\n:-ms-input-placeholder (IE). ","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":88.72,"ucprefix":false,"parent":"","keywords":"::placeholder,placeholder","ie_id":"","chrome_id":""},"css-deviceadaptation":{"title":"CSS Device Adaptation","description":"A standard way to override the size of viewport in web page, standardizing and replacing Apple's own popular viewport implementation.","spec":"http://www.w3.org/TR/css-device-adapt/","status":"wd","links":[{"url":"https://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/","title":"Introduction to meta viewport and @viewport in Opera Mobile"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh708740(v=vs.85).aspx","title":"Device adaptation in Internet Explorer 10"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #1","TP":"a x #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"u","7":"u","7.1":"u","8":"u"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"a x #2"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"a x #2","11.1":"a x #2","11.5":"a x #2","12":"a x #2","12.1":"a x #2","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"a x #1","11":"a x #1"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"IE only supports the 'width' and 'height' properties.","2":"Opera Mobile and Opera Mini only support the 'orientation' property."},"usage_perc_y":0,"usage_perc_a":13.02,"ucprefix":false,"parent":"","keywords":"viewport","ie_id":"","chrome_id":""},"text-emphasis":{"title":"text-emphasis styling","description":"Method of using small symbols next to each glyph to emphasize a run of text, commonly used in East Asian languages. The `text-emphasis` shorthand, and its `text-emphasis-style` and `text-emphasis-color` longhands, can be used to apply marks to the text. The `text-emphasis-position` property, which inherits separately, allows setting the emphasis marks' position with respect to the text.","spec":"http://www.w3.org/TR/css-text-decor-3/#text-emphasis","status":"cr","links":[{"url":"https://github.com/zmmbreeze/jquery.emphasis/","title":"A javascript fallback for CSS3 emphasis mark."}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"a x #1","26":"a x #1","27":"a x #1","28":"a x #1","29":"a x #1","30":"a x #1","31":"a x #1","32":"a x #1","33":"a x #1","34":"a x #1","35":"a x #1","36":"a x #1","37":"a x #1","38":"a x #1","39":"a x #1","40":"a x #1","41":"a x #1","42":"a x #1","43":"a x #1","44":"a x #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"a x #1","7":"a x #1","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"a x #1","22":"a x #1","23":"a x #1","24":"a x #1","25":"a x #1","26":"a x #1","27":"a x #1","28":"a x #1","29":"a x #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x #1","4.4.3-4.4.4":"a x #1","37":"a x #1"},"bb":{"7":"n","10":"a x #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x #1"},"and_chr":{"41":"a x #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x #1"}},"notes":"Some old webkit browsers (like Chrome 24) support `-webkit-text-emphasis`, but does not support CJK languages and is therefore considered unsupported.","notes_by_num":{"1":"Partial support refers to incorrect support for `-webkit-text-emphasis-position`. These browsers support `over` and `under` as values, but not the added `left` and `right` values required by the spec."},"usage_perc_y":8.96,"usage_perc_a":53.56,"ucprefix":false,"parent":"","keywords":"text-emphasis,text-emphasis-position,text-emphasis-style,text-emphasis-color","ie_id":"","chrome_id":""},"midi":{"title":"Web MIDI API","description":"The Web MIDI API specification defines a means for web developers to enumerate, manipulate and access MIDI devices","spec":"http://webaudio.github.io/web-midi-api/","status":"wd","links":[{"url":"https://github.com/cwilso/WebMIDIAPIShim","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"webmidiapi","chrome_id":"4923613069180928"},"canvas-blending":{"title":"Canvas blend modes","description":"Method of defining the effect resulting from overlaying two layers on a Canvas element. ","spec":"http://www.w3.org/TR/compositing-1/#blending","status":"cr","links":[{"url":"http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/","title":"Blog post"}],"categories":["Canvas"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":70.11,"usage_perc_a":0,"ucprefix":false,"parent":"canvas","keywords":"","ie_id":"compositingandblendingincanvas2d","chrome_id":""},"clipboard":{"title":"Clipboard API","description":"API to provide copy, cut and paste functionality using the OS clipboard.","spec":"http://www.w3.org/TR/clipboard-apis/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent","title":"MDN page on ClipboardEvent"},{"url":"http://www.deluxeblogtips.com/2010/06/javascript-copy-to-clipboard.html","title":"Blog post on cross-browser usage"}],"categories":["JS API"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"u","3.2":"u","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE refers using [a non-standard method](http://msdn.microsoft.com/en-us/library/ie/ms535220%28v=vs.85%29.aspx) of interacting with the clipboard. For other browsers it refers to not supporting the ClipboardEvent constructor.","notes_by_num":{},"usage_perc_y":11.62,"usage_perc_a":74.26,"ucprefix":false,"parent":"","keywords":"cut,copy,paste,clipboarddata","ie_id":"clipboardapi","chrome_id":""},"rtcpeerconnection":{"title":"WebRTC Peer-to-peer connections","description":"Method of allowing two users to communicate directly, browser to browser using the RTCPeerConnection API.","spec":"http://www.w3.org/TR/webrtc/#peer-to-peer-connections","status":"wd","links":[{"url":"http://www.webrtc.org/","title":"WebRTC Project site"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y x"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"BlackBerry 10 recognizes RTCPeerConnection but real support is unconfirmed.","notes_by_num":{},"usage_perc_y":57.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"webrtcwebrtcv10api","chrome_id":"6612462929444864"},"css3-cursors":{"title":"CSS3 Cursors (original values)","description":"CSS3 cursor values added in the 2004 spec, including none, context-menu, cell, vertical-text, alias, copy, no-drop, not-allowed, nesw-resize, nwse-resize, col-resize, row-resize and all-scroll. ","spec":"http://www.w3.org/TR/css3-ui/#cursor","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor","title":"MDN Documentation"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"u"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE refers to no support for the alias, cell, copy, ew-resize, ns-resize, nesw-resize, nwse-resize or context-menu cursors. Opera 12.10- does not support 'none' or a URI.","notes_by_num":{},"usage_perc_y":61.84,"usage_perc_a":3.72,"ucprefix":false,"parent":"","keywords":"cursors, pointers","ie_id":"","chrome_id":""},"css3-cursors-newer":{"title":"CSS3 Cursors (new values)","description":"Support for `zoom-in` and `zoom-out` values for the CSS3 `cursor` property.","spec":"http://www.w3.org/TR/css3-ui/#cursor","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor","title":"MDN Documentation"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Chrome, Safari and Firefox also support the unofficial `grab` and `grabbing` values (with prefix)","notes_by_num":{},"usage_perc_y":51.13,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"cursors, pointers","ie_id":"","chrome_id":""},"webvtt":{"title":"WebVTT - Web Video Text Tracks","description":"Format for marking up text captions for multimedia resources.","spec":"http://dev.w3.org/html5/webvtt/","status":"unoff","links":[{"url":"http://www.html5rocks.com/en/tutorials/track/basics/","title":"Getting Started With the Track Element"},{"url":"https://dev.opera.com/articles/view/an-introduction-to-webvtt-and-track/","title":"An Introduction to WebVTT and track"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n d","25":"n d","26":"n d","27":"n d","28":"n d","29":"n d","30":"n d","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"n"}},"notes":"WebVTT must be used with the element.\r\n\r\nFirefox currently lacks support for the ::cue pseudo-element.","notes_by_num":{},"usage_perc_y":80.02,"usage_perc_a":0,"ucprefix":false,"parent":"video","keywords":"captions,track","ie_id":"","chrome_id":"6719115557339136"},"promises":{"title":"Promises","description":"A promise represents the eventual result of an asynchronous operation.","spec":"https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects","status":"other","links":[{"url":"http://promises-aplus.github.io/promises-spec/","title":"Promises/A+ spec"},{"url":"http://www.chromestatus.com/features/5681726336532480","title":"Chromium dashboard - ES6 Promises"},{"url":"http://www.html5rocks.com/en/tutorials/es6/promises/","title":"JavaScript Promises: There and back again - HTML5 Rocks"},{"url":"https://github.com/jakearchibald/ES6-Promises","title":"A polyfill for ES6-style Promises"}],"categories":["JS API"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"a","28":"a","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"a","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"a","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"p"}},"notes":"","notes_by_num":{},"usage_perc_y":63.85,"usage_perc_a":0.26,"ucprefix":false,"parent":"","keywords":"futures","ie_id":"","chrome_id":"5681726336532480"},"css-sticky":{"title":"CSS position:sticky","description":"Keeps elements positioned as \"fixed\" or \"relative\" depending on how it appears in the viewport. As a result the element is \"stuck\" when necessary while scrolling.","spec":"http://dev.w3.org/csswg/css-position/#sticky-positioning","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit","title":"HTML5Rocks"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/position","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/position","title":"WebPlatform Docs"},{"url":"https://github.com/filamentgroup/fixed-sticky","title":"Polyfill"},{"url":"https://github.com/wilddeer/stickyfill","title":"Another polyfill"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n d #2","24":"n d #2","25":"n d #2","26":"n d #2","27":"n d #2","28":"n d #2","29":"n d #2","30":"n d #2","31":"n d #2","32":"n d #2","33":"n d #2","34":"n d #2","35":"n d #2","36":"n d #2","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox by setting the about:config preference layout.css.sticky.enabled to true","2":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":20.29,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"positionsticky","chrome_id":"6190250464378880"},"dialog":{"title":"Dialog element","description":"Method of easily creating custom dialog boxes to display to the user with modal or non-modal options. Also includes a `::backdrop` pseudo-element for behind the element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-dialog-element","status":"ls","links":[{"url":"https://github.com/GoogleChrome/dialog-polyfill","title":"Polyfill"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n d #2","20":"n d #2","21":"n d #2","22":"n d #2","23":"n d #2","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled through the \"Experimental Web Platform features\" flag in `chrome://flags`","2":"Enabled through the \"Experimental Web Platform features\" flag in `opera://flags`"},"usage_perc_y":42.49,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"HTMLDialogElement,showModal,backdrop","ie_id":"dialogelementformodals","chrome_id":"5770237022568448"},"css-variables":{"title":"CSS Variables","description":"Permits the declaration and usage of cascading variables in stylesheets.","spec":"http://www.w3.org/TR/css-variables/","status":"wd","links":[{"url":"https://hacks.mozilla.org/2013/12/css-variables-in-firefox-nightly/","title":"Mozilla hacks article (older syntax)"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables","title":"MDN article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css variables","ie_id":"cssvariables","chrome_id":"6401356696911872"},"vibration":{"title":"Vibration API","description":"Method to access the vibration mechanism of the hosting device.","spec":"http://www.w3.org/TR/vibration/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/Guide/API/Vibration","title":"MDN article"},{"url":"http://davidwalsh.name/vibration-api","title":"Vibration API sample code & demo"},{"url":"http://code.tutsplus.com/tutorials/html5-vibration-api--mobile-22585","title":"Tuts+ article"},{"url":"http://aurelio.audero.it/demo/vibration-api-demo.html","title":"Demo"},{"url":"http://www.illyism.com/journal/vibration-api","title":"Article and Usage Examples"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":64.68,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"vibration,mobile,device","ie_id":"vibrationapi","chrome_id":"5698768766763008"},"css-backgroundblendmode":{"title":"CSS background-blend-mode","description":"Allows blending between CSS background images, gradients, and colors.","spec":"http://www.w3.org/TR/compositing-1/#background-blend-mode","status":"cr","links":[{"url":"http://codepen.io/bennettfeely/pen/rxoAc","title":"codepen example"},{"url":"https://medium.com/web-design-technique/6b51bf53743a","title":"Blog post"},{"url":"http://bennettfeely.com/gradients","title":"Demo"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":62.06,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css blend modes,css blending modes,blending,multiply,screen,background","ie_id":"","chrome_id":"5768037999312896"},"css-mixblendmode":{"title":"Blending of HTML/SVG elements","description":"Allows blending between arbitrary SVG and HTML elements","spec":"http://www.w3.org/TR/compositing-1/#mix-blend-mode","status":"cr","links":[{"url":"http://codepen.io/bennettfeely/pen/csjzd","title":"codepen example"},{"url":"http://css-tricks.com/basics-css-blend-modes/","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1","40":"n d #1","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":28.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"mix-blend-mode,css blend modes,css blending modes","ie_id":"mixblendmode","chrome_id":"6362616360337408"},"web-speech":{"title":"Web Speech API","description":"Method to provide speech input and text-to-speech output features in a web browser.","spec":"https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/introducing-web-speech-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/web-speech-api-demo.html","title":"Demo"},{"url":"http://zenorocha.github.io/voice-elements/","title":"Advanced demo and resource"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"a x","7":"a x","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Chrome refers to some attributes missing. Partial support in Safari refers to only Speech Synthesis supported.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":54.81,"ucprefix":false,"parent":"","keywords":"speech,recognition,ASR","ie_id":"webspeechapiinput","chrome_id":"5908775487668224"},"high-resolution-time":{"title":"High Resolution Time API","description":"Method to provide the current time in sub-millisecond resolution and such that it is not subject to system clock skew or adjustments. Called using `performance.now()`","spec":"http://www.w3.org/TR/hr-time/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()","title":"MDN article"},{"url":"http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/discovering-the-high-resolution-time-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/high-resolution-time-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":76.9,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,now,testing","ie_id":"highresolutiontime","chrome_id":"5349124069130240"},"battery-status":{"title":"Battery Status API","description":"Method to provide information about the battery status of the hosting device.","spec":"http://www.w3.org/TR/battery-status/","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/WebAPI/Battery_Status","title":"MDN Docs"},{"url":"http://www.smartjava.org/examples/webapi-battery/","title":"Simple demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"a #1","31":"a #1","32":"a #1","33":"a #1","34":"a #1","35":"a #1","36":"a #1","37":"a #1","38":"a #1","39":"a #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n d","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"a #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a #1"}},"notes":"","notes_by_num":{"1":"Partial support refers to support for the older specification's `navigator.battery` rather than `navigator.getBattery()` to access the `BatteryManager`."},"usage_perc_y":41.66,"usage_perc_a":15.88,"ucprefix":false,"parent":"","keywords":"navigator.battery,navigator.getbattery,batterymanager","ie_id":"batterystatusapi","chrome_id":"4537134732017664"},"serviceworkers":{"title":"Service Workers","description":"Method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline.","spec":"https://slightlyoff.github.io/ServiceWorker/spec/service_worker/","status":"wd","links":[{"url":"http://www.html5rocks.com/en/tutorials/service-worker/introduction/","title":"HTML5Rocks article (introduction)"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker_API","title":"MDN article"},{"url":"https://jakearchibald.github.io/isserviceworkerready/resources.html","title":"List of various resources"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"u"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Details on partial support can be found on [is ServiceWorker Ready?](https://jakearchibald.github.io/isserviceworkerready/)","notes_by_num":{"1":"Partial support can be enabled in Firefox with the `dom.serviceWorkers.enabled` flag."},"usage_perc_y":0,"usage_perc_a":39.02,"ucprefix":false,"parent":"","keywords":"","ie_id":"serviceworker","chrome_id":"6561526227927040"},"text-decoration":{"title":"text-decoration styling","description":"Method of defining the type, style and color of lines in the text-decoration property. These can be defined as shorthand (e.g. `text-decoration: line-through dashed blue`) or as single properties (e.g. `text-decoration-color: blue`)","spec":"http://www.w3.org/TR/css-text-decor-3/#line-decoration","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-style","title":"MDN Documentation for text-decoration-style"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color","title":"MDN Documentation for text-decoration-color"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-line","title":"MDN Documentation for text-decoration-line"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n x d #1","27":"n x d #1","28":"n x d #1","29":"n x d #1","30":"n x d #1","31":"n x d #1","32":"n x d #1","33":"n x d #1","34":"n x d #1","35":"n x d #1","36":"n x d #1","37":"n x d #1","38":"n x d #1","39":"n x d #1","40":"n x d #1","41":"n x d #1","42":"n x d #1","43":"n x d #1","44":"n x d #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a x #2","8":"a x #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a x #2","8.1":"a x #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"All browsers support the CSS2 version of `text-decoration`, which matches only the `text-decoration-line` values (`underline`, etc.)","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Partial support in Safari refers to not supporting the text-decoration-style property."},"usage_perc_y":12.14,"usage_perc_a":7.36,"ucprefix":false,"parent":"","keywords":"text-decoration-line,text-decoration-style,text-decoration-color","ie_id":"","chrome_id":""},"speech-synthesis":{"title":"Speech Synthesis API","description":"A web API for controlling a text-to-speech output.","spec":"https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2014/01/Web-apps-that-talk---Introduction-to-the-Speech-Synthesis-API","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/talking-web-pages-and-the-speech-synthesis-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/speech-synthesis-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":53.33,"usage_perc_a":0,"ucprefix":false,"parent":"web-speech","keywords":"speech,synthesis,speechSynthesis,TTS,SpeechSynthesisUtterance,","ie_id":"webspeechapisynthesis","chrome_id":"4782875580825600"},"user-timing":{"title":"User Timing API","description":"Method to help web developers measure the performance of their applications by giving them access to high precision timestamps.","spec":"http://www.w3.org/TR/user-timing/","status":"rec","links":[{"url":"http://www.sitepoint.com/discovering-user-timing-api/","title":"SitePoint article"},{"url":"http://www.html5rocks.com/en/tutorials/webperformance/usertiming/","title":"HTML5Rocks article"},{"url":"https://gist.github.com/pmeenan/5902672","title":"Polyfill"},{"url":"http://aurelio.audero.it/demo/user-timing-api-demo.html","title":"Demo"},{"url":"https://github.com/nicjansma/usertiming.js","title":"UserTiming.js polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":59.26,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,testing,mark,measure","ie_id":"usertimingapi","chrome_id":"5066549580791808"},"srcset":{"title":"Srcset attribute","description":"Allows authors to define various image resources and \"hints\" that assist a user agent to determine the most appropriate image source to display (e.g. high-resolution displays, small monitors, etc).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset","status":"ls","links":[{"url":"https://www.webkit.org/blog/2910/improved-support-for-high-resolution-displays-with-the-srcset-image-attribute/","title":"Improved support for high-resolution displays with the srcset image attribute"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"a #2","35":"a #2","36":"a #2","37":"a #2","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a #2","8":"a #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"a #2","22":"a #2","23":"a #2","24":"a #2","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a #2","8.1":"a #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a #2"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox by setting the about:config preference dom.image.srcset.enabled to true","2":"Supports the subset of the syntax for resolution switching (using the `x` descriptor), but not the full syntax that can be used with `sizes` (using the `w` descriptor)."},"usage_perc_y":41.66,"usage_perc_a":9.5,"ucprefix":false,"parent":"","keywords":"","ie_id":"imgsrcset","chrome_id":"4644337115725824"},"ambient-light":{"title":"Ambient Light API","description":"Defines events that provide information about the ambient light level, as measured by a device's light sensor.","spec":"http://www.w3.org/TR/ambient-light/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/ambient-light-api-demo.html","title":"Demo"},{"url":"http://modernweb.com/2014/05/27/introduction-to-the-ambient-light-api/","title":"Article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Firefox desktop supports this API only on Mac OS X. [Support for Windows 7 is in progress](https://bugzilla.mozilla.org/show_bug.cgi?id=754199)","notes_by_num":{},"usage_perc_y":11.62,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"ambientlightevents","chrome_id":"5298357018820608"},"will-change":{"title":"CSS will-change property","description":"Method of optimizing animations by informing the browser which elements will change and what properties will change.","spec":"http://dev.w3.org/csswg/css-will-change/","status":"wd","links":[{"url":"https://dev.opera.com/articles/css-will-change-property/","title":"Detailed article"},{"url":"http://aerotwist.com/blog/bye-bye-layer-hacks/","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `layout.css.will-change.enabled` flag"},"usage_perc_y":44.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"scroll-position","ie_id":"csswillchange","chrome_id":"5954199330226176"},"css-shapes":{"title":"CSS Shapes Level 1","description":"Allows geometric shapes to be set in CSS to define an area for text to flow around.","spec":"http://www.w3.org/TR/css-shapes/","status":"cr","links":[{"url":"http://html.adobe.com/webplatform/layout/shapes/","title":"Adobe demos and samples"},{"url":"http://html.adobe.com/webplatform/layout/shapes/browser-support/","title":"CSS shapes support test by Adobe"},{"url":"http://alistapart.com/article/css-shapes-101","title":"A List Apart article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #1","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":49.85,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"circle,ellipse,polygon,inset,shape-outside,shape-inside","ie_id":"shapes","chrome_id":"5163890719588352"},"domcontentloaded":{"title":"DOMContentLoaded","description":"JavaScript event that fires when the DOM is loaded, but before all page assets are loaded (CSS, images, etc.).","spec":"https://html.spec.whatwg.org/multipage/syntax.html#stop-parsing","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded","title":"MDN: DOMContentLoaded"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"dom,domready,onload,contentloaded,document","ie_id":"","chrome_id":""},"proximity":{"title":"Proximity API","description":"Defines events that provide information about the distance between a device and an object, as measured by a proximity sensor.","spec":"http://www.w3.org/TR/proximity/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/proximity-api-demo.html","title":"Demo"},{"url":"http://www.sitepoint.com/introducing-proximity-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.88,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"kerning-pairs-ligatures":{"title":"Improved kerning pairs & ligatures","description":"Currently non-standard method of improving kerning pairs & ligatures using text-rendering: optimizeLegibility.","spec":"http://www.w3.org/TR/SVG11/painting.html#TextRenderingProperty","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-rendering","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/t/text-rendering/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"u","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":78.58,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"optimizeLegibility,optimizeSpeed,geometricPrecision","ie_id":"","chrome_id":""},"iframe-seamless":{"title":"seamless attribute for iframes","description":"The seamless attribute makes an iframe's contents actually part of a page, and adopts the styles from its hosting page. ","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-seamless","status":"ls","links":[{"url":"https://github.com/ornj/seamless-polyfill","title":"Experimental polyfill"},{"url":"http://labs.ft.com/2013/01/seamless-iframes-not-quite-seamless/","title":"Article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d","21":"n d","22":"n d","23":"n d","24":"n d","25":"n d","26":"n d","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Chrome 20-26 had partial support behind a flag, though this was [later removed](http://crbug.com/229421). \r\n\r\nSafari 7 (& iOS 7 Safari) hides the border of seamless iframes and recognizes the 'seamless' DOM property, but does not provide actual support.","notes_by_num":{},"usage_perc_y":3.84,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"iframeseamlessattribute","chrome_id":"6630329993396224"},"css-image-orientation":{"title":"CSS3 image-orientation","description":"CSS property used generally to fix the intended orientation of an image. This can be done using 90 degree increments or based on the image's EXIF data using the \"from-image\" value.","spec":"http://www.w3.org/TR/css3-images/#image-orientation","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/image-orientation","title":"MDN article"},{"url":"http://sethfowler.org/blog/2013/09/13/new-in-firefox-26-css-image-orientation/","title":"Blog post"},{"url":"http://jsbin.com/EXUTolo/4","title":"Demo (Chinese)"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in iOS refers to the browser using EXIF data by default, though it does not actually support the property. Opening the image in a new tab in Chrome results in the image shown in the orientation according to the EXIF data.","notes_by_num":{},"usage_perc_y":11.43,"usage_perc_a":7.21,"ucprefix":false,"parent":"","keywords":"image-orientation,from-image,flip","ie_id":"","chrome_id":""},"picture":{"title":"Picture element","description":"A responsive images method to control which image resource a user agent presents to a user, based on resolution, media query and/or support for a particular image format","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element","status":"ls","links":[{"url":"http://responsiveimages.org/demos/","title":"Demo"},{"url":"http://code.tutsplus.com/tutorials/better-responsive-images-with-the-picture-element--net-36583","title":"Tutorial"},{"url":"http://usecases.responsiveimages.org/","title":"Read about the use cases"},{"url":"http://responsiveimages.org/","title":"General information about Responsive Images"},{"url":"https://dev.opera.com/articles/responsive-images/","title":"Blog post on usage"},{"url":"http://www.html5rocks.com/tutorials/responsive/picture-element/","title":"HTML5 Rocks tutorial"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #3","35":"n d #3","36":"n d #3","37":"n d #3","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n d #1","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n d #2","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Enabled in Opera through the \"experimental Web Platform features\" flag in opera://flags","3":"Enabled in Firefox by setting the about:config preference dom.image.picture.enable to true"},"usage_perc_y":41.66,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"pictureelement","chrome_id":"5910974510923776"},"woff2":{"title":"WOFF 2.0 - Web Open Font Format","description":"TrueType/OpenType font that provides better compression than WOFF 1.0.","spec":"http://www.w3.org/TR/WOFF2/","status":"wd","links":[{"url":"https://gist.github.com/sergejmueller/cf6b4f2133bcb3e2f64a","title":"Basics about WOFF 2.0"},{"url":"http://everythingfonts.com/ttf-to-woff2","title":"WOFF 2.0 converter"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Default 'enabled' for Firefox Developer Edition and Nightly, but Beta and Release versions will need to set a flag to 'true' to [use WOFF2](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#Browser_compatibility)."},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"woff, fontface, webfonts","ie_id":"wofffileformat20","chrome_id":"6718644721549312"},"text-size-adjust":{"title":"CSS text-size-adjust","description":"On mobile devices, the text-size-adjust CSS property allows Web authors to control if and how the text-inflating algorithm is applied to the textual content of the element it is applied to.","spec":"http://dev.w3.org/csswg/css-size-adjust/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-size-adjust","title":"MDN Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y x","11":"y x"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":11.89,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"web-animation":{"title":"Web Animations API","description":"Lets you create animations that are run in the browser and as well as inspect and manipulate animations created through declarative means like CSS.","spec":"http://w3c.github.io/web-animations/","status":"wd","links":[{"url":"http://updates.html5rocks.com/2014/05/Web-Animations---element-animate-is-now-in-Chrome-36","title":"HTML5 Rocks"},{"url":"http://updates.html5rocks.com/2013/12/New-Web-Animations-engine-in-Blink-drives-CSS-Animations-Transitions","title":"HTML5 Rocks"},{"url":"https://birtles.github.io/areweanimatedyet/","title":"Current Firefox status"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"a d #3","34":"a d #3","35":"a d #3","36":"a d #3","37":"a d #3","38":"a d #3","39":"a d #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"a #1","37":"a #1","38":"a #1","39":"a #2","40":"a #2","41":"a #2","42":"a #2","43":"a #2","44":"a #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"a #1","24":"a #1","25":"a #1","26":"a #2","27":"a #2","28":"a #2","29":"a #2"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"a #1"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a #1"},"and_chr":{"41":"a #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support refers to basic support of `element.animate()`","2":"Partial support refers to basic support of `element.animate()` and [playback control of AnimationPlayer](https://www.chromestatus.com/features/5633748733263872)","3":"Partial support in Firefox is detailed in [Are we animated yet?](https://birtles.github.io/areweanimatedyet/)"},"usage_perc_y":0,"usage_perc_a":53.34,"ucprefix":false,"parent":"","keywords":"animate,play,pause,reverse,finish,currentTime,startTime,playbackRate,playState","ie_id":"webanimationsjavascriptapi","chrome_id":"4854343836631040,5633748733263872"},"resource-timing":{"title":"Resource Timing","description":"Method to help web developers to collect complete timing information related to resources on a document.","spec":"http://www.w3.org/TR/resource-timing/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/resource-timing-api-demo.html","title":"Demo"},{"url":"http://googledevelopers.blogspot.com/2013/12/measuring-network-performance-with.html","title":"Blog post"},{"url":"http://www.sitepoint.com/introduction-resource-timing-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox using the dom.enable_resource_timing flag"},"usage_perc_y":68.93,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,testing,resource","ie_id":"resourcetimingapi","chrome_id":"5796350423728128"},"custom-elements":{"title":"Custom Elements","description":"Method of defining and using new types of DOM elements in a document.","spec":"http://www.w3.org/TR/custom-elements/","status":"wd","links":[{"url":"http://w3c.github.io/webcomponents/spec/custom/","title":"W3C Editor's Draft spec (closer to current implementations)"},{"url":"http://www.polymer-project.org/platform/custom-elements.html","title":"Polymer project (polyfill & web components framework)"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/customelements/","title":"HTML5Rocks - Custom Elements: defining new elements in HTML"},{"url":"https://code.google.com/p/chromium/issues/detail?id=234509","title":"Chromium tracking bug: Implement Custom Elements"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=889230","title":"Firefox tracking bug: Implement Custom Elements (from Web Components)"},{"url":"http://status.modern.ie/customelements","title":"IE Web Platform Status and Roadmap: Custom Elements"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n d #1","24":"n d #1","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"p d #1","31":"p d #1","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n d","28":"n d","29":"n d","30":"n d","31":"n d","32":"n d","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n d","16":"n d","17":"n d","18":"n d","19":"n d","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p d #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled through the \"dom.webcomponents.enabled\" preference in about:config"},"usage_perc_y":45.28,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"customelements","chrome_id":"4642138092470272"},"imports":{"title":"HTML Imports","description":"Method of including and reusing HTML documents in other HTML documents.","spec":"http://www.w3.org/TR/html-imports/","status":"wd","links":[{"url":"http://www.polymer-project.org/platform/html-imports.html","title":"Polymer project (polyfill & web components framework)"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/imports/","title":"HTML5Rocks - HTML Imports: #include for the web"},{"url":"https://code.google.com/p/chromium/issues/detail?id=240592","title":"Chromium tracking bug: Implement HTML Imports"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=877072","title":"Firefox tracking bug: Implement HTML Imports"},{"url":"http://status.modern.ie/htmlimports","title":"IE Web Platform Status and Roadmap: HTML Imports"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"p","31":"p","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n d #2","31":"n d #2","32":"n d #2","33":"n d #2","34":"n d #2","35":"p d #3","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n d #4","18":"n d #4","19":"n d #4","20":"n d #4","21":"n d #4","22":"p d #5","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Firefox [has no plans to support HTML imports](https://hacks.mozilla.org/2014/12/mozilla-and-web-components/) though for now it can be enabled through the \"dom.webcomponents.enabled\" preference in about:config","2":"Enabled through the \"Enable HTML Imports\" flag in chrome://flags","3":"Enabled through the \"Experimental Web Platform features\" flag in chrome://flags","4":"Enabled through the \"Enable HTML Imports\" flag in opera://flags","5":"Enabled through the \"Experimental Web Platform features\" flag in opera://flags"},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"htmlimports","chrome_id":"5144752345317376"},"input-file-multiple":{"title":"Multiple file selection","description":"Allows users to select multiple files in the file picker.","spec":"https://html.spec.whatwg.org/multipage/forms.html#attr-input-multiple","status":"ls","links":[{"url":"https://code.google.com/p/chromium/issues/detail?id=348912","title":"Chrome bug (for Android)"},{"url":"http://www.raymondcamden.com/2012/2/28/Working-with-HTML5s-multiple-file-upload-support","title":"Article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n #1"},"android":{"2.1":"n #1","2.2":"n #1","2.3":"n #1","3":"n #1","4":"n #1","4.1":"n #1","4.2-4.3":"n #1","4.4":"n #1","4.4.3-4.4.4":"n #1","37":"n #1"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n #1","11":"n #1","11.1":"n #1","11.5":"n #1","12":"n #1","12.1":"n #1","24":"n #1"},"and_chr":{"41":"n #1"},"and_ff":{"36":"n #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n #1"}},"notes":"","notes_by_num":{"1":"Not supported when tested on Android, presumably an OS limitation. "},"usage_perc_y":67.63,"usage_perc_a":0,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"atob-btoa":{"title":"Base64 encoding and decoding","description":"Utility functions for of encoding and decoding strings to and from base 64: window.atob() and window.btoa().","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#atob","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa","title":"MDN article on btoa()"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Window.atob","title":"MDN article on atob()"},{"url":"https://github.com/davidchambers/Base64.js","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":92.18,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"atob,btoa","ie_id":"","chrome_id":""},"css-appearance":{"title":"CSS Appearance","description":"The `appearance` property defines how elements (particularly form controls) appear by default. By setting the value to `none` the default appearance can be entirely redefined using other CSS properties.","spec":"http://wiki.csswg.org/spec/css4-ui#appearance","status":"unoff","links":[{"url":"http://css-tricks.com/almanac/properties/a/appearance/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"a #1"},"and_uc":{"9.9":"y x"}},"notes":"The `appearance` property currently does not appear in any CSS specification so there is no specifically correct usage.","notes_by_num":{"1":"`-webkit-appearance` with value `none` is supported on IE11 Mobile for phones with \"[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""},"usage_perc_y":78.87,"usage_perc_a":0.48,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-background-offsets":{"title":"CSS background-position edge offsets","description":"Allows CSS background images to be positioned relative to the specified edge using the 3 to 4 value syntax. For example: `background-position: right 5px bottom 5px;` for positioning 5px from the bottom-right corner.","spec":"http://www.w3.org/TR/css3-background/#background-position","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/background-position","title":"MDN article on background-position"},{"url":"http://briantree.se/quick-tip-06-use-four-value-syntax-properly-position-background-images/","title":"Basic information"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":85.49,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"4 value syntax","ie_id":"","chrome_id":""},"css-supports-api":{"title":"CSS.supports() API","description":"The CSS.supports() static methods returns a Boolean value indicating if the browser supports a given CSS feature, or not.","spec":"http://dev.w3.org/csswg/css-conditional/#the-css-interface","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/CSS.supports","title":"MDN Docs"},{"url":"http://jsbin.com/rimevilotari/1/edit","title":"Demo (Chinese)"},{"url":"https://dev.opera.com/articles/native-css-feature-detection/","title":"Native CSS Feature Detection via the @supports Rule"},{"url":"http://davidwalsh.name/css-supports","title":"CSS @supports"},{"url":"http://blog.csdn.net/hfahe/article/details/8619480","title":"Article (Chinese)"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d","21":"n d","22":"n d","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"See also [@supports in CSS](#feat=css-featurequeries)\r\n\r\nSee the [WebKit Bug](http://trac.webkit.org/changeset/142739) for status in Safari","notes_by_num":{"1":"Opera 12 uses a different method name('window.supportsCSS')"},"usage_perc_y":60.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"conditional","ie_id":"conditionalrules","chrome_id":"4993981813358592"},"css-touch-action":{"title":"CSS touch-action property","description":"touch-action is a CSS property that controls filtering of gesture events, providing developers with a declarative mechanism to selectively disable touch scrolling (in one or both axes), pinch-zooming or double-tap-zooming.","spec":"http://www.w3.org/TR/pointerevents/#the-touch-action-css-property","status":"cr","links":[{"url":"http://docs.webplatform.org/wiki/css/properties/touch-action","title":"WebPlatform Docs"},{"url":"http://msdn.microsoft.com/en-us/library/windows/apps/hh767313.aspx","title":"MSDN Docs"},{"url":"http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away","title":"300ms tap delay, gone away"},{"url":"http://blogs.telerik.com/appbuilder/posts/13-11-21/what-exactly-is.....-the-300ms-click-delay","title":"What Exactly Is..... The 300ms Click Delay"},{"url":"http://thx.github.io/mobile/300ms-click-delay/","title":"What Exactly Is..... The 300ms Click Delay(Chinese)"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x #2","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y x #2","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `layout.css.touch_action.enabled` flag, Firefox for Windows 8 Touch ('Metro') enabled by default.","2":"IE10+ has already supported these property which are not in standard at present such as'pinch-zoom','double-tap-zoom','cross-slide-x','cross-slide-y'."},"usage_perc_y":53.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"touch action","ie_id":"csstouchaction","chrome_id":"5912074022551552"},"autofocus":{"title":"Autofocus attribute","description":"Allows a form field to be immediately focused on page load.","spec":"https://html.spec.whatwg.org/multipage/forms.html#autofocusing-a-form-control:-the-autofocus-attribute","status":"ls","links":[{"url":"http://davidwalsh.name/autofocus","title":"Article on autofocus"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"While not supported in iOS Safari, it does work in iOS WebViews.","notes_by_num":{},"usage_perc_y":77.94,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-clip-path":{"title":"CSS clip-path property","description":"Method of defining the visible region of an element using SVG or a shape definition.","spec":"http://www.w3.org/TR/css-masking-1/#the-clip-path","status":"wd","links":[{"url":"http://css-tricks.com/almanac/properties/c/clip/","title":"CSS Tricks article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"a #1","3.6":"a #1","4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"a #1","31":"a #1","32":"a #1","33":"a #1","34":"a #1","35":"a #1","36":"a #1","37":"a #1","38":"a #1","39":"a #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"a x #2","25":"a x #2","26":"a x #2","27":"a x #2","28":"a x #2","29":"a x #2","30":"a x #2","31":"a x #2","32":"a x #2","33":"a x #2","34":"a x #2","35":"a x #2","36":"a x #2","37":"a x #2","38":"a x #2","39":"a x #2","40":"a x #2","41":"a x #2","42":"a x #2","43":"a x #2","44":"a x #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"a x #2","7.1":"a x #2","8":"a x #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x #2","16":"a x #2","17":"a x #2","18":"a x #2","19":"a x #2","20":"a x #2","21":"a x #2","22":"a x #2","23":"a x #2","24":"a x #2","25":"a x #2","26":"a x #2","27":"a x #2","28":"a x #2","29":"a x #2"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a x #2","8":"a x #2","8.1":"a x #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x #2","4.4.3-4.4.4":"a x #2","37":"a x #2"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x #2"},"and_chr":{"41":"a x #2"},"and_ff":{"36":"a #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support refers to only supporting the `url()` syntax.","2":"Partial support refers to supporting shapes and the `url(#foo)` syntax for inline SVG, but not shapes in external SVGs."},"usage_perc_y":0,"usage_perc_a":70.75,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"getrandomvalues":{"title":"crypto.getRandomValues()","description":"Method of generating cryptographically random values.","spec":"http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y x"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":79.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"screen-orientation":{"title":"Screen Orientation","description":"Provides the ability to read the screen orientation state, to be informed when this state changes, and to be able to lock the screen orientation to a specific state.","spec":"http://www.w3.org/TR/screen-orientation/","status":"wd","links":[{"url":"http://aurelio.audero.it/demo/screen-orientation-api-demo.html","title":"Demo"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Screen.orientation","title":"MDN article"},{"url":"http://www.sitepoint.com/introducing-screen-orientation-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"a x"},"and_uc":{"9.9":"y"}},"notes":"Partial support refers to an older version of the draft specification, and the spec has undergone significant changes since.","notes_by_num":{},"usage_perc_y":45.64,"usage_perc_a":20.13,"ucprefix":false,"parent":"","keywords":"","ie_id":"screenorientationapi","chrome_id":"6191285283061760"},"font-loading":{"title":"CSS Font Loading","description":"This CSS module defines a scripting interface to font faces in CSS, allowing font faces to be easily created and loaded from script. It also provides methods to track the loading status of an individual font, or of all the fonts on an entire page.","spec":"http://dev.w3.org/csswg/css-font-loading/","status":"cr","links":[{"url":"https://www.igvita.com/2014/01/31/optimizing-web-font-rendering-performance/#font-load-events","title":"Optimizing with font load events"}],"categories":["CSS3","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox using the `layout.css.font-loading-api.enabled` flag."},"usage_perc_y":43.59,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":"6244676289953792"},"font-unicode-range":{"title":"Font unicode-range subsetting","description":"This @font-face descriptor defines the set of Unicode codepoints that may be supported by the font face for which it is declared. The descriptor value is a comma-delimited list of Unicode range () values. The union of these ranges defines the set of codepoints that serves as a hint for user agents when deciding whether or not to download a font resource for a given text run.","spec":"http://dev.w3.org/csswg/css-fonts/#descdef-unicode-range","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-range","title":"MDN: unicode-range"},{"url":"https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/css/property/unicode-range","title":"Safari CSS Reference: unicode-range"},{"url":"http://docs.webplatform.org/wiki/css/properties/unicode-range","title":"Web Platform Docs: unicode-range"},{"url":"http://jsbin.com/jeqoguzeye/1/edit?html,output","title":"Demo"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n d #1","37":"n d #1","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"y"},"bb":{"7":"u","10":"u"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"y"},"and_ff":{"36":"n d #1"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support indicates that unnecessary code-ranges are downloaded by the browser - see [browser test matrix](https://docs.google.com/a/chromium.org/spreadsheets/d/18h-1gaosu4-KYxH8JUNL6ZDuOsOKmWfauoai3CS3hPY/edit?pli=1#gid=0).","notes_by_num":{"1":"Can be enabled in Firefox using the `layout.css.unicode-range.enabled` flag"},"usage_perc_y":43.17,"usage_perc_a":35.27,"ucprefix":false,"parent":"","keywords":"font face,unicode,unicode-range","ie_id":"","chrome_id":""},"gamepad":{"title":"Gamepad API","description":"API to support input from USB gamepad controllers though JavaScript.","spec":"http://www.w3.org/TR/gamepad/","status":"wd","links":[{"url":"http://luser.github.io/gamepadtest/","title":"Controller demo"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API","title":"MDN article"},{"url":"http://www.html5rocks.com/en/tutorials/doodles/gamepad/","title":"HTML5Rocks article"},{"url":"http://gamedevelopment.tutsplus.com/tutorials/using-the-html5-gamepad-api-to-add-controller-support-to-browser-games--cms-21345","title":"Detailed tutorial"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":46.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"gamepadapi","chrome_id":"5118776383111168"},"css-font-stretch":{"title":"CSS font-stretch","description":"If a font has multiple types of variations based on the width of characters, the `font-stretch` property allows the appropriate one to be selected. The property in itself does not cause the browser to stretch to a font.","spec":"http://www.w3.org/TR/css-fonts-3/#font-stretch-prop","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/f/font-stretch/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":24.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"font stretch","ie_id":"cssfontstretch","chrome_id":"4598830058176512"},"font-size-adjust":{"title":"CSS font-size-adjust","description":"Method of adjusting the font size in a matter that relates to the height of lowercase vs. uppercase letters. This makes it easier to set the size of fallback fonts.","spec":"http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop","status":"cr","links":[{"url":"http://webdesignernotebook.com/css/the-little-known-font-size-adjust-css3-property/","title":"Article on font-size-adjust"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/font-size-adjust","title":"MDN article on font-size-adjust"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Does not appear to work on Firefox mobile, despite recognition of the property.","notes_by_num":{},"usage_perc_y":12.18,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"link-icon-png":{"title":"PNG favicons","description":"Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the PNG format can be preferable.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#rel-icon","status":"ls","links":[{"url":"http://css-tricks.com/favicon-quiz/","title":"Detailed info on favicons for various uses"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1","30":"y #1","31":"y #1","32":"y #1","33":"y #1","34":"y #1","35":"y #1","36":"y #1","37":"y #1","38":"y #1","39":"y #1","40":"y #1","41":"y #1","42":"y #1","43":"y #1","44":"y #1"},"safari":{"3.1":"y #2","3.2":"y #2","4":"y #2","5":"y #2","5.1":"y #2","6":"y #2","6.1":"y #2","7":"y #2","7.1":"y #2","8":"y #2"},"opera":{"9":"y #3","9.5-9.6":"y #3","10.0-10.1":"y #3","10.5":"y #3","10.6":"y #3","11":"y #3","11.1":"y #3","11.5":"y #3","11.6":"y #3","12":"y #3","12.1":"y #3","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1"},"ios_saf":{"3.2":"n #4","4.0-4.1":"n #4","4.2-4.3":"n #4","5.0-5.1":"n #4","6.0-6.1":"n #4","7.0-7.1":"n #4","8":"n #4","8.1":"n #4"},"op_mini":{"5.0-8.0":"n #4"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y #3","4.4.3-4.4.4":"y #3","37":"y #3"},"bb":{"7":"y","10":"n #4"},"op_mob":{"10":"n #4","11":"n #4","11.1":"n #4","11.5":"n #4","12":"n #4","12.1":"n #4","24":"n #4"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n #4","11":"n #4"},"and_uc":{"9.9":"y #2"}},"notes":"Win8/IE10+ and iOS Safari support other types of icons for webpages too, using alternate tags.\r\n\r\nSee also [SVG favicons](#feat=link-icon-svg).","notes_by_num":{"1":"If both ICO and PNG are available, will use ICO over PNG if ICO has better matching sizes set.","2":"If both ICO and PNG are available, will ALWAYS use ICO file, regardless of sizes set.","3":"If multiple formats are available, will use the last one loaded, regardless of sizes (effectively picks at random).","4":"Does not use favicons at all (but may have alternative for bookmarks, etc.)."},"usage_perc_y":80.02,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"link-icon-svg":{"title":"SVG favicons","description":"Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the SVG format can be preferable to more easily support higher resolutions or larger icons.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#rel-icon","status":"ls","links":[{"url":"http://crbug.com/294179","title":"Chrome bug"}],"categories":["HTML5","SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n #1","4.0-4.1":"n #1","4.2-4.3":"n #1","5.0-5.1":"n #1","6.0-6.1":"n #1","7.0-7.1":"n #1","8":"n #1","8.1":"n #1"},"op_mini":{"5.0-8.0":"n #1"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n #1"},"op_mob":{"10":"n #1","11":"n #1","11.1":"n #1","11.5":"n #1","12":"n #1","12.1":"n #1","24":"n #1"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n #1","11":"n #1"},"and_uc":{"9.9":"n"}},"notes":"See also [PNG favicons](#feat=link-icon-png).","notes_by_num":{"1":"Does not use favicons at all"},"usage_perc_y":12.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-media-resolution":{"title":"Media Queries: resolution feature","description":"Allows a media query to be set based on the device pixels used per CSS unit. While the standard uses `min`/`max-resolution` for this, some browsers support the older non-standard `device-pixel-ratio` media query.","spec":"http://www.w3.org/TR/css3-mediaqueries/#resolution","status":"rec","links":[{"url":"http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio/","title":"How to unprefix -webkit-device-pixel-ratio"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a #1","10":"a #1","11":"a #1","TP":"a #2"},"firefox":{"2":"n","3":"n","3.5":"a #3","3.6":"a #3","4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"a #3","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x #4","5":"a x #4","6":"a x #4","7":"a x #4","8":"a x #4","9":"a x #4","10":"a x #4","11":"a x #4","12":"a x #4","13":"a x #4","14":"a x #4","15":"a x #4","16":"a x #4","17":"a x #4","18":"a x #4","19":"a x #4","20":"a x #4","21":"a x #4","22":"a x #4","23":"a x #4","24":"a x #4","25":"a x #4","26":"a x #4","27":"a x #4","28":"a x #4","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"a x #4","5":"a x #4","5.1":"a x #4","6":"a x #4","6.1":"a x #4","7":"a x #4","7.1":"a x #4","8":"a x #4"},"opera":{"9":"n","9.5-9.6":"a x #4","10.0-10.1":"a x #4","10.5":"a x #4","10.6":"a x #4","11":"a x #4","11.1":"a x #4","11.5":"a x #4","11.6":"a x #4","12":"a x #4","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"a x #4","4.2-4.3":"a x #4","5.0-5.1":"a x #4","6.0-6.1":"a x #4","7.0-7.1":"a x #4","8":"a x #4","8.1":"a x #4"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"u","2.2":"u","2.3":"u","3":"u","4":"a x #4","4.1":"a x #4","4.2-4.3":"a x #4","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x #4","10":"a x #4"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"a x #4"}},"notes":"","notes_by_num":{"1":"Supports the `dpi` unit, but does not support `dppx` or `dpcm` units.","2":"Supports the `dpi` and `dppx` units, but does not support `dpcm` units.","3":"Firefox before 16 supports only `dpi` unit, but you can set `2dppx` per `min--moz-device-pixel-ratio: 2`","4":"Supporte the non-standard `min`/`max-device-pixel-ratio`"},"usage_perc_y":61.01,"usage_perc_a":32.84,"ucprefix":false,"parent":"css-mediaqueries","keywords":"@media,device-pixel-ratio,resolution","ie_id":"mediaqueriesresolutionfeature,dppxunitfortheresolutionmediaquery","chrome_id":"5944509615570944"},"xml-serializer":{"title":"DOM Parsing and Serialization","description":"Various DOM parsing and serializing functions, specifically `DOMParser`, `XMLSerializer`, `innerHTML`, `outerHTML` and `adjacentHTML`.","spec":"http://www.w3.org/TR/DOM-Parsing/","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/XMLSerializer","title":"MDN - XMLSerializer"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"a #2","6":"a #2","7":"a #2","8":"a #2","9":"a #1","10":"y","11":"y","TP":"y"},"firefox":{"2":"a #2","3":"a #2","3.5":"a #2","3.6":"a #2","4":"a #2","5":"a #2","6":"a #2","7":"a #2","8":"a #3","9":"a #3","10":"a #3","11":"a #1","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"a #1","5.1":"a #1","6":"a #1","6.1":"a #1","7":"a #1","7.1":"y","8":"y"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"u","11.1":"u","11.5":"u","11.6":"u","12":"u","12.1":"a #1","15":"a #1","16":"a #1","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a #1","4.0-4.1":"a #1","4.2-4.3":"a #1","5.0-5.1":"a #1","6.0-6.1":"a #1","7.0-7.1":"a #1","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"u"},"android":{"2.1":"a #1","2.2":"a #1","2.3":"a #1","3":"a #1","4":"a #1","4.1":"a #1","4.2-4.3":"a #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a #1","10":"a #1"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"a #1","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"","notes_by_num":{"1":"Partial support refers to lacking support for `parseFromString` on the DOMParser.","2":"Partial support in older IE refers to only supporting `innerHTML`, nothing else."},"usage_perc_y":78.32,"usage_perc_a":15.93,"ucprefix":false,"parent":"","keywords":"parseFromString","ie_id":"","chrome_id":""},"css-image-set":{"title":"CSS image-set","description":"Method of letting the browser pick the most appropriate CSS background image from a given set, primarily for high PPI screens.","spec":"http://dev.w3.org/csswg/css-images-3/#image-set-notation","status":"unoff","links":[{"url":"http://cloudfour.com/examples/image-set/","title":"Demo"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"u","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":59.11,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-boxdecorationbreak":{"title":"CSS box-decoration-break","description":"Controls whether the box's margins, borders, padding, and other decorations wrap the broken edges of the box fragments (when the box is split by a break (page/column/region/line).","spec":"http://www.w3.org/TR/css3-break/#break-decoration","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break","title":"MDN article"},{"url":"http://jsbin.com/xojoro/edit?css,output","title":"Demo of effect on box border"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"u","10":"y x"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":72.56,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"box-decoration,box decoration,break","ie_id":"","chrome_id":""},"object-observe":{"title":"Object.observe data binding","description":"Method for data binding, part of the ECMAScript 7 proposals","spec":"http://wiki.ecmascript.org/doku.php?id=harmony:observe","status":"other","links":[{"url":"http://www.html5rocks.com/en/tutorials/es7/observe/","title":"Data-binding Revolutions with Object.observe()"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"objectobserve","chrome_id":"6147094632988672"},"broadcastchannel":{"title":"BroadcastChannel","description":"BroadcastChannel allows scripts from the same origin but other browsing contexts (windows, workers) to send each other messages.","spec":"https://html.spec.whatwg.org/multipage/comms.html#broadcasting-to-other-browsing-contexts","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"broadcast,channel,messaging","ie_id":"","chrome_id":"4585496197988352"},"css-crisp-edges":{"title":"Crisp edges/pixelated images","description":"Forces images to be scaled with an algorithm that preserves contrast and edges in the image, without smoothing colors or introduce blur. This is intended for images such as pixel art. Official values that accomplish this for the `image-rendering` property are `crisp-edges` and `pixelated`.","spec":"http://dev.w3.org/csswg/css-images-3/#valdef-image-rendering-crisp-edges","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering","title":"MDN article"},{"url":"http://updates.html5rocks.com/2015/01/pixelated","title":"HTML5Rocks article"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"a x #2","8":"a x #2","9":"a x #2","10":"a x #2","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x #3","4":"y x #3","5":"y x #3","6":"y x #3","7":"y x #3","8":"y x #3","9":"y x #3","10":"y x #3","11":"y x #3","12":"y x #3","13":"y x #3","14":"y x #3","15":"y x #3","16":"y x #3","17":"y x #3","18":"y x #3","19":"y x #3","20":"y x #3","21":"y x #3","22":"y x #3","23":"y x #3","24":"y x #3","25":"y x #3","26":"y x #3","27":"y x #3","28":"y x #3","29":"y x #3","30":"y x #3","31":"y x #3","32":"y x #3","33":"y x #3","34":"y x #3","35":"y x #3","36":"y x #3","37":"y x #3","38":"y x #3","39":"y x #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"y #4","42":"y #4","43":"y #4","44":"y #4"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"a x #1","6.1":"y x #3","7":"y x #3","7.1":"y x #3","8":"y x #3"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y x #3","12":"y x #3","12.1":"y x #3","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y #4","29":"y #4"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a x #1","6.0-6.1":"a x #1","7.0-7.1":"y x #3","8":"y x #3","8.1":"y x #3"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"a x #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y x #3","12.1":"y x #3","24":"n"},"and_chr":{"41":"y #4"},"and_ff":{"36":"y x #3"},"ie_mob":{"10":"a x #2","11":"a x #2"},"and_uc":{"9.9":"a x #1"}},"notes":"Note that prefixes apply to the value (e.g. `-moz-crisp-edges`), not the `image-rendering` property.","notes_by_num":{"1":"Supported using the non-standard value `-webkit-optimize-contrast`","2":"Internet Explorer accomplishes support using the non-standard declaration `-ms-interpolation-mode: nearest-neighbor`","3":"Supports the `crisp-edges` value, but not `pixelated`.","4":"Supports the `pixelated` value, but not `crisp-edges`."},"usage_perc_y":33.02,"usage_perc_a":19.1,"ucprefix":false,"parent":"","keywords":"image-rendering,crisp-edges","ie_id":"","chrome_id":"5118058116939776"},"css-text-align-last":{"title":"CSS3 text-align-last","description":"CSS property to describe how the last line of a block or a line right before a forced line break when `text-align` is `justify`.","spec":"http://www.w3.org/TR/css3-text/#text-align-last-property","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-align-last","title":"MDN text-align-last"},{"url":"http://blogs.adobe.com/webplatform/2014/02/25/improving-your-sites-visual-details-css3-text-align-last/","title":"Adobe Web Platform Article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #2","36":"n d #2","37":"n d #2","38":"n d #2","39":"n d #2","40":"n d #2","41":"n d #2","42":"n d #2","43":"n d #2","44":"n d #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n d #3","23":"n d #3","24":"n d #3","25":"n d #3","26":"n d #3","27":"n d #3","28":"n d #3","29":"n d #3"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"In Internet Explorer, the start and end values are not supported.","2":"Enabled through the \"Enable Experimental Web Platform Features\" flag in chrome://flags","3":"Enabled through the \"Enable Experimental Web Platform Features\" flag in opera://flags"},"usage_perc_y":11.98,"usage_perc_a":15.13,"ucprefix":false,"parent":"","keywords":"text align last","ie_id":"","chrome_id":""},"fetch":{"title":"Fetch","description":"A modern replacement for XMLHttpRequest.","spec":"https://fetch.spec.whatwg.org/","status":"ls","links":[{"url":"https://github.com/github/fetch","title":"Polyfill"},{"url":"http://addyosmani.com/demos/fetch-api/","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a #2","41":"a #2 #3","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a #2","28":"a #2 #3","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a #2"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support can be enabled in Firefox with the `dom.fetch.enabled` flag.","2":"Only available in Chrome and Opera within ServiceWorkers.","3":"Available in Chrome and Opera within Window and Workers by enabling the \"Experimental Web Platform Features\" flag in `chrome://flags`"},"usage_perc_y":0.17,"usage_perc_a":38.79,"ucprefix":false,"parent":"","keywords":"fetch,service,workers,xhr,xmlhttprequest","ie_id":"fetchapi","chrome_id":"6730533392351232"},"background-attachment":{"title":"CSS background-attachment","description":"Method of defining how a background image is attached to a scrollable element. Values include `scroll` (default), `fixed` and `local`.","spec":"http://www.w3.org/TR/css3-background/#the-background-attachment","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment","title":"MDN article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a #1","3":"a #1","3.5":"a #1","3.6":"a #1","4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a #1","9.5-9.6":"a #1","10.0-10.1":"a #1","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a #2","6.0-6.1":"a #2","7.0-7.1":"a #2","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"a #1","4.2-4.3":"a #1","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"a #2","10":"a #2"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"n"},"and_chr":{"41":"a #2"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"Most mobile devices have a delay in updating the background position after scrolling a page with `fixed` backgrounds.","notes_by_num":{"1":"Partial support refers to supporting `fixed` but not `local`","2":"Partial support refers to supporting `local` but not `fixed`"},"usage_perc_y":67.77,"usage_perc_a":22.47,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"currentcolor":{"title":"CSS currentColor value","description":"A CSS value that will apply the existing `color` value to other properties like `background-color`, etc. ","spec":"http://www.w3.org/TR/css3-color/#currentcolor","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentColor_keyword","title":"MDN article"},{"url":"http://css-tricks.com/currentcolor/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"input-pattern":{"title":"Pattern attribute for input fields","description":"Allows validation of an input field based on a given regular expression pattern.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-pattern-attribute","status":"ls","links":[{"url":"http://html5pattern.com","title":"Site with common sample patterns "}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a #1"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support refers to not displaying a message for invalid patterns"},"usage_perc_y":72.88,"usage_perc_a":0.7,"ucprefix":false,"parent":"form-validation","keywords":"","ie_id":"","chrome_id":""},"registerprotocolhandler":{"title":"Custom protocol handling","description":"Method of allowing a webpage to handle a given protocol using `navigator.registerProtocolHandler`. This allows certain URLs to be opened by a given web application, for example `mailto:` addresses can be opened by a webmail client.","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#custom-handlers","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler","title":"MDN article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1","30":"y #1","31":"y #1","32":"y #1","33":"y #1","34":"y #1","35":"y #1","36":"y #1","37":"y #1","38":"y #1","39":"y #1","40":"y #1","41":"y #1","42":"y #1","43":"y #1","44":"y #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y #1","12":"y #1","12.1":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supports protocols `mailto`, `mms`, `nntp`, `rtsp`, and `webcal` but requires custom protocols to start with `web+`"},"usage_perc_y":47.66,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-snappoints":{"title":"CSS Scroll snap points","description":"CSS technique that allows customizable scrolling experiences like pagination of carousels by setting defined snap points.","spec":"http://www.w3.org/TR/css-snappoints-1/","status":"wd","links":[{"url":"http://generatedcontent.org/post/66817675443/setting-native-like-scrolling-offsets-in-css-with","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n d #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Currently in development in WebKit with partial support in nightly builds.","notes_by_num":{"1":"Partial support in IE10 refers to support limited to touch screens.","2":"Partial support in IE11 [documented here](https://dl.dropboxusercontent.com/u/444684/openwebref/CSS/scroll-snap-points/support.html)","3":"Can be enabled in Firefox using the `layout.css.scroll-snap.enabled` flag in `about:config`"},"usage_perc_y":0,"usage_perc_a":9.46,"ucprefix":false,"parent":"","keywords":"scroll-snap-points-x,scroll-snap-points-y,scroll-snap-type,scroll-snap-destination,scroll-snap-coordinate","ie_id":"cssscrollingsnappoints","chrome_id":""},"input-minlength":{"title":"Minimum length attribute for input fields","description":"Declares a lower bound on the number of characters a user can input.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-maxlength-and-minlength-attributes","status":"ls","links":[{"url":"http://www.w3.org/TR/html5/forms.html#setting-minimum-input-length-requirements:-the-minlength-attribute","title":"W3C usage example"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Chrome and Opera is due to a [bug](http://crbug.com/470577) which prevents any validation from occurring if the field has any pre-filled value.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":38.96,"ucprefix":false,"parent":"form-validation","keywords":"","ie_id":"","chrome_id":"6023370181181440"}}}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ambient-light.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ambient-light.json
new file mode 100644
index 0000000..06bfd1b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ambient-light.json
@@ -0,0 +1,222 @@
+{
+ "title":"Ambient Light API",
+ "description":"Defines events that provide information about the ambient light level, as measured by a device's light sensor.",
+ "spec":"http://www.w3.org/TR/ambient-light/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://aurelio.audero.it/demo/ambient-light-api-demo.html",
+ "title":"Demo"
+ },
+ {
+ "url":"http://modernweb.com/2014/05/27/introduction-to-the-ambient-light-api/",
+ "title":"Article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Firefox desktop supports this API only on Mac OS X. [Support for Windows 7 is in progress](https://bugzilla.mozilla.org/show_bug.cgi?id=754199)",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":11.62,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"ambientlightevents",
+ "chrome_id":"5298357018820608",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/apng.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/apng.json
new file mode 100644
index 0000000..fd5e98c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/apng.json
@@ -0,0 +1,226 @@
+{
+ "title":"Animated PNG (APNG)",
+ "description":"Like animated GIFs, but allowing 24-bit colors and alpha transparency",
+ "spec":"https://wiki.mozilla.org/APNG_Specification",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/APNG",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"https://github.com/davidmz/apng-canvas",
+ "title":"Polyfill using canvas"
+ },
+ {
+ "url":"https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp",
+ "title":"Chrome extension providing support"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "PNG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Where support for APNG is missing, only the first frame is displayed",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":19.44,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/atob-btoa.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/atob-btoa.json
new file mode 100644
index 0000000..ab84b57
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/atob-btoa.json
@@ -0,0 +1,226 @@
+{
+ "title":"Base64 encoding and decoding",
+ "description":"Utility functions for of encoding and decoding strings to and from base 64: window.atob() and window.btoa().",
+ "spec":"https://html.spec.whatwg.org/multipage/webappapis.html#atob",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa",
+ "title":"MDN article on btoa()"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/Window.atob",
+ "title":"MDN article on atob()"
+ },
+ {
+ "url":"https://github.com/davidchambers/Base64.js",
+ "title":"Polyfill"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"u",
+ "10.0-10.1":"u",
+ "10.5":"u",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":92.18,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"atob,btoa",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/audio-api.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/audio-api.json
new file mode 100644
index 0000000..674d3a7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/audio-api.json
@@ -0,0 +1,230 @@
+{
+ "title":"Web Audio API",
+ "description":"High-level JavaScript API for processing and synthesizing audio",
+ "spec":"http://www.w3.org/TR/webaudio/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://github.com/corbanbrook/audionode.js",
+ "title":"Polyfill to support Web Audio API in Firefox"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/webaudio",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"http://www.doboism.com/projects/webaudio-compatibility/",
+ "title":"Additional browser compatibility tests for specific features"
+ },
+ {
+ "url":"https://github.com/g200kg/WAAPISim",
+ "title":"Polyfill to enable Web Audio API through Firefox Audio Data api or flash"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Firefox versions < 25 support an alternative, deprecated audio API.\r\n\r\nChrome support [went through some changes](http://updates.html5rocks.com/2014/07/Web-Audio-Changes-in-m36) as of version 36.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":67.15,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"web-audio",
+ "ie_id":"webaudioapi",
+ "chrome_id":"6261718720184320",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/audio.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/audio.json
new file mode 100644
index 0000000..aefeff8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/audio.json
@@ -0,0 +1,248 @@
+{
+ "title":"Audio element",
+ "description":"Method of playing sound on webpages (without requiring a plug-in).",
+ "spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-audio-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://html5doctor.com/native-audio-in-the-browser/",
+ "title":"HTML5 Doctor article"
+ },
+ {
+ "url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/",
+ "title":"Detailed article on video/audio elements"
+ },
+ {
+ "url":"http://www.jplayer.org/latest/demos/",
+ "title":"Demos of audio player that uses the audio element"
+ },
+ {
+ "url":"http://24ways.org/2010/the-state-of-html5-audio",
+ "title":"Detailed article on support"
+ },
+ {
+ "url":"http://textopia.org/androidsoundformats.html",
+ "title":"File format test page"
+ },
+ {
+ "url":"http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio",
+ "title":"The State of HTML5 Audio"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/audio.js#audio",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/audio",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Volume is read-only on iOS."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":91.12,
+ "usage_perc_a":0.03,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/autofocus.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/autofocus.json
new file mode 100644
index 0000000..f1e3bdc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/autofocus.json
@@ -0,0 +1,218 @@
+{
+ "title":"Autofocus attribute",
+ "description":"Allows a form field to be immediately focused on page load.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#autofocusing-a-form-control:-the-autofocus-attribute",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://davidwalsh.name/autofocus",
+ "title":"Article on autofocus"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"While not supported in iOS Safari, it does work in iOS WebViews.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":77.94,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/background-attachment.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/background-attachment.json
new file mode 100644
index 0000000..ca2b74c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/background-attachment.json
@@ -0,0 +1,219 @@
+{
+ "title":"CSS background-attachment",
+ "description":"Method of defining how a background image is attached to a scrollable element. Values include `scroll` (default), `fixed` and `local`.",
+ "spec":"http://www.w3.org/TR/css3-background/#the-background-attachment",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a #1",
+ "6":"a #1",
+ "7":"a #1",
+ "8":"a #1",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a #1",
+ "3":"a #1",
+ "3.5":"a #1",
+ "3.6":"a #1",
+ "4":"a #1",
+ "5":"a #1",
+ "6":"a #1",
+ "7":"a #1",
+ "8":"a #1",
+ "9":"a #1",
+ "10":"a #1",
+ "11":"a #1",
+ "12":"a #1",
+ "13":"a #1",
+ "14":"a #1",
+ "15":"a #1",
+ "16":"a #1",
+ "17":"a #1",
+ "18":"a #1",
+ "19":"a #1",
+ "20":"a #1",
+ "21":"a #1",
+ "22":"a #1",
+ "23":"a #1",
+ "24":"a #1",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a #1",
+ "3.2":"a #1",
+ "4":"a #1",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"a #1",
+ "9.5-9.6":"a #1",
+ "10.0-10.1":"a #1",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"a #2",
+ "6.0-6.1":"a #2",
+ "7.0-7.1":"a #2",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"a #1",
+ "4.2-4.3":"a #1",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"a #2",
+ "10":"a #2"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"u",
+ "11.1":"u",
+ "11.5":"u",
+ "12":"u",
+ "12.1":"y",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"a #2"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a #1"
+ }
+ },
+ "notes":"Most mobile devices have a delay in updating the background position after scrolling a page with `fixed` backgrounds.",
+ "notes_by_num":{
+ "1":"Partial support refers to supporting `fixed` but not `local`",
+ "2":"Partial support refers to supporting `local` but not `fixed`"
+ },
+ "usage_perc_y":67.77,
+ "usage_perc_a":22.47,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/background-img-opts.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/background-img-opts.json
new file mode 100644
index 0000000..5b70188
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/background-img-opts.json
@@ -0,0 +1,233 @@
+{
+ "title":"CSS3 Background-image options",
+ "description":"New properties to affect background images, including background-clip, background-origin and background-size",
+ "spec":"http://www.w3.org/TR/css3-background/#backgrounds",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://www.standardista.com/css3/css3-background-properties",
+ "title":"Detailed compatibility tables and demos"
+ },
+ {
+ "url":"http://www.css3files.com/background/",
+ "title":"Information page"
+ },
+ {
+ "url":"https://github.com/louisremi/background-size-polyfill",
+ "title":"Polyfill for IE7-8"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"iOS Safari has buggy behavior with `background-size: cover;` on a page's body."
+ },
+ {
+ "description":"iOS Safari has buggy behavior with `background-size: cover;` + `background-attachment: fixed;`"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"a x",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a #3",
+ "5":"a #3",
+ "6":"a #3",
+ "7":"a #3",
+ "8":"a #3",
+ "9":"a #3",
+ "10":"a #3",
+ "11":"a #3",
+ "12":"a #3",
+ "13":"a #3",
+ "14":"a #3",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a #2 #3",
+ "3.2":"a #2 #3",
+ "4":"a #2 #3",
+ "5":"a #2 #3",
+ "5.1":"a #2 #3",
+ "6":"a #2 #3",
+ "6.1":"a #2 #3",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"a x",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a #3",
+ "6.0-6.1":"a",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a #1"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x #3",
+ "2.3":"a x #3",
+ "3":"a #3",
+ "4":"a #3",
+ "4.1":"a #3",
+ "4.2-4.3":"a #3",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support in Opera Mini refers to not supporting background sizing or background attachments. However Opera Mini 7.5 supports background sizing (including cover and contain values).",
+ "2":"Partial support in Safari 6 refers to not supporting background sizing offset from edges syntax.",
+ "3":"Does not support `background-size` values in the `background` shorthand"
+ },
+ "usage_perc_y":87.16,
+ "usage_perc_a":6.81,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/battery-status.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/battery-status.json
new file mode 100644
index 0000000..d73437a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/battery-status.json
@@ -0,0 +1,222 @@
+{
+ "title":"Battery Status API",
+ "description":"Method to provide information about the battery status of the hosting device.",
+ "spec":"http://www.w3.org/TR/battery-status/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/WebAPI/Battery_Status",
+ "title":"MDN Docs"
+ },
+ {
+ "url":"http://www.smartjava.org/examples/webapi-battery/",
+ "title":"Simple demo"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a x #1",
+ "11":"a x #1",
+ "12":"a x #1",
+ "13":"a x #1",
+ "14":"a x #1",
+ "15":"a x #1",
+ "16":"a #1",
+ "17":"a #1",
+ "18":"a #1",
+ "19":"a #1",
+ "20":"a #1",
+ "21":"a #1",
+ "22":"a #1",
+ "23":"a #1",
+ "24":"a #1",
+ "25":"a #1",
+ "26":"a #1",
+ "27":"a #1",
+ "28":"a #1",
+ "29":"a #1",
+ "30":"a #1",
+ "31":"a #1",
+ "32":"a #1",
+ "33":"a #1",
+ "34":"a #1",
+ "35":"a #1",
+ "36":"a #1",
+ "37":"a #1",
+ "38":"a #1",
+ "39":"a #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n d",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"a #1"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"a #1"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support refers to support for the older specification's `navigator.battery` rather than `navigator.getBattery()` to access the `BatteryManager`."
+ },
+ "usage_perc_y":41.66,
+ "usage_perc_a":15.88,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"navigator.battery,navigator.getbattery,batterymanager",
+ "ie_id":"batterystatusapi",
+ "chrome_id":"4537134732017664",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/blobbuilder.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/blobbuilder.json
new file mode 100644
index 0000000..fa42371
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/blobbuilder.json
@@ -0,0 +1,222 @@
+{
+ "title":"Blob constructing",
+ "description":"Construct Blobs (binary large objects) either using the BlobBuilder API (deprecated) or the Blob constructor.",
+ "spec":"http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/BlobBuilder",
+ "title":"MDN article on BlobBuilder"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/DOM/Blob",
+ "title":"MDN article on Blobs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"a x",
+ "4":"a x",
+ "4.1":"a x",
+ "4.2-4.3":"a x",
+ "4.4":"a x",
+ "4.4.3-4.4.4":"a x",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a x"
+ }
+ },
+ "notes":"Partial support refers to only supporting the now deprecated BlobBuilder to create blobs.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":77.73,
+ "usage_perc_a":10.51,
+ "ucprefix":true,
+ "parent":"fileapi",
+ "keywords":"",
+ "ie_id":"blob",
+ "chrome_id":"5328783104016384",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/bloburls.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/bloburls.json
new file mode 100644
index 0000000..47ee369
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/bloburls.json
@@ -0,0 +1,218 @@
+{
+ "title":"Blob URLs",
+ "description":"Method of creating URL handles to the specified File or Blob object.",
+ "spec":"http://www.w3.org/TR/FileAPI/#url",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/window.URL.createObjectURL",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y x",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":87.8,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"fileapi",
+ "keywords":"createobjecturl",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/border-image.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/border-image.json
new file mode 100644
index 0000000..3f87262
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/border-image.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS3 Border images",
+ "description":"Method of using images for borders",
+ "spec":"http://www.w3.org/TR/css3-background/#the-border-image",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://www.css3files.com/border/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/border-image",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"a x",
+ "3.6":"a x",
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a x",
+ "3.2":"a x",
+ "4":"a x",
+ "5":"a x",
+ "5.1":"a x",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"a x",
+ "11.1":"a x",
+ "11.5":"a x",
+ "11.6":"a x",
+ "12":"a x",
+ "12.1":"a x",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a x",
+ "4.0-4.1":"a x",
+ "4.2-4.3":"a x",
+ "5.0-5.1":"a x",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a x"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"a x",
+ "4.1":"a x",
+ "4.2-4.3":"a x",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a x",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"a x",
+ "11.1":"a x",
+ "11.5":"a x",
+ "12":"a x",
+ "12.1":"a x",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Note that both the border-style and border-width must be specified for border-images to work according to spec, though older implementations may not have this requirement. Partial support refers to supporting the shorthand syntax, but not the individual properties (border-image-source, border-image-slice, etc). ",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":83.44,
+ "usage_perc_a":7.04,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/border-radius.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/border-radius.json
new file mode 100644
index 0000000..65d9b6d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/border-radius.json
@@ -0,0 +1,245 @@
+{
+ "title":"CSS3 Border-radius (rounded corners)",
+ "description":"Method of making the border corners round",
+ "spec":"http://www.w3.org/TR/css3-background/#the-border-radius",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://border-radius.com",
+ "title":"Border-radius CSS Generator"
+ },
+ {
+ "url":"http://muddledramblings.com/table-of-css3-border-radius-compliance",
+ "title":"Detailed compliance table"
+ },
+ {
+ "url":"http://www.css3files.com/border/#borderradius",
+ "title":"Information page"
+ },
+ {
+ "url":"http://css3pie.com/",
+ "title":"Polyfill which includes border-radius"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/border-radius",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Safari does not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128"
+ },
+ {
+ "description":"Android Browser 2.3 does not support % value for `border-radius`."
+ },
+ {
+ "description":"Border-radius does not work on fieldset elements in IE9."
+ },
+ {
+ "description":"The stock browser on the Samsung Galaxy S4 with Android 4.2 does not support the `border-radius` shorthand property but does support the long-hand properties for each corner like `border-top-left-radius`."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a x",
+ "3":"y x",
+ "3.5":"y x",
+ "3.6":"y x",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y x",
+ "3.2":"y x",
+ "4":"y x",
+ "5":"y",
+ "5.1":"y #1",
+ "6":"y #1",
+ "6.1":"y #1",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y x",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Safari 6.1 and earlier did not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128"
+ },
+ "usage_perc_y":91.17,
+ "usage_perc_a":0.01,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"roundedcorners, border radius,-moz-border-radius",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/broadcastchannel.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/broadcastchannel.json
new file mode 100644
index 0000000..d39e6f7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/broadcastchannel.json
@@ -0,0 +1,218 @@
+{
+ "title":"BroadcastChannel",
+ "description":"BroadcastChannel allows scripts from the same origin but other browsing contexts (windows, workers) to send each other messages.",
+ "spec":"https://html.spec.whatwg.org/multipage/comms.html#broadcasting-to-other-browsing-contexts",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"broadcast,channel,messaging",
+ "ie_id":"",
+ "chrome_id":"4585496197988352",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/calc.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/calc.json
new file mode 100644
index 0000000..918bb85
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/calc.json
@@ -0,0 +1,228 @@
+{
+ "title":"calc() as CSS unit value",
+ "description":"Method of allowing calculated values for length units, i.e. `width: calc(100% - 3em)`",
+ "spec":"http://www.w3.org/TR/css3-values/#calc",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://hacks.mozilla.org/2010/06/css3-calc/",
+ "title":"Mozilla Hacks article"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/CSS/-moz-calc",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/functions/calc",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE10 crashes when a div with a property using `calc()` has a child with [same property with inherit](http://stackoverflow.com/questions/19423384/css-less-calc-method-is-crashing-my-ie10)."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"a",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y x",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Support can be somewhat emulated in older versions of IE using the non-standard `expression()` syntax. Partial support in IE9 refers to the browser crashing when used as a `background-position` value. Partial support in Android Browser 4.4 refers to the browser lacking the ability to multiply and divide values.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":77.73,
+ "usage_perc_a":5.56,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"csscalc",
+ "chrome_id":"5765241438732288",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas-blending.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas-blending.json
new file mode 100644
index 0000000..6fdc76b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas-blending.json
@@ -0,0 +1,218 @@
+{
+ "title":"Canvas blend modes",
+ "description":"Method of defining the effect resulting from overlaying two layers on a Canvas element. ",
+ "spec":"http://www.w3.org/TR/compositing-1/#blending",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/",
+ "title":"Blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Canvas"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":70.11,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"canvas",
+ "keywords":"",
+ "ie_id":"compositingandblendingincanvas2d",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas-text.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas-text.json
new file mode 100644
index 0000000..31da2bc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas-text.json
@@ -0,0 +1,231 @@
+{
+ "title":"Text API for Canvas",
+ "description":"Method of displaying text on Canvas elements",
+ "spec":"https://html.spec.whatwg.org/multipage/scripting.html#drawing-text-to-the-bitmap",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/Drawing_text_using_a_canvas#Additional_examples",
+ "title":"Examples by Mozilla"
+ },
+ {
+ "url":"http://code.google.com/p/canvas-text/",
+ "title":"Support library"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas-text",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/canvas/CanvasRenderingContext2D/fillText",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Canvas",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":91.12,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"canvas",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas.json
new file mode 100644
index 0000000..c0d6861
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/canvas.json
@@ -0,0 +1,241 @@
+{
+ "title":"Canvas (basic support)",
+ "description":"Method of generating fast, dynamic graphics using JavaScript.",
+ "spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/Canvas_tutorial",
+ "title":"Tutorial by Mozilla"
+ },
+ {
+ "url":"http://www.canvasdemos.com/",
+ "title":"Showcase site"
+ },
+ {
+ "url":"http://glimr.rubyforge.org/cake/canvas.html",
+ "title":"Animation kit "
+ },
+ {
+ "url":"http://diveintohtml5.info/canvas.html",
+ "title":"Another tutorial"
+ },
+ {
+ "url":"http://explorercanvas.googlecode.com/",
+ "title":"Implementation for Internet Explorer"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas",
+ "title":"has.js test"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"The Android browser does not support clipping on HTML5 canvas. See the bug filed here: http://code.google.com/p/android/issues/detail?id=21099"
+ }
+ ],
+ "categories":[
+ "Canvas",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Opera Mini supports the canvas element, but is unable to play animations or run other more complex applications. Android 2.x supports canvas except the toDataURL() function. See http://code.google.com/p/android/issues/detail?id=7901 Some (slow) workarounds are described here: http://stackoverflow.com/q/10488033/841830",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":91.1,
+ "usage_perc_a":2.95,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"canvas",
+ "chrome_id":"5100084685438976",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/channel-messaging.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/channel-messaging.json
new file mode 100644
index 0000000..b467e18
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/channel-messaging.json
@@ -0,0 +1,218 @@
+{
+ "title":"Channel messaging",
+ "description":"Method for having two-way communication between browsing contexts (using MessageChannel)",
+ "spec":"http://www.w3.org/TR/webmessaging/#channel-messaging",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://dev.opera.com/articles/view/window-postmessage-messagechannel/#channel",
+ "title":"An Introduction to HTML5 web messaging"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n d #1",
+ "27":"n d #1",
+ "28":"n d #1",
+ "29":"n d #1",
+ "30":"n d #1",
+ "31":"n d #1",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"n d #1",
+ "39":"n d #1"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"u",
+ "10.0-10.1":"u",
+ "10.5":"u",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Supported in Firefox behind the `dom.messageChannel.enabled` flag. Reported to not work in web workers."
+ },
+ "usage_perc_y":74.4,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"x-doc-messaging",
+ "keywords":"",
+ "ie_id":"messagechannels",
+ "chrome_id":"6710044586409984",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/classlist.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/classlist.json
new file mode 100644
index 0000000..5fa7df6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/classlist.json
@@ -0,0 +1,241 @@
+{
+ "title":"classList (DOMTokenList )",
+ "description":"Method of easily manipulating classes on elements, using the DOMTokenList object.",
+ "spec":"http://www.w3.org/TR/dom/#dom-element-classlist",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://hacks.mozilla.org/2010/01/classlist-in-firefox-3-6/",
+ "title":"Mozilla Hacks article"
+ },
+ {
+ "url":"https://github.com/eligrey/classList.js",
+ "title":"Polyfill script"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/Element/classList",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"http://www.sitepoint.com/exploring-classlist-api/",
+ "title":"SitePoint article"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/classlist-api-demo.html",
+ "title":"Demo using classList"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/Element.classList",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"[Internet Explorer 11 doesn't support multiple tokens passed to the `add` function](https://connect.microsoft.com/IE/Feedback/Details/920755); only the first is used."
+ }
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"p"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.9,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/clipboard.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/clipboard.json
new file mode 100644
index 0000000..aa5766f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/clipboard.json
@@ -0,0 +1,222 @@
+{
+ "title":"Clipboard API",
+ "description":"API to provide copy, cut and paste functionality using the OS clipboard.",
+ "spec":"http://www.w3.org/TR/clipboard-apis/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent",
+ "title":"MDN page on ClipboardEvent"
+ },
+ {
+ "url":"http://www.deluxeblogtips.com/2010/06/javascript-copy-to-clipboard.html",
+ "title":"Blog post on cross-browser usage"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a #1",
+ "6":"a #1",
+ "7":"a #1",
+ "8":"a #1",
+ "9":"a #1",
+ "10":"a #1",
+ "11":"a #1",
+ "TP":"a #1"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"u",
+ "3.2":"u",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"n",
+ "10":"a"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support in IE refers using [a non-standard method](http://msdn.microsoft.com/en-us/library/ie/ms535220%28v=vs.85%29.aspx) of interacting with the clipboard. For other browsers it refers to not supporting the ClipboardEvent constructor.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":11.62,
+ "usage_perc_a":74.26,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"cut,copy,paste,clipboarddata",
+ "ie_id":"clipboardapi",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/contenteditable.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/contenteditable.json
new file mode 100644
index 0000000..a9186b7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/contenteditable.json
@@ -0,0 +1,238 @@
+{
+ "title":"contenteditable attribute (basic support)",
+ "description":"Method of making any HTML element editable.",
+ "spec":"https://html.spec.whatwg.org/multipage/interaction.html#contenteditable",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://html5demos.com/contenteditable",
+ "title":"Demo page"
+ },
+ {
+ "url":"https://blog.whatwg.org/the-road-to-html-5-contenteditable",
+ "title":"WHATWG blog post"
+ },
+ {
+ "url":"http://accessgarage.wordpress.com/2009/05/08/how-to-hack-your-app-to-make-contenteditable-work/",
+ "title":"Blog post on usage problems"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/attributes/contentEditable",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"In Chromium/Chrome contenteditable cannot be edited when nested into draggable (https://code.google.com/p/chromium/issues/detail?id=170139). Still not fixed in Chrome version 26.0.1384.2."
+ },
+ {
+ "description":"In Firefox when clicking on contenteditable nested into draggable, cursor is always positioned to the start of editable text. Still not fixed in version 18.0.1."
+ },
+ {
+ "description":"In Internet Explorer contenteditable cannot be applied to the TABLE, COL, COLGROUP, TBODY, TD, TFOOT, TH, THEAD, and TR elements directly, a content editable SPAN, or DIV element can be placed inside the individual table cells (See http://msdn.microsoft.com/en-us/library/ie/ms533690(v=vs.85).aspx)."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"a",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"This support only refers to very basic editing capability, implementations vary significantly on how certain elements can be edited.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.18,
+ "usage_perc_a":0.04,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/contentsecuritypolicy.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/contentsecuritypolicy.json
new file mode 100644
index 0000000..9c6296f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/contentsecuritypolicy.json
@@ -0,0 +1,231 @@
+{
+ "title":"Content Security Policy 1.0",
+ "description":"Mitigate cross-site scripting attacks by whitelisting allowed sources of script, style, and other resources.",
+ "spec":"http://www.w3.org/TR/CSP/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://html5rocks.com/en/tutorials/security/content-security-policy/",
+ "title":"HTML5Rocks article"
+ },
+ {
+ "url":"http://content-security-policy.com/",
+ "title":"CSP Examples & Quick Reference"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Partial support in Internet Explorer 10-11 refers to the browser only supporting the 'sandbox' directive by using the `X-Content-Security-Policy` header."
+ },
+ {
+ "description":"Partial support in iOS Safari 5.0-5.1 refers to the browser recognizing the `X-Webkit-CSP` header but failing to handle complex cases correctly, often resulting in broken pages."
+ },
+ {
+ "description":"Chrome for iOS fails to render pages without a [connect-src 'self'](https://code.google.com/p/chromium/issues/detail?id=322497) policy."
+ }
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a #1",
+ "11":"a #1",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y #1",
+ "5":"y #1",
+ "6":"y #1",
+ "7":"y #1",
+ "8":"y #1",
+ "9":"y #1",
+ "10":"y #1",
+ "11":"y #1",
+ "12":"y #1",
+ "13":"y #1",
+ "14":"y #1",
+ "15":"y #1",
+ "16":"y #1",
+ "17":"y #1",
+ "18":"y #1",
+ "19":"y #1",
+ "20":"y #1",
+ "21":"y #1",
+ "22":"y #1",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"y #2",
+ "15":"y #2",
+ "16":"y #2",
+ "17":"y #2",
+ "18":"y #2",
+ "19":"y #2",
+ "20":"y #2",
+ "21":"y #2",
+ "22":"y #2",
+ "23":"y #2",
+ "24":"y #2",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"a #2",
+ "6":"y #2",
+ "6.1":"y #2",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"a #2",
+ "6.0-6.1":"y #2",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y #2"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a #1",
+ "11":"a #1"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"The standard HTTP header is `Content-Security-Policy` which is used unless otherwise noted.",
+ "notes_by_num":{
+ "1":"Supported through the `X-Content-Security-Policy` header",
+ "2":"Supported through the `X-Webkit-CSP` header"
+ },
+ "usage_perc_y":75.25,
+ "usage_perc_a":10.57,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"csp,security,header",
+ "ie_id":"contentsecuritypolicy",
+ "chrome_id":"5205088045891584",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/cors.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/cors.json
new file mode 100644
index 0000000..daebc26
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/cors.json
@@ -0,0 +1,238 @@
+{
+ "title":"Cross-Origin Resource Sharing",
+ "description":"Method of performing XMLHttpRequests across domains",
+ "spec":"http://www.w3.org/TR/cors/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/",
+ "title":"Mozilla Hacks blog post"
+ },
+ {
+ "url":"http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx",
+ "title":"Alternative implementation by IE8"
+ },
+ {
+ "url":"https://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/",
+ "title":"DOM access using CORS"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-cors-xhr",
+ "title":"has.js test"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE10+ does not send cookies when withCredential=true ([IE Bug #759587](https://connect.microsoft.com/IE/feedback/details/759587/ie10-doesnt-support-cookies-on-cross-origin-xmlhttprequest-withcredentials-true))"
+ },
+ {
+ "description":"IE10+ does not make a CORS request if port is the only difference ([IE Bug #781303](http://connect.microsoft.com/IE/feedback/details/781303))"
+ },
+ {
+ "description":"Android and some old versions of WebKit (that may be found in various webview implementations) do not support Access-Control-Expose-Headers: https://code.google.com/p/android/issues/detail?id=56726"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a",
+ "9":"a",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Supported somewhat in IE8 and IE9 using the XDomainRequest object (but has [limitations]( http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx))",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":89.24,
+ "usage_perc_a":4.72,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/cryptography.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/cryptography.json
new file mode 100644
index 0000000..ea3e934
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/cryptography.json
@@ -0,0 +1,229 @@
+{
+ "title":"Web Cryptography",
+ "description":"JavaScript API for performing basic cryptographic operations in web applications",
+ "spec":"http://www.w3.org/TR/WebCryptoAPI/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.slideshare.net/Channy/the-history-and-status-of-web-crypto-api",
+ "title":"The History and Status of Web Crypto API"
+ },
+ {
+ "url":"http://research.microsoft.com/en-us/projects/msrjscrypto/",
+ "title":"Microsoft Research JavaScript Cryptography Library"
+ },
+ {
+ "url":"http://bitwiseshiftleft.github.io/sjcl/",
+ "title":"Cross-browser cryptography library"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"a x #1",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"n d #2",
+ "33":"n d #2",
+ "34":"a #4",
+ "35":"a #4",
+ "36":"a #4",
+ "37":"a #4",
+ "38":"a #4",
+ "39":"a #4"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"p",
+ "6":"p",
+ "6.1":"p",
+ "7":"p",
+ "7.1":"y x #3",
+ "8":"y x #3"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "11.6":"p",
+ "12":"p",
+ "12.1":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"p",
+ "6.0-6.1":"p",
+ "7.0-7.1":"p",
+ "8":"y x #3",
+ "8.1":"y x #3"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"p",
+ "4":"p",
+ "4.1":"p",
+ "4.2-4.3":"p",
+ "4.4":"p",
+ "4.4.3-4.4.4":"p",
+ "37":"y"
+ },
+ "bb":{
+ "7":"p",
+ "10":"p"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"p",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"p"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"a x #1"
+ },
+ "and_uc":{
+ "9.9":"p"
+ }
+ },
+ "notes":"Many browsers support the `[crypto.getRandomValues()](#feat=getrandomvalues)` method, but not actual cryptography functionality under `crypto.subtle`. \r\n\r\nFirefox also has support for [unofficial features](https://developer.mozilla.org/en-US/docs/JavaScript_crypto). \r\n\r\nIn Chrome the API is only usable over secure connections. ([corresponding bug](https://code.google.com/p/chromium/issues/detail?id=373032))",
+ "notes_by_num":{
+ "1":"Support in IE11 is based an older version of the specification. ",
+ "2":"Supported in Firefox behind the `dom.webcrypto.enabled` flag. ",
+ "3":"Supported in Safari using the `crypto.webkitSubtle` prefix",
+ "4":"Partial support in Firefox is [described here](https://docs.google.com/spreadsheet/ccc?key=0AiAcidBZRLxndE9LWEs2R1oxZ0xidUVoU3FQbFFobkE#gid=1)"
+ },
+ "usage_perc_y":49.85,
+ "usage_perc_a":18.49,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"subtle,subtlecrypto",
+ "ie_id":"webcryptoapi",
+ "chrome_id":"5030265697075200",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-animation.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-animation.json
new file mode 100644
index 0000000..a02dee9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-animation.json
@@ -0,0 +1,234 @@
+{
+ "title":"CSS3 Animation",
+ "description":"Complex method of animating certain properties of an element",
+ "spec":"http://www.w3.org/TR/css3-animations/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://robertnyman.com/2010/05/06/css3-animations/",
+ "title":"Blog post on usage"
+ },
+ {
+ "url":"http://www.css3files.com/animation/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/animations",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"'animation-fill-mode' property is not supported in Android browser below 2.3."
+ },
+ {
+ "description":"iOS 6.1 and below do not support animation on pseudo-elements."
+ },
+ {
+ "description":"@keyframes not supported in an inline or scoped stylesheet in Firefox (bug 830056)"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"y x",
+ "12.1":"y",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"y",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"Partial support in Android browser refers to buggy behavior in different scenarios.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.99,
+ "usage_perc_a":0.12,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"animations,css-animations,keyframe,keyframes",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-appearance.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-appearance.json
new file mode 100644
index 0000000..7881266
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-appearance.json
@@ -0,0 +1,218 @@
+{
+ "title":"CSS Appearance",
+ "description":"The `appearance` property defines how elements (particularly form controls) appear by default. By setting the value to `none` the default appearance can be entirely redefined using other CSS properties.",
+ "spec":"http://wiki.csswg.org/spec/css4-ui#appearance",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://css-tricks.com/almanac/properties/a/appearance/",
+ "title":"CSS Tricks article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"y x",
+ "3":"y x",
+ "3.5":"y x",
+ "3.6":"y x",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"y x",
+ "3.2":"y x",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y x",
+ "2.2":"y x",
+ "2.3":"y x",
+ "3":"y x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"a #1"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"The `appearance` property currently does not appear in any CSS specification so there is no specifically correct usage.",
+ "notes_by_num":{
+ "1":"`-webkit-appearance` with value `none` is supported on IE11 Mobile for phones with \"[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""
+ },
+ "usage_perc_y":78.87,
+ "usage_perc_a":0.48,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-at-counter-style.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-at-counter-style.json
new file mode 100644
index 0000000..7157a89
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-at-counter-style.json
@@ -0,0 +1,224 @@
+{
+ "title":"CSS Counter Styles",
+ "description":"The @counter-style CSS at-rule allows the author to define their own counter styles. The earlier versions of CSS defined a set of useful counter styles based on usage patterns. While the later versions attempted to add more styles to the list to support the needs of world wide typography, it still wasn't adequate. The @counter-style at-rule addresses this shortcoming in an open-ended manner, by allowing authors to define their own counter styles when the pre-defined styles aren't fitting their needs. A @counter-style rule defines how to convert a counter value into a string representation.",
+ "spec":"http://dev.w3.org/csswg/css-counter-styles/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://slides.upsuper.org/files/APgTVbyRhasM0QgF.pdf",
+ "title":"Slides(Chinese)"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/@counter-style",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"https://bugzilla.mozilla.org/show_bug.cgi?id=843718"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":10.3,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"css @counter-style, list-style",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":false
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-background-offsets.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-background-offsets.json
new file mode 100644
index 0000000..f09fee5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-background-offsets.json
@@ -0,0 +1,224 @@
+{
+ "title":"CSS background-position edge offsets",
+ "description":"Allows CSS background images to be positioned relative to the specified edge using the 3 to 4 value syntax. For example: `background-position: right 5px bottom 5px;` for positioning 5px from the bottom-right corner.",
+ "spec":"http://www.w3.org/TR/css3-background/#background-position",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/background-position",
+ "title":"MDN article on background-position"
+ },
+ {
+ "url":"http://briantree.se/quick-tip-06-use-four-value-syntax-properly-position-background-images/",
+ "title":"Basic information"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Safari 8 [has a bug](https://discussions.apple.com/thread/6679022) with bottom-positioned values `background-attachment: fixed;`"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":85.49,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"4 value syntax",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-backgroundblendmode.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-backgroundblendmode.json
new file mode 100644
index 0000000..1039f27
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-backgroundblendmode.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS background-blend-mode",
+ "description":"Allows blending between CSS background images, gradients, and colors.",
+ "spec":"http://www.w3.org/TR/compositing-1/#background-blend-mode",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://codepen.io/bennettfeely/pen/rxoAc",
+ "title":"codepen example"
+ },
+ {
+ "url":"https://medium.com/web-design-technique/6b51bf53743a",
+ "title":"Blog post"
+ },
+ {
+ "url":"http://bennettfeely.com/gradients",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":62.06,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"css blend modes,css blending modes,blending,multiply,screen,background",
+ "ie_id":"",
+ "chrome_id":"5768037999312896",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-boxdecorationbreak.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-boxdecorationbreak.json
new file mode 100644
index 0000000..5963a6e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-boxdecorationbreak.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS box-decoration-break",
+ "description":"Controls whether the box's margins, borders, padding, and other decorations wrap the broken edges of the box fragments (when the box is split by a break (page/column/region/line).",
+ "spec":"http://www.w3.org/TR/css3-break/#break-decoration",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://jsbin.com/xojoro/edit?css,output",
+ "title":"Demo of effect on box border"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"u",
+ "9.5-9.6":"u",
+ "10.0-10.1":"u",
+ "10.5":"u",
+ "10.6":"u",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"u",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":72.56,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"box-decoration,box decoration,break",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-boxshadow.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-boxshadow.json
new file mode 100644
index 0000000..6329217
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-boxshadow.json
@@ -0,0 +1,236 @@
+{
+ "title":"CSS3 Box-shadow",
+ "description":"Method of displaying an inner or outer shadow effect to elements",
+ "spec":"http://www.w3.org/TR/css3-background/#box-shadow",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/En/CSS/-moz-box-shadow",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://westciv.com/tools/boxshadows/index.html",
+ "title":"Live editor"
+ },
+ {
+ "url":"http://tests.themasta.com/blogstuff/boxshadowdemo.html",
+ "title":"Demo of various effects"
+ },
+ {
+ "url":"http://www.css3files.com/shadow/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/box-shadow",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Safari 6, iOS 6 and Android 2.3 default browser don't work with a 0px value for \"blur-radius\".\r\ne.g. `-webkit-box-shadow: 5px 1px 0px 1px #f04e29;`\r\ndoesn't work, but\r\n`-webkit-box-shadow: 5px 1px 1px 1px #f04e29`\r\ndoes."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y x",
+ "3.6":"y x",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a x",
+ "3.2":"a x",
+ "4":"a x",
+ "5":"y x",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Can be partially emulated in older IE versions using the non-standard \"shadow\" filter. Partial support in Safari, iOS Safari and Android Browser refers to missing \"inset\" and blur radius value support.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":90.94,
+ "usage_perc_a":0.19,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"box-shadows,boxshadows,box shadow,shaow",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-canvas.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-canvas.json
new file mode 100644
index 0000000..6bbd2bc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-canvas.json
@@ -0,0 +1,218 @@
+{
+ "title":"CSS Canvas Drawings",
+ "description":"Method of using HTML5 Canvas as a background image. Not currently part of any specification.",
+ "spec":"http://webkit.org/blog/176/css-canvas-drawing/",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://webkit.org/blog/176/css-canvas-drawing/",
+ "title":"Webkit blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"u",
+ "38":"u",
+ "39":"u"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y x",
+ "2.2":"y x",
+ "2.3":"y x",
+ "3":"y x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"A similar effect can be achieved in Firefox 4+ using the -moz-element() background property",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":66.53,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-clip-path.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-clip-path.json
new file mode 100644
index 0000000..989d4c8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-clip-path.json
@@ -0,0 +1,221 @@
+{
+ "title":"CSS clip-path property",
+ "description":"Method of defining the visible region of an element using SVG or a shape definition.",
+ "spec":"http://www.w3.org/TR/css-masking-1/#the-clip-path",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://css-tricks.com/almanac/properties/c/clip/",
+ "title":"CSS Tricks article"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Chrome has an issue with [clip-paths and backface-visibility with 3D transforms](https://code.google.com/p/chromium/issues/detail?id=350724)"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"a #1",
+ "3.6":"a #1",
+ "4":"a #1",
+ "5":"a #1",
+ "6":"a #1",
+ "7":"a #1",
+ "8":"a #1",
+ "9":"a #1",
+ "10":"a #1",
+ "11":"a #1",
+ "12":"a #1",
+ "13":"a #1",
+ "14":"a #1",
+ "15":"a #1",
+ "16":"a #1",
+ "17":"a #1",
+ "18":"a #1",
+ "19":"a #1",
+ "20":"a #1",
+ "21":"a #1",
+ "22":"a #1",
+ "23":"a #1",
+ "24":"a #1",
+ "25":"a #1",
+ "26":"a #1",
+ "27":"a #1",
+ "28":"a #1",
+ "29":"a #1",
+ "30":"a #1",
+ "31":"a #1",
+ "32":"a #1",
+ "33":"a #1",
+ "34":"a #1",
+ "35":"a #1",
+ "36":"a #1",
+ "37":"a #1",
+ "38":"a #1",
+ "39":"a #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"a x #2",
+ "25":"a x #2",
+ "26":"a x #2",
+ "27":"a x #2",
+ "28":"a x #2",
+ "29":"a x #2",
+ "30":"a x #2",
+ "31":"a x #2",
+ "32":"a x #2",
+ "33":"a x #2",
+ "34":"a x #2",
+ "35":"a x #2",
+ "36":"a x #2",
+ "37":"a x #2",
+ "38":"a x #2",
+ "39":"a x #2",
+ "40":"a x #2",
+ "41":"a x #2",
+ "42":"a x #2",
+ "43":"a x #2",
+ "44":"a x #2"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"a x #2",
+ "7.1":"a x #2",
+ "8":"a x #2"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"a x #2",
+ "16":"a x #2",
+ "17":"a x #2",
+ "18":"a x #2",
+ "19":"a x #2",
+ "20":"a x #2",
+ "21":"a x #2",
+ "22":"a x #2",
+ "23":"a x #2",
+ "24":"a x #2",
+ "25":"a x #2",
+ "26":"a x #2",
+ "27":"a x #2",
+ "28":"a x #2",
+ "29":"a x #2"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"a x #2",
+ "8":"a x #2",
+ "8.1":"a x #2"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"a x #2",
+ "4.4.3-4.4.4":"a x #2",
+ "37":"a x #2"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a x #2"
+ },
+ "and_chr":{
+ "41":"a x #2"
+ },
+ "and_ff":{
+ "36":"a #1"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support refers to only supporting the `url()` syntax.",
+ "2":"Partial support refers to supporting shapes and the `url(#foo)` syntax for inline SVG, but not shapes in external SVGs."
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":70.75,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-counters.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-counters.json
new file mode 100644
index 0000000..4dc09f1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-counters.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS Counters",
+ "description":"Method of controlling number values in generated content, using the counter-reset and counter-increment properties.",
+ "spec":"http://www.w3.org/TR/CSS21/generate.html#counters",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://onwebdev.blogspot.com/2012/02/css-counters-tutorial.html",
+ "title":"Tutorial and information"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/CSS_Counters",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/counter-reset",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS2"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":96.95,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-crisp-edges.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-crisp-edges.json
new file mode 100644
index 0000000..2683883
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-crisp-edges.json
@@ -0,0 +1,228 @@
+{
+ "title":"Crisp edges/pixelated images",
+ "description":"Forces images to be scaled with an algorithm that preserves contrast and edges in the image, without smoothing colors or introduce blur. This is intended for images such as pixel art. Official values that accomplish this for the `image-rendering` property are `crisp-edges` and `pixelated`.",
+ "spec":"http://dev.w3.org/csswg/css-images-3/#valdef-image-rendering-crisp-edges",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://updates.html5rocks.com/2015/01/pixelated",
+ "title":"HTML5Rocks article"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"`image-rendering:-webkit-optimize-contrast;` and `-ms-interpolation-mode:nearest-neighbor` do not affect CSS images."
+ }
+ ],
+ "categories":[
+ "CSS",
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"a x #2",
+ "8":"a x #2",
+ "9":"a x #2",
+ "10":"a x #2",
+ "11":"a x #2",
+ "TP":"a x #2"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y x #3",
+ "4":"y x #3",
+ "5":"y x #3",
+ "6":"y x #3",
+ "7":"y x #3",
+ "8":"y x #3",
+ "9":"y x #3",
+ "10":"y x #3",
+ "11":"y x #3",
+ "12":"y x #3",
+ "13":"y x #3",
+ "14":"y x #3",
+ "15":"y x #3",
+ "16":"y x #3",
+ "17":"y x #3",
+ "18":"y x #3",
+ "19":"y x #3",
+ "20":"y x #3",
+ "21":"y x #3",
+ "22":"y x #3",
+ "23":"y x #3",
+ "24":"y x #3",
+ "25":"y x #3",
+ "26":"y x #3",
+ "27":"y x #3",
+ "28":"y x #3",
+ "29":"y x #3",
+ "30":"y x #3",
+ "31":"y x #3",
+ "32":"y x #3",
+ "33":"y x #3",
+ "34":"y x #3",
+ "35":"y x #3",
+ "36":"y x #3",
+ "37":"y x #3",
+ "38":"y x #3",
+ "39":"y x #3"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"y #4",
+ "42":"y #4",
+ "43":"y #4",
+ "44":"y #4"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"a x #1",
+ "6.1":"y x #3",
+ "7":"y x #3",
+ "7.1":"y x #3",
+ "8":"y x #3"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"y x #3",
+ "12":"y x #3",
+ "12.1":"y x #3",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"y #4",
+ "29":"y #4"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"a x #1",
+ "6.0-6.1":"a x #1",
+ "7.0-7.1":"y x #3",
+ "8":"y x #3",
+ "8.1":"y x #3"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"a x #1"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"y x #3",
+ "12.1":"y x #3",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"y #4"
+ },
+ "and_ff":{
+ "36":"y x #3"
+ },
+ "ie_mob":{
+ "10":"a x #2",
+ "11":"a x #2"
+ },
+ "and_uc":{
+ "9.9":"a x #1"
+ }
+ },
+ "notes":"Note that prefixes apply to the value (e.g. `-moz-crisp-edges`), not the `image-rendering` property.",
+ "notes_by_num":{
+ "1":"Supported using the non-standard value `-webkit-optimize-contrast`",
+ "2":"Internet Explorer accomplishes support using the non-standard declaration `-ms-interpolation-mode: nearest-neighbor`",
+ "3":"Supports the `crisp-edges` value, but not `pixelated`.",
+ "4":"Supports the `pixelated` value, but not `crisp-edges`."
+ },
+ "usage_perc_y":33.02,
+ "usage_perc_a":19.1,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"image-rendering,crisp-edges",
+ "ie_id":"",
+ "chrome_id":"5118058116939776",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-deviceadaptation.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-deviceadaptation.json
new file mode 100644
index 0000000..30b339a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-deviceadaptation.json
@@ -0,0 +1,223 @@
+{
+ "title":"CSS Device Adaptation",
+ "description":"A standard way to override the size of viewport in web page, standardizing and replacing Apple's own popular viewport implementation.",
+ "spec":"http://www.w3.org/TR/css-device-adapt/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/",
+ "title":"Introduction to meta viewport and @viewport in Opera Mobile"
+ },
+ {
+ "url":"http://msdn.microsoft.com/en-us/library/ie/hh708740(v=vs.85).aspx",
+ "title":"Device adaptation in Internet Explorer 10"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a x #1",
+ "11":"a x #1",
+ "TP":"a x #1"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"u",
+ "7":"u",
+ "7.1":"u",
+ "8":"u"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"a x #2"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"a x #2",
+ "11.1":"a x #2",
+ "11.5":"a x #2",
+ "12":"a x #2",
+ "12.1":"a x #2",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"a x #1",
+ "11":"a x #1"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"IE only supports the 'width' and 'height' properties.",
+ "2":"Opera Mobile and Opera Mini only support the 'orientation' property."
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":13.02,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"viewport",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-featurequeries.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-featurequeries.json
new file mode 100644
index 0000000..063a3c4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-featurequeries.json
@@ -0,0 +1,232 @@
+{
+ "title":"CSS Feature Queries",
+ "description":"CSS Feature Queries allow authors to condition rules based on whether particular property declarations are supported in CSS using the @supports at rule.",
+ "spec":"http://www.w3.org/TR/css3-conditional/#at-supports",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/@supports",
+ "title":"MDN Article"
+ },
+ {
+ "url":"http://mcc.id.au/blog/2012/08/supports",
+ "title":"@supports in Firefox"
+ },
+ {
+ "url":"http://dabblet.com/gist/3895764",
+ "title":"Test case"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/atrules/@supports",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Using @supports on Chrome 28-29 and Opera 15-16 breaks following :not selectors. [crbug.com/257695](http://crbug.com/257695)"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"See also the [CSS.supports() DOM API](#feat=css-supports-api)",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":60.81,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"supports,conditional",
+ "ie_id":"conditionalrules",
+ "chrome_id":"4993981813358592",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-filters.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-filters.json
new file mode 100644
index 0000000..54ea30c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-filters.json
@@ -0,0 +1,231 @@
+{
+ "title":"CSS Filter Effects",
+ "description":"Method of applying filter effects (like blur, grayscale, brightness, contrast and hue) to elements, previously only possible by using SVG.",
+ "spec":"http://www.w3.org/TR/filter-effects/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://html5-demos.appspot.com/static/css/filters/index.html",
+ "title":"Demo file for WebKit browsers"
+ },
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/filters/understanding-css/",
+ "title":"HTML5Rocks article"
+ },
+ {
+ "url":"http://dl.dropbox.com/u/3260327/angular/CSS3ImageManipulation.html",
+ "title":"Filter editor"
+ },
+ {
+ "url":"http://bennettfeely.com/filters/",
+ "title":"Filter Playground"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS",
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"a",
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a d #1",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"Note that this property is significantly different from and incompatible with Microsoft's [older \"filter\" property](http://msdn.microsoft.com/en-us/library/ie/ms530752%28v=vs.85%29.aspx).\r\n\r\nPartial support in Firefox before version 34 [only implemented the url() function of the filter property](https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Browser_compatibility)",
+ "notes_by_num":{
+ "1":"Supported in Firefox under the `layout.css.filters.enabled` flag."
+ },
+ "usage_perc_y":72.81,
+ "usage_perc_a":2.46,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"sepia,hue-rotate,invert,saturate",
+ "ie_id":"filters",
+ "chrome_id":"5822463824887808",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-fixed.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-fixed.json
new file mode 100644
index 0000000..acf336d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-fixed.json
@@ -0,0 +1,228 @@
+{
+ "title":"CSS position:fixed",
+ "description":"Method of keeping an element in a fixed location regardless of scroll position",
+ "spec":"http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.css-101.org/fixed-positioning/05.php",
+ "title":"Workaround for IE6"
+ },
+ {
+ "url":"http://bradfrostweb.com/blog/mobile/fixed-position/",
+ "title":"Article on mobile support"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/position",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"in iOS Safari 5-7, position:fixed will move to center of window with focus event on child text input field."
+ }
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Only works in Android 2.2+ by using the following meta tag: . \r\n\r\nPartial support in older iOS Safari refers to [buggy behavior](http://remysharp.com/2012/05/24/issues-with-position-fixed-scrolling-on-ios/).",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":92.35,
+ "usage_perc_a":1.9,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-font-stretch.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-font-stretch.json
new file mode 100644
index 0000000..46f32a3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-font-stretch.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS font-stretch",
+ "description":"If a font has multiple types of variations based on the width of characters, the `font-stretch` property allows the appropriate one to be selected. The property in itself does not cause the browser to stretch to a font.",
+ "spec":"http://www.w3.org/TR/css-fonts-3/#font-stretch-prop",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://css-tricks.com/almanac/properties/f/font-stretch/",
+ "title":"CSS Tricks article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"u",
+ "43":"u",
+ "44":"u"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"u",
+ "29":"u"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":24.04,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"font stretch",
+ "ie_id":"cssfontstretch",
+ "chrome_id":"4598830058176512",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-gencontent.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-gencontent.json
new file mode 100644
index 0000000..7ff9942
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-gencontent.json
@@ -0,0 +1,232 @@
+{
+ "title":"CSS Generated content for pseudo-elements",
+ "description":"Method of displaying text or images before or after the given element's contents using the ::before and ::after pseudo-elements. All browsers with support also support the `attr()` notation in the `content` property. ",
+ "spec":"http://www.w3.org/TR/CSS21/generate.html",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.westciv.com/style_master/academy/css_tutorial/advanced/generated_content.html",
+ "title":"Guide on usage"
+ },
+ {
+ "url":"https://dev.opera.com/articles/view/css-generated-content-techniques/",
+ "title":"Dev.Opera article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/generated_and_replaced_content",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Chrome supports CSS transitions on generated content as of v. 26. Safari v6 and below do not support transitions or animations on pseudo elements."
+ },
+ {
+ "description":"IE9, IE10, IE11 ignore CSS rem units in the line-height property. [Bug report](https://connect.microsoft.com/IE/feedback/details/776744/css3-using-rem-to-set-line-height-in-before-after-pseudo-elements-doesnt-work)."
+ }
+ ],
+ "categories":[
+ "CSS2",
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"IE8 only supports the single-colon CSS 2.1 syntax (i.e. :pseudo-class). It does not support the double-colon CSS3 syntax (i.e. ::pseudo-element)\r\n\r\nFor content to appear in pseudo-elements, the `content` property must be set (but may be an empty string).",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.05,
+ "usage_perc_a":2.9,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"before,after",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-gradients.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-gradients.json
new file mode 100644
index 0000000..9b87634
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-gradients.json
@@ -0,0 +1,230 @@
+{
+ "title":"CSS Gradients",
+ "description":"Method of defining a linear or radial color gradient as a CSS image.",
+ "spec":"http://www.w3.org/TR/css3-images/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://www.colorzilla.com/gradient-editor/",
+ "title":"Cross-browser editor"
+ },
+ {
+ "url":"http://www.css3files.com/gradient/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://css3pie.com/",
+ "title":"Tool to emulate support in IE"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/functions/linear-gradient",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y x",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"a x",
+ "5":"a x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"a x",
+ "11.5":"a x",
+ "11.6":"y x",
+ "12":"y x",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a x",
+ "4.0-4.1":"a x",
+ "4.2-4.3":"a x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a x",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"a x",
+ "11.5":"a x",
+ "12":"y x",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"Syntax used by browsers with prefixed support may be incompatible with that for proper support. \r\n\r\nPartial support in Opera 11.10 and 11.50 also refers to only having support for linear gradients.\r\n\r\nSupport can be somewhat emulated in older IE versions using the non-standard \"gradient\" filter. \r\n\r\nFirefox 10+, Opera 11.6+, Chrome 26+ and IE10+ also support the new \"to (side)\" syntax.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.79,
+ "usage_perc_a":0.47,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"linear,linear-gradient,gradiant",
+ "ie_id":"gradients",
+ "chrome_id":"5785905063264256",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-grid.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-grid.json
new file mode 100644
index 0000000..e8d33be
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-grid.json
@@ -0,0 +1,235 @@
+{
+ "title":"CSS Grid Layout",
+ "description":"Method of using a grid concept to lay out content, providing a mechanism for authors to divide available space for lay out into columns and rows using a set of predictable sizing behaviors",
+ "spec":"http://www.w3.org/TR/css3-grid-layout/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx",
+ "title":"IE Blog post"
+ },
+ {
+ "url":"https://bugs.webkit.org/show_bug.cgi?id=60731",
+ "title":"Webkit (Chrome, Safari, etc.) feature request"
+ },
+ {
+ "url":"https://bugzilla.mozilla.org/show_bug.cgi?id=616605",
+ "title":"Mozilla (Firefox) feature request"
+ },
+ {
+ "url":"https://github.com/codler/Grid-Layout-Polyfill",
+ "title":"Polyfill based on old spec"
+ },
+ {
+ "url":"https://github.com/FremyCompany/css-grid-polyfill/",
+ "title":"Polyfill based on new spec"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"p",
+ "10":"a x #2",
+ "11":"a x #2",
+ "TP":"a x #2"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"u",
+ "38":"u",
+ "39":"u"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p d #1",
+ "30":"p d #1",
+ "31":"p d #1",
+ "32":"p d #1",
+ "33":"p d #1",
+ "34":"p d #1",
+ "35":"p d #1",
+ "36":"p d #1",
+ "37":"p d #1",
+ "38":"p d #1",
+ "39":"p d #1",
+ "40":"p d #1",
+ "41":"p d #1",
+ "42":"p d #1",
+ "43":"p d #1",
+ "44":"p d #1"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"p",
+ "6.1":"p",
+ "7":"p",
+ "7.1":"p",
+ "8":"p"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"p d #1",
+ "29":"p d #1"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"p",
+ "7.0-7.1":"p",
+ "8":"p",
+ "8.1":"p"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"p",
+ "4.4":"p",
+ "4.4.3-4.4.4":"p",
+ "37":"p"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"p"
+ },
+ "and_chr":{
+ "41":"p"
+ },
+ "and_ff":{
+ "36":"p"
+ },
+ "ie_mob":{
+ "10":"a x #2",
+ "11":"a x #2"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags",
+ "2":"Partial support in IE refers to supporting an [older version](http://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/) of the specification."
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":10.16,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"grids,grid-row,grid-column",
+ "ie_id":"grid",
+ "chrome_id":"4589636412243968",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-hyphens.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-hyphens.json
new file mode 100644
index 0000000..aafcc2c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-hyphens.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS Hyphenation",
+ "description":"Method of controlling when words at the end of lines should be hyphenated using the \"hyphens\" property.",
+ "spec":"http://www.w3.org/TR/css3-text/#hyphenation",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/CSS/hyphens",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://blog.fontdeck.com/post/9037028497/hyphens",
+ "title":"Blog post"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/hyphens",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y x",
+ "11":"y x",
+ "TP":"y x"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"a x"
+ }
+ },
+ "notes":"Chrome 29- and Android 4.0 Browser support \"-webkit-hyphens: none\", but not the \"auto\" property. Chrome 30+ doesn't support it either. It is [advisable to set the @lang attribute](http://blog.adrianroselli.com/2015/01/on-use-of-lang-attribute.html) on the HTML element to enable hyphenation support and improve accessibility.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":31.79,
+ "usage_perc_a":3.84,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"hyphen,shy",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-image-orientation.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-image-orientation.json
new file mode 100644
index 0000000..705a10e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-image-orientation.json
@@ -0,0 +1,228 @@
+{
+ "title":"CSS3 image-orientation",
+ "description":"CSS property used generally to fix the intended orientation of an image. This can be done using 90 degree increments or based on the image's EXIF data using the \"from-image\" value.",
+ "spec":"http://www.w3.org/TR/css3-images/#image-orientation",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/image-orientation",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://sethfowler.org/blog/2013/09/13/new-in-firefox-26-css-image-orientation/",
+ "title":"Blog post"
+ },
+ {
+ "url":"http://jsbin.com/EXUTolo/4",
+ "title":"Demo (Chinese)"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Negative values do not work in Firefox."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support in iOS refers to the browser using EXIF data by default, though it does not actually support the property. Opening the image in a new tab in Chrome results in the image shown in the orientation according to the EXIF data.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":11.43,
+ "usage_perc_a":7.21,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"image-orientation,from-image,flip",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-image-set.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-image-set.json
new file mode 100644
index 0000000..c2cfe4d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-image-set.json
@@ -0,0 +1,218 @@
+{
+ "title":"CSS image-set",
+ "description":"Method of letting the browser pick the most appropriate CSS background image from a given set, primarily for high PPI screens.",
+ "spec":"http://dev.w3.org/csswg/css-images-3/#image-set-notation",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://cloudfour.com/examples/image-set/",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"u",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":59.11,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-logical-props.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-logical-props.json
new file mode 100644
index 0000000..295d27f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-logical-props.json
@@ -0,0 +1,224 @@
+{
+ "title":"CSS Logical Properties",
+ "description":"Use start/end properties that depend on LTR or RTL writing direction instead of left/right",
+ "spec":"http://dev.w3.org/csswg/css-logical-props/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-margin-start",
+ "title":"MDN -moz-margin-start"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-padding-start",
+ "title":"MDN -moz-padding-start"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS",
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"a x #1",
+ "3.5":"a x #1",
+ "3.6":"a x #1",
+ "4":"a x #1",
+ "5":"a x #1",
+ "6":"a x #1",
+ "7":"a x #1",
+ "8":"a x #1",
+ "9":"a x #1",
+ "10":"a x #1",
+ "11":"a x #1",
+ "12":"a x #1",
+ "13":"a x #1",
+ "14":"a x #1",
+ "15":"a x #1",
+ "16":"a x #1",
+ "17":"a x #1",
+ "18":"a x #1",
+ "19":"a x #1",
+ "20":"a x #1",
+ "21":"a x #1",
+ "22":"a x #1",
+ "23":"a x #1",
+ "24":"a x #1",
+ "25":"a x #1",
+ "26":"a x #1",
+ "27":"a x #1",
+ "28":"a x #1",
+ "29":"a x #1",
+ "30":"a x #1",
+ "31":"a x #1",
+ "32":"a x #1",
+ "33":"a x #1",
+ "34":"a x #1",
+ "35":"a x #1",
+ "36":"a x #1",
+ "37":"a x #1",
+ "38":"a x #1",
+ "39":"a x #1"
+ },
+ "chrome":{
+ "4":"a x #2",
+ "5":"a x #2",
+ "6":"a x #2",
+ "7":"a x #2",
+ "8":"a x #2",
+ "9":"a x #2",
+ "10":"a x #2",
+ "11":"a x #2",
+ "12":"a x #2",
+ "13":"a x #2",
+ "14":"a x #2",
+ "15":"a x #2",
+ "16":"a x #2",
+ "17":"a x #2",
+ "18":"a x #2",
+ "19":"a x #2",
+ "20":"a x #2",
+ "21":"a x #2",
+ "22":"a x #2",
+ "23":"a x #2",
+ "24":"a x #2",
+ "25":"a x #2",
+ "26":"a x #2",
+ "27":"a x #2",
+ "28":"a x #2",
+ "29":"a x #2",
+ "30":"a x #2",
+ "31":"a x #2",
+ "32":"a x #2",
+ "33":"a x #2",
+ "34":"a x #2",
+ "35":"a x #2",
+ "36":"a x #2",
+ "37":"a x #2",
+ "38":"a x #2",
+ "39":"a x #2",
+ "40":"a x #2",
+ "41":"a x #2",
+ "42":"a x #2",
+ "43":"a x #2",
+ "44":"a x #2"
+ },
+ "safari":{
+ "3.1":"a x #2",
+ "3.2":"a x #2",
+ "4":"a x #2",
+ "5":"a x #2",
+ "5.1":"a x #2",
+ "6":"a x #2",
+ "6.1":"a x #2",
+ "7":"a x #2",
+ "7.1":"a x #2",
+ "8":"a x #2"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"a x #2",
+ "16":"a x #2",
+ "17":"a x #2",
+ "18":"a x #2",
+ "19":"a x #2",
+ "20":"a x #2",
+ "21":"a x #2",
+ "22":"a x #2",
+ "23":"a x #2",
+ "24":"a x #2",
+ "25":"a x #2",
+ "26":"a x #2",
+ "27":"a x #2",
+ "28":"a x #2",
+ "29":"a x #2"
+ },
+ "ios_saf":{
+ "3.2":"a x #2",
+ "4.0-4.1":"a x #2",
+ "4.2-4.3":"a x #2",
+ "5.0-5.1":"a x #2",
+ "6.0-6.1":"a x #2",
+ "7.0-7.1":"a x #2",
+ "8":"a x #2",
+ "8.1":"a x #2"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"u",
+ "2.2":"u",
+ "2.3":"u",
+ "3":"u",
+ "4":"u",
+ "4.1":"u",
+ "4.2-4.3":"u",
+ "4.4":"u",
+ "4.4.3-4.4.4":"u",
+ "37":"a x #2"
+ },
+ "bb":{
+ "7":"u",
+ "10":"u"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a x #2"
+ },
+ "and_chr":{
+ "41":"a x #2"
+ },
+ "and_ff":{
+ "36":"a x #1"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"u"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Firefox supports only -moz-margin-start, -moz-margin-end, -moz-padding-start, -moz-padding-end, -moz-border-start, -moz-border-end",
+ "2":"Like Firefox but also supports *-before and *-end for *-block-start and *-block-end properties"
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":68.64,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"margin,padding,start,end,left,,right",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":false
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-masks.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-masks.json
new file mode 100644
index 0000000..eb62c98
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-masks.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS Masks",
+ "description":"Method of displaying part of an element, using a selected image as a mask",
+ "spec":"http://www.w3.org/TR/css-masking/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/mask",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/masking/adobe/",
+ "title":"HTML5 Rocks article"
+ },
+ {
+ "url":"http://thenittygritty.co/css-masking",
+ "title":"Detailed blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"a",
+ "3.6":"a",
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a"
+ },
+ "chrome":{
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"a x",
+ "35":"a x",
+ "36":"a x",
+ "37":"a x",
+ "38":"a x",
+ "39":"a x",
+ "40":"a x",
+ "41":"a x",
+ "42":"a x",
+ "43":"a x",
+ "44":"a x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"a x",
+ "5":"a x",
+ "5.1":"a x",
+ "6":"a x",
+ "6.1":"a x",
+ "7":"a x",
+ "7.1":"a x",
+ "8":"a x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x"
+ },
+ "ios_saf":{
+ "3.2":"a x",
+ "4.0-4.1":"a x",
+ "4.2-4.3":"a x",
+ "5.0-5.1":"a x",
+ "6.0-6.1":"a x",
+ "7.0-7.1":"a x",
+ "8":"a x",
+ "8.1":"a x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"a x",
+ "4.1":"a x",
+ "4.2-4.3":"a x",
+ "4.4":"a x",
+ "4.4.3-4.4.4":"a x",
+ "37":"a x"
+ },
+ "bb":{
+ "7":"a x",
+ "10":"a x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a x"
+ },
+ "and_chr":{
+ "41":"a x"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"a x"
+ }
+ },
+ "notes":"Partial support in WebKit/Blink browsers refers to supporting the mask-image and mask-box-image properties, but lacks support for other parts of the spec. Partial support in Firefox refers to only support for inline SVG mask elements i.e. mask: url(#foo).",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":78.81,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"masks",
+ "chrome_id":"5381559662149632",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-media-resolution.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-media-resolution.json
new file mode 100644
index 0000000..afa17e6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-media-resolution.json
@@ -0,0 +1,222 @@
+{
+ "title":"Media Queries: resolution feature",
+ "description":"Allows a media query to be set based on the device pixels used per CSS unit. While the standard uses `min`/`max-resolution` for this, some browsers support the older non-standard `device-pixel-ratio` media query.",
+ "spec":"http://www.w3.org/TR/css3-mediaqueries/#resolution",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio/",
+ "title":"How to unprefix -webkit-device-pixel-ratio"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS",
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"a #1",
+ "10":"a #1",
+ "11":"a #1",
+ "TP":"a #2"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"a #3",
+ "3.6":"a #3",
+ "4":"a #3",
+ "5":"a #3",
+ "6":"a #3",
+ "7":"a #3",
+ "8":"a #3",
+ "9":"a #3",
+ "10":"a #3",
+ "11":"a #3",
+ "12":"a #3",
+ "13":"a #3",
+ "14":"a #3",
+ "15":"a #3",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a x #4",
+ "5":"a x #4",
+ "6":"a x #4",
+ "7":"a x #4",
+ "8":"a x #4",
+ "9":"a x #4",
+ "10":"a x #4",
+ "11":"a x #4",
+ "12":"a x #4",
+ "13":"a x #4",
+ "14":"a x #4",
+ "15":"a x #4",
+ "16":"a x #4",
+ "17":"a x #4",
+ "18":"a x #4",
+ "19":"a x #4",
+ "20":"a x #4",
+ "21":"a x #4",
+ "22":"a x #4",
+ "23":"a x #4",
+ "24":"a x #4",
+ "25":"a x #4",
+ "26":"a x #4",
+ "27":"a x #4",
+ "28":"a x #4",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"a x #4",
+ "5":"a x #4",
+ "5.1":"a x #4",
+ "6":"a x #4",
+ "6.1":"a x #4",
+ "7":"a x #4",
+ "7.1":"a x #4",
+ "8":"a x #4"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"a x #4",
+ "10.0-10.1":"a x #4",
+ "10.5":"a x #4",
+ "10.6":"a x #4",
+ "11":"a x #4",
+ "11.1":"a x #4",
+ "11.5":"a x #4",
+ "11.6":"a x #4",
+ "12":"a x #4",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"u",
+ "4.0-4.1":"a x #4",
+ "4.2-4.3":"a x #4",
+ "5.0-5.1":"a x #4",
+ "6.0-6.1":"a x #4",
+ "7.0-7.1":"a x #4",
+ "8":"a x #4",
+ "8.1":"a x #4"
+ },
+ "op_mini":{
+ "5.0-8.0":"a #1"
+ },
+ "android":{
+ "2.1":"u",
+ "2.2":"u",
+ "2.3":"u",
+ "3":"u",
+ "4":"a x #4",
+ "4.1":"a x #4",
+ "4.2-4.3":"a x #4",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a x #4",
+ "10":"a x #4"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"u",
+ "11.1":"u",
+ "11.5":"u",
+ "12":"u",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a #1",
+ "11":"a #1"
+ },
+ "and_uc":{
+ "9.9":"a x #4"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Supports the `dpi` unit, but does not support `dppx` or `dpcm` units.",
+ "2":"Supports the `dpi` and `dppx` units, but does not support `dpcm` units.",
+ "3":"Firefox before 16 supports only `dpi` unit, but you can set `2dppx` per `min--moz-device-pixel-ratio: 2`",
+ "4":"Supporte the non-standard `min`/`max-device-pixel-ratio`"
+ },
+ "usage_perc_y":61.01,
+ "usage_perc_a":32.84,
+ "ucprefix":false,
+ "parent":"css-mediaqueries",
+ "keywords":"@media,device-pixel-ratio,resolution",
+ "ie_id":"mediaqueriesresolutionfeature,dppxunitfortheresolutionmediaquery",
+ "chrome_id":"5944509615570944",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-mediaqueries.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-mediaqueries.json
new file mode 100644
index 0000000..047bf06
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-mediaqueries.json
@@ -0,0 +1,235 @@
+{
+ "title":"CSS3 Media Queries",
+ "description":"Method of applying styles based on media information. Includes things like page and device dimensions",
+ "spec":"http://www.w3.org/TR/css3-mediaqueries/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://ie.microsoft.com/testdrive/HTML5/85CSS3_MediaQueries/",
+ "title":"IE demo page with information"
+ },
+ {
+ "url":"http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries",
+ "title":"Media Queries tutorial"
+ },
+ {
+ "url":"https://github.com/scottjehl/Respond",
+ "title":"Polyfill for IE"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/atrules/@media",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox (9 and previous?) is buggy with min-width media queries not being recognized, but the rules inside those being parsed and used."
+ },
+ {
+ "description":"Opera 12.1 and IE9 incorrectly include scrollbar width for media queries based on window width."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Incomplete support by older webkit browsers refers to only acknowledging different media rules on page reload",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":93.98,
+ "usage_perc_a":0.01,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"@media",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-mixblendmode.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-mixblendmode.json
new file mode 100644
index 0000000..98827a5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-mixblendmode.json
@@ -0,0 +1,222 @@
+{
+ "title":"Blending of HTML/SVG elements",
+ "description":"Allows blending between arbitrary SVG and HTML elements",
+ "spec":"http://www.w3.org/TR/compositing-1/#mix-blend-mode",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://codepen.io/bennettfeely/pen/csjzd",
+ "title":"codepen example"
+ },
+ {
+ "url":"http://css-tricks.com/basics-css-blend-modes/",
+ "title":"Blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n d #1",
+ "30":"n d #1",
+ "31":"n d #1",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"n d #1",
+ "39":"n d #1",
+ "40":"n d #1",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"
+ },
+ "usage_perc_y":28.81,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"mix-blend-mode,css blend modes,css blending modes",
+ "ie_id":"mixblendmode",
+ "chrome_id":"6362616360337408",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-opacity.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-opacity.json
new file mode 100644
index 0000000..3b0ba17
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-opacity.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS3 Opacity",
+ "description":"Method of setting the transparency level of an element",
+ "spec":"http://www.w3.org/TR/css3-color/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.css3files.com/color/#opacity",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/opacity",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Transparency for elements in IE8 and older can be achieved using the proprietary \"filter\" property and does not work well with PNG images using alpha transparency.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.05,
+ "usage_perc_a":3.14,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"transparent,transparency,alpha",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-placeholder.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-placeholder.json
new file mode 100644
index 0000000..4e73a78
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-placeholder.json
@@ -0,0 +1,226 @@
+{
+ "title":":placeholder-shown CSS pseudo-class",
+ "description":"The :placeholder-shown pseudo-class represents the placeholder contents of a form field with placeholder text.",
+ "spec":"http://www.w3.org/TR/selectors4/#placeholder",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://msdn.microsoft.com/en-us/library/ie/hh772745(v=vs.85).aspx",
+ "title":"MSDN article"
+ },
+ {
+ "url":"http://css-tricks.com/snippets/css/style-placeholder-text/",
+ "title":"CSS-Tricks article with all prefixes"
+ },
+ {
+ "url":"http://wiki.csswg.org/ideas/placeholder-styling",
+ "title":"CSSWG discussion"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a x",
+ "11":"a x",
+ "TP":"a x"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"a x",
+ "35":"a x",
+ "36":"a x",
+ "37":"a x",
+ "38":"a x",
+ "39":"a x"
+ },
+ "chrome":{
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"a x",
+ "35":"a x",
+ "36":"a x",
+ "37":"a x",
+ "38":"a x",
+ "39":"a x",
+ "40":"a x",
+ "41":"a x",
+ "42":"a x",
+ "43":"a x",
+ "44":"a x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"a x",
+ "5.1":"a x",
+ "6":"a x",
+ "6.1":"a x",
+ "7":"a x",
+ "7.1":"a x",
+ "8":"a x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"a x",
+ "5.0-5.1":"a x",
+ "6.0-6.1":"a x",
+ "7.0-7.1":"a x",
+ "8":"a x",
+ "8.1":"a x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"a x",
+ "4.1":"a x",
+ "4.2-4.3":"a x",
+ "4.4":"a x",
+ "4.4.3-4.4.4":"a x",
+ "37":"a x"
+ },
+ "bb":{
+ "7":"u",
+ "10":"a x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a x"
+ },
+ "and_chr":{
+ "41":"a x"
+ },
+ "and_ff":{
+ "36":"a x"
+ },
+ "ie_mob":{
+ "10":"a x",
+ "11":"a x"
+ },
+ "and_uc":{
+ "9.9":"a x"
+ }
+ },
+ "notes":"Partial support refers to support for alternative syntax: ::-webkit-input-placeholder (Chrome/Safari/Opera),\r\n::-moz-placeholder (Firefox) and \r\n:-ms-input-placeholder (IE). ",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":88.72,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"::placeholder,placeholder",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-reflections.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-reflections.json
new file mode 100644
index 0000000..0d81c1b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-reflections.json
@@ -0,0 +1,218 @@
+{
+ "title":"CSS Reflections",
+ "description":"Method of displaying a reflection of an element",
+ "spec":"http://webkit.org/blog/182/css-reflections/",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://webkit.org/blog/182/css-reflections/",
+ "title":"Webkit blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y x",
+ "2.2":"y x",
+ "2.3":"y x",
+ "3":"y x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Similar effect can be achieved in Firefox 4+ using the -moz-element() background property",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":62.69,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"box-reflect",
+ "ie_id":"",
+ "chrome_id":"5627300510957568",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-regions.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-regions.json
new file mode 100644
index 0000000..a47ea27
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-regions.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS Regions",
+ "description":"Method of flowing content into multiple elements.",
+ "spec":"http://www.w3.org/TR/css3-regions/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://html.adobe.com/webstandards/cssregions/",
+ "title":"Adobe demos and samples"
+ },
+ {
+ "url":"http://msdn.microsoft.com/en-us/ie/hh272902#_CSSConnected",
+ "title":"IE10 developer guide info"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/atrules/@region",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a x",
+ "11":"a x",
+ "TP":"a x"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"n d",
+ "20":"n d",
+ "21":"n d",
+ "22":"n d",
+ "23":"n d",
+ "24":"n d",
+ "25":"n d",
+ "26":"n d",
+ "27":"n d",
+ "28":"n d",
+ "29":"n d",
+ "30":"n d",
+ "31":"n d",
+ "32":"n d",
+ "33":"n d",
+ "34":"n d",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"a x",
+ "11":"a x"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"Support in IE10 and IE11 is limited to using an iframe as a content source with the `-ms-flow-into: flow_name;` and `-ms-flow-from: flow_name;` syntax. ",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":13.43,
+ "usage_perc_a":10.24,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"regions",
+ "chrome_id":"5655612935372800",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-repeating-gradients.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-repeating-gradients.json
new file mode 100644
index 0000000..bddea6b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-repeating-gradients.json
@@ -0,0 +1,228 @@
+{
+ "title":"CSS Repeating Gradients",
+ "description":"Method of defining a repeating linear or radial color gradient as a CSS image.",
+ "spec":"http://www.w3.org/TR/css3-images/#repeating-gradients",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/CSS/repeating-linear-gradient",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.css3files.com/gradient/#repeatinglineargradient",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/repeating-linear-gradient",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Partial support in Opera 11.10 and 11.50 refers to only having support for linear gradients."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y x",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"a x",
+ "11.5":"a x",
+ "11.6":"y x",
+ "12":"y x",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"a x",
+ "11.5":"a x",
+ "12":"y x",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"Firefox 10+, Chrome 26+ and Opera 11.6+ also support the new \"to (side)\" syntax.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.79,
+ "usage_perc_a":0.01,
+ "ucprefix":false,
+ "parent":"css-gradients",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-resize.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-resize.json
new file mode 100644
index 0000000..88c72aa
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-resize.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS resize property",
+ "description":"Method of allowing an element to be resized by the user, with options to limit to a given direction. ",
+ "spec":"http://www.w3.org/TR/css3-ui/#resize",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://css-tricks.com/almanac/properties/r/resize/",
+ "title":"CSS Tricks info"
+ },
+ {
+ "url":"http://davidwalsh.name/textarea-resize",
+ "title":"On textarea resizing"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y x",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"a",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Opera 12.10+ currently only supports the resize property for textarea elements.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":61.27,
+ "usage_perc_a":0.23,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"horizontal,vertical",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sel2.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sel2.json
new file mode 100644
index 0000000..9a4faa5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sel2.json
@@ -0,0 +1,244 @@
+{
+ "title":"CSS 2.1 selectors",
+ "description":"Basic CSS selectors including: `*` (universal selector), `>` (child selector), `:first-child`, `:link`, `:visited`, `:active`, `:hover`, `:focus`, `:lang()`, `+` (adjacent sibling selector), `[attr]`, `[attr=\"val\"]`, `[attr~=\"val\"]`, `[attr|=\"bar\"]`, `.foo` (class selector), `#foo` (id selector)",
+ "spec":"http://www.w3.org/TR/CSS21/selector.html",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.quirksmode.org/css/contents.html",
+ "title":"Detailed support information"
+ },
+ {
+ "url":"http://www.yourhtmlsource.com/stylesheets/advancedselectors.html",
+ "title":"Examples of advanced selectors"
+ },
+ {
+ "url":"http://selectivizr.com",
+ "title":"Selectivizr: Polyfill for IE6-8"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/selectors",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE7 doesn't support all pseudo classes (like :focus) or pseudo elements (like :before and :after)"
+ },
+ {
+ "description":":first-child fails in IE7 if the [first child is a comment](http://robertnyman.com/2009/02/04/how-to-solve-first-child-css-bug-in-ie-7/)."
+ },
+ {
+ "description":"Safari 5.1 and Android browsers do not support the adjacent selector if the adjacent element is a \"nav\" element."
+ },
+ {
+ "description":"IE8-11 [does not update an element's :hover status when scrolling without moving the pointer](https://connect.microsoft.com/IE/feedback/details/926665/ie-11-hovering-over-an-element-and-then-scrolling-without-moving-the-mouse-pointer-leaves-the-element-in-hover-state)."
+ },
+ {
+ "description":"IE6 does not properly support combinations of pseudo classes like `:link`, `:active` and `:visited`"
+ }
+ ],
+ "categories":[
+ "CSS2"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":97.08,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sel3.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sel3.json
new file mode 100644
index 0000000..3852ebd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sel3.json
@@ -0,0 +1,235 @@
+{
+ "title":"CSS3 selectors",
+ "description":"Advanced element selection using selectors including: `[foo^=\"bar\"]`, `[foo$=\"bar\"]`, `[foo*=\"bar\"]`, `:root`, `:nth-child()`, `:nth-last-child()`, `nth-of-type`, `nth-last-of-type()`, `:last-child`, `:first-of-type`, `:last-of-type`, `:only-child`, `:only-of-type`, `:empty`, `:target`, `:enabled`, `:disabled`, `:checked`, `:not()`, `~` (general sibling)",
+ "spec":"http://www.w3.org/TR/css3-selectors/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.quirksmode.org/css/selectors/",
+ "title":"Detailed support information"
+ },
+ {
+ "url":"http://www.css3.info/selectors-test/",
+ "title":"Automated CSS3 selector test"
+ },
+ {
+ "url":"http://selectivizr.com",
+ "title":"Selectivizr: Polyfill for IE6-8"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/selectors",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Android 4.3 and lower (together with older WebKit browsers) [have issues](http://css-tricks.com/webkit-sibling-bug/) when combining pseudo classes with adjacent or general sibling selectors."
+ },
+ {
+ "description":"iOS 8 Safari has [issues with nth-child](http://stackoverflow.com/questions/26032513/ios8-safari-after-a-pushstate-the-nth-child-selectors-not-works).\r\n"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"a",
+ "8":"a",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"IE7 and IE8 support only these CSS3 selectors: General siblings (`element1~element2`) and Attribute selectors `[attr^=val]`, `[attr$=val]`, and `[attr*=val]`",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":93.99,
+ "usage_perc_a":3.03,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-selection.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-selection.json
new file mode 100644
index 0000000..1fa19e5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-selection.json
@@ -0,0 +1,222 @@
+{
+ "title":"::selection CSS pseudo-element",
+ "description":"The ::selection CSS pseudo-element applies rules to the portion of a document that has been highlighted (e.g., selected with the mouse or another pointing device) by the user.",
+ "spec":"https://developer.mozilla.org/en-US/docs/Web/CSS/::selection",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://quirksmode.org/css/selectors/selection.html",
+ "title":"::selection test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/selectors/pseudo-elements/::selection",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y x",
+ "3":"y x",
+ "3.5":"y x",
+ "3.6":"y x",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"u",
+ "11.1":"u",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":77.52,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"::selection,selection",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-shapes.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-shapes.json
new file mode 100644
index 0000000..233e297
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-shapes.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS Shapes Level 1",
+ "description":"Allows geometric shapes to be set in CSS to define an area for text to flow around.",
+ "spec":"http://www.w3.org/TR/css-shapes/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://html.adobe.com/webplatform/layout/shapes/",
+ "title":"Adobe demos and samples"
+ },
+ {
+ "url":"http://html.adobe.com/webplatform/layout/shapes/browser-support/",
+ "title":"CSS shapes support test by Adobe"
+ },
+ {
+ "url":"http://alistapart.com/article/css-shapes-101",
+ "title":"A List Apart article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"
+ },
+ "usage_perc_y":49.85,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"circle,ellipse,polygon,inset,shape-outside,shape-inside",
+ "ie_id":"shapes",
+ "chrome_id":"5163890719588352",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-snappoints.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-snappoints.json
new file mode 100644
index 0000000..1d69891
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-snappoints.json
@@ -0,0 +1,220 @@
+{
+ "title":"CSS Scroll snap points",
+ "description":"CSS technique that allows customizable scrolling experiences like pagination of carousels by setting defined snap points.",
+ "spec":"http://www.w3.org/TR/css-snappoints-1/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://generatedcontent.org/post/66817675443/setting-native-like-scrolling-offsets-in-css-with",
+ "title":"Blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a x #1",
+ "11":"a x #2",
+ "TP":"a x #2"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n d #3"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Currently in development in WebKit with partial support in nightly builds.",
+ "notes_by_num":{
+ "1":"Partial support in IE10 refers to support limited to touch screens.",
+ "2":"Partial support in IE11 [documented here](https://dl.dropboxusercontent.com/u/444684/openwebref/CSS/scroll-snap-points/support.html)",
+ "3":"Can be enabled in Firefox using the `layout.css.scroll-snap.enabled` flag in `about:config`"
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":9.46,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"scroll-snap-points-x,scroll-snap-points-y,scroll-snap-type,scroll-snap-destination,scroll-snap-coordinate",
+ "ie_id":"cssscrollingsnappoints",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sticky.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sticky.json
new file mode 100644
index 0000000..1cdfd76
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-sticky.json
@@ -0,0 +1,237 @@
+{
+ "title":"CSS position:sticky",
+ "description":"Keeps elements positioned as \"fixed\" or \"relative\" depending on how it appears in the viewport. As a result the element is \"stuck\" when necessary while scrolling.",
+ "spec":"http://dev.w3.org/csswg/css-position/#sticky-positioning",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit",
+ "title":"HTML5Rocks"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/position",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/position",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://github.com/filamentgroup/fixed-sticky",
+ "title":"Polyfill"
+ },
+ {
+ "url":"https://github.com/wilddeer/stickyfill",
+ "title":"Another polyfill"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox and Safari do not appear to support [sticky table headers](http://jsfiddle.net/Mf4YT/2/). (see also [Firefox bug](https://bugzilla.mozilla.org/show_bug.cgi?id=975644))"
+ }
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n d #1",
+ "27":"n d #1",
+ "28":"n d #1",
+ "29":"n d #1",
+ "30":"n d #1",
+ "31":"n d #1",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n d #2",
+ "24":"n d #2",
+ "25":"n d #2",
+ "26":"n d #2",
+ "27":"n d #2",
+ "28":"n d #2",
+ "29":"n d #2",
+ "30":"n d #2",
+ "31":"n d #2",
+ "32":"n d #2",
+ "33":"n d #2",
+ "34":"n d #2",
+ "35":"n d #2",
+ "36":"n d #2",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Can be enabled in Firefox by setting the about:config preference layout.css.sticky.enabled to true",
+ "2":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"
+ },
+ "usage_perc_y":20.29,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"positionsticky",
+ "chrome_id":"6190250464378880",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-supports-api.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-supports-api.json
new file mode 100644
index 0000000..91a9a73
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-supports-api.json
@@ -0,0 +1,235 @@
+{
+ "title":"CSS.supports() API",
+ "description":"The CSS.supports() static methods returns a Boolean value indicating if the browser supports a given CSS feature, or not.",
+ "spec":"http://dev.w3.org/csswg/css-conditional/#the-css-interface",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/CSS.supports",
+ "title":"MDN Docs"
+ },
+ {
+ "url":"http://jsbin.com/rimevilotari/1/edit",
+ "title":"Demo (Chinese)"
+ },
+ {
+ "url":"https://dev.opera.com/articles/native-css-feature-detection/",
+ "title":"Native CSS Feature Detection via the @supports Rule"
+ },
+ {
+ "url":"http://davidwalsh.name/css-supports",
+ "title":"CSS @supports"
+ },
+ {
+ "url":"http://blog.csdn.net/hfahe/article/details/8619480",
+ "title":"Article (Chinese)"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n d",
+ "21":"n d",
+ "22":"n d",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"y #1",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"See also [@supports in CSS](#feat=css-featurequeries)\r\n\r\nSee the [WebKit Bug](http://trac.webkit.org/changeset/142739) for status in Safari",
+ "notes_by_num":{
+ "1":"Opera 12 uses a different method name('window.supportsCSS')"
+ },
+ "usage_perc_y":60.81,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"conditional",
+ "ie_id":"conditionalrules",
+ "chrome_id":"4993981813358592",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-table.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-table.json
new file mode 100644
index 0000000..ed4165e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-table.json
@@ -0,0 +1,220 @@
+{
+ "title":"CSS Table display",
+ "description":"Method of displaying elements as tables, rows, and cells",
+ "spec":"http://www.w3.org/TR/CSS21/tables.html",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.onenaught.com/posts/201/use-css-displaytable-for-layout",
+ "title":"Blog post on usage"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Safari 5.1.17 has a bug in when using an element with display:table, with padding and width. It seems to force the use of the border-box model instead of the content-box model. Chrome 21.0 however works correctly, making it difficult to resolve with CSS alone."
+ }
+ ],
+ "categories":[
+ "CSS2"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":96.95,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"display:table, display: table,table-cell,table-row,table-layout",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-text-align-last.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-text-align-last.json
new file mode 100644
index 0000000..772f579
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-text-align-last.json
@@ -0,0 +1,224 @@
+{
+ "title":"CSS3 text-align-last",
+ "description":"CSS property to describe how the last line of a block or a line right before a forced line break when `text-align` is `justify`.",
+ "spec":"http://www.w3.org/TR/css3-text/#text-align-last-property",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-align-last",
+ "title":"MDN text-align-last"
+ },
+ {
+ "url":"http://blogs.adobe.com/webplatform/2014/02/25/improving-your-sites-visual-details-css3-text-align-last/",
+ "title":"Adobe Web Platform Article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a #1",
+ "6":"a #1",
+ "7":"a #1",
+ "8":"a #1",
+ "9":"a #1",
+ "10":"a #1",
+ "11":"a #1",
+ "TP":"a #1"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n d #2",
+ "36":"n d #2",
+ "37":"n d #2",
+ "38":"n d #2",
+ "39":"n d #2",
+ "40":"n d #2",
+ "41":"n d #2",
+ "42":"n d #2",
+ "43":"n d #2",
+ "44":"n d #2"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n d #3",
+ "23":"n d #3",
+ "24":"n d #3",
+ "25":"n d #3",
+ "26":"n d #3",
+ "27":"n d #3",
+ "28":"n d #3",
+ "29":"n d #3"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"a #1",
+ "11":"a #1"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"In Internet Explorer, the start and end values are not supported.",
+ "2":"Enabled through the \"Enable Experimental Web Platform Features\" flag in chrome://flags",
+ "3":"Enabled through the \"Enable Experimental Web Platform Features\" flag in opera://flags"
+ },
+ "usage_perc_y":11.98,
+ "usage_perc_a":15.13,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"text align last",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-textshadow.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-textshadow.json
new file mode 100644
index 0000000..e4f52fc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-textshadow.json
@@ -0,0 +1,238 @@
+{
+ "title":"CSS3 Text-shadow",
+ "description":"Method of applying one or more shadow or blur effects to text",
+ "spec":"http://www.w3.org/TR/css-text-decor-3/#text-shadow-property",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://hacks.mozilla.org/2009/06/text-shadow/",
+ "title":"Mozilla hacks article"
+ },
+ {
+ "url":"http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_text-shadow.htm",
+ "title":"Live editor"
+ },
+ {
+ "url":"http://www.css3files.com/shadow/#textshadow",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/text-shadow",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"According to http://code.google.com/p/android/issues/detail?id=7531, text-shadow doesn't work on Android (at least 2.3, from testing) when the blur-radius is 0."
+ },
+ {
+ "description":"IE10 doesn't seem to render rgba(255,255,255,0.25) properly. It seems to ignore the alpha value and uses 100% white instead."
+ },
+ {
+ "description":"Safari 5.1 requires a color to be defined for the shadow."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y #1",
+ "11":"y #1",
+ "TP":"y #1"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y #1",
+ "11":"y #1"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Opera Mini ignores the blur-radius set, so no blur effect is visible. Text-shadow behavior can be somewhat emulated in older IE versions using the non-standard \"dropshadow\" or \"glow\" filters. ",
+ "notes_by_num":{
+ "1":"IE 10+ supports a fourth length value for the shadow's \"spread\". This is not (yet) part of the specification. "
+ },
+ "usage_perc_y":89.25,
+ "usage_perc_a":2.92,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"text shadow",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-touch-action.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-touch-action.json
new file mode 100644
index 0000000..1453111
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-touch-action.json
@@ -0,0 +1,235 @@
+{
+ "title":"CSS touch-action property",
+ "description":"touch-action is a CSS property that controls filtering of gesture events, providing developers with a declarative mechanism to selectively disable touch scrolling (in one or both axes), pinch-zooming or double-tap-zooming.",
+ "spec":"http://www.w3.org/TR/pointerevents/#the-touch-action-css-property",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/touch-action",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"http://msdn.microsoft.com/en-us/library/windows/apps/hh767313.aspx",
+ "title":"MSDN Docs"
+ },
+ {
+ "url":"http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away",
+ "title":"300ms tap delay, gone away"
+ },
+ {
+ "url":"http://blogs.telerik.com/appbuilder/posts/13-11-21/what-exactly-is.....-the-300ms-click-delay",
+ "title":"What Exactly Is..... The 300ms Click Delay"
+ },
+ {
+ "url":"http://thx.github.io/mobile/300ms-click-delay/",
+ "title":"What Exactly Is..... The 300ms Click Delay(Chinese)"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y x #2",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n d #1",
+ "30":"n d #1",
+ "31":"n d #1",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"n d #1",
+ "39":"n d #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"y x #2",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Supported in Firefox behind the `layout.css.touch_action.enabled` flag, Firefox for Windows 8 Touch ('Metro') enabled by default.",
+ "2":"IE10+ has already supported these property which are not in standard at present such as'pinch-zoom','double-tap-zoom','cross-slide-x','cross-slide-y'."
+ },
+ "usage_perc_y":53.34,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"touch action",
+ "ie_id":"csstouchaction",
+ "chrome_id":"5912074022551552",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-transitions.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-transitions.json
new file mode 100644
index 0000000..d2d730d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-transitions.json
@@ -0,0 +1,242 @@
+{
+ "title":"CSS3 Transitions",
+ "description":"Simple method of animating certain properties of an element",
+ "spec":"http://www.w3.org/TR/css3-transitions/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.webdesignerdepot.com/2010/01/css-transitions-101/",
+ "title":"Article on usage"
+ },
+ {
+ "url":"http://www.css3files.com/transition/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://www.the-art-of-web.com/css/timing-function/",
+ "title":"Examples on timing functions"
+ },
+ {
+ "url":"http://www.opera.com/docs/specs/presto2.12/css/transitions/",
+ "title":"Animation of property types support in Opera"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/transition",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Not supported on any pseudo-elements besides ::before and ::after for Firefox, Chrome 26+, Opera 16+ and IE10+."
+ },
+ {
+ "description":"Transitionable properties with calc() derived values are not supported below and including IE11 (http://connect.microsoft.com/IE/feedback/details/762719/css3-calc-bug-inside-transition-or-transform)"
+ },
+ {
+ "description":"'background-size' is not supported below and including IE10"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y x",
+ "3.2":"y x",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y x",
+ "10.6":"y x",
+ "11":"y x",
+ "11.1":"y x",
+ "11.5":"y x",
+ "11.6":"y x",
+ "12":"y x",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y x",
+ "2.2":"y x",
+ "2.3":"y x",
+ "3":"y x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y x",
+ "11":"y x",
+ "11.1":"y x",
+ "11.5":"y x",
+ "12":"y x",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":89.2,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"css transition",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-variables.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-variables.json
new file mode 100644
index 0000000..fcb7ef1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css-variables.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS Variables",
+ "description":"Permits the declaration and usage of cascading variables in stylesheets.",
+ "spec":"http://www.w3.org/TR/css-variables/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://hacks.mozilla.org/2013/12/css-variables-in-firefox-nightly/",
+ "title":"Mozilla hacks article (older syntax)"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"u",
+ "43":"u",
+ "44":"u"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"u",
+ "29":"u"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":11.04,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"css variables",
+ "ie_id":"cssvariables",
+ "chrome_id":"6401356696911872",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-boxsizing.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-boxsizing.json
new file mode 100644
index 0000000..08236fc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-boxsizing.json
@@ -0,0 +1,245 @@
+{
+ "title":"CSS3 Box-sizing",
+ "description":"Method of specifying whether or not an element's borders and padding should be included in size units",
+ "spec":"http://www.w3.org/TR/css3-ui/#box-sizing",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/En/CSS/Box-sizing",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.456bereastreet.com/archive/201104/controlling_width_with_css3_box-sizing/",
+ "title":"Blog post"
+ },
+ {
+ "url":"https://github.com/Schepp/box-sizing-polyfill",
+ "title":"Polyfill for IE"
+ },
+ {
+ "url":"http://css-tricks.com/box-sizing/",
+ "title":"CSS Tricks"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/box-sizing",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Android browsers do not calculate correctly the dimensions (width and height) of the HTML select element."
+ },
+ {
+ "description":"Safari 6.0.x does not use box-sizing on elements with display: table;"
+ },
+ {
+ "description":"IE9 will subtract the width of the scrollbar to the width of the element when set to position: absolute, overflow: auto / overflow-y: scroll"
+ },
+ {
+ "description":"IE 8 ignores `box-sizing: border-box` if min/max-width/height is used."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"y x",
+ "3":"y x",
+ "3.5":"y x",
+ "3.6":"y x",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"a x",
+ "3.2":"a x",
+ "4":"a x",
+ "5":"a x",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "11.6":"a",
+ "12":"a",
+ "12.1":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"a x",
+ "4.0-4.1":"a x",
+ "4.2-4.3":"a x",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"a x",
+ "10":"a"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "12":"a",
+ "12.1":"a",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"Partial support refers to supporting only the `content-box` and `border-box` values, not `padding-box` (which was added to the spec later).",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":12.33,
+ "usage_perc_a":84.61,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"border-box,content-box,padding-box",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-colors.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-colors.json
new file mode 100644
index 0000000..26464a9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-colors.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS3 Colors",
+ "description":"Method of describing colors using Hue, Saturation and Lightness (hsl()) rather than just RGB, as well as allowing alpha-transparency with rgba() and hsla().",
+ "spec":"http://www.w3.org/TR/css3-color/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://dev.opera.com/articles/view/color-in-opera-10-hsl-rgb-and-alpha-transparency/",
+ "title":"Dev.Opera article"
+ },
+ {
+ "url":"http://www.css3files.com/color/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/color#RGBA_Notation",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"a",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.02,
+ "usage_perc_a":0.02,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"rgb,hsl,rgba,hsla",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-cursors-newer.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-cursors-newer.json
new file mode 100644
index 0000000..994aa94
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-cursors-newer.json
@@ -0,0 +1,218 @@
+{
+ "title":"CSS3 Cursors (new values)",
+ "description":"Support for `zoom-in` and `zoom-out` values for the CSS3 `cursor` property.",
+ "spec":"http://www.w3.org/TR/css3-ui/#cursor",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor",
+ "title":"MDN Documentation"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"y x",
+ "3":"y x",
+ "3.5":"y x",
+ "3.6":"y x",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y x",
+ "3.2":"y x",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Chrome, Safari and Firefox also support the unofficial `grab` and `grabbing` values (with prefix)",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":51.13,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"cursors, pointers",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-cursors.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-cursors.json
new file mode 100644
index 0000000..af4d017
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-cursors.json
@@ -0,0 +1,220 @@
+{
+ "title":"CSS3 Cursors (original values)",
+ "description":"CSS3 cursor values added in the 2004 spec, including none, context-menu, cell, vertical-text, alias, copy, no-drop, not-allowed, nesw-resize, nwse-resize, col-resize, row-resize and all-scroll. ",
+ "spec":"http://www.w3.org/TR/css3-ui/#cursor",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor",
+ "title":"MDN Documentation"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox/Mac, Safari/Mac, Chrome/Mac don't support PNG and JPG cursors (tested with 48px cursors).\r\nIE only supports cursors in the CUR format."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a",
+ "3":"a",
+ "3.5":"a",
+ "3.6":"a",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"a",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"a",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "11.6":"a",
+ "12":"a",
+ "12.1":"a",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"u"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support in IE refers to no support for the alias, cell, copy, ew-resize, ns-resize, nesw-resize, nwse-resize or context-menu cursors. Opera 12.10- does not support 'none' or a URI.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":61.84,
+ "usage_perc_a":3.72,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"cursors, pointers",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-tabsize.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-tabsize.json
new file mode 100644
index 0000000..c812dde
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/css3-tabsize.json
@@ -0,0 +1,220 @@
+{
+ "title":"CSS3 tab-size",
+ "description":"Method of customizing the width of the tab character. Only effective using 'white-space: pre' or 'white-space: pre-wrap'.",
+ "spec":"http://www.w3.org/TR/css3-text/#tab-size1",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/tab-size",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox [does not yet](https://bugzilla.mozilla.org/show_bug.cgi?id=943918) support `` values"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"y x",
+ "11":"y x",
+ "11.1":"y x",
+ "11.5":"y x",
+ "11.6":"y x",
+ "12":"y x",
+ "12.1":"y x",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y x"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y x",
+ "11.1":"y x",
+ "11.5":"y x",
+ "12":"y x",
+ "12.1":"y x",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":74.31,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"tab-size,tab-width",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/currentcolor.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/currentcolor.json
new file mode 100644
index 0000000..12d30ae
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/currentcolor.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS currentColor value",
+ "description":"A CSS value that will apply the existing `color` value to other properties like `background-color`, etc. ",
+ "spec":"http://www.w3.org/TR/css3-color/#currentcolor",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentColor_keyword",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://css-tricks.com/currentcolor/",
+ "title":"CSS Tricks article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"u",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.03,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/custom-elements.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/custom-elements.json
new file mode 100644
index 0000000..e917052
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/custom-elements.json
@@ -0,0 +1,239 @@
+{
+ "title":"Custom Elements",
+ "description":"Method of defining and using new types of DOM elements in a document.",
+ "spec":"http://www.w3.org/TR/custom-elements/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://w3c.github.io/webcomponents/spec/custom/",
+ "title":"W3C Editor's Draft spec (closer to current implementations)"
+ },
+ {
+ "url":"http://www.polymer-project.org/platform/custom-elements.html",
+ "title":"Polymer project (polyfill & web components framework)"
+ },
+ {
+ "url":"http://www.html5rocks.com/tutorials/webcomponents/customelements/",
+ "title":"HTML5Rocks - Custom Elements: defining new elements in HTML"
+ },
+ {
+ "url":"https://code.google.com/p/chromium/issues/detail?id=234509",
+ "title":"Chromium tracking bug: Implement Custom Elements"
+ },
+ {
+ "url":"https://bugzilla.mozilla.org/show_bug.cgi?id=889230",
+ "title":"Firefox tracking bug: Implement Custom Elements (from Web Components)"
+ },
+ {
+ "url":"http://status.modern.ie/customelements",
+ "title":"IE Web Platform Status and Roadmap: Custom Elements"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"p",
+ "11":"p",
+ "TP":"p"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n d #1",
+ "24":"n d #1",
+ "25":"n d #1",
+ "26":"n d #1",
+ "27":"n d #1",
+ "28":"n d #1",
+ "29":"n d #1",
+ "30":"p d #1",
+ "31":"p d #1",
+ "32":"p d #1",
+ "33":"p d #1",
+ "34":"p d #1",
+ "35":"p d #1",
+ "36":"p d #1",
+ "37":"p d #1",
+ "38":"p d #1",
+ "39":"p d #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n d",
+ "28":"n d",
+ "29":"n d",
+ "30":"n d",
+ "31":"n d",
+ "32":"n d",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"p",
+ "6.1":"p",
+ "7":"p",
+ "7.1":"p",
+ "8":"p"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n d",
+ "16":"n d",
+ "17":"n d",
+ "18":"n d",
+ "19":"n d",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"p",
+ "8":"p",
+ "8.1":"p"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"p d #1"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Enabled through the \"dom.webcomponents.enabled\" preference in about:config"
+ },
+ "usage_perc_y":45.28,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"web components",
+ "ie_id":"customelements",
+ "chrome_id":"4642138092470272",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/datalist.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/datalist.json
new file mode 100644
index 0000000..4b75512
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/datalist.json
@@ -0,0 +1,238 @@
+{
+ "title":"Datalist element",
+ "description":"Method of setting a list of options for a user to select in a text field, while leaving the ability to enter a custom value.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://hacks.mozilla.org/2010/11/firefox-4-html5-forms/",
+ "title":"Mozilla Hacks article"
+ },
+ {
+ "url":"http://afarkas.github.com/webshim/demos/",
+ "title":"HTML5 Library including datalist support"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/HTML/Element/datalist",
+ "title":"MDN reference"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/datalist",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"http://demo.agektmr.com/datalist/",
+ "title":"Eiji Kitamura's options demos & tests"
+ },
+ {
+ "url":"http://github.com/thgreasi/datalist-polyfill",
+ "title":"Minimal Datalist polyfill w/tutorial"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"n",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"p",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"p",
+ "6.0-6.1":"p",
+ "7.0-7.1":"p",
+ "8":"p",
+ "8.1":"p"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"p",
+ "4":"p",
+ "4.1":"p",
+ "4.2-4.3":"p",
+ "4.4":"p",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"p",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"p"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"p"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in IE10 refers to [significantly buggy behavior](http://playground.onereason.eu/2013/04/ie10s-lousy-support-for-datalists/). Firefox doesn't support [datalist association with inputs of type `number`](http://codepen.io/graste/pen/bNoVKW).",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":63.15,
+ "usage_perc_a":9.46,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"list attribute",
+ "ie_id":"datalistelement",
+ "chrome_id":"6090950820495360",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dataset.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dataset.json
new file mode 100644
index 0000000..ed1da0d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dataset.json
@@ -0,0 +1,240 @@
+{
+ "title":"dataset & data-* attributes",
+ "description":"Method of applying and accessing custom data to elements.",
+ "spec":"https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://html5doctor.com/html5-custom-data-attributes/",
+ "title":"HTML5 Doctor article"
+ },
+ {
+ "url":"http://html5demos.com/dataset",
+ "title":"Demo using dataset"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-dataset",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/attributes/data-*",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset",
+ "title":"MDN Reference - dataset"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes",
+ "title":"MDN Guide - Using data-* attributes"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Android 2.3 cannot read `data-*` properties from `select` elements.\r\n"
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a",
+ "3":"a",
+ "3.5":"a",
+ "3.6":"a",
+ "4":"a",
+ "5":"a",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"a",
+ "5":"a",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"a",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"a",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"a",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support refers to being able to use `data-*` attributes and access them using `getAttribute`. \r\n\r\n\"Supported\" refers to accessing the values using the `dataset` property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":87.12,
+ "usage_perc_a":10.07,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"DOMStringMap",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/datauri.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/datauri.json
new file mode 100644
index 0000000..8c72a9a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/datauri.json
@@ -0,0 +1,230 @@
+{
+ "title":"Data URIs",
+ "description":"Method of embedding images and other files in webpages as a string of text",
+ "spec":"http://www.ietf.org/rfc/rfc2397.txt",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://css-tricks.com/data-uris/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://en.wikipedia.org/wiki/data_URI_scheme",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://www.websiteoptimization.com/speed/tweak/inline-images/",
+ "title":"Data URL converter"
+ },
+ {
+ "url":"http://klevjers.com/papers/phishing.pdf",
+ "title":"Information on security issues"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Support in Internet Explorer 8 is limited to images and linked resources like CSS files, not HTML files. Max URI length in IE8 is 32KB. In IE9+ JavaScript files are supported too and the maximum size limit set to 4GB.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":82.06,
+ "usage_perc_a":14.89,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"data url,datauris,data uri,dataurl,dataurls,base64",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/details.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/details.json
new file mode 100644
index 0000000..9aebd98
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/details.json
@@ -0,0 +1,236 @@
+{
+ "title":"Details & Summary elements",
+ "description":"The element generates a simple no-JavaScript widget to show/hide element contents, optionally by clicking on its child element.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#the-details-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://mathiasbynens.be/notes/html5-details-jquery",
+ "title":"jQuery fallback script"
+ },
+ {
+ "url":"https://gist.github.com/370590",
+ "title":"Fallback script"
+ },
+ {
+ "url":"http://html5doctor.com/summary-figcaption-element/",
+ "title":"HTML5 Doctor article"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-details",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/details",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"`` within `` elements won't have their value changed on the Android browser shipped with most of Samsung's devices (i.e. Note 3, Galaxy 5)\r\nThe picker will appear, but attempting to select any option won't update the `` or trigger any event."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"p",
+ "38":"p",
+ "39":"p"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"p",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"p",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"p"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"p",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"p",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"p",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"p"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":65.56,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"detailssummary",
+ "chrome_id":"5348024557502464",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/deviceorientation.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/deviceorientation.json
new file mode 100644
index 0000000..5f356e7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/deviceorientation.json
@@ -0,0 +1,232 @@
+{
+ "title":"DeviceOrientation events",
+ "description":"API for detecting orientation and motion events from the device running the browser.",
+ "spec":"http://www.w3.org/TR/orientation-event/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/device/orientation/",
+ "title":"HTML5 Rocks tutorial"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-orientation",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://html5labs.interoperabilitybridges.com/prototypes/device-orientation-events/device-orientation-events/info",
+ "title":"DeviceOrientation implementation prototype for IE10"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/device-orientation-api-demo.html",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"`DeviceOrientationEvent.beta` has values between -90 and 90 on mobile Safari and between 180 and -180 on Firefox.\r\n`DeviceOrientationEvent.gamma` has values between -180 and 180 on mobile Safari and between 90 and -90 on Firefox.\r\nSee [Firefox reference](https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent)\r\nand [Safari reference](https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/beta)"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"a #1",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"p",
+ "4":"p",
+ "5":"p",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"n",
+ "10":"a"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"y",
+ "12.1":"y",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"Partial support refers to the lack of compassneedscalibration event. Partial support also refers to the lack of devicemotion event support for Chrome 30- and Opera. Opera Mobile 14 lost the ondevicemotion event support. Firefox 3.6, 4 and 5 support the non-standard [MozOrientation](https://developer.mozilla.org/en/DOM/MozOrientation) event.",
+ "notes_by_num":{
+ "1":"`compassneedscalibration` supported in IE11 only for compatible devices with Windows 8.1+."
+ },
+ "usage_perc_y":0.51,
+ "usage_perc_a":83.28,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"deviceorientation,devicemotion",
+ "chrome_id":"5874690627207168,5556931766779904",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dialog.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dialog.json
new file mode 100644
index 0000000..3fe4bd0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dialog.json
@@ -0,0 +1,220 @@
+{
+ "title":"Dialog element",
+ "description":"Method of easily creating custom dialog boxes to display to the user with modal or non-modal options. Also includes a `::backdrop` pseudo-element for behind the element.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#the-dialog-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://github.com/GoogleChrome/dialog-polyfill",
+ "title":"Polyfill"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"u",
+ "38":"u",
+ "39":"u"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n d #2",
+ "20":"n d #2",
+ "21":"n d #2",
+ "22":"n d #2",
+ "23":"n d #2",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Enabled through the \"Experimental Web Platform features\" flag in `chrome://flags`",
+ "2":"Enabled through the \"Experimental Web Platform features\" flag in `opera://flags`"
+ },
+ "usage_perc_y":42.49,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"HTMLDialogElement,showModal,backdrop",
+ "ie_id":"dialogelementformodals",
+ "chrome_id":"5770237022568448",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/domcontentloaded.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/domcontentloaded.json
new file mode 100644
index 0000000..30a70a9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/domcontentloaded.json
@@ -0,0 +1,218 @@
+{
+ "title":"DOMContentLoaded",
+ "description":"JavaScript event that fires when the DOM is loaded, but before all page assets are loaded (CSS, images, etc.).",
+ "spec":"https://html.spec.whatwg.org/multipage/syntax.html#stop-parsing",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded",
+ "title":"MDN: DOMContentLoaded"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.05,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"dom,domready,onload,contentloaded,document",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/download.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/download.json
new file mode 100644
index 0000000..8303f04
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/download.json
@@ -0,0 +1,224 @@
+{
+ "title":"Download attribute",
+ "description":"When used on an anchor, this attribute signifies that the browser should download the resource the anchor points to rather than navigate to it.",
+ "spec":"https://html.spec.whatwg.org/multipage/semantics.html#downloading-resources",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download",
+ "title":"HTML5Rocks post"
+ },
+ {
+ "url":"http://html5-demos.appspot.com/static/a.download.html",
+ "title":"Demo: creating a text file and downloading it."
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Does not appear to work for Firefox on Linux. "
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":61.16,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"download,a.download,a[download],download attribute",
+ "ie_id":"adownloadattribute",
+ "chrome_id":"6473924464345088",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dragndrop.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dragndrop.json
new file mode 100644
index 0000000..b8eafd2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/dragndrop.json
@@ -0,0 +1,247 @@
+{
+ "title":"Drag and Drop",
+ "description":"Method of easily dragging and dropping elements on a page, requiring minimal JavaScript.",
+ "spec":"https://html.spec.whatwg.org/multipage/interaction.html#dnd",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://html5doctor.com/native-drag-and-drop/",
+ "title":"HTML5 Doctor article"
+ },
+ {
+ "url":"http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html",
+ "title":"Shopping cart demo"
+ },
+ {
+ "url":"http://html5demos.com/drag",
+ "title":"Demo with link blocks"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/DragEvent",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://github.com/MihaiValentin/setDragImage-IE",
+ "title":"Polyfill for setDragImage in IE"
+ },
+ {
+ "url":"http://blog.teamtreehouse.com/implementing-native-drag-and-drop",
+ "title":"Implementing Native Drag and Drop"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"In Chrome, DataTransfer.addElement is not implemented. There is no other way to implement a draggable object, that updates during the drag due to some other circumstances (e.g. changes color on a valid drop spot), as it is just a static image if addElement is not supported.\r\n"
+ },
+ {
+ "description":"In Firefox, the dragstart event does not fire on button elements. This effectively disables drag and drop for button elements.\r\n"
+ },
+ {
+ "description":"In IE9-10 draggable attribute could be effectively applied for link and image elements. For div and span elements you should call 'element.dragDrop()' to start drag event.\r\n"
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a #1",
+ "6":"a #1",
+ "7":"a #1",
+ "8":"a #1",
+ "9":"a #1",
+ "10":"a #2",
+ "11":"a #2",
+ "TP":"a #2"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "11.6":"p",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"y",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM elements attached to the DOM and within the viewport of the browser for `.setDragImage`.",
+ "notes_by_num":{
+ "1":"Partial support refers to no support for the `dataTransfer.files` or `.types` objects and limited supported formats for `dataTransfer.setData`/`getData`.",
+ "2":"Partial support refers to not supporting `.setDragImage`"
+ },
+ "usage_perc_y":51.71,
+ "usage_perc_a":14.42,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"draganddrop",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/eot.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/eot.json
new file mode 100644
index 0000000..06114bf
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/eot.json
@@ -0,0 +1,222 @@
+{
+ "title":"EOT - Embedded OpenType fonts",
+ "description":"Type of font that can be derived from a regular font, allowing small files and legal use of high-quality fonts. Usage is restricted by the file being tied to the website",
+ "spec":"http://www.w3.org/Submission/EOT/",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/Embedded_OpenType",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://www.microsoft.com/typography/web/embedding/default.aspx",
+ "title":"Example pages"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Proposal by Microsoft, being considered for W3C standardization.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":14.42,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"fontface",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/eventsource.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/eventsource.json
new file mode 100644
index 0000000..ac0baef
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/eventsource.json
@@ -0,0 +1,235 @@
+{
+ "title":"Server-sent events",
+ "description":"Method of continuously sending data from a server to the browser, rather than repeatedly requesting it (EventSource interface, used to fall under HTML5)",
+ "spec":"http://www.w3.org/TR/eventsource/",
+ "status":"pr",
+ "links":[
+ {
+ "url":"http://www.html5rocks.com/tutorials/eventsource/basics/",
+ "title":"HTML5 Rocks tutorial"
+ },
+ {
+ "url":"http://samshull.blogspot.com/2010/10/ajax-push-in-ios-safari-and-chrome-with.html",
+ "title":"Blog post with demo"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-eventsource",
+ "title":"has.js test"
+ },
+ {
+ "url":"https://github.com/Yaffle/EventSource",
+ "title":"Polyfill"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Reportedly, CORS in EventSource is currently supported in Firefox 10+, Opera 12+, Chrome 26+, Safari 7.0+."
+ },
+ {
+ "description":"In Firefox prior to version 36 server-sent events do not reconnect automatically in case of a connection interrupt ([bug](https://bugzilla.mozilla.org/show_bug.cgi?id=831392))"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"a",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"a",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":76.34,
+ "usage_perc_a":0.05,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"serversent,s-sent-events",
+ "ie_id":"serversenteventseventsource",
+ "chrome_id":"5311740673785856",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fetch.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fetch.json
new file mode 100644
index 0000000..855356d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fetch.json
@@ -0,0 +1,224 @@
+{
+ "title":"Fetch",
+ "description":"A modern replacement for XMLHttpRequest.",
+ "spec":"https://fetch.spec.whatwg.org/",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://github.com/github/fetch",
+ "title":"Polyfill"
+ },
+ {
+ "url":"http://addyosmani.com/demos/fetch-api/",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"n d #1",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"a #2",
+ "41":"a #2 #3",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"a #2",
+ "28":"a #2 #3",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"a #2"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support can be enabled in Firefox with the `dom.fetch.enabled` flag.",
+ "2":"Only available in Chrome and Opera within ServiceWorkers.",
+ "3":"Available in Chrome and Opera within Window and Workers by enabling the \"Experimental Web Platform Features\" flag in `chrome://flags`"
+ },
+ "usage_perc_y":0.17,
+ "usage_perc_a":38.79,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"fetch,service,workers,xhr,xmlhttprequest",
+ "ie_id":"fetchapi",
+ "chrome_id":"6730533392351232",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fileapi.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fileapi.json
new file mode 100644
index 0000000..b587032
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fileapi.json
@@ -0,0 +1,226 @@
+{
+ "title":"File API",
+ "description":"Method of manipulating file objects in web applications client-side, as well as programmatically selecting them and accessing their data.",
+ "spec":"http://www.w3.org/TR/FileAPI/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/Using_files_from_web_applications",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/file",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://github.com/moxiecode/moxie",
+ "title":"Polyfill"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"a",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in older Safari and other WebKit browsers refers to lacking FileReader support. ",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":85.6,
+ "usage_perc_a":3.06,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"FileReader",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/filereader.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/filereader.json
new file mode 100644
index 0000000..dc79c12
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/filereader.json
@@ -0,0 +1,227 @@
+{
+ "title":"FileReader API",
+ "description":"Method of reading the contents of a File or Blob object into memory",
+ "spec":"http://www.w3.org/TR/FileAPI/#dfn-filereader",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/FileReader",
+ "title":"FileReader API"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/file/FileReader",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"The FileReader object is not available in Firefox to web workers."
+ },
+ {
+ "description":"iOS 8 had some [fileReader bugs](http://blog.fineuploader.com/2014/09/10/ios8-presents-serious-issues-that-prevent-file-uploading/) of which some were fixed in 8.0.2 but others still remain."
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.43,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"fileapi",
+ "keywords":"",
+ "ie_id":"filereader",
+ "chrome_id":"5171003185430528",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/filesystem.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/filesystem.json
new file mode 100644
index 0000000..1cb8af2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/filesystem.json
@@ -0,0 +1,222 @@
+{
+ "title":"Filesystem & FileWriter API",
+ "description":"Method of reading and writing files to a sandboxed file system.",
+ "spec":"http://www.w3.org/TR/file-system-api/",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/file/filesystem/",
+ "title":"HTML5 Rocks tutorial"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/filesystem",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"The File API: Directories and System specification is no longer being maintained and support may be dropped in future versions.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":45.73,
+ "usage_perc_a":0.16,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"filewriter",
+ "ie_id":"filewriter",
+ "chrome_id":"5452478162141184",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/flexbox.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/flexbox.json
new file mode 100644
index 0000000..76aea97
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/flexbox.json
@@ -0,0 +1,254 @@
+{
+ "title":"Flexible Box Layout Module",
+ "description":"Method of positioning elements in horizontal or vertical stacks. Support includes the support for the all properties prefixed with `flex` as well as `align-content`, `align-items`, `align-self`, and `justify-content`.",
+ "spec":"http://www.w3.org/TR/css3-flexbox/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://bennettfeely.com/flexplorer/",
+ "title":"Flexbox CSS generator"
+ },
+ {
+ "url":"http://www.adobe.com/devnet/html5/articles/working-with-flexbox-the-new-spec.html",
+ "title":"Article on using the latest spec"
+ },
+ {
+ "url":"https://dev.opera.com/articles/view/advanced-cross-browser-flexbox/",
+ "title":"Tutorial on cross-browser support"
+ },
+ {
+ "url":"http://philipwalton.github.io/solved-by-flexbox/",
+ "title":"Examples on how to solve common layout problems with flexbox"
+ },
+ {
+ "url":"http://css-tricks.com/snippets/css/a-guide-to-flexbox/",
+ "title":"A Complete Guide to Flexbox"
+ },
+ {
+ "url":"http://the-echoplex.net/flexyboxes/",
+ "title":"Flexbox playground and code generator"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE10 and IE11 default values for `flex` are `0 0 auto` rather than `0 1 auto`, as per the draft spec, as of September 2013."
+ },
+ {
+ "description":"In IE10 and IE11, containers with `display: flex` and `flex-direction: column` will not properly calculate their flexed childrens' sizes if the container has `min-height` but no explicit `height` property. [See bug](https://connect.microsoft.com/IE/feedback/details/802625/min-height-and-flexbox-flex-direction-column-dont-work-together-in-ie-10-11-preview)."
+ },
+ {
+ "description":"In Chrome and Safari, the height of (non flex) children are not recognized in percentages. However Firefox and IE recognize and scale the children based on percentage heights. [Chrome bug](http://crbug.com/341310)"
+ },
+ {
+ "description":"Firefox does not support [Flexbox in button elements](https://bugzilla.mozilla.org/show_bug.cgi?id=984869#c2)"
+ },
+ {
+ "description":"[Flexbugs](https://github.com/philipwalton/flexbugs): community-curated list of flexbox issues and cross-browser workarounds for them"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a x #2",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a x #1",
+ "3":"a x #1",
+ "3.5":"a x #1",
+ "3.6":"a x #1",
+ "4":"a x #1",
+ "5":"a x #1",
+ "6":"a x #1",
+ "7":"a x #1",
+ "8":"a x #1",
+ "9":"a x #1",
+ "10":"a x #1",
+ "11":"a x #1",
+ "12":"a x #1",
+ "13":"a x #1",
+ "14":"a x #1",
+ "15":"a x #1",
+ "16":"a x #1",
+ "17":"a x #1",
+ "18":"a x #1",
+ "19":"a x #1",
+ "20":"a x #1",
+ "21":"a x #1",
+ "22":"a #3",
+ "23":"a #3",
+ "24":"a #3",
+ "25":"a #3",
+ "26":"a #3",
+ "27":"a #3",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a x #1",
+ "5":"a x #1",
+ "6":"a x #1",
+ "7":"a x #1",
+ "8":"a x #1",
+ "9":"a x #1",
+ "10":"a x #1",
+ "11":"a x #1",
+ "12":"a x #1",
+ "13":"a x #1",
+ "14":"a x #1",
+ "15":"a x #1",
+ "16":"a x #1",
+ "17":"a x #1",
+ "18":"a x #1",
+ "19":"a x #1",
+ "20":"a x #1",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a x #1",
+ "3.2":"a x #1",
+ "4":"a x #1",
+ "5":"a x #1",
+ "5.1":"a x #1",
+ "6":"a x #1",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"y",
+ "15":"y x",
+ "16":"y x",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a x #1",
+ "4.0-4.1":"a x #1",
+ "4.2-4.3":"a x #1",
+ "5.0-5.1":"a x #1",
+ "6.0-6.1":"a x #1",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"a x #1",
+ "2.2":"a x #1",
+ "2.3":"a x #1",
+ "3":"a x #1",
+ "4":"a x #1",
+ "4.1":"a x #1",
+ "4.2-4.3":"a x #1",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a x #1",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a x #2",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a x #1"
+ }
+ },
+ "notes":"Most partial support refers to supporting an [older version](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/) of the specification or an [older syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/).",
+ "notes_by_num":{
+ "1":"Only supports the [old flexbox](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723) specification and does not support wrapping.",
+ "2":"Only supports the [2012 syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)",
+ "3":"Does not support flex-wrap or flex-flow properties"
+ },
+ "usage_perc_y":81.74,
+ "usage_perc_a":10.37,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"flex-box,flex-direction,flex-wrap,flex-flow,flex-grow,flex-basis",
+ "ie_id":"flexbox",
+ "chrome_id":"4837301406400512",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-feature.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-feature.json
new file mode 100644
index 0000000..b722796
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-feature.json
@@ -0,0 +1,230 @@
+{
+ "title":"Font feature settings",
+ "description":"Method of applying advanced typographic and language-specific font features to supported OpenType fonts.",
+ "spec":"http://w3.org/TR/css3-fonts/#font-rend-props",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://ie.microsoft.com/testdrive/Graphics/opentype/",
+ "title":"Demo pages (IE/Firefox only)"
+ },
+ {
+ "url":"http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/",
+ "title":"Mozilla hacks article"
+ },
+ {
+ "url":"http://html5accessibility.com/",
+ "title":"Detailed tables on accessability support"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/font-feature-settings",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"Partial support in older Firefox versions refers to using an older syntax. Partial support in older Chrome versions refers to lacking support in Mac OS X. ",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":74.51,
+ "usage_perc_a":1.17,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"font-feature,font-feature-settings,kern,kerning,font-variant-alternates,ligatures,font-variant-ligatures",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-loading.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-loading.json
new file mode 100644
index 0000000..50e06e2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-loading.json
@@ -0,0 +1,221 @@
+{
+ "title":"CSS Font Loading",
+ "description":"This CSS module defines a scripting interface to font faces in CSS, allowing font faces to be easily created and loaded from script. It also provides methods to track the loading status of an individual font, or of all the fonts on an entire page.",
+ "spec":"http://dev.w3.org/csswg/css-font-loading/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://www.igvita.com/2014/01/31/optimizing-web-font-rendering-performance/#font-load-events",
+ "title":"Optimizing with font load events"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"WebKit [implementation](https://lists.webkit.org/pipermail/webkit-dev/2014-July/026741.html) is [in progress](https://bugs.webkit.org/show_bug.cgi?id=135390)."
+ }
+ ],
+ "categories":[
+ "CSS3",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Can be enabled in Firefox using the `layout.css.font-loading-api.enabled` flag."
+ },
+ "usage_perc_y":43.59,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"6244676289953792",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-size-adjust.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-size-adjust.json
new file mode 100644
index 0000000..9a81145
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-size-adjust.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS font-size-adjust",
+ "description":"Method of adjusting the font size in a matter that relates to the height of lowercase vs. uppercase letters. This makes it easier to set the size of fallback fonts.",
+ "spec":"http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://webdesignernotebook.com/css/the-little-known-font-size-adjust-css3-property/",
+ "title":"Article on font-size-adjust"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/font-size-adjust",
+ "title":"MDN article on font-size-adjust"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"u",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Does not appear to work on Firefox mobile, despite recognition of the property.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":12.18,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-unicode-range.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-unicode-range.json
new file mode 100644
index 0000000..f1260b7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/font-unicode-range.json
@@ -0,0 +1,235 @@
+{
+ "title":"Font unicode-range subsetting",
+ "description":"This @font-face descriptor defines the set of Unicode codepoints that may be supported by the font face for which it is declared. The descriptor value is a comma-delimited list of Unicode range () values. The union of these ranges defines the set of codepoints that serves as a hint for user agents when deciding whether or not to download a font resource for a given text run.",
+ "spec":"http://dev.w3.org/csswg/css-fonts/#descdef-unicode-range",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-range",
+ "title":"MDN: unicode-range"
+ },
+ {
+ "url":"https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/css/property/unicode-range",
+ "title":"Safari CSS Reference: unicode-range"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/unicode-range",
+ "title":"Web Platform Docs: unicode-range"
+ },
+ {
+ "url":"http://jsbin.com/jeqoguzeye/1/edit?html,output",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox 37- [ignores the descriptor](https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-range#Browser_compatibility) and the at-rule is then applied to the whole range of code points."
+ },
+ {
+ "description":"IE ignores the unicode-range if the U is lowercase e.g 'u+0061'."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"y"
+ },
+ "bb":{
+ "7":"u",
+ "10":"u"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n d #1"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"Partial support indicates that unnecessary code-ranges are downloaded by the browser - see [browser test matrix](https://docs.google.com/a/chromium.org/spreadsheets/d/18h-1gaosu4-KYxH8JUNL6ZDuOsOKmWfauoai3CS3hPY/edit?pli=1#gid=0).",
+ "notes_by_num":{
+ "1":"Can be enabled in Firefox using the `layout.css.unicode-range.enabled` flag"
+ },
+ "usage_perc_y":43.17,
+ "usage_perc_a":35.27,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"font face,unicode,unicode-range",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fontface.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fontface.json
new file mode 100644
index 0000000..7867cea
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fontface.json
@@ -0,0 +1,232 @@
+{
+ "title":"@font-face Web fonts",
+ "description":"Method of displaying fonts downloaded from websites",
+ "spec":"http://www.w3.org/TR/css3-webfonts/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://webfonts.info",
+ "title":"News and information site"
+ },
+ {
+ "url":"http://en.wikipedia.org/wiki/Web_typography",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://www.css3files.com/font/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/atrules/@font-face",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE, Firefox and later Chrome versions implement the same origin policy, so any font library served on a different domain from the page will not be downloaded unless using CORS."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"a",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support before IE9 refers to only supporting EOT fonts. Safari for iOS 4.1 and below only supports SVG fonts.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":90.95,
+ "usage_perc_a":3.35,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"font face",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/form-validation.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/form-validation.json
new file mode 100644
index 0000000..f292f79
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/form-validation.json
@@ -0,0 +1,220 @@
+{
+ "title":"Form validation",
+ "description":"Method of setting required fields and field types without requiring JavaScript.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#client-side-form-validation",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://docs.webplatform.org/wiki/html/attributes/required",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Support for using differently colored borders is not complete in Firefox or Opera (did not test others yet) - using a separate class for styling works well in both."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in Safari refers to lack of notice when form with required fields is attempted to be submitted. Partial support in IE10 mobile refers to lack of warning when blocking submission.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":72.87,
+ "usage_perc_a":3.81,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"6091813840486400",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/forms.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/forms.json
new file mode 100644
index 0000000..62c8a46
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/forms.json
@@ -0,0 +1,227 @@
+{
+ "title":"HTML5 form features",
+ "description":"Expanded form options, including things like date pickers, sliders, validation, placeholders and multiple file uploads. Previously known as \"Web forms 2.0\".",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#forms",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://miketaylr.com/code/input-type-attr.html",
+ "title":"HTML5 inputs and attribute support page"
+ },
+ {
+ "url":"https://github.com/westonruter/webforms2",
+ "title":"Cross-browser JS implementation (based on original spec)"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Safari (>= 5.1) on Windows has a bug in multiple file uploads when used together with FormData to do binary uploads; each file will be reported as 0 bytes. Single file selection, however, works fine."
+ },
+ {
+ "description":"File uploading is not possible on iOS Safari before iOS 6."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"n",
+ "10":"a"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":7.03,
+ "usage_perc_a":82.39,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"input,datepicker",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fullscreen.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fullscreen.json
new file mode 100644
index 0000000..1b74203
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/fullscreen.json
@@ -0,0 +1,244 @@
+{
+ "title":"Full Screen API",
+ "description":"API for allowing content (like a video or canvas element) to take up the entire screen.",
+ "spec":"http://www.w3.org/TR/fullscreen/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/Using_full-screen_mode",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://jlongster.com/2011/11/21/canvas.html",
+ "title":"Blog post"
+ },
+ {
+ "url":"http://hacks.mozilla.org/2012/01/using-the-fullscreen-api-in-web-browsers/",
+ "title":"Mozilla hacks article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/Element/requestFullscreen",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE 11 doesn't allow going to fullscreen mode when the event that triggers `msRequestFullscreen()` is a `keydown` or `pointerdown` event (`keypress` and `click` do work)"
+ },
+ {
+ "description":"Safari blocks access to keyboard events in fullscreen mode (as a security measure)."
+ },
+ {
+ "description":"IE 11 does not allow scrolling when document.documentElement is set to full screen."
+ },
+ {
+ "description":"IE 11 does not properly support fullscreen when opening from an iframe."
+ },
+ {
+ "description":"Opera 12.1 uses the older specificaton's `:fullscreen-ancestor` pseudo-class instead of the the `::backdrop` pseudo-element."
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y x",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"a x",
+ "35":"a x",
+ "36":"a x",
+ "37":"a x",
+ "38":"a x",
+ "39":"a x"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"a x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"y",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"a x"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y x"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support refers to supporting an earlier draft of the spec.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":56.94,
+ "usage_perc_a":12.5,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"full-screen",
+ "ie_id":"fullscreenapi",
+ "chrome_id":"5259513871466496",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/gamepad.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/gamepad.json
new file mode 100644
index 0000000..1f5987b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/gamepad.json
@@ -0,0 +1,230 @@
+{
+ "title":"Gamepad API",
+ "description":"API to support input from USB gamepad controllers though JavaScript.",
+ "spec":"http://www.w3.org/TR/gamepad/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://luser.github.io/gamepadtest/",
+ "title":"Controller demo"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/doodles/gamepad/",
+ "title":"HTML5Rocks article"
+ },
+ {
+ "url":"http://gamedevelopment.tutsplus.com/tutorials/using-the-html5-gamepad-api-to-add-controller-support-to-browser-games--cms-21345",
+ "title":"Detailed tutorial"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":46.08,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"gamepadapi",
+ "chrome_id":"5118776383111168",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/geolocation.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/geolocation.json
new file mode 100644
index 0000000..39cc413
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/geolocation.json
@@ -0,0 +1,234 @@
+{
+ "title":"Geolocation",
+ "description":"Method of informing a website of the user's geographical location",
+ "spec":"http://www.w3.org/TR/geolocation-API/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://html5demos.com/geo",
+ "title":"Simple demo"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-geolocation",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/geolocation",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE9 appears to [have some issues](http://social.technet.microsoft.com/Forums/en-IE/ieitprocurrentver/thread/aea4db4e-0720-44fe-a9b8-09917e345080) in correctly determining longitude/latitude."
+ },
+ {
+ "description":"iOS6 has problems with returning [high accuracy data](https://discussions.apple.com/thread/4313850?start=0&tstart=0)."
+ },
+ {
+ "description":"Safari 5 & 6 seem to not provide geolocation data [when using a wired connection](http://stackoverflow.com/questions/3791442/geolocation-in-safari-5)."
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"n",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":91.04,
+ "usage_perc_a":0.01,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"geolocation",
+ "chrome_id":"6348855016685568",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getcomputedstyle.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getcomputedstyle.json
new file mode 100644
index 0000000..a639c70
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getcomputedstyle.json
@@ -0,0 +1,232 @@
+{
+ "title":"getComputedStyle",
+ "description":"API to get the current computed CSS styles applied to an element. This may be the current value applied by an animation or as set by a stylesheet.",
+ "spec":"http://www.w3.org/TR/cssom/#dom-window-getcomputedstyle",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/window.getComputedStyle",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://ie.microsoft.com/testdrive/HTML5/getComputedStyle/",
+ "title":"Demo"
+ },
+ {
+ "url":"http://snipplr.com/view/13523/",
+ "title":"Polyfill for IE"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/cssom/methods/getComputedStyle",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3",
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"a",
+ "3.5":"a",
+ "3.6":"a",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"a",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"a",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"a",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"a",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in older Firefox versions refers to requiring the second parameter to be included.\r\n\r\nPartial support in all other browsers refers to not supporting getComputedStyle on pseudo-elements.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":90.65,
+ "usage_perc_a":3.39,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getelementsbyclassname.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getelementsbyclassname.json
new file mode 100644
index 0000000..56d10ed
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getelementsbyclassname.json
@@ -0,0 +1,228 @@
+{
+ "title":"getElementsByClassName",
+ "description":"Method of accessing DOM elements by class name",
+ "spec":"http://www.w3.org/TR/dom/#dom-document-getelementsbyclassname",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.quirksmode.org/dom/tests/basics.html#getElementsByClassName",
+ "title":"Test page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/HTMLElement/getElementsByClassName",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Safari 3.1 has a caching bug. If the class of an element changes it won't be available for getElementsByClassName."
+ },
+ {
+ "description":"Opera Mobile (Classic) has a caching bug when getElementsByClassName is used while document.readyState is \"loading\""
+ }
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.03,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"byclassname",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getrandomvalues.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getrandomvalues.json
new file mode 100644
index 0000000..96e4440
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/getrandomvalues.json
@@ -0,0 +1,218 @@
+{
+ "title":"crypto.getRandomValues()",
+ "description":"Method of generating cryptographically random values.",
+ "spec":"http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y x",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y x"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":79.34,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/hashchange.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/hashchange.json
new file mode 100644
index 0000000..293f102
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/hashchange.json
@@ -0,0 +1,235 @@
+{
+ "title":"Hashchange event",
+ "description":"Event triggered in JavaScript when the URL's hash has changed (for example: page.html#foo to page.html#bar) ",
+ "spec":"https://html.spec.whatwg.org/multipage/browsers.html#the-hashchangeevent-interface",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/window.onhashchange",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx",
+ "title":"MSDN article"
+ },
+ {
+ "url":"http://www.quirksmode.org/dom/events/tests/hashchange.html",
+ "title":"Simple demo"
+ },
+ {
+ "url":"http://github.com/3nr1c/jUri.js",
+ "title":"Polyfill"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/Element/hashchange",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":93.93,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"onhashchange,HashChangeEvent",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/hidden.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/hidden.json
new file mode 100644
index 0000000..56861f0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/hidden.json
@@ -0,0 +1,218 @@
+{
+ "title":"hidden attribute",
+ "description":"The `hidden` attribute may be applied to any element, and effectively hides elements similar to `display: none` in CSS.",
+ "spec":"https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://davidwalsh.name/html5-hidden",
+ "title":"Article on hidden attribute"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"The hidden state can be easily overridden with a CSS `display` property set to anything other than `none`.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":89.91,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/high-resolution-time.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/high-resolution-time.json
new file mode 100644
index 0000000..d4803b5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/high-resolution-time.json
@@ -0,0 +1,230 @@
+{
+ "title":"High Resolution Time API",
+ "description":"Method to provide the current time in sub-millisecond resolution and such that it is not subject to system clock skew or adjustments. Called using `performance.now()`",
+ "spec":"http://www.w3.org/TR/hr-time/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now",
+ "title":"HTML5Rocks article"
+ },
+ {
+ "url":"http://www.sitepoint.com/discovering-the-high-resolution-time-api/",
+ "title":"SitePoint article"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/high-resolution-time-api-demo.html",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":76.9,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"performance,now,testing",
+ "ie_id":"highresolutiontime",
+ "chrome_id":"5349124069130240",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/history.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/history.json
new file mode 100644
index 0000000..1188d23
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/history.json
@@ -0,0 +1,246 @@
+{
+ "title":"Session history management",
+ "description":"Method of manipulating the user's browser's session history in JavaScript using history.pushState, history.replaceState and the popstate event.",
+ "spec":"https://html.spec.whatwg.org/multipage/browsers.html#dom-history-pushstate",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://www.adequatelygood.com/2010/7/Saner-HTML5-History-Management",
+ "title":"Introduction to history management"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://html5demos.com/history",
+ "title":"Demo page"
+ },
+ {
+ "url":"https://github.com/browserstate/history.js",
+ "title":"History.js polyfill "
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-history-state",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/History",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"history.pushState() is buggy in Android 2.2 and 2.3 in that it doesn't cause `window.location` to update with the new URL. This works in all other browsers that support `pushState()`. [See Android bug report](http://code.google.com/p/android/issues/detail?id=17471)."
+ },
+ {
+ "description":"Safari 5 and older iOS Safari have a broken implementation, when the page is within an iframe, the back button will not take you to the correct state. When under heavy load, the `onpopstate` event fails to fire."
+ },
+ {
+ "description":"The title argument is not applied in the history list of major browsers; they will display the page's title instead."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"a",
+ "5.1":"a",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"a",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"Older iOS versions and Android 4.0.4 claim support, but implementation is too buggy to be useful.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":83.69,
+ "usage_perc_a":4.33,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"onpushstate,onreplacestate",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/html5semantic.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/html5semantic.json
new file mode 100644
index 0000000..8c54c81
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/html5semantic.json
@@ -0,0 +1,230 @@
+{
+ "title":"New semantic elements",
+ "description":"HTML5 offers some new elements, primarily for semantic purposes. The elements include: section, article, aside, header, footer, nav, figure, figcaption, time, mark, main.",
+ "spec":"https://html.spec.whatwg.org/multipage/semantics.html#sections",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://blog.whatwg.org/supporting-new-elements-in-ie",
+ "title":"Workaround for IE"
+ },
+ {
+ "url":"https://blog.whatwg.org/styling-ie-noscript",
+ "title":"Alternate workaround"
+ },
+ {
+ "url":"http://oli.jp/2009/html5-structure3/",
+ "title":"Article on structural elements"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-html5-elements",
+ "title":"has.js test"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y #1",
+ "10":"y #1",
+ "11":"y #1",
+ "TP":"y #1"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"a #1",
+ "3.5":"a #1",
+ "3.6":"a #1",
+ "4":"y #1",
+ "5":"y #1",
+ "6":"y #1",
+ "7":"y #1",
+ "8":"y #1",
+ "9":"y #1",
+ "10":"y #1",
+ "11":"y #1",
+ "12":"y #1",
+ "13":"y #1",
+ "14":"y #1",
+ "15":"y #1",
+ "16":"y #1",
+ "17":"y #1",
+ "18":"y #1",
+ "19":"y #1",
+ "20":"y #1",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a #1",
+ "5":"a #1",
+ "6":"y #1",
+ "7":"y #1",
+ "8":"y #1",
+ "9":"y #1",
+ "10":"y #1",
+ "11":"y #1",
+ "12":"y #1",
+ "13":"y #1",
+ "14":"y #1",
+ "15":"y #1",
+ "16":"y #1",
+ "17":"y #1",
+ "18":"y #1",
+ "19":"y #1",
+ "20":"y #1",
+ "21":"y #1",
+ "22":"y #1",
+ "23":"y #1",
+ "24":"y #1",
+ "25":"y #1",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a #1",
+ "3.2":"a #1",
+ "4":"a #1",
+ "5":"y #1",
+ "5.1":"y #1",
+ "6":"y #1",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"a #1",
+ "9.5-9.6":"a #1",
+ "10.0-10.1":"a #1",
+ "10.5":"a #1",
+ "10.6":"a #1",
+ "11":"a #1",
+ "11.1":"y #1",
+ "11.5":"y #1",
+ "11.6":"y #1",
+ "12":"y #1",
+ "12.1":"y #1",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a #1",
+ "4.0-4.1":"y #1",
+ "4.2-4.3":"y #1",
+ "5.0-5.1":"y #1",
+ "6.0-6.1":"y #1",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a #1"
+ },
+ "android":{
+ "2.1":"a #1",
+ "2.2":"y #1",
+ "2.3":"y #1",
+ "3":"y #1",
+ "4":"y #1",
+ "4.1":"y #1",
+ "4.2-4.3":"y #1",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y #1",
+ "10":"y #1"
+ },
+ "op_mob":{
+ "10":"a #1",
+ "11":"y #1",
+ "11.1":"y #1",
+ "11.5":"y #1",
+ "12":"y #1",
+ "12.1":"y #1",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y #1",
+ "11":"y #1"
+ },
+ "and_uc":{
+ "9.9":"y #1"
+ }
+ },
+ "notes":"Partial support refers to missing the default styling. This is easily taken care of by using display:block for all new elements (except time and mark, these should be display:inline anyway). IE11 and older versions of other browsers do not support the element.",
+ "notes_by_num":{
+ "1":"Does not include support for the element "
+ },
+ "usage_perc_y":90.9,
+ "usage_perc_a":3.14,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/iframe-sandbox.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/iframe-sandbox.json
new file mode 100644
index 0000000..bbe17e4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/iframe-sandbox.json
@@ -0,0 +1,228 @@
+{
+ "title":"sandbox attribute for iframes",
+ "description":"Method of running external site pages with reduced privileges (e.g. no JavaScript) in iframes.",
+ "spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-sandbox",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://blog.chromium.org/2010/05/security-in-depth-html5s-sandbox.html",
+ "title":"Chromium blog article"
+ },
+ {
+ "url":"http://msdn.microsoft.com/en-us/hh563496",
+ "title":"MSDN article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/attributes/sandbox",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox does not allow-popups in versions below 28."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":87.89,
+ "usage_perc_a":0.54,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"iframesandboxattribute",
+ "chrome_id":"5715536319086592",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/iframe-seamless.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/iframe-seamless.json
new file mode 100644
index 0000000..15e54bc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/iframe-seamless.json
@@ -0,0 +1,222 @@
+{
+ "title":"seamless attribute for iframes",
+ "description":"The seamless attribute makes an iframe's contents actually part of a page, and adopts the styles from its hosting page. ",
+ "spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-seamless",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://github.com/ornj/seamless-polyfill",
+ "title":"Experimental polyfill"
+ },
+ {
+ "url":"http://labs.ft.com/2013/01/seamless-iframes-not-quite-seamless/",
+ "title":"Article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"u",
+ "38":"u",
+ "39":"u"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n d",
+ "21":"n d",
+ "22":"n d",
+ "23":"n d",
+ "24":"n d",
+ "25":"n d",
+ "26":"n d",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"u",
+ "43":"u",
+ "44":"u"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"u",
+ "29":"u"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Chrome 20-26 had partial support behind a flag, though this was [later removed](http://crbug.com/229421). \r\n\r\nSafari 7 (& iOS 7 Safari) hides the border of seamless iframes and recognizes the 'seamless' DOM property, but does not provide actual support.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":3.84,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"iframeseamlessattribute",
+ "chrome_id":"6630329993396224",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/imports.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/imports.json
new file mode 100644
index 0000000..33d9ad3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/imports.json
@@ -0,0 +1,239 @@
+{
+ "title":"HTML Imports",
+ "description":"Method of including and reusing HTML documents in other HTML documents.",
+ "spec":"http://www.w3.org/TR/html-imports/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.polymer-project.org/platform/html-imports.html",
+ "title":"Polymer project (polyfill & web components framework)"
+ },
+ {
+ "url":"http://www.html5rocks.com/tutorials/webcomponents/imports/",
+ "title":"HTML5Rocks - HTML Imports: #include for the web"
+ },
+ {
+ "url":"https://code.google.com/p/chromium/issues/detail?id=240592",
+ "title":"Chromium tracking bug: Implement HTML Imports"
+ },
+ {
+ "url":"https://bugzilla.mozilla.org/show_bug.cgi?id=877072",
+ "title":"Firefox tracking bug: Implement HTML Imports"
+ },
+ {
+ "url":"http://status.modern.ie/htmlimports",
+ "title":"IE Web Platform Status and Roadmap: HTML Imports"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"p",
+ "11":"p",
+ "TP":"p"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"p",
+ "31":"p",
+ "32":"p d #1",
+ "33":"p d #1",
+ "34":"p d #1",
+ "35":"p d #1",
+ "36":"p d #1",
+ "37":"p d #1",
+ "38":"p d #1",
+ "39":"p d #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n d #2",
+ "31":"n d #2",
+ "32":"n d #2",
+ "33":"n d #2",
+ "34":"n d #2",
+ "35":"p d #3",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"p",
+ "6.1":"p",
+ "7":"p",
+ "7.1":"p",
+ "8":"p"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n d #4",
+ "18":"n d #4",
+ "19":"n d #4",
+ "20":"n d #4",
+ "21":"n d #4",
+ "22":"p d #5",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"p",
+ "8":"p",
+ "8.1":"p"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"p"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Firefox [has no plans to support HTML imports](https://hacks.mozilla.org/2014/12/mozilla-and-web-components/) though for now it can be enabled through the \"dom.webcomponents.enabled\" preference in about:config",
+ "2":"Enabled through the \"Enable HTML Imports\" flag in chrome://flags",
+ "3":"Enabled through the \"Experimental Web Platform features\" flag in chrome://flags",
+ "4":"Enabled through the \"Enable HTML Imports\" flag in opera://flags",
+ "5":"Enabled through the \"Experimental Web Platform features\" flag in opera://flags"
+ },
+ "usage_perc_y":43.17,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"web components",
+ "ie_id":"htmlimports",
+ "chrome_id":"5144752345317376",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/indexeddb.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/indexeddb.json
new file mode 100644
index 0000000..d86c314
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/indexeddb.json
@@ -0,0 +1,233 @@
+{
+ "title":"IndexedDB",
+ "description":"Method of storing data client-side, allows indexed database queries.",
+ "spec":"http://www.w3.org/TR/IndexedDB/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/",
+ "title":"Mozilla Hacks article"
+ },
+ {
+ "url":"https://github.com/axemclion/IndexedDBShim",
+ "title":"Polyfill for browsers supporting WebSQL"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-indexeddb",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/indexedDB",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox and Safari currently do not support IndexedDB inside web workers."
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a #1",
+ "11":"a #1",
+ "TP":"a #1"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"n",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"y x",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"p",
+ "6":"p",
+ "6.1":"p",
+ "7":"p",
+ "7.1":"a #2",
+ "8":"a #2"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"p",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "11.6":"p",
+ "12":"p",
+ "12.1":"p",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"p",
+ "6.0-6.1":"p",
+ "7.0-7.1":"p",
+ "8":"a #2",
+ "8.1":"a #2"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"p",
+ "4":"p",
+ "4.1":"p",
+ "4.2-4.3":"p",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"p",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"p",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a #1",
+ "11":"a #1"
+ },
+ "and_uc":{
+ "9.9":"p"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support in IE 10 & 11 refers to a number of subfeatures [not being supported](http://codepen.io/cemerick/pen/Itymi).",
+ "2":"Partial support in iOS 8 refers to [seriously buggy behavior](http://www.raymondcamden.com/2014/9/25/IndexedDB-on-iOS-8--Broken-Bad)."
+ },
+ "usage_perc_y":61.21,
+ "usage_perc_a":18.06,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"indexdb",
+ "ie_id":"indexeddb",
+ "chrome_id":"6507459568992256",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/inline-block.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/inline-block.json
new file mode 100644
index 0000000..6819d21
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/inline-block.json
@@ -0,0 +1,228 @@
+{
+ "title":"CSS inline-block",
+ "description":"Method of displaying an element as a block while flowing it with text. ",
+ "spec":"http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/",
+ "title":"Blog post w/info"
+ },
+ {
+ "url":"http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/",
+ "title":"Info on cross browser support"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/display",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE 8 has a [resize issue with display-inline block](http://blog.caplin.com/2013/06/07/developing-for-ie8-inline-block-resize-bug/)."
+ }
+ ],
+ "categories":[
+ "CSS2"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a x",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Only supported in IE6 and IE7 on elements with a display of \"inline\" by default. [Alternative properties](http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/) are available to provide complete cross-browser support.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":96.94,
+ "usage_perc_a":0.25,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"inlineblock",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-color.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-color.json
new file mode 100644
index 0000000..d031f6f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-color.json
@@ -0,0 +1,226 @@
+{
+ "title":"Color input type",
+ "description":"Form field allowing the user to select a color.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#color-state-(type=color)",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://www.html5tutorial.info/html5-color.php",
+ "title":"Tutorial"
+ },
+ {
+ "url":"https://github.com/jonstipe/color-polyfill",
+ "title":"Polyfill"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/input/type/color",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"n",
+ "16":"n",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":60.93,
+ "usage_perc_a":3.84,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"colour,input type=\"color\"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-datetime.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-datetime.json
new file mode 100644
index 0000000..bb02f27
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-datetime.json
@@ -0,0 +1,232 @@
+{
+ "title":"Date and time input types",
+ "description":"Form field widget to easily allow users to enter a date or a time, generally by using a calendar/time input widget. Previously there was also a single field for both date & time, but this has been deprecated.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#date-state-(type=date)",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-browser-datepickers-within-minutes/",
+ "title":"Datepicker tutorial w/polyfill"
+ },
+ {
+ "url":"https://github.com/zoltan-dulac/html5Forms.js",
+ "title":"Polyfill for HTML5 forms"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-datetime;input-type-datetime-local",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/input/type/date",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"iOS 7.1 Safari does not support the min and max attributes."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in iOS refers to a lack of support for attributes like step, min, or max.\r\n\r\nOlder versions of Safari provide date-formatted text fields, but no real calendar widget.\r\n\r\nSome modified versions of the Android 4.x browser do have support for date/time fields.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":60.76,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"datepicker,timepicker,input type=\"date\",input type=\"time\"",
+ "ie_id":"daterelatedinputtypes,timerelatedinputtypes",
+ "chrome_id":"6640933999214592",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-file-multiple.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-file-multiple.json
new file mode 100644
index 0000000..bb2e6bd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-file-multiple.json
@@ -0,0 +1,222 @@
+{
+ "title":"Multiple file selection",
+ "description":"Allows users to select multiple files in the file picker.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#attr-input-multiple",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://code.google.com/p/chromium/issues/detail?id=348912",
+ "title":"Chrome bug (for Android)"
+ },
+ {
+ "url":"http://www.raymondcamden.com/2012/2/28/Working-with-HTML5s-multiple-file-upload-support",
+ "title":"Article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n #1"
+ },
+ "android":{
+ "2.1":"n #1",
+ "2.2":"n #1",
+ "2.3":"n #1",
+ "3":"n #1",
+ "4":"n #1",
+ "4.1":"n #1",
+ "4.2-4.3":"n #1",
+ "4.4":"n #1",
+ "4.4.3-4.4.4":"n #1",
+ "37":"n #1"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n #1",
+ "11":"n #1",
+ "11.1":"n #1",
+ "11.5":"n #1",
+ "12":"n #1",
+ "12.1":"n #1",
+ "24":"n #1"
+ },
+ "and_chr":{
+ "41":"n #1"
+ },
+ "and_ff":{
+ "36":"n #1"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n #1"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Not supported when tested on Android, presumably an OS limitation. "
+ },
+ "usage_perc_y":67.63,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-minlength.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-minlength.json
new file mode 100644
index 0000000..8f7ae76
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-minlength.json
@@ -0,0 +1,218 @@
+{
+ "title":"Minimum length attribute for input fields",
+ "description":"Declares a lower bound on the number of characters a user can input.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#the-maxlength-and-minlength-attributes",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://www.w3.org/TR/html5/forms.html#setting-minimum-input-length-requirements:-the-minlength-attribute",
+ "title":"W3C usage example"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support in Chrome and Opera is due to a [bug](http://crbug.com/470577) which prevents any validation from occurring if the field has any pre-filled value.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":38.96,
+ "ucprefix":false,
+ "parent":"form-validation",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"6023370181181440",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-number.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-number.json
new file mode 100644
index 0000000..a2733b2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-number.json
@@ -0,0 +1,238 @@
+{
+ "title":"Number input type",
+ "description":"Form field type for numbers.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#number-state-(type=number)",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://www.html5tutorial.info/html5-number.php",
+ "title":"Tutorial"
+ },
+ {
+ "url":"https://github.com/jonstipe/number-polyfill",
+ "title":"Polyfill"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-number",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/input/type/number",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE10 and IE11 also have broken `.valueAsNumber` results that don't follow the spec, e.g. for\r\n`input.value = \"9\"` `input.valueAsNumber` returns `NaN`."
+ },
+ {
+ "description":"The `.stepUp` and `.stepDown` methods incorrectly invoke `InvalidStateError` exceptions in IE 10 and 11."
+ },
+ {
+ "description":"IE does not convert the value to an invariant culture. IE simply submits the value as it was typed, using the user's regional settings, but the spec says the browser should submit in a normalized way."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"n",
+ "10":"a"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"iOS Safari, Android 4, Chrome for Android show number input, but do not use \"step\", \"min\" or \"max\" attributes or show increment/decrement buttons. Internet Explorer 10 and 11 do not show increment/decrement buttons. Firefox doesn't support [autocomplete content via datalist](http://codepen.io/graste/pen/bNoVKW) elements.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":49.95,
+ "usage_perc_a":38.03,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"spinner,input type=\"number\"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-pattern.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-pattern.json
new file mode 100644
index 0000000..ff2b9d0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-pattern.json
@@ -0,0 +1,218 @@
+{
+ "title":"Pattern attribute for input fields",
+ "description":"Allows validation of an input field based on a given regular expression pattern.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#the-pattern-attribute",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://html5pattern.com",
+ "title":"Site with common sample patterns "
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"a #1"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a #1",
+ "11":"a #1"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support refers to not displaying a message for invalid patterns"
+ },
+ "usage_perc_y":72.88,
+ "usage_perc_a":0.7,
+ "ucprefix":false,
+ "parent":"form-validation",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-placeholder.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-placeholder.json
new file mode 100644
index 0000000..a4a8dd0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-placeholder.json
@@ -0,0 +1,239 @@
+{
+ "title":"input placeholder attribute",
+ "description":"Method of setting placeholder text for text-like input fields, to suggest the expected inserted information.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#attr-input-placeholder",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://www.zachleat.com/web/placeholder/",
+ "title":"Article on usage"
+ },
+ {
+ "url":"https://github.com/mathiasbynens/jquery-placeholder",
+ "title":"Polyfill"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-attr-placeholder",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/attributes/placeholder",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://code.google.com/p/android/issues/detail?id=24626",
+ "title":"Issue 24626: Placeholder text for an input type="
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Internet Explorer 10 and 11 do not show the placeholder when the field is focused, even if the field is empty."
+ },
+ {
+ "description":"Internet Explorer 10 and 11 fire the input event when an input field with a placeholder is focused. https://connect.microsoft.com/IE/feedback/details/885747/ie-11-fires-the-input-event-when-a-input-field-with-placeholder-is-focused"
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"a",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in older Safari and Opera versions refers to lacking placeholder support on textarea elements. ",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.04,
+ "usage_perc_a":1.15,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-range.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-range.json
new file mode 100644
index 0000000..a47d714
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/input-range.json
@@ -0,0 +1,240 @@
+{
+ "title":"Range input type",
+ "description":"Form field type that allows the user to select a value using a slider widget.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#range-state-(type=range)",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://github.com/fryn/html5slider",
+ "title":"Polyfill for Firefox"
+ },
+ {
+ "url":"https://github.com/freqdec/fd-slider",
+ "title":"Cross-browser polyfill"
+ },
+ {
+ "url":"http://tutorialzine.com/2011/12/what-you-need-to-know-html5-range-input/",
+ "title":"Tutorial"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-range",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/input/type/range",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://github.com/andreruffert/rangeslider.js",
+ "title":"rangeslider.js polyfill"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE10 & 11 have [some bugs related to the `step` value](http://stackoverflow.com/questions/20241415/html5-number-input-field-step-attribute-broken-in-internet-explorer-10-and-inter)."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"u",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Currently all Android browsers with partial support hide the slider input field by default. However, the element [can be styled](http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/) to be made visible and usable.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":87.46,
+ "usage_perc_a":1.18,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"input type=\"range\"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/internationalization.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/internationalization.json
new file mode 100644
index 0000000..a58644e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/internationalization.json
@@ -0,0 +1,222 @@
+{
+ "title":"Internationalization API",
+ "description":"Locale-sensitive collation (string comparison), number formatting, and date and time formatting.",
+ "spec":"http://www.ecma-international.org/ecma-402/1.0/",
+ "status":"other",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl",
+ "title":"MDN reference"
+ },
+ {
+ "url":"http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/",
+ "title":"The ECMAScript Internationalization API"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"u",
+ "4.4.3-4.4.4":"u",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":65.12,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"Intl,Collator,NumberFormat,DateTimeFormat",
+ "ie_id":"ecmascriptinternationalizationapi",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/intrinsic-width.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/intrinsic-width.json
new file mode 100644
index 0000000..de4990b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/intrinsic-width.json
@@ -0,0 +1,218 @@
+{
+ "title":"Intrinsic & Extrinsic Sizing",
+ "description":"Allows for the heights and widths to be specified in intrinsic values using the fill-available, max-content, min-content, and fit-content properties.",
+ "spec":"http://www.w3.org/TR/css3-sizing/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://demosthenes.info/blog/662/Design-From-the-Inside-Out-With-CSS-MinContent",
+ "title":"Min-Content tutorial"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Prefixes are on the values, not the property names (e.g. -webkit-min-content) Firefox currently supports the \"-moz-available\" property rather than \"-moz-fill-available\".",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":71,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"fill-available,max-content,min-content,fit-content,contain-floats",
+ "ie_id":"cssintrinsicsizing",
+ "chrome_id":"5901353784180736",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/jpegxr.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/jpegxr.json
new file mode 100644
index 0000000..1503072
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/jpegxr.json
@@ -0,0 +1,218 @@
+{
+ "title":"JPEG XR image format",
+ "description":"The latest JPEG image format of Joint Photographic Experts Group which boasts better compression and supports lossless compression, alpha channel, and 48-bit deep color over normal jpg format.",
+ "spec":"http://www.itu.int/rec/T-REC-T.832",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://msdn.microsoft.com/en-us/library/windows/desktop/hh707223(v=vs.85).aspx",
+ "title":"Microsoft JPEG XR Codec Overview"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":11.99,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/json.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/json.json
new file mode 100644
index 0000000..ed3a6d2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/json.json
@@ -0,0 +1,230 @@
+{
+ "title":"JSON parsing",
+ "description":"Method of converting JavaScript objects to JSON strings and JSON back to objects using JSON.stringify() and JSON.parse()",
+ "spec":"http://es5.github.com/#x15.12",
+ "status":"other",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/En/Using_native_JSON",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.json.org/js.html",
+ "title":"JSON in JS (includes script w/support)"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/json.js#json",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/json",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Requires document to be in IE8+ [standards mode](http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx) to work in IE8.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":96.85,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/kerning-pairs-ligatures.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/kerning-pairs-ligatures.json
new file mode 100644
index 0000000..32af414
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/kerning-pairs-ligatures.json
@@ -0,0 +1,222 @@
+{
+ "title":"Improved kerning pairs & ligatures",
+ "description":"Currently non-standard method of improving kerning pairs & ligatures using text-rendering: optimizeLegibility.",
+ "spec":"http://www.w3.org/TR/SVG11/painting.html#TextRenderingProperty",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-rendering",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://css-tricks.com/almanac/properties/t/text-rendering/",
+ "title":"CSS Tricks article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"u",
+ "4.0-4.1":"u",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":78.58,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"optimizeLegibility,optimizeSpeed,geometricPrecision",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/link-icon-png.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/link-icon-png.json
new file mode 100644
index 0000000..1cd61a9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/link-icon-png.json
@@ -0,0 +1,223 @@
+{
+ "title":"PNG favicons",
+ "description":"Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the PNG format can be preferable.",
+ "spec":"https://html.spec.whatwg.org/multipage/semantics.html#rel-icon",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://css-tricks.com/favicon-quiz/",
+ "title":"Detailed info on favicons for various uses"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE 11 [lost the support](https://connect.microsoft.com/IE/feedbackdetail/view/800076/internet-explorer-11-lost-support-for-non-rgb-a-png-format-images-inside-favicon-ico) for non-RGB/a PNG format images inside FavIcon.ico, does work in IE 10."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y #1",
+ "5":"y #1",
+ "6":"y #1",
+ "7":"y #1",
+ "8":"y #1",
+ "9":"y #1",
+ "10":"y #1",
+ "11":"y #1",
+ "12":"y #1",
+ "13":"y #1",
+ "14":"y #1",
+ "15":"y #1",
+ "16":"y #1",
+ "17":"y #1",
+ "18":"y #1",
+ "19":"y #1",
+ "20":"y #1",
+ "21":"y #1",
+ "22":"y #1",
+ "23":"y #1",
+ "24":"y #1",
+ "25":"y #1",
+ "26":"y #1",
+ "27":"y #1",
+ "28":"y #1",
+ "29":"y #1",
+ "30":"y #1",
+ "31":"y #1",
+ "32":"y #1",
+ "33":"y #1",
+ "34":"y #1",
+ "35":"y #1",
+ "36":"y #1",
+ "37":"y #1",
+ "38":"y #1",
+ "39":"y #1",
+ "40":"y #1",
+ "41":"y #1",
+ "42":"y #1",
+ "43":"y #1",
+ "44":"y #1"
+ },
+ "safari":{
+ "3.1":"y #2",
+ "3.2":"y #2",
+ "4":"y #2",
+ "5":"y #2",
+ "5.1":"y #2",
+ "6":"y #2",
+ "6.1":"y #2",
+ "7":"y #2",
+ "7.1":"y #2",
+ "8":"y #2"
+ },
+ "opera":{
+ "9":"y #3",
+ "9.5-9.6":"y #3",
+ "10.0-10.1":"y #3",
+ "10.5":"y #3",
+ "10.6":"y #3",
+ "11":"y #3",
+ "11.1":"y #3",
+ "11.5":"y #3",
+ "11.6":"y #3",
+ "12":"y #3",
+ "12.1":"y #3",
+ "15":"y #1",
+ "16":"y #1",
+ "17":"y #1",
+ "18":"y #1",
+ "19":"y #1",
+ "20":"y #1",
+ "21":"y #1",
+ "22":"y #1",
+ "23":"y #1",
+ "24":"y #1",
+ "25":"y #1",
+ "26":"y #1",
+ "27":"y #1",
+ "28":"y #1",
+ "29":"y #1"
+ },
+ "ios_saf":{
+ "3.2":"n #4",
+ "4.0-4.1":"n #4",
+ "4.2-4.3":"n #4",
+ "5.0-5.1":"n #4",
+ "6.0-6.1":"n #4",
+ "7.0-7.1":"n #4",
+ "8":"n #4",
+ "8.1":"n #4"
+ },
+ "op_mini":{
+ "5.0-8.0":"n #4"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y #3",
+ "4.4.3-4.4.4":"y #3",
+ "37":"y #3"
+ },
+ "bb":{
+ "7":"y",
+ "10":"n #4"
+ },
+ "op_mob":{
+ "10":"n #4",
+ "11":"n #4",
+ "11.1":"n #4",
+ "11.5":"n #4",
+ "12":"n #4",
+ "12.1":"n #4",
+ "24":"n #4"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n #4",
+ "11":"n #4"
+ },
+ "and_uc":{
+ "9.9":"y #2"
+ }
+ },
+ "notes":"Win8/IE10+ and iOS Safari support other types of icons for webpages too, using alternate tags.\r\n\r\nSee also [SVG favicons](#feat=link-icon-svg).",
+ "notes_by_num":{
+ "1":"If both ICO and PNG are available, will use ICO over PNG if ICO has better matching sizes set.",
+ "2":"If both ICO and PNG are available, will ALWAYS use ICO file, regardless of sizes set.",
+ "3":"If multiple formats are available, will use the last one loaded, regardless of sizes (effectively picks at random).",
+ "4":"Does not use favicons at all (but may have alternative for bookmarks, etc.)."
+ },
+ "usage_perc_y":80.02,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/link-icon-svg.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/link-icon-svg.json
new file mode 100644
index 0000000..d2abdff
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/link-icon-svg.json
@@ -0,0 +1,219 @@
+{
+ "title":"SVG favicons",
+ "description":"Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the SVG format can be preferable to more easily support higher resolutions or larger icons.",
+ "spec":"https://html.spec.whatwg.org/multipage/semantics.html#rel-icon",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://crbug.com/294179",
+ "title":"Chrome bug"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5",
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"u",
+ "43":"u",
+ "44":"u"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"u",
+ "29":"u"
+ },
+ "ios_saf":{
+ "3.2":"n #1",
+ "4.0-4.1":"n #1",
+ "4.2-4.3":"n #1",
+ "5.0-5.1":"n #1",
+ "6.0-6.1":"n #1",
+ "7.0-7.1":"n #1",
+ "8":"n #1",
+ "8.1":"n #1"
+ },
+ "op_mini":{
+ "5.0-8.0":"n #1"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n #1"
+ },
+ "op_mob":{
+ "10":"n #1",
+ "11":"n #1",
+ "11.1":"n #1",
+ "11.5":"n #1",
+ "12":"n #1",
+ "12.1":"n #1",
+ "24":"n #1"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n #1",
+ "11":"n #1"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"See also [PNG favicons](#feat=link-icon-png).",
+ "notes_by_num":{
+ "1":"Does not use favicons at all"
+ },
+ "usage_perc_y":12.04,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/matchesselector.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/matchesselector.json
new file mode 100644
index 0000000..5eb0816
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/matchesselector.json
@@ -0,0 +1,223 @@
+{
+ "title":"matches() DOM method",
+ "description":"Method of testing whether or not a DOM element matches a given selector. Formerly known (and largely supported with prefix) as matchesSelector.",
+ "spec":"https://dom.spec.whatwg.org/#dom-element-matches",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/Element.mozMatchesSelector",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/HTMLElement/matchesSelector",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "TP":"a x"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"a x",
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"a x",
+ "5.1":"a x",
+ "6":"a x",
+ "6.1":"a x",
+ "7":"a x",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"a x",
+ "11.6":"a x",
+ "12":"a x",
+ "12.1":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"a x",
+ "4.2-4.3":"a x",
+ "5.0-5.1":"a x",
+ "6.0-6.1":"a x",
+ "7.0-7.1":"a x",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"a x",
+ "4.1":"a x",
+ "4.2-4.3":"a x",
+ "4.4":"a x",
+ "4.4.3-4.4.4":"a x",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a x",
+ "10":"a x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"a x",
+ "11.5":"a x",
+ "12":"a x",
+ "12.1":"a x",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a x",
+ "11":"a x"
+ },
+ "and_uc":{
+ "9.9":"a x"
+ }
+ },
+ "notes":"Partial support refers to supporting the older specification's \"matchesSelector\" name rather than just \"matches\".",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":61.28,
+ "usage_perc_a":29.73,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":" matchesSelector",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/matchmedia.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/matchmedia.json
new file mode 100644
index 0000000..bf4c9a7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/matchmedia.json
@@ -0,0 +1,231 @@
+{
+ "title":"matchMedia",
+ "description":"API for finding out whether or not a media query applies to the document.",
+ "spec":"http://www.w3.org/TR/cssom-view/#dom-window-matchmedia",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://github.com/paulirish/matchMedia.js/",
+ "title":"matchMedia.js polyfill"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/DOM/window.matchMedia",
+ "title":"MDN article"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/CSS/Using_media_queries_from_code",
+ "title":"MDN tutorial"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/media_queries/apis/matchMedia",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.64,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"mediaquerylist",
+ "ie_id":"matchmedia",
+ "chrome_id":"4677872220372992",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mathml.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mathml.json
new file mode 100644
index 0000000..941a642
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mathml.json
@@ -0,0 +1,230 @@
+{
+ "title":"MathML",
+ "description":"Special tags that allow mathematical formulas and notations to be written on web pages.",
+ "spec":"http://www.w3.org/TR/MathML/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/MathML",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://www.mozilla.org/projects/mathml/demo/",
+ "title":"MathML demos"
+ },
+ {
+ "url":"http://www.mathjax.org",
+ "title":"Cross-browser support script"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/MathML/Element",
+ "title":"MDN element reference"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"y",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"p",
+ "38":"p",
+ "39":"p",
+ "40":"p",
+ "41":"p",
+ "42":"p",
+ "43":"p",
+ "44":"p"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "11.6":"a",
+ "12":"a",
+ "12.1":"a",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"p"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"p",
+ "4":"p",
+ "4.1":"p",
+ "4.2-4.3":"p",
+ "4.4":"p",
+ "4.4.3-4.4.4":"p",
+ "37":"p"
+ },
+ "bb":{
+ "7":"p",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"p",
+ "24":"p"
+ },
+ "and_chr":{
+ "41":"p"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"Opera's support is limited to a CSS profile of MathML. Support was added in Chrome 24, but removed afterwards due to instability.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":22.58,
+ "usage_perc_a":4.17,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"mathml",
+ "chrome_id":"5240822173794304",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/media-attribute.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/media-attribute.json
new file mode 100644
index 0000000..cac94ed
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/media-attribute.json
@@ -0,0 +1,222 @@
+{
+ "title":"Media attribute",
+ "description":"Allows audio and video sources to be assigned to media queries",
+ "spec":"https://html.spec.whatwg.org/multipage/obsolete.html#attr-source-media",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://www.w3.org/Bugs/Public/show_bug.cgi?id=19619",
+ "title":"W3C bug report discussion - Remove media="
+ },
+ {
+ "url":"http://lists.w3.org/Archives/Public/public-html/2014Feb/0036.html",
+ "title":"W3C mailing list thread - Do not remove the media attribute from the source element"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"u",
+ "43":"u",
+ "44":"u"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"u",
+ "29":"u"
+ },
+ "ios_saf":{
+ "3.2":"u",
+ "4.0-4.1":"u",
+ "4.2-4.3":"u",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"u"
+ },
+ "android":{
+ "2.1":"u",
+ "2.2":"u",
+ "2.3":"u",
+ "3":"u",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"u",
+ "10":"u"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"u",
+ "11.1":"u",
+ "11.5":"u",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"u",
+ "11":"u"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"The media attribute has recently been removed from the WHATWG HTML5 specification and Blink and therefore won't be supported by the latest Chrome.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":56.4,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":false
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/menu.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/menu.json
new file mode 100644
index 0000000..fd32a91
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/menu.json
@@ -0,0 +1,226 @@
+{
+ "title":"Toolbar/context menu",
+ "description":"Method of defining a toolbar menu, a context menu or a list of (interactive) options using the element.",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#the-menu-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://bug617528.bugzilla.mozilla.org/attachment.cgi?id=554309",
+ "title":"Demo"
+ },
+ {
+ "url":"http://addyosmani.github.com/jQuery-contextMenu/",
+ "title":"jQuery polyfill"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/events.js#event-contextmenu",
+ "title":"has.js test"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support in Firefox refers to being limited to context menus, not toolbar menus.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":11.97,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"contextmenu,menuitem,command",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/midi.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/midi.json
new file mode 100644
index 0000000..43f699a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/midi.json
@@ -0,0 +1,218 @@
+{
+ "title":"Web MIDI API",
+ "description":"The Web MIDI API specification defines a means for web developers to enumerate, manipulate and access MIDI devices",
+ "spec":"http://webaudio.github.io/web-midi-api/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://github.com/cwilso/WebMIDIAPIShim",
+ "title":"Polyfill"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"webmidiapi",
+ "chrome_id":"4923613069180928",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/minmaxwh.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/minmaxwh.json
new file mode 100644
index 0000000..4ac10f4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/minmaxwh.json
@@ -0,0 +1,231 @@
+{
+ "title":"CSS min/max-width/height",
+ "description":"Method of setting a minimum or maximum width or height to an element. ",
+ "spec":"http://www.w3.org/TR/CSS21/visudet.html#min-max-widths",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://code.google.com/p/ie7-js/",
+ "title":"JS library with support"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/min-width",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"http://www.impressivewebs.com/min-max-width-height-css/",
+ "title":"CSS Basics post"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE7 doesn't support min-width on input button/submit button/reset button."
+ },
+ {
+ "description":"Safari on iOS 5.1 does not support \"min-width\" on table elements."
+ }
+ ],
+ "categories":[
+ "CSS2"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"p",
+ "6":"p",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"IE7 does not support \"inherit\" as a value on any of these properties. IE8 has some bugs with max-width/height combined with overflow: auto/scroll.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":97.08,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"min-width,min-height,max-width,max-height",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mpeg4.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mpeg4.json
new file mode 100644
index 0000000..70cba5b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mpeg4.json
@@ -0,0 +1,230 @@
+{
+ "title":"MPEG-4/H.264 video format",
+ "description":"Commonly used video compression format (not royalty-free)",
+ "spec":"http://ip.hhi.de/imagecom_G1/assets/pdfs/csvt_overview_0305.pdf",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC",
+ "title":"Wikipedia article"
+ },
+ {
+ "url":"http://www.interoperabilitybridges.com/html5-extension-for-wmp-plugin",
+ "title":"Firefox extension allowing support in Win7"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Chrome has performance problems with [long h.264 videos](http://oddlystudios.com/blog/html5-video-problems-in-chrome/)."
+ },
+ {
+ "description":"Browsers have trouble with more than one audio track in a video (for multi-language support): IE 11 supports it, Firefox plays the last track, Chrome plays the first track."
+ },
+ {
+ "description":"Chrome has an issue with MPEG-4/H.264 video requests [pending indefinitely](https://code.google.com/p/chromium/issues/detail?id=234779) as well as other [http request issues](https://code.google.com/p/chromium/issues/detail?id=157993)."
+ }
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"The Android 2.3 browser currently requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to play videos\r\n\r\nFirefox supports H.264 on Windows 7 and later since version 21. Firefox supports H.264 on Linux since version 26 if the appropriate gstreamer plug-ins are installed.\r\n\r\nPartial support for Firefox refers to the lack of support in OSX & some Linux platforms, for Android Firefox it refers to the inability of hardware acceleration.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":81.75,
+ "usage_perc_a":8.4,
+ "ucprefix":false,
+ "parent":"video",
+ "keywords":"avc,mp4,mpv,mov,aac,h264",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/multibackgrounds.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/multibackgrounds.json
new file mode 100644
index 0000000..a0eeefb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/multibackgrounds.json
@@ -0,0 +1,228 @@
+{
+ "title":"CSS3 Multiple backgrounds",
+ "description":"Method of using multiple images as a background",
+ "spec":"http://www.w3.org/TR/css3-background/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://www.css3.info/preview/multiple-backgrounds/",
+ "title":"Demo & information page"
+ },
+ {
+ "url":"http://www.css3files.com/background/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/background-image",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE9 does not correctly render multiple backgrounds for TableRows. Attempting to do a left-cap, right cap, and repeated fill on a row results in the left cap and fill being correct, but the right cap will display at the end of the first column, then again part way through the rest of the table."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":93.95,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/multicolumn.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/multicolumn.json
new file mode 100644
index 0000000..19ba2bf
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/multicolumn.json
@@ -0,0 +1,238 @@
+{
+ "title":"CSS3 Multiple column layout",
+ "description":"Method of flowing information in multiple columns",
+ "spec":"http://www.w3.org/TR/css3-multicol/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://dev.opera.com/articles/view/css3-multi-column-layout/",
+ "title":"Dev.Opera article"
+ },
+ {
+ "url":"http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/an-introduction-to-the-css3-multiple-column-layout-module/",
+ "title":"Introduction page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/column-width",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://github.com/BetleyWhitehorne/CSS3MultiColumn",
+ "title":"Polyfill"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"In Firefox, the property `column-span` (or `-moz-column-span`) does not yet work. See [the bug](https://bugzilla.mozilla.org/show_bug.cgi?id=616436)."
+ },
+ {
+ "description":"In Chrome, the `-webkit-column-count` directive does not yet work with print stylesheets. See the [following bug in Chromium](https://code.google.com/p/chromium/issues/detail?id=99358)."
+ },
+ {
+ "description":"Chrome is reported to incorrectly calculate the container height, and often breaks on margins, padding, and can display 1px of the next column at the bottom of the previous column."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a x",
+ "3":"a x",
+ "3.5":"a x",
+ "3.6":"a x",
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"a x",
+ "35":"a x",
+ "36":"a x",
+ "37":"a x",
+ "38":"a x",
+ "39":"a x"
+ },
+ "chrome":{
+ "4":"a x",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"a x",
+ "35":"a x",
+ "36":"a x",
+ "37":"a x",
+ "38":"a x",
+ "39":"a x",
+ "40":"a x",
+ "41":"a x",
+ "42":"a x",
+ "43":"a x",
+ "44":"a x"
+ },
+ "safari":{
+ "3.1":"a x",
+ "3.2":"a x",
+ "4":"a x",
+ "5":"a x",
+ "5.1":"a x",
+ "6":"a x",
+ "6.1":"a x",
+ "7":"a x",
+ "7.1":"a x",
+ "8":"a x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x"
+ },
+ "ios_saf":{
+ "3.2":"a x",
+ "4.0-4.1":"a x",
+ "4.2-4.3":"a x",
+ "5.0-5.1":"a x",
+ "6.0-6.1":"a x",
+ "7.0-7.1":"a x",
+ "8":"a x",
+ "8.1":"a x"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"a x",
+ "2.2":"a x",
+ "2.3":"a x",
+ "3":"a x",
+ "4":"a x",
+ "4.1":"a x",
+ "4.2-4.3":"a x",
+ "4.4":"a x",
+ "4.4.3-4.4.4":"a x",
+ "37":"a x"
+ },
+ "bb":{
+ "7":"a x",
+ "10":"a x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"a x"
+ },
+ "and_chr":{
+ "41":"a x"
+ },
+ "and_ff":{
+ "36":"a x"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a x"
+ }
+ },
+ "notes":"Partial support refers to not supporting the `break-before`, `break-after`, `break-inside` properties. Webkit browsers do have equivalent support for the non-standard `-webkit-column-break-*` properties while Firefox supports `page-break-*` to accomplish the same result.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":13.29,
+ "usage_perc_a":78.87,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"column-count",
+ "ie_id":"multicolumnfullsupport",
+ "chrome_id":"6526151266664448",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mutationobserver.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mutationobserver.json
new file mode 100644
index 0000000..7fd053f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/mutationobserver.json
@@ -0,0 +1,228 @@
+{
+ "title":"Mutation Observer",
+ "description":"Method for observing and reacting to changes to the DOM. Replaces MutationEvents, which is deprecated.",
+ "spec":"http://www.w3.org/TR/dom/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver",
+ "title":"MutationObserver from MDN"
+ },
+ {
+ "url":"https://github.com/webcomponents/webcomponentsjs",
+ "title":"Polyfill"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"WebKitMutationObserver in iOS 6 has bug: it doesn't trigger `\"childList\"` changes until you bind one of the deprecated mutation events (for example, `\"DOMNodeInserted\"`) to the node which is watched by observer."
+ },
+ {
+ "description":"IE11 does not include the child nodes, when they are removed by setting the innerHTML of an element [see bug](https://connect.microsoft.com/IE/feedback/details/817132/ie-11-childnodes-are-missing-from-mutationobserver-mutations-removednodes-after-setting-innerhtml)"
+ }
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"p",
+ "10":"p",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y x",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"p",
+ "4.1":"p",
+ "4.2-4.3":"p",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"When the content of a node with a single CharacterData child node is changed by innerHTML attribute and the node have a single different one as a result, WebKit browsers consider it as a characterData mutation of the child CharacterData node, while other browsers think it as a childList mutation of the parent node.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":83.42,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"MutationObserver",
+ "ie_id":"mutationobservers",
+ "chrome_id":"5021194726146048",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/namevalue-storage.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/namevalue-storage.json
new file mode 100644
index 0000000..c5788dc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/namevalue-storage.json
@@ -0,0 +1,239 @@
+{
+ "title":"Web Storage - name/value pairs",
+ "description":"Method of storing data locally like cookies, but for larger amounts of data (sessionStorage and localStorage, used to fall under HTML5).",
+ "spec":"http://www.w3.org/TR/webstorage/#storage",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://code.google.com/p/sessionstorage/",
+ "title":"Support library"
+ },
+ {
+ "url":"http://html5demos.com/storage",
+ "title":"Simple demo"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-localstorage;native-sessionstorage",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/web-storage/Storage/localStorage",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"In iOS 5 & 6 localStorage data is stored in a location that may occasionally be cleared out by the OS."
+ },
+ {
+ "description":"In private browsing mode, Safari, iOS Safari and the Android browsers do not support setting sessionStorage or localStorage."
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a",
+ "3":"a",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.03,
+ "usage_perc_a":0.05,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"webstorage,local storage",
+ "ie_id":"webstorage",
+ "chrome_id":"5345825534246912",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/nav-timing.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/nav-timing.json
new file mode 100644
index 0000000..a9bbb00
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/nav-timing.json
@@ -0,0 +1,229 @@
+{
+ "title":"Navigation Timing API",
+ "description":"API for accessing timing information related to navigation and elements.",
+ "spec":"http://www.w3.org/TR/navigation-timing/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/API/navigationTiming",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/webperformance/basics/",
+ "title":"HTML5 Rocks tutorial"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/navigation_timing",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Chrome on Windows - window.performance timing is millisecond resolution."
+ }
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Removed in iOS 8.1 due to poor performance.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":81.7,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"performance,performance.timing",
+ "ie_id":"navigationtimingapi",
+ "chrome_id":"5584144679567360",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/notifications.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/notifications.json
new file mode 100644
index 0000000..ec644b8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/notifications.json
@@ -0,0 +1,243 @@
+{
+ "title":"Web Notifications",
+ "description":"Method of alerting the user outside of a web page by displaying notifications (that do not require interaction by the user).",
+ "spec":"http://www.w3.org/TR/notifications/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.html5rocks.com/tutorials/notifications/quick/",
+ "title":"HTML5 Rocks tutorial"
+ },
+ {
+ "url":"http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification",
+ "title":"Chromium API"
+ },
+ {
+ "url":"https://addons.mozilla.org/en-us/firefox/addon/221523/",
+ "title":"Add-on "
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/notification",
+ "title":"MDN Notifications"
+ },
+ {
+ "url":"http://www.sitepoint.com/introduction-web-notifications-api/",
+ "title":"SitePoint article"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/web-notifications-api-demo.html",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Partial support in older Chrome versions refers to using an [older version of the spec](http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification). Support in Safari 6 is limited to Mac OSX 10.8+. "
+ },
+ {
+ "description":"Firefox notifications disappear [after a few seconds](https://bugzilla.mozilla.org/show_bug.cgi?id=875114)"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"a x",
+ "6":"a x",
+ "7":"a x",
+ "8":"a x",
+ "9":"a x",
+ "10":"a x",
+ "11":"a x",
+ "12":"a x",
+ "13":"a x",
+ "14":"a x",
+ "15":"a x",
+ "16":"a x",
+ "17":"a x",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"a x",
+ "4.4.3-4.4.4":"a x",
+ "37":"a x"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a x"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":49.15,
+ "usage_perc_a":4.15,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"webnotifications",
+ "chrome_id":"5064350557536256",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/object-fit.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/object-fit.json
new file mode 100644
index 0000000..0e618c6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/object-fit.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS3 object-fit/object-position",
+ "description":"Method of specifying how an object (image or video) should fit inside its box. object-fit options include \"contain\" (fit according to aspect ratio), \"fill\" (stretches object to fill) and \"cover\" (overflows box but maintains ratio), where object-position allows the object to be repositioned like background-image does.",
+ "spec":"http://www.w3.org/TR/css3-images/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://dev.opera.com/articles/view/css3-object-fit-object-position/",
+ "title":"Dev.Opera article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/object-fit",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://github.com/anselmh/object-fit",
+ "title":"object-fit JavaScript-Polyfill"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"a #1",
+ "8":"a #1"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"y x",
+ "11":"y x",
+ "11.1":"y x",
+ "11.5":"y x",
+ "11.6":"y x",
+ "12":"y x",
+ "12.1":"y x",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"a #1",
+ "8.1":"a #1"
+ },
+ "op_mini":{
+ "5.0-8.0":"y x"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y x",
+ "11.1":"y x",
+ "11.5":"y x",
+ "12":"y x",
+ "12.1":"y x",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support in Safari refers to support for `object-fit` but not `object-position`."
+ },
+ "usage_perc_y":50.14,
+ "usage_perc_a":7.36,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"objectfit,objectposition",
+ "ie_id":"objectfitandobjectposition",
+ "chrome_id":"5302669702856704",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/object-observe.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/object-observe.json
new file mode 100644
index 0000000..82145e8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/object-observe.json
@@ -0,0 +1,218 @@
+{
+ "title":"Object.observe data binding",
+ "description":"Method for data binding, part of the ECMAScript 7 proposals",
+ "spec":"http://wiki.ecmascript.org/doku.php?id=harmony:observe",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/es7/observe/",
+ "title":"Data-binding Revolutions with Object.observe()"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":43.17,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"objectobserve",
+ "chrome_id":"6147094632988672",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/offline-apps.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/offline-apps.json
new file mode 100644
index 0000000..bed2a75
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/offline-apps.json
@@ -0,0 +1,235 @@
+{
+ "title":"Offline web applications",
+ "description":"Method of defining web page files to be cached using a cache manifest file, allowing them to work offline on subsequent visits to the page",
+ "spec":"https://html.spec.whatwg.org/multipage/browsers.html#offline",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://www.sitepoint.com/offline-web-application-tutorial/",
+ "title":"Sitepoint tutorial"
+ },
+ {
+ "url":"http://diveintohtml5.info/offline.html",
+ "title":"Dive Into HTML5 article"
+ },
+ {
+ "url":"http://hacks.mozilla.org/2010/01/offline-web-applications/",
+ "title":"Mozilla Hacks article/demo"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/appcache/ApplicationCache",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Currently not supported in some versions of Chrome on Linux."
+ },
+ {
+ "description":"Reportedly, Android 4.4 WebViews lose the cache after closing the app."
+ }
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"a",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":89.29,
+ "usage_perc_a":0.04,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"appcache,app cache,application cache,online",
+ "ie_id":"applicationcache",
+ "chrome_id":"6192449487634432",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ogv.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ogv.json
new file mode 100644
index 0000000..9d5bf41
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ogv.json
@@ -0,0 +1,218 @@
+{
+ "title":"Ogg/Theora video format",
+ "description":"Free lossy video compression format.",
+ "spec":"http://theora.org/doc/",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/Theora",
+ "title":"Wikipedia article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "TP":"p"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"p"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":51.85,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"video",
+ "keywords":"xiph",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/online-status.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/online-status.json
new file mode 100644
index 0000000..51dc4f0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/online-status.json
@@ -0,0 +1,220 @@
+{
+ "title":"Online/offline status",
+ "description":"Events to indicate when the user's connected (`online` and `offline` events) and the `navigator.onLine` property to see current status.",
+ "spec":"https://html.spec.whatwg.org/multipage/browsers.html#browser-state",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine.onLine#Specification",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a #2",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"a #3",
+ "5":"a #3",
+ "6":"a #3",
+ "7":"a #3",
+ "8":"a #3",
+ "9":"a #3",
+ "10":"a #3",
+ "11":"a #3",
+ "12":"a #3",
+ "13":"a #3",
+ "14":"a #3",
+ "15":"a #3",
+ "16":"a #3",
+ "17":"a #3",
+ "18":"a #3",
+ "19":"a #3",
+ "20":"a #3",
+ "21":"a #3",
+ "22":"a #3",
+ "23":"a #3",
+ "24":"a #3",
+ "25":"a #3",
+ "26":"a #3",
+ "27":"a #3",
+ "28":"a #3",
+ "29":"a #3",
+ "30":"a #3",
+ "31":"a #3",
+ "32":"a #3",
+ "33":"a #3",
+ "34":"a #3",
+ "35":"a #3",
+ "36":"a #3",
+ "37":"a #3",
+ "38":"a #3",
+ "39":"a #3"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"a",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"u",
+ "4.0-4.1":"u",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"u",
+ "2.2":"u",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a #1",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a #1"
+ }
+ },
+ "notes":"\"online\" does not always mean connection to the internet, it can also just mean connection to some network.\r\n\r\nEarly versions of Chrome and Safari always reported \"true\" for `navigator.onLine`",
+ "notes_by_num":{
+ "1":"Seems to support `navigator.onLine` but not `online`/`offline` events.",
+ "2":"IE8 only supports the `online`/`offline` events on `document.body`, rather than `window`.",
+ "3":"Desktop Firefox responds to the status of its \"Work Offline\" mode. If not in that mode, `navigator.onLine` is always `true`, regardless of the actual network connectivity status."
+ },
+ "usage_perc_y":74.55,
+ "usage_perc_a":19.09,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/opus.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/opus.json
new file mode 100644
index 0000000..1652b0a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/opus.json
@@ -0,0 +1,224 @@
+{
+ "title":"Opus",
+ "description":"Royalty-free open audio codec by IETF, which incorporated SILK from Skype and CELT from Xiph.org, to serve higher sound quality and lower latency at the same bitrate.",
+ "spec":"http://tools.ietf.org/html/rfc6716",
+ "status":"other",
+ "links":[
+ {
+ "url":"https://hacks.mozilla.org/2012/07/firefox-beta-15-supports-the-new-opus-audio-format/",
+ "title":"Introduction of Opus by Mozilla"
+ },
+ {
+ "url":"http://www.ietf.org/mail-archive/web/rtcweb/current/msg04953.html",
+ "title":"Google's statement about the use of VP8 and Opus codec for WebRTC standard"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Opera does not seem to support Opus in webm files yet, only in ogg."
+ }
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"For Opera the Linux version may be able to play it when the GStreamer module is up to date and the served mime-type is 'audio/ogg'.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":45.47,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"audio",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"4891189287321600",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/outline.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/outline.json
new file mode 100644
index 0000000..4a030a8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/outline.json
@@ -0,0 +1,227 @@
+{
+ "title":"CSS outline",
+ "description":"The CSS outline property is a shorthand property for setting one or more of the individual outline properties outline-style, outline-width and outline-color in a single rule. In most cases the use of this shortcut is preferable and more convenient.",
+ "spec":"http://www.w3.org/TR/CSS2/ui.html#propdef-outline",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://dev.w3.org/csswg/css3-ui/#outline",
+ "title":"CSS Basic User Interface Module Level 3"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/CSS/outline",
+ "title":"Mozilla Developer Network: outline"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE9 and IE10 don't support outline-offset as defined here: http://dev.w3.org/csswg/css3-ui/#outline-offset0"
+ },
+ {
+ "description":"Some versions of Firefox, if not all, place the outline outside of the element's margin property."
+ }
+ ],
+ "categories":[
+ "CSS2"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y",
+ "9":"y #1",
+ "10":"y #1",
+ "11":"y #1",
+ "TP":"y #1"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y #1",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y #1",
+ "11":"y #1"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Also supports the value of `invert` for `outline-color`. (support of this value is optional for browsers)"
+ },
+ "usage_perc_y":94.12,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"-moz-outline,outline-width,outline-style,outline-color",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pagevisibility.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pagevisibility.json
new file mode 100644
index 0000000..d740cfe
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pagevisibility.json
@@ -0,0 +1,232 @@
+{
+ "title":"Page Visibility",
+ "description":"JavaScript API for determining whether a document is visible on the display",
+ "spec":"http://www.w3.org/TR/page-visibility/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/timing/properties/visibilityState",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"http://www.sitepoint.com/introduction-to-page-visibility-api/",
+ "title":"SitePoint article"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/page-visibility-api-demo.html",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"In Chrome 38 desktop the `visibilitychange` event is fired twice [Chrome bug](http://crbug.com/422163)"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y #1",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"y",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":85.34,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"visibilitystate",
+ "ie_id":"pagevisibilityapi",
+ "chrome_id":"5689697795833856",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/picture.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/picture.json
new file mode 100644
index 0000000..20ae41d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/picture.json
@@ -0,0 +1,243 @@
+{
+ "title":"Picture element",
+ "description":"A responsive images method to control which image resource a user agent presents to a user, based on resolution, media query and/or support for a particular image format",
+ "spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://responsiveimages.org/demos/",
+ "title":"Demo"
+ },
+ {
+ "url":"http://code.tutsplus.com/tutorials/better-responsive-images-with-the-picture-element--net-36583",
+ "title":"Tutorial"
+ },
+ {
+ "url":"http://usecases.responsiveimages.org/",
+ "title":"Read about the use cases"
+ },
+ {
+ "url":"http://responsiveimages.org/",
+ "title":"General information about Responsive Images"
+ },
+ {
+ "url":"https://dev.opera.com/articles/responsive-images/",
+ "title":"Blog post on usage"
+ },
+ {
+ "url":"http://www.html5rocks.com/tutorials/responsive/picture-element/",
+ "title":"HTML5 Rocks tutorial"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"See [a list](https://github.com/ResponsiveImagesCG/picture-element/issues?state=open) of unresolved issues / feature requests within the specification"
+ }
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n d #3",
+ "35":"n d #3",
+ "36":"n d #3",
+ "37":"n d #3",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n d #1",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n d #2",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags",
+ "2":"Enabled in Opera through the \"experimental Web Platform features\" flag in opera://flags",
+ "3":"Enabled in Firefox by setting the about:config preference dom.image.picture.enable to true"
+ },
+ "usage_perc_y":41.66,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"pictureelement",
+ "chrome_id":"5910974510923776",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/png-alpha.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/png-alpha.json
new file mode 100644
index 0000000..48fdfd7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/png-alpha.json
@@ -0,0 +1,224 @@
+{
+ "title":"PNG alpha transparency",
+ "description":"Semi-transparent areas in PNG files",
+ "spec":"http://www.w3.org/TR/PNG/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/Portable_Network_Graphics",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://dillerdesign.com/experiment/DD_belatedPNG/",
+ "title":"Workaround for IE6"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE7 & 8 do not support PNG's alpha transparency when you apply CSS alpha filter on them or a parent element."
+ }
+ ],
+ "categories":[
+ "PNG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":97.08,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pointer-events.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pointer-events.json
new file mode 100644
index 0000000..9ccb392
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pointer-events.json
@@ -0,0 +1,230 @@
+{
+ "title":"CSS pointer-events (for HTML)",
+ "description":"This CSS property, when set to \"none\" allows elements to not receive hover/click events, instead the event will occur on anything behind it. ",
+ "spec":"http://wiki.csswg.org/spec/css4-ui#pointer-events",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://robertnyman.com/2010/03/22/css-pointer-events-to-allow-clicks-on-underlying-elements/",
+ "title":"Article & tutorial"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-pointerevents",
+ "title":"has.js test"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Does not work on SVG elements in Safari 5.1 or Android <= 4.1."
+ },
+ {
+ "description":"Does not work on links in IE11."
+ },
+ {
+ "description":"Moving the scrollbar on an object with `pointer-events: none;` works in Firefox, but doesn't work in either Chrome or IE."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Already part of the SVG specification, and all SVG-supporting browsers appear to support the property on SVG elements.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":87.29,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"pointerevents",
+ "ie_id":"csspointerevents",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pointer.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pointer.json
new file mode 100644
index 0000000..9b91d77
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/pointer.json
@@ -0,0 +1,227 @@
+{
+ "title":"Pointer events",
+ "description":"This specification integrates various inputs from mice, touchscreens, and pens, making separate implementations no longer necessary and authoring for cross-device pointers easier. Not to be mistaken with the unrelated \"pointer-events\" CSS property.",
+ "spec":"http://www.w3.org/TR/pointerevents/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx",
+ "title":"Implementation of Pointer Events in IE10"
+ },
+ {
+ "url":"http://blogs.msdn.com/b/eternalcoding/archive/2013/01/16/hand-js-a-polyfill-for-supporting-pointer-events-on-every-browser.aspx",
+ "title":"Hand.js, the polyfill for browsers only supporting Touch Events"
+ },
+ {
+ "url":"http://blogs.msdn.com/b/davrous/archive/2013/02/20/handling-touch-in-your-html5-apps-thanks-to-the-pointer-events-of-ie10-and-windows-8.aspx",
+ "title":"Article & tutorial"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a x",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"p",
+ "38":"p",
+ "39":"p"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"p",
+ "38":"p",
+ "39":"p",
+ "40":"p",
+ "41":"p",
+ "42":"p",
+ "43":"p",
+ "44":"p"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"u",
+ "7":"u",
+ "7.1":"u",
+ "8":"u"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"p",
+ "6.0-6.1":"p",
+ "7.0-7.1":"p",
+ "8":"p",
+ "8.1":"p"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"p",
+ "4":"p",
+ "4.1":"p",
+ "4.2-4.3":"p",
+ "4.4":"p",
+ "4.4.3-4.4.4":"p",
+ "37":"p"
+ },
+ "bb":{
+ "7":"p",
+ "10":"p"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"p",
+ "24":"p"
+ },
+ "and_chr":{
+ "41":"p"
+ },
+ "and_ff":{
+ "36":"p"
+ },
+ "ie_mob":{
+ "10":"a x",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"p"
+ }
+ },
+ "notes":"Partial support in IE10 refers the lack of pointerenter and pointerleave events. Firefox Nightly provides 'dom.w3c_pointer_events.enabled' option to support this specification starting with version 28.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":8.5,
+ "usage_perc_a":1.67,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"pointerdown,pointermove,pointerup,pointercancel,pointerover,pointerout,pointerenter,pointerleave",
+ "ie_id":"pointerevents",
+ "chrome_id":"4504699138998272",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/progressmeter.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/progressmeter.json
new file mode 100644
index 0000000..c0851c1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/progressmeter.json
@@ -0,0 +1,230 @@
+{
+ "title":"Progress & Meter",
+ "description":"Method of indicating a progress state (progress element) or the current level of a gauge (meter element).\r\n",
+ "spec":"https://html.spec.whatwg.org/multipage/forms.html#the-progress-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://dev.opera.com/articles/new-form-features-in-html5/#newoutput",
+ "title":"Dev.Opera article"
+ },
+ {
+ "url":"http://html5doctor.com/measure-up-with-the-meter-tag/",
+ "title":"HTML5 Doctor on meter element"
+ },
+ {
+ "url":"http://peter.sh/examples/?/html/meter-progress.html",
+ "title":"Examples of progress and meter elements"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/progress",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in Firefox 6-15, IE10 & iOS7 Safari refers to supporting the progress element, but not the meter element. iOS7 Safari also does not support \"indeterminate\" progress elements.\r\n\r\nFor styling progress bars, [see this article](http://css-tricks.com/html5-progress-element/)",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":68.33,
+ "usage_perc_a":17.5,
+ "ucprefix":false,
+ "parent":"forms",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/promises.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/promises.json
new file mode 100644
index 0000000..542fa5a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/promises.json
@@ -0,0 +1,230 @@
+{
+ "title":"Promises",
+ "description":"A promise represents the eventual result of an asynchronous operation.",
+ "spec":"https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://promises-aplus.github.io/promises-spec/",
+ "title":"Promises/A+ spec"
+ },
+ {
+ "url":"http://www.chromestatus.com/features/5681726336532480",
+ "title":"Chromium dashboard - ES6 Promises"
+ },
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/es6/promises/",
+ "title":"JavaScript Promises: There and back again - HTML5 Rocks"
+ },
+ {
+ "url":"https://github.com/jakearchibald/ES6-Promises",
+ "title":"A polyfill for ES6-style Promises"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"a",
+ "28":"a",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"a",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"p",
+ "6":"p",
+ "6.1":"p",
+ "7":"p",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "11.6":"p",
+ "12":"p",
+ "12.1":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"a",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"p",
+ "6.0-6.1":"p",
+ "7.0-7.1":"p",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"p"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"p",
+ "4":"p",
+ "4.1":"p",
+ "4.2-4.3":"p",
+ "4.4":"p",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"p",
+ "10":"p"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"p",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"p"
+ },
+ "and_uc":{
+ "9.9":"p"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":63.85,
+ "usage_perc_a":0.26,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"futures",
+ "ie_id":"",
+ "chrome_id":"5681726336532480",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/proximity.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/proximity.json
new file mode 100644
index 0000000..3741112
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/proximity.json
@@ -0,0 +1,222 @@
+{
+ "title":"Proximity API",
+ "description":"Defines events that provide information about the distance between a device and an object, as measured by a proximity sensor.",
+ "spec":"http://www.w3.org/TR/proximity/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://aurelio.audero.it/demo/proximity-api-demo.html",
+ "title":"Demo"
+ },
+ {
+ "url":"http://www.sitepoint.com/introducing-proximity-api/",
+ "title":"SitePoint article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":11.88,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/queryselector.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/queryselector.json
new file mode 100644
index 0000000..c740fb2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/queryselector.json
@@ -0,0 +1,232 @@
+{
+ "title":"querySelector/querySelectorAll",
+ "description":"Method of accessing DOM elements using CSS selectors",
+ "spec":"http://www.w3.org/TR/selectors-api/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/element.querySelector",
+ "title":"MDN article on querySelector"
+ },
+ {
+ "url":"https://developer.mozilla.org/En/DOM/Element.querySelectorAll",
+ "title":"MDN article on querySelectorAll"
+ },
+ {
+ "url":"http://cjihrig.com/blog/javascripts-selectors-api/",
+ "title":"Blog post"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/selectors_api/querySelector",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"iOS 8.* contains a [bug](https://github.com/jquery/sizzle/issues/290) where selecting siblings of filtered id selections are no longer working (for example #a + p)."
+ }
+ ],
+ "categories":[
+ "DOM"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"a #1",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support in IE8 is due to being limited to [CSS 2.1 selectors](/#feat=css-sel2). Additionally, it will have trouble with selectors including unrecognized tags (for example HTML5 ones)."
+ },
+ "usage_perc_y":93.98,
+ "usage_perc_a":2.9,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"query,selectors,selectors api",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/referrer-policy.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/referrer-policy.json
new file mode 100644
index 0000000..69c931b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/referrer-policy.json
@@ -0,0 +1,215 @@
+{
+ "title":"Referrer Policy",
+ "description":"Allow control of HTTP referrers via the referrer meta tag.",
+ "spec":"http://w3c.github.io/webappsec/specs/referrer-policy/",
+ "status":"wd",
+ "links":[
+
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"u",
+ "6.1":"u",
+ "7":"u",
+ "7.1":"u",
+ "8":"u"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"u",
+ "16":"u",
+ "17":"u",
+ "18":"u",
+ "19":"u",
+ "20":"u",
+ "21":"u",
+ "22":"u",
+ "23":"u",
+ "24":"u",
+ "25":"u",
+ "26":"u",
+ "27":"u",
+ "28":"u",
+ "29":"u"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"u",
+ "8":"u",
+ "8.1":"u"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":45.48,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"meta,referrer,referer",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":false
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/registerprotocolhandler.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/registerprotocolhandler.json
new file mode 100644
index 0000000..d808000
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/registerprotocolhandler.json
@@ -0,0 +1,218 @@
+{
+ "title":"Custom protocol handling",
+ "description":"Method of allowing a webpage to handle a given protocol using `navigator.registerProtocolHandler`. This allows certain URLs to be opened by a given web application, for example `mailto:` addresses can be opened by a webmail client.",
+ "spec":"https://html.spec.whatwg.org/multipage/webappapis.html#custom-handlers",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"y #1",
+ "14":"y #1",
+ "15":"y #1",
+ "16":"y #1",
+ "17":"y #1",
+ "18":"y #1",
+ "19":"y #1",
+ "20":"y #1",
+ "21":"y #1",
+ "22":"y #1",
+ "23":"y #1",
+ "24":"y #1",
+ "25":"y #1",
+ "26":"y #1",
+ "27":"y #1",
+ "28":"y #1",
+ "29":"y #1",
+ "30":"y #1",
+ "31":"y #1",
+ "32":"y #1",
+ "33":"y #1",
+ "34":"y #1",
+ "35":"y #1",
+ "36":"y #1",
+ "37":"y #1",
+ "38":"y #1",
+ "39":"y #1",
+ "40":"y #1",
+ "41":"y #1",
+ "42":"y #1",
+ "43":"y #1",
+ "44":"y #1"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"y #1",
+ "12":"y #1",
+ "12.1":"y #1",
+ "15":"y #1",
+ "16":"y #1",
+ "17":"y #1",
+ "18":"y #1",
+ "19":"y #1",
+ "20":"y #1",
+ "21":"y #1",
+ "22":"y #1",
+ "23":"y #1",
+ "24":"y #1",
+ "25":"y #1",
+ "26":"y #1",
+ "27":"y #1",
+ "28":"y #1",
+ "29":"y #1"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y #1"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Supports protocols `mailto`, `mms`, `nntp`, `rtsp`, and `webcal` but requires custom protocols to start with `web+`"
+ },
+ "usage_perc_y":47.66,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rellist.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rellist.json
new file mode 100644
index 0000000..9d8c7b7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rellist.json
@@ -0,0 +1,219 @@
+{
+ "title":"relList (DOMTokenList)",
+ "description":"Method of easily manipulating rel attribute values on elements, using the DOMTokenList object (similar to classList).",
+ "spec":"https://html.spec.whatwg.org/multipage/semantics.html#dom-a-rellist",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/DOM/DOMTokenList",
+ "title":"MDN - DOMTokenList"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":11.14,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rem.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rem.json
new file mode 100644
index 0000000..d92adde
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rem.json
@@ -0,0 +1,233 @@
+{
+ "title":"rem (root em) units",
+ "description":"Type of unit similar to \"em\", but relative only to the root element, not any parent element. Thus compounding does not occur as it does with \"em\" units.",
+ "spec":"http://www.w3.org/TR/css3-values/#font-relative-lengths",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://snook.ca/archives/html_and_css/font-size-with-rem",
+ "title":"Article on usage"
+ },
+ {
+ "url":"https://github.com/chuckcarpenter/REM-unit-polyfill",
+ "title":"REM Polyfill"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE 9 & IE 10 do not support `rem` units when used in the `font` shorthand property (the entire declaration is ignored) or when used on pseudo elements."
+ },
+ {
+ "description":"IE 9, 10 and 11 do not support rem units when used in the \"line-height\" property when used on :before and :after pseudo elements (https://connect.microsoft.com/IE/feedback/details/776744)."
+ },
+ {
+ "description":"Borders sized in \"rem\" disappear when the page is zoomed out in Chrome."
+ },
+ {
+ "description":"Reportedly does not work on Android 4.3 browser for Samsung Note II."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"u",
+ "5":"u",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":93.81,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"rems",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/requestanimationframe.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/requestanimationframe.json
new file mode 100644
index 0000000..b93368d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/requestanimationframe.json
@@ -0,0 +1,228 @@
+{
+ "title":"requestAnimationFrame",
+ "description":"API allowing a more efficient way of running script-based animation, compared to traditional methods using timeouts.",
+ "spec":"http://www.w3.org/TR/animation-timing/#requestAnimationFrame",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://paulirish.com/2011/requestanimationframe-for-smart-animating/",
+ "title":"Blog post"
+ },
+ {
+ "url":"http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/",
+ "title":"Mozilla Hacks article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/Window/requestAnimationFrame",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"There's [an issue](http://forums.greensock.com/topic/6639-tweens-not-working-on-ios6/?p=24455#entry24455) with requestAnimationFrame on iOS6, the bug still appears to exist in 6.1.3"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y x",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":85.57,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"requestanimationframe",
+ "chrome_id":"5233400470306816",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/resource-timing.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/resource-timing.json
new file mode 100644
index 0000000..f6c15ba
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/resource-timing.json
@@ -0,0 +1,226 @@
+{
+ "title":"Resource Timing",
+ "description":"Method to help web developers to collect complete timing information related to resources on a document.",
+ "spec":"http://www.w3.org/TR/resource-timing/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://aurelio.audero.it/demo/resource-timing-api-demo.html",
+ "title":"Demo"
+ },
+ {
+ "url":"http://googledevelopers.blogspot.com/2013/12/measuring-network-performance-with.html",
+ "title":"Blog post"
+ },
+ {
+ "url":"http://www.sitepoint.com/introduction-resource-timing-api/",
+ "title":"SitePoint article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n d #1",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Can be enabled in Firefox using the dom.enable_resource_timing flag"
+ },
+ "usage_perc_y":68.93,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"performance,testing,resource",
+ "ie_id":"resourcetimingapi",
+ "chrome_id":"5796350423728128",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rtcpeerconnection.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rtcpeerconnection.json
new file mode 100644
index 0000000..4e5410c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/rtcpeerconnection.json
@@ -0,0 +1,218 @@
+{
+ "title":"WebRTC Peer-to-peer connections",
+ "description":"Method of allowing two users to communicate directly, browser to browser using the RTCPeerConnection API.",
+ "spec":"http://www.w3.org/TR/webrtc/#peer-to-peer-connections",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.webrtc.org/",
+ "title":"WebRTC Project site"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"BlackBerry 10 recognizes RTCPeerConnection but real support is unconfirmed.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":57.03,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"webrtcwebrtcv10api",
+ "chrome_id":"6612462929444864",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ruby.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ruby.json
new file mode 100644
index 0000000..4cd5755
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ruby.json
@@ -0,0 +1,230 @@
+{
+ "title":"Ruby annotation",
+ "description":"Method of adding pronunciation or other annotations using ruby elements (primarily used in East Asian typography).",
+ "spec":"https://html.spec.whatwg.org/multipage/semantics.html#the-ruby-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://html5doctor.com/ruby-rt-rp-element/",
+ "title":"HTML5 Doctor article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/ruby",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"https://addons.mozilla.org/firefox/addon/1935/",
+ "title":"Add-on \"XHTML Ruby Support\" for Firefox"
+ },
+ {
+ "url":"https://addons.mozilla.org/firefox/addon/6812/",
+ "title":"Addon \"HTML Ruby\" for Firefox support"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"p",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "11.6":"p",
+ "12":"p",
+ "12.1":"p",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"p"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"p",
+ "10":"a"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"p",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"p"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"Browsers without native support can still simulate support using CSS. Partial support refers to only supporting basic ruby, may still be missing writing-mode, Complex ruby and CSS3 Ruby.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":81.38,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/screen-orientation.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/screen-orientation.json
new file mode 100644
index 0000000..53134d9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/screen-orientation.json
@@ -0,0 +1,226 @@
+{
+ "title":"Screen Orientation",
+ "description":"Provides the ability to read the screen orientation state, to be informed when this state changes, and to be able to lock the screen orientation to a specific state.",
+ "spec":"http://www.w3.org/TR/screen-orientation/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://aurelio.audero.it/demo/screen-orientation-api-demo.html",
+ "title":"Demo"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/Screen.orientation",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.sitepoint.com/introducing-screen-orientation-api/",
+ "title":"SitePoint article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"a x",
+ "TP":"a x"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"a x",
+ "19":"a x",
+ "20":"a x",
+ "21":"a x",
+ "22":"a x",
+ "23":"a x",
+ "24":"a x",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"a x",
+ "35":"a x",
+ "36":"a x",
+ "37":"a x",
+ "38":"a x",
+ "39":"a x"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"a x"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support refers to an older version of the draft specification, and the spec has undergone significant changes since.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":45.64,
+ "usage_perc_a":20.13,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"screenorientationapi",
+ "chrome_id":"6191285283061760",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/script-async.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/script-async.json
new file mode 100644
index 0000000..f69ac67
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/script-async.json
@@ -0,0 +1,227 @@
+{
+ "title":"async attribute for external scripts",
+ "description":"The boolean async attribute on script elements allows the external JavaScript file to run when it's available, without delaying page load first.",
+ "spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-script-async",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/HTML/Element/script#Attributes",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://ie.microsoft.com/testdrive/Performance/AsyncScripts/Default.html",
+ "title":"Demo"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-async",
+ "title":"has.js test"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"a",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Using script.async = false; to maintain execution order for dynamically-added scripts isn't supported in Safari 5.0",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.61,
+ "usage_perc_a":0.12,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/script-defer.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/script-defer.json
new file mode 100644
index 0000000..ef15e9c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/script-defer.json
@@ -0,0 +1,229 @@
+{
+ "title":"defer attribute for external scripts",
+ "description":"The boolean defer attribute on script elements allows the external JavaScript file to run when the DOM is loaded, without delaying page load first.",
+ "spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-script-defer",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/HTML/Element/script#Attributes",
+ "title":"MDN article"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-defer",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/attributes/defer",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"IE < 10 may interleave execution of scripts, [See the discussion](https://github.com/h5bp/lazyweb-requests/issues/42)."
+ }
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in older IE refers to a buggy implementation (see issue).",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.74,
+ "usage_perc_a":4.96,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/serviceworkers.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/serviceworkers.json
new file mode 100644
index 0000000..41522dd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/serviceworkers.json
@@ -0,0 +1,226 @@
+{
+ "title":"Service Workers",
+ "description":"Method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline.",
+ "spec":"https://slightlyoff.github.io/ServiceWorker/spec/service_worker/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/service-worker/introduction/",
+ "title":"HTML5Rocks article (introduction)"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker_API",
+ "title":"MDN article"
+ },
+ {
+ "url":"https://jakearchibald.github.io/isserviceworkerready/resources.html",
+ "title":"List of various resources"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"u"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"n d #1",
+ "39":"n d #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Details on partial support can be found on [is ServiceWorker Ready?](https://jakearchibald.github.io/isserviceworkerready/)",
+ "notes_by_num":{
+ "1":"Partial support can be enabled in Firefox with the `dom.serviceWorkers.enabled` flag."
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":39.02,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"serviceworker",
+ "chrome_id":"6561526227927040",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/shadowdom.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/shadowdom.json
new file mode 100644
index 0000000..47959dc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/shadowdom.json
@@ -0,0 +1,222 @@
+{
+ "title":"Shadow DOM",
+ "description":"Method of establishing and maintaining functional boundaries between DOM trees and how these trees interact with each other within a document, thus enabling better functional encapsulation within the DOM.",
+ "spec":"http://www.w3.org/TR/shadow-dom/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://html5-demos.appspot.com/static/shadowdom-visualizer/index.html",
+ "title":"Shadow DOM Visualizer"
+ },
+ {
+ "url":"http://www.html5rocks.com/tutorials/webcomponents/shadowdom/",
+ "title":"HTML5Rocks - Shadow DOM 101 article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n d #1",
+ "30":"n d #1",
+ "31":"n d #1",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"n d #1",
+ "39":"n d #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Supported in Firefox behind the `dom.webcomponents.enabled` flag."
+ },
+ "usage_perc_y":49.1,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"web components",
+ "ie_id":"shadowdomunprefixed",
+ "chrome_id":"4507242028072960",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/sharedworkers.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/sharedworkers.json
new file mode 100644
index 0000000..3de4ad6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/sharedworkers.json
@@ -0,0 +1,222 @@
+{
+ "title":"Shared Web Workers",
+ "description":"Method of allowing multiple scripts to communicate with a single web worker.",
+ "spec":"https://html.spec.whatwg.org/multipage/workers.html#shared-workers-introduction",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://www.sitepoint.com/javascript-shared-web-workers-html5/",
+ "title":"Sitepoint article"
+ },
+ {
+ "url":"http://greenido.wordpress.com/2011/11/03/web-workers-part-3-out-of-3-shared-wrokers/",
+ "title":"Blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":51.61,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"webworkers",
+ "keywords":"shared worker",
+ "ie_id":"sharedwebworkers",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/spdy.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/spdy.json
new file mode 100644
index 0000000..0e57743
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/spdy.json
@@ -0,0 +1,224 @@
+{
+ "title":"HTTP/2 protocol / SPDY",
+ "description":"Networking protocol for low-latency transport of content over the web. Originally started out from the SPDY protocol, now standardized as HTTP version 2.",
+ "spec":"http://http2.github.io/http2-spec/index.html",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/HTTP/2",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://dev.chromium.org/spdy/spdy-whitepaper",
+ "title":"SPDY whitepaper"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Partial support in IE11 refers to not working on Windows 7."
+ }
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"a",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"u"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":71.53,
+ "usage_perc_a":8.02,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"http2",
+ "ie_id":"http2",
+ "chrome_id":"5152586365665280",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/speech-synthesis.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/speech-synthesis.json
new file mode 100644
index 0000000..584d98d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/speech-synthesis.json
@@ -0,0 +1,226 @@
+{
+ "title":"Speech Synthesis API",
+ "description":"A web API for controlling a text-to-speech output.",
+ "spec":"https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://updates.html5rocks.com/2014/01/Web-apps-that-talk---Introduction-to-the-Speech-Synthesis-API",
+ "title":"HTML5Rocks article"
+ },
+ {
+ "url":"http://www.sitepoint.com/talking-web-pages-and-the-speech-synthesis-api/",
+ "title":"SitePoint article"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/speech-synthesis-api-demo.html",
+ "title":"Demo"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":53.33,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"web-speech",
+ "keywords":"speech,synthesis,speechSynthesis,TTS,SpeechSynthesisUtterance,",
+ "ie_id":"webspeechapisynthesis",
+ "chrome_id":"4782875580825600",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/spellcheck-attribute.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/spellcheck-attribute.json
new file mode 100644
index 0000000..624c77d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/spellcheck-attribute.json
@@ -0,0 +1,218 @@
+{
+ "title":"Spellcheck attribute",
+ "description":"Attribute for `input`/`textarea` fields to enable/disable the browser's spellchecker.",
+ "spec":"https://html.spec.whatwg.org/multipage/interaction.html#spelling-and-grammar-checking",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/HTML/Controlling_spell_checking_in_HTML_formsControlling_spell_checking_in_HTML_forms",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"a",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "12":"a",
+ "12.1":"a",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"The partial support in mobile browsers results from their OS generally having built-in spell checking instead of using the wavy underline to indicate misspelled words. `spellcheck=\"false\"` does not seem to have any effect in these browsers.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":60.31,
+ "usage_perc_a":31.63,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"spelling",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/sql-storage.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/sql-storage.json
new file mode 100644
index 0000000..e52b66c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/sql-storage.json
@@ -0,0 +1,224 @@
+{
+ "title":"Web SQL Database",
+ "description":"Method of storing data client-side, allows Sqlite database queries for access and manipulation",
+ "spec":"http://www.w3.org/TR/webdatabase/",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://html5doctor.com/introducing-web-sql-databases/",
+ "title":"HTML5 Doctor article"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-sql-db",
+ "title":"has.js test"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Reported to not be supported on the Samsung-based Android 4."
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"The Web SQL Database specification is no longer being maintained and support may be dropped in future versions.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":66.87,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"db-storage,websql",
+ "ie_id":"websqldatabase",
+ "chrome_id":"6330987952734208",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/srcset.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/srcset.json
new file mode 100644
index 0000000..ed5593e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/srcset.json
@@ -0,0 +1,219 @@
+{
+ "title":"Srcset attribute",
+ "description":"Allows authors to define various image resources and \"hints\" that assist a user agent to determine the most appropriate image source to display (e.g. high-resolution displays, small monitors, etc).",
+ "spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://www.webkit.org/blog/2910/improved-support-for-high-resolution-displays-with-the-srcset-image-attribute/",
+ "title":"Improved support for high-resolution displays with the srcset image attribute"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"a #2",
+ "35":"a #2",
+ "36":"a #2",
+ "37":"a #2",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"a #2",
+ "8":"a #2"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"a #2",
+ "22":"a #2",
+ "23":"a #2",
+ "24":"a #2",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"a #2",
+ "8.1":"a #2"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a #2"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Can be enabled in Firefox by setting the about:config preference dom.image.srcset.enabled to true",
+ "2":"Supports the subset of the syntax for resolution switching (using the `x` descriptor), but not the full syntax that can be used with `sizes` (using the `w` descriptor)."
+ },
+ "usage_perc_y":41.66,
+ "usage_perc_a":9.5,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"imgsrcset",
+ "chrome_id":"4644337115725824",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/stream.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/stream.json
new file mode 100644
index 0000000..0c71e64
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/stream.json
@@ -0,0 +1,224 @@
+{
+ "title":"getUserMedia/Stream API",
+ "description":"Method of accessing external device data (such as a webcam video stream). Formerly this was envisioned as the element.",
+ "spec":"http://www.w3.org/TR/mediacapture-streams/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://dev.opera.com/blog/webcam-orientation-preview/",
+ "title":"Technology preview from Opera"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/dom/Navigator/getUserMedia",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Until version 12.16, Opera supported [video context only](http://my.opera.com/community/forums/topic.dml?id=1528992)."
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"y",
+ "12.1":"y",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"y",
+ "12.1":"y",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":61.48,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"camera,device,getUserMedia,media stream,Media Capture API",
+ "ie_id":"mediacaptureandstreams",
+ "chrome_id":"6067380039974912,6605041225957376",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/stricttransportsecurity.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/stricttransportsecurity.json
new file mode 100644
index 0000000..ca0849b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/stricttransportsecurity.json
@@ -0,0 +1,226 @@
+{
+ "title":"Strict Transport Security",
+ "description":"Declare that a website is only accessible over a secure connection (HTTPS).",
+ "spec":"http://tools.ietf.org/html/rfc6797",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://dev.chromium.org/sts",
+ "title":"Chromium article"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security",
+ "title":"MDN article"
+ },
+ {
+ "url":"https://www.owasp.org/index.php/HTTP_Strict_Transport_Security",
+ "title":"OWASP article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"u",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"u"
+ }
+ },
+ "notes":"The HTTP header is 'Strict-Transport-Security'.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":69.81,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"sts,hsts,security,header",
+ "ie_id":"httpstricttransportsecurityhsts",
+ "chrome_id":"4941480133132288",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/style-scoped.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/style-scoped.json
new file mode 100644
index 0000000..f8ac883
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/style-scoped.json
@@ -0,0 +1,227 @@
+{
+ "title":"Scoped CSS",
+ "description":"Allows CSS rules to be scoped to part of the document, based on the position of the style element.",
+ "spec":"https://html.spec.whatwg.org/multipage/semantics.html#attr-style-scoped",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://github.com/PM5544/scoped-polyfill",
+ "title":"Polyfill"
+ },
+ {
+ "url":"http://html5doctor.com/the-scoped-attribute/",
+ "title":"HTML5 Doctor article"
+ },
+ {
+ "url":"http://updates.html5rocks.com/2012/03/A-New-Experimental-Feature-style-scoped",
+ "title":"HTML5Rocks article"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n d #1",
+ "21":"n d #1",
+ "22":"n d #1",
+ "23":"n d #1",
+ "24":"n d #1",
+ "25":"n d #1",
+ "26":"n d #1",
+ "27":"n d #1",
+ "28":"n d #1",
+ "29":"n d #1",
+ "30":"n d #1",
+ "31":"n d #1",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"u",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"
+ },
+ "usage_perc_y":15.51,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"scope",
+ "ie_id":"scopedstyles",
+ "chrome_id":"5374137958662144",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-css.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-css.json
new file mode 100644
index 0000000..6ea2574
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-css.json
@@ -0,0 +1,227 @@
+{
+ "title":"SVG in CSS backgrounds",
+ "description":"Method of using SVG images as CSS backgrounds",
+ "spec":"http://www.w3.org/TR/css3-background/#background-image",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://designfestival.com/a-farewell-to-css3-gradients/",
+ "title":"Tutorial for advanced effects"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Opera messes background repeat when changing zoom level: [known issue in Opera's private bug tracker (CORE-33071)](http://stackoverflow.com/questions/15220910/svg-as-css-background-problems-with-zoom-level-in-opera#comment21458317_15220910)"
+ },
+ {
+ "description":"IE 10 Mobile does not always provide crisp SVG backgrounds, particularly when zooming in."
+ },
+ {
+ "description":"Android 2.x will not display the fallback background-image in addition to not displaying the SVG if it is implemented using multiple background-image properties on the same element. (e.g. PNG background-image fallback + SVG background-image)"
+ }
+ ],
+ "categories":[
+ "CSS3",
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"a",
+ "4":"a",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "12":"a",
+ "12.1":"a",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in older Firefox and Opera Mini/Mobile refers to SVG images being blurry when scaled. Partial support in iOS Safari and older Safari versions refers to failing to support tiling or the background-position property.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":90.2,
+ "usage_perc_a":3.56,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"svg-in-css,svgincss,css-svg",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-filters.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-filters.json
new file mode 100644
index 0000000..9852943
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-filters.json
@@ -0,0 +1,231 @@
+{
+ "title":"SVG filters",
+ "description":"Method of using photoshop-like effects on SVG objects including blurring and color manipulation.",
+ "spec":"http://www.w3.org/TR/SVG/filters.html",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://electricbeach.org/?p=950",
+ "title":"Experiments with filter effects"
+ },
+ {
+ "url":"http://svg-wow.org/blog/category/filters/",
+ "title":"SVG filter demos"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/svg/elements/filter",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Older versions of Chrome and Safari do not support feConvolveMatrix and their lighting implementation is incomplete. "
+ },
+ {
+ "description":"Chrome and Safari do not seem to [support kernelUnitLength](https://bugs.webkit.org/show_bug.cgi?id=84610)"
+ }
+ ],
+ "categories":[
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.93,
+ "usage_perc_a":0.03,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-fonts.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-fonts.json
new file mode 100644
index 0000000..6a0959c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-fonts.json
@@ -0,0 +1,223 @@
+{
+ "title":"SVG fonts",
+ "description":"Method of using fonts defined as SVG shapes. Considered among a number of browser vendors as a deprecated feature with support being removed.",
+ "spec":"http://www.w3.org/TR/SVG/fonts.html",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different",
+ "title":"Blog post"
+ },
+ {
+ "url":"http://opentype.info/blog/2010/04/13/the-ipad-and-svg-fonts-in-mobile-safari/",
+ "title":"Blog post on usage for iPad"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"n #1",
+ "39":"n #1",
+ "40":"n #1",
+ "41":"n #1",
+ "42":"n #1",
+ "43":"n #1",
+ "44":"n #1"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"n #1",
+ "26":"n #1",
+ "27":"n #1",
+ "28":"n #1",
+ "29":"n #1"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n #2"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"n #1"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Chrome 38 and newer support SVG fonts only on Windows Vista and XP.",
+ "2":"Supported in Opera Mini in SVG images only, not in HTML."
+ },
+ "usage_perc_y":25.12,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"fontface",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"5930075908210688",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-fragment.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-fragment.json
new file mode 100644
index 0000000..7435f03
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-fragment.json
@@ -0,0 +1,223 @@
+{
+ "title":"SVG fragment identifiers",
+ "description":"Method of displaying only a part of an SVG image by defining a view ID or view box dimensions as the file's fragment identifier.",
+ "spec":"http://www.w3.org/TR/SVG/linking.html#SVGFragmentIdentifiers",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.broken-links.com/2012/08/14/better-svg-sprites-with-fragment-identifiers/",
+ "title":"Blog post"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"For the ID syntax, Chrome, Opera, and Safari require the ID to be set on a `view` element."
+ },
+ {
+ "description":"Currently does not work for CSS background images in [Chrome](https://code.google.com/p/chromium/issues/detail?id=128055) and [Safari](https://bugs.webkit.org/show_bug.cgi?id=91790)"
+ }
+ ],
+ "categories":[
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"u",
+ "9.5-9.6":"u",
+ "10.0-10.1":"u",
+ "10.5":"u",
+ "10.6":"u",
+ "11":"u",
+ "11.1":"u",
+ "11.5":"u",
+ "11.6":"u",
+ "12":"u",
+ "12.1":"y",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"u",
+ "11.1":"u",
+ "11.5":"u",
+ "12":"u",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":75.65,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"fragments,sprite",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-html.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-html.json
new file mode 100644
index 0000000..7233498
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-html.json
@@ -0,0 +1,226 @@
+{
+ "title":"SVG effects for HTML",
+ "description":"Method of using SVG transforms, filters, etc on HTML elements using either CSS or the foreignObject element",
+ "spec":"http://www.w3.org/TR/SVG11/extend.html#ForeignObjectElement",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/SVG/Tutorial/Other_content_in_SVG",
+ "title":"MDN Tutorial"
+ },
+ {
+ "url":"https://developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content",
+ "title":"MDN Reference page"
+ },
+ {
+ "url":"http://www.w3.org/TR/filter-effects/",
+ "title":"Filter Effects draft"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"a",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"a",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "11.6":"a",
+ "12":"a",
+ "12.1":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "12":"a",
+ "12.1":"a",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support refers to lack of filter support or buggy result from effects. A [CSS Filter Effects](http://www.w3.org/TR/filter-effects/) specification is in the works that would replace this method.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":12.28,
+ "usage_perc_a":71.74,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-html5.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-html5.json
new file mode 100644
index 0000000..b54eb98
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-html5.json
@@ -0,0 +1,225 @@
+{
+ "title":"Inline SVG in HTML5",
+ "description":"Method of using SVG tags directly in HTML documents. Requires HTML5 parser.",
+ "spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#svg-0",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more/",
+ "title":"Mozilla Hacks blog post"
+ },
+ {
+ "url":"http://samples.msdn.microsoft.com/ietestcenter/html5/svghtml_harness.htm?url=SVG_HTML_Elements_001",
+ "title":"Test suite"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Inline SVG in HTML works in Android 4+, but is reported to have bugs when manipulating the elements using JS, e.g. setting className does not work. Using getAttribute('class') and setAttribute('class', 'foobar') works."
+ }
+ ],
+ "categories":[
+ "HTML5",
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":93.45,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-img.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-img.json
new file mode 100644
index 0000000..1af0c67
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-img.json
@@ -0,0 +1,227 @@
+{
+ "title":"SVG in HTML img element",
+ "description":"Method of displaying SVG images in HTML using .",
+ "spec":"https://html.spec.whatwg.org/multipage/embedded-content.html",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://blog.dholbert.org/2010/10/svg-as-image.html",
+ "title":"Blog post with examples"
+ },
+ {
+ "url":"http://www.codedread.com/blog/",
+ "title":"Blog with SVGs an images"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Chrome & Safari may show text using an incorrect font for SVGs with text using (see [WebKit bug 68090](https://bugs.webkit.org/show_bug.cgi?id=68090))"
+ },
+ {
+ "description":"For the IE11 WebView, the SVG won't work if it includes the XML declaration at the beginning."
+ }
+ ],
+ "categories":[
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"a",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":93.76,
+ "usage_perc_a":0.01,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"svg-as-img,svg-in-img",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-smil.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-smil.json
new file mode 100644
index 0000000..197b454
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg-smil.json
@@ -0,0 +1,242 @@
+{
+ "title":"SVG SMIL animation",
+ "description":"Method of using animation elements to animate SVG images",
+ "spec":"http://www.w3.org/TR/SVG/animate.html",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://svg-wow.org/blog/category/animation/",
+ "title":"Examples on SVG WOW"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/SVG/SVG_animation_with_SMIL",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://leunen.me/fakesmile/",
+ "title":"JS library to support SMIL in SVG"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg-smil",
+ "title":"has.js test"
+ },
+ {
+ "url":"https://github.com/madsgraphics/SVGEventListener",
+ "title":"Polyfill for SMIL animate events on SVG"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Animation in SVG is not supported in iOS safari when the SVG is displayed in an img tag."
+ },
+ {
+ "description":"No events are fired at all in WebKit/Blink browsers during animation (onbegin/onrepeat/onend) [see bug](https://bugs.webkit.org/show_bug.cgi?id=63727)"
+ },
+ {
+ "description":"Animation in SVG is not supported in inline SVG on Android browsers prior to version 4.4."
+ }
+ ],
+ "categories":[
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "TP":"p"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"p"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in Safari refers to not working in HTML files.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":78.26,
+ "usage_perc_a":0.68,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"svgsmilanimation",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg.json
new file mode 100644
index 0000000..b55b5bb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/svg.json
@@ -0,0 +1,244 @@
+{
+ "title":"SVG (basic support)",
+ "description":"Method of displaying basic Vector Graphics features using the embed or object elements. Refers to the SVG 1.1 spec.",
+ "spec":"http://www.w3.org/TR/SVG/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/Scalable_Vector_Graphics",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://www.alistapart.com/articles/using-svg-for-flexible-scalable-and-fun-backgrounds-part-i",
+ "title":"A List Apart article"
+ },
+ {
+ "url":"http://svg-wow.org/",
+ "title":"SVG showcase site"
+ },
+ {
+ "url":"http://code.google.com/p/svgweb/",
+ "title":"SVG Web: Flash-based polyfill"
+ },
+ {
+ "url":"http://svg-edit.googlecode.com",
+ "title":"Web-based SVG editor"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg",
+ "title":"has.js test"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Chrome 26 doesn't support the attribute preserveAspectRatio=none."
+ },
+ {
+ "description":"SVG graphics look pixelated when zooming in or using scaled up images in Opera Mini & Opera Mobile 12.1-."
+ }
+ ],
+ "categories":[
+ "SVG"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y #2",
+ "10":"y #2",
+ "11":"y #2",
+ "TP":"y #2"
+ },
+ "firefox":{
+ "2":"a",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"a #1",
+ "4":"a #1",
+ "4.1":"a #1",
+ "4.2-4.3":"a #1",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y #2",
+ "11":"y #2"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support in Android 3 & 4 refers to not supporting masking.",
+ "2":"IE9-11 desktop & mobile don't properly scale SVG files. [Adding height, width, viewBox, and CSS rules](http://codepen.io/tomByrer/pen/qEBbzw?editors=110) seem to be the best workaround."
+ },
+ "usage_perc_y":91.48,
+ "usage_perc_a":2.44,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/template.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/template.json
new file mode 100644
index 0000000..9c42a54
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/template.json
@@ -0,0 +1,223 @@
+{
+ "title":"HTML templates",
+ "description":"Method of declaring a portion of reusable markup that is parsed but not rendered until cloned.",
+ "spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-template-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/webcomponents/template/",
+ "title":"HTML5Rocks - HTML's New template Tag"
+ },
+ {
+ "url":"http://polymer-project.org",
+ "title":"Polymer project (polyfill & web components framework)"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":68.05,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"web components, template",
+ "ie_id":"templateelement",
+ "chrome_id":"5207287069147136",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/testfeat.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/testfeat.json
new file mode 100644
index 0000000..622c492
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/testfeat.json
@@ -0,0 +1,218 @@
+{
+ "title":"Test feature - updated",
+ "description":"",
+ "spec":"http://example.com",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://example.com",
+ "title":"test link"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"u",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"u",
+ "5":"u",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"u",
+ "12":"u",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"u",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"u",
+ "7":"u",
+ "7.1":"u",
+ "8":"u"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"u",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"u",
+ "8":"u",
+ "8.1":"u"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"u",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"u",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"abcd",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":false
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-decoration.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-decoration.json
new file mode 100644
index 0000000..2767dc8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-decoration.json
@@ -0,0 +1,227 @@
+{
+ "title":"text-decoration styling",
+ "description":"Method of defining the type, style and color of lines in the text-decoration property. These can be defined as shorthand (e.g. `text-decoration: line-through dashed blue`) or as single properties (e.g. `text-decoration-color: blue`)",
+ "spec":"http://www.w3.org/TR/css-text-decor-3/#line-decoration",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-style",
+ "title":"MDN Documentation for text-decoration-style"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color",
+ "title":"MDN Documentation for text-decoration-color"
+ },
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-line",
+ "title":"MDN Documentation for text-decoration-line"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n x d #1",
+ "27":"n x d #1",
+ "28":"n x d #1",
+ "29":"n x d #1",
+ "30":"n x d #1",
+ "31":"n x d #1",
+ "32":"n x d #1",
+ "33":"n x d #1",
+ "34":"n x d #1",
+ "35":"n x d #1",
+ "36":"n x d #1",
+ "37":"n x d #1",
+ "38":"n x d #1",
+ "39":"n x d #1",
+ "40":"n x d #1",
+ "41":"n x d #1",
+ "42":"n x d #1",
+ "43":"n x d #1",
+ "44":"n x d #1"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"a x #2",
+ "8":"a x #2"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"a x #2",
+ "8.1":"a x #2"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"All browsers support the CSS2 version of `text-decoration`, which matches only the `text-decoration-line` values (`underline`, etc.)",
+ "notes_by_num":{
+ "1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags",
+ "2":"Partial support in Safari refers to not supporting the text-decoration-style property."
+ },
+ "usage_perc_y":12.14,
+ "usage_perc_a":7.36,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"text-decoration-line,text-decoration-style,text-decoration-color",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-emphasis.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-emphasis.json
new file mode 100644
index 0000000..e875ee0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-emphasis.json
@@ -0,0 +1,220 @@
+{
+ "title":"text-emphasis styling",
+ "description":"Method of using small symbols next to each glyph to emphasize a run of text, commonly used in East Asian languages. The `text-emphasis` shorthand, and its `text-emphasis-style` and `text-emphasis-color` longhands, can be used to apply marks to the text. The `text-emphasis-position` property, which inherits separately, allows setting the emphasis marks' position with respect to the text.",
+ "spec":"http://www.w3.org/TR/css-text-decor-3/#text-emphasis",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://github.com/zmmbreeze/jquery.emphasis/",
+ "title":"A javascript fallback for CSS3 emphasis mark."
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Chrome on Android occasionally has issues rendering emphasis glyphs correctly."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"a x #1",
+ "26":"a x #1",
+ "27":"a x #1",
+ "28":"a x #1",
+ "29":"a x #1",
+ "30":"a x #1",
+ "31":"a x #1",
+ "32":"a x #1",
+ "33":"a x #1",
+ "34":"a x #1",
+ "35":"a x #1",
+ "36":"a x #1",
+ "37":"a x #1",
+ "38":"a x #1",
+ "39":"a x #1",
+ "40":"a x #1",
+ "41":"a x #1",
+ "42":"a x #1",
+ "43":"a x #1",
+ "44":"a x #1"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"a x #1",
+ "7":"a x #1",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"a x #1",
+ "16":"a x #1",
+ "17":"a x #1",
+ "18":"a x #1",
+ "19":"a x #1",
+ "20":"a x #1",
+ "21":"a x #1",
+ "22":"a x #1",
+ "23":"a x #1",
+ "24":"a x #1",
+ "25":"a x #1",
+ "26":"a x #1",
+ "27":"a x #1",
+ "28":"a x #1",
+ "29":"a x #1"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"a x #1",
+ "4.4.3-4.4.4":"a x #1",
+ "37":"a x #1"
+ },
+ "bb":{
+ "7":"n",
+ "10":"a x #1"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a x #1"
+ },
+ "and_chr":{
+ "41":"a x #1"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"a x #1"
+ }
+ },
+ "notes":"Some old webkit browsers (like Chrome 24) support `-webkit-text-emphasis`, but does not support CJK languages and is therefore considered unsupported.",
+ "notes_by_num":{
+ "1":"Partial support refers to incorrect support for `-webkit-text-emphasis-position`. These browsers support `over` and `under` as values, but not the added `left` and `right` values required by the spec."
+ },
+ "usage_perc_y":8.96,
+ "usage_perc_a":53.56,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"text-emphasis,text-emphasis-position,text-emphasis-style,text-emphasis-color",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-overflow.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-overflow.json
new file mode 100644
index 0000000..d7746e2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-overflow.json
@@ -0,0 +1,242 @@
+{
+ "title":"CSS3 Text-overflow",
+ "description":"Append ellipsis when text overflows its containing element",
+ "spec":"http://www.w3.org/TR/css3-ui/#text-overflow0",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://github.com/rmorse/AutoEllipsis",
+ "title":"jQuery polyfill for Firefox"
+ },
+ {
+ "url":"https://developer.mozilla.org/En/CSS/Text-overflow",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.css3files.com/text/",
+ "title":"Information page"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-text-overflow",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/text-overflow",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Does not work on `select` elements work in Chrome and IE, only Firefox."
+ },
+ {
+ "description":"Some Samsung-based browsers, have a bug with overflowing text when ellipsis is set and if `text-rendering` is not `auto`."
+ },
+ {
+ "description":"Does not work in IE8 and IE9 on ` `"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y x",
+ "9.5-9.6":"y x",
+ "10.0-10.1":"y x",
+ "10.5":"y x",
+ "10.6":"y x",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y x",
+ "11":"y x",
+ "11.1":"y x",
+ "11.5":"y x",
+ "12":"y x",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":96.97,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"textoverflow,ellipsis",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-size-adjust.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-size-adjust.json
new file mode 100644
index 0000000..ee1ad30
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-size-adjust.json
@@ -0,0 +1,223 @@
+{
+ "title":"CSS text-size-adjust",
+ "description":"On mobile devices, the text-size-adjust CSS property allows Web authors to control if and how the text-inflating algorithm is applied to the textual content of the element it is applied to.",
+ "spec":"http://dev.w3.org/csswg/css-size-adjust/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-size-adjust",
+ "title":"MDN Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"There is a bug in Webkit-based desktop browsers. If -webkit-text-size-adjust is explicitely set to none, Webkit-based desktop browsers, like Chrome or Safari, instead of ignoring the property, will prevent the user to zoom in or out the Web page."
+ },
+ {
+ "description":"If the viewport in IE Phone is set using element, the value of the CSS text-size-adjust property is ignored."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n",
+ "40":"n",
+ "41":"n",
+ "42":"n",
+ "43":"n",
+ "44":"n"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"n"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"y x",
+ "11":"y x"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":11.89,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-stroke.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-stroke.json
new file mode 100644
index 0000000..7ae63f2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/text-stroke.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS text-stroke",
+ "description":"Method of declaring the outline (stroke) width and color for text.",
+ "spec":"http://developer.apple.com/library/safari/documentation/appleapplications/reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-_webkit_text_stroke",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://css-tricks.com/7405-adding-stroke-to-web-text/",
+ "title":"Information & workarounds"
+ },
+ {
+ "url":"http://www.westciv.com/tools/textStroke/",
+ "title":"Live editor"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"u",
+ "38":"u",
+ "39":"u"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"y x",
+ "3.2":"y x",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"a x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y x",
+ "2.2":"y x",
+ "2.3":"y x",
+ "3":"n",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Does not yet appear in any W3C specification. Was briefly included in a spec as the \"text-outline\" property, but this was removed.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":62.7,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"textstroke,stroke-color,stroke-width,fill-color",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/touch.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/touch.json
new file mode 100644
index 0000000..b339f0e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/touch.json
@@ -0,0 +1,241 @@
+{
+ "title":"Touch events",
+ "description":"Method of registering when, where and how the interface is touched, for devices with a touch screen. These DOM events are similar to mousedown, mousemove, etc.",
+ "spec":"http://www.w3.org/TR/touch-events/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.quirksmode.org/mobile/tableTouch.html",
+ "title":"Detailed support tables"
+ },
+ {
+ "url":"http://www.quirksmode.org/m/tests/drag2.html",
+ "title":"Multi-touch demo"
+ },
+ {
+ "url":"http://schepers.cc/getintouch",
+ "title":"Information on the spec development"
+ },
+ {
+ "url":"http://msdn.microsoft.com/en-us/library/ie/hh673557(v=vs.85).aspx",
+ "title":"Internet Explorer's gesture and touch implementation."
+ },
+ {
+ "url":"http://github.com/CamHenlin/TouchPolyfill",
+ "title":"Touch polyfill for supporting touch events on Internet Explorer"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Beware, android 2.3 and below do not detect multiple touches."
+ },
+ {
+ "description":"Firefox 4 & 5 support a [non-standard](https://hacks.mozilla.org/2010/08/firefox4-beta3/) implementation to achieve the same."
+ }
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"p",
+ "11":"p",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"n d #1",
+ "26":"n d #1",
+ "27":"n d #1",
+ "28":"n d #1",
+ "29":"n d #1",
+ "30":"n d #1",
+ "31":"n d #1",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"n d #1",
+ "39":"n d #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"a #2"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Internet Explorer implements Pointer Events specification which supports more input devices than Touch Events one.\r\n\r\nThere is a library on GitHub that is working toward bringing W3C touch events to IE 10 and 11: https://github.com/CamHenlin/TouchPolyfill \r\n\r\nRemoved support in Firefox refers to desktop Firefox only.",
+ "notes_by_num":{
+ "1":"Can be enabled in Firefox using the dom.w3c_touch_events.enabled flag (disabled by default for site compatibility reasons)",
+ "2":"Supported on IE11 Mobile for phones with \"[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""
+ },
+ "usage_perc_y":63.38,
+ "usage_perc_a":0.88,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"touchstart,touchend,touchmove,touchenter,touchleave,touchcancel",
+ "ie_id":"touchevents",
+ "chrome_id":"6156165603917824",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/transforms2d.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/transforms2d.json
new file mode 100644
index 0000000..dc30922
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/transforms2d.json
@@ -0,0 +1,250 @@
+{
+ "title":"CSS3 Transforms",
+ "description":"Method of transforming an element including rotating, scaling, etc.",
+ "spec":"http://www.w3.org/TR/css3-2d-transforms/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://www.westciv.com/tools/transforms/",
+ "title":"Live editor"
+ },
+ {
+ "url":"https://developer.mozilla.org/en/CSS/-moz-transform",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.webresourcesdepot.com/cross-browser-css-transforms-csssandpaper/",
+ "title":"Workaround script for IE"
+ },
+ {
+ "url":"http://www.css3files.com/transform/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://www.useragentman.com/IETransformsTranslator/",
+ "title":"Converter for IE"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/transforms/transform",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Scaling transforms in Android 2.3 fails to scale element background images."
+ },
+ {
+ "description":"IE 10 and below does not support CSS transforms on SVG elements (though SVG transform attributes do work)."
+ },
+ {
+ "description":"Transforms may break position:fixed styles of contained elements"
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"y x",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y x",
+ "3.6":"y x",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y x",
+ "3.2":"y x",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y x",
+ "10.6":"y x",
+ "11":"y x",
+ "11.1":"y x",
+ "11.5":"y x",
+ "11.6":"y x",
+ "12":"y x",
+ "12.1":"y",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y x",
+ "2.2":"y x",
+ "2.3":"y x",
+ "3":"y x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"The scale transform can be emulated in IE < 9 using Microsoft's \"zoom\" extension, others are (not easily) possible using the MS Matrix filter",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":91.13,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"transformation,translate,rotation,rotate,scale,css-transforms",
+ "ie_id":"transforms",
+ "chrome_id":"6437640580628480",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/transforms3d.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/transforms3d.json
new file mode 100644
index 0000000..05369cd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/transforms3d.json
@@ -0,0 +1,243 @@
+{
+ "title":"CSS3 3D Transforms",
+ "description":"Method of transforming an element in the third dimension using the `transform` property. Includes support for the `perspective` property to set the perspective in z-space and the `backface-visibility` property to toggle display of the reverse side of a 3D-transformed element.",
+ "spec":"http://www.w3.org/TR/css3-3d-transforms/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://css3.bradshawenterprises.com/flip/",
+ "title":"Multi-browser demo"
+ },
+ {
+ "url":"http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/",
+ "title":"Mozilla hacks article"
+ },
+ {
+ "url":"http://thewebrocks.com/demos/3D-css-tester/",
+ "title":"3D CSS Tester"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/transforms/transform",
+ "title":"WebPlatform Docs"
+ },
+ {
+ "url":"http://desandro.github.io/3dtransforms/",
+ "title":"Intro to CSS 3D transforms"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Some configurations of Linux and older Windows machines (those without WebGL support) have trouble with 3D transforms and will treat them as if `perspective` was set as `none`."
+ },
+ {
+ "description":"Firefox on Windows [incorrectly renders plugin content within no-op 3D transforms](https://bugzilla.mozilla.org/show_bug.cgi?id=1048279)."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a",
+ "11":"a",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"Partial support in IE refers to not supporting [the transform-style: preserve-3d property](http://msdn.microsoft.com/en-us/library/ie/hh673529%28v=vs.85%29.aspx#the_ms_transform_style_property). This prevents nesting 3D transformed elements.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":78.28,
+ "usage_perc_a":10.16,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"css 3d,3dtransforms,translate3d,backface visibility,perspective",
+ "ie_id":"transforms,csstransformspreserve3d",
+ "chrome_id":"6437640580628480",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ttf.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ttf.json
new file mode 100644
index 0000000..7e3daf8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/ttf.json
@@ -0,0 +1,218 @@
+{
+ "title":"TTF/OTF - TrueType and OpenType font support",
+ "description":"Support for the TrueType (.ttf)and OpenType (.otf) outline font formats in @font-face. ",
+ "spec":"http://developer.apple.com/fonts/TTRefMan/index.html",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer",
+ "title":"What is the status of TTF support in Internet Explorer?"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"u",
+ "11":"u"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in IE9 refers to the fonts only working [when set to be \"installable\"](http://blogs.msdn.com/b/ie/archive/2010/07/15/the-css-corner-better-web-typography-for-better-design.aspx).",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":79.17,
+ "usage_perc_a":11.28,
+ "ucprefix":false,
+ "parent":"fontface",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/typedarrays.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/typedarrays.json
new file mode 100644
index 0000000..cf24d9a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/typedarrays.json
@@ -0,0 +1,226 @@
+{
+ "title":"Typed Arrays",
+ "description":"JavaScript typed arrays provide a mechanism for accessing raw binary data much more efficiently.\r\n",
+ "spec":"http://www.khronos.org/registry/typedarray/specs/latest/",
+ "status":"other",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/javascript_typed_arrays",
+ "title":"MDN article"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox 14 and under do not have DataView yet."
+ },
+ {
+ "description":"In versions before Safari 6, Typed Arrays are much slower than normal arrays."
+ },
+ {
+ "description":"Safari 5.1 does not support FLoat64Array"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"a #1",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"a #2",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"a #2",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a #1",
+ "11":"a #1"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"IE10 (and IE 10&11 mobile) does not support `Uint8ClampedArray`"
+ },
+ "usage_perc_y":86.21,
+ "usage_perc_a":2.51,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"float64array,dataview,uint8array",
+ "ie_id":"typedarrays",
+ "chrome_id":"5135818813341696",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/use-strict.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/use-strict.json
new file mode 100644
index 0000000..0d266d4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/use-strict.json
@@ -0,0 +1,222 @@
+{
+ "title":"ECMAScript 5 Strict Mode",
+ "description":"Method of placing code in a \"strict\" operating context.",
+ "spec":"http://ecma-international.org/ecma-262/5.1/#sec-14.1",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/",
+ "title":"Information page"
+ },
+ {
+ "url":"http://javascriptweblog.wordpress.com/2011/05/03/javascript-strict-mode/",
+ "title":"Article with test suite"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"a",
+ "5.1":"a",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in older Safari refers to strict mode still accepting a lot of JS that should be considered invalid.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.27,
+ "usage_perc_a":0.49,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/user-select-none.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/user-select-none.json
new file mode 100644
index 0000000..aba42d3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/user-select-none.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS user-select: none",
+ "description":"Method of preventing text/element selection using CSS. ",
+ "spec":"https://developer.mozilla.org/en-US/docs/CSS/user-select",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/CSS/user-select",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://css-tricks.com/almanac/properties/u/user-select/",
+ "title":"CSS Tricks article"
+ },
+ {
+ "url":"http://msdn.microsoft.com/en-us/library/ie/hh781492(v=vs.85).aspx",
+ "title":"MSDN Documentation"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y x",
+ "11":"y x",
+ "TP":"y x"
+ },
+ "firefox":{
+ "2":"y x",
+ "3":"y x",
+ "3.5":"y x",
+ "3.6":"y x",
+ "4":"y x",
+ "5":"y x",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x"
+ },
+ "chrome":{
+ "4":"u",
+ "5":"u",
+ "6":"y x",
+ "7":"y x",
+ "8":"y x",
+ "9":"y x",
+ "10":"y x",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x",
+ "30":"y x",
+ "31":"y x",
+ "32":"y x",
+ "33":"y x",
+ "34":"y x",
+ "35":"y x",
+ "36":"y x",
+ "37":"y x",
+ "38":"y x",
+ "39":"y x",
+ "40":"y x",
+ "41":"y x",
+ "42":"y x",
+ "43":"y x",
+ "44":"y x"
+ },
+ "safari":{
+ "3.1":"y x",
+ "3.2":"y x",
+ "4":"y x",
+ "5":"y x",
+ "5.1":"y x",
+ "6":"y x",
+ "6.1":"y x",
+ "7":"y x",
+ "7.1":"y x",
+ "8":"y x"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y x",
+ "16":"y x",
+ "17":"y x",
+ "18":"y x",
+ "19":"y x",
+ "20":"y x",
+ "21":"y x",
+ "22":"y x",
+ "23":"y x",
+ "24":"y x",
+ "25":"y x",
+ "26":"y x",
+ "27":"y x",
+ "28":"y x",
+ "29":"y x"
+ },
+ "ios_saf":{
+ "3.2":"y x",
+ "4.0-4.1":"y x",
+ "4.2-4.3":"y x",
+ "5.0-5.1":"y x",
+ "6.0-6.1":"y x",
+ "7.0-7.1":"y x",
+ "8":"y x",
+ "8.1":"y x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y x",
+ "2.2":"y x",
+ "2.3":"y x",
+ "3":"y x",
+ "4":"y x",
+ "4.1":"y x",
+ "4.2-4.3":"y x",
+ "4.4":"y x",
+ "4.4.3-4.4.4":"y x",
+ "37":"y x"
+ },
+ "bb":{
+ "7":"y x",
+ "10":"y x"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y x"
+ },
+ "and_chr":{
+ "41":"y x"
+ },
+ "and_ff":{
+ "36":"y x"
+ },
+ "ie_mob":{
+ "10":"y x",
+ "11":"y x"
+ },
+ "and_uc":{
+ "9.9":"y x"
+ }
+ },
+ "notes":"Currently the user-select property does not appear in any W3C specification. Support information here is only for \"none\" value, not others.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":89.01,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/user-timing.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/user-timing.json
new file mode 100644
index 0000000..9b9ece4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/user-timing.json
@@ -0,0 +1,234 @@
+{
+ "title":"User Timing API",
+ "description":"Method to help web developers measure the performance of their applications by giving them access to high precision timestamps.",
+ "spec":"http://www.w3.org/TR/user-timing/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.sitepoint.com/discovering-user-timing-api/",
+ "title":"SitePoint article"
+ },
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/webperformance/usertiming/",
+ "title":"HTML5Rocks article"
+ },
+ {
+ "url":"https://gist.github.com/pmeenan/5902672",
+ "title":"Polyfill"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/user-timing-api-demo.html",
+ "title":"Demo"
+ },
+ {
+ "url":"https://github.com/nicjansma/usertiming.js",
+ "title":"UserTiming.js polyfill"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":59.26,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"performance,testing,mark,measure",
+ "ie_id":"usertimingapi",
+ "chrome_id":"5066549580791808",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/vibration.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/vibration.json
new file mode 100644
index 0000000..ef16d45
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/vibration.json
@@ -0,0 +1,234 @@
+{
+ "title":"Vibration API",
+ "description":"Method to access the vibration mechanism of the hosting device.",
+ "spec":"http://www.w3.org/TR/vibration/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/Web/Guide/API/Vibration",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://davidwalsh.name/vibration-api",
+ "title":"Vibration API sample code & demo"
+ },
+ {
+ "url":"http://code.tutsplus.com/tutorials/html5-vibration-api--mobile-22585",
+ "title":"Tuts+ article"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/vibration-api-demo.html",
+ "title":"Demo"
+ },
+ {
+ "url":"http://www.illyism.com/journal/vibration-api",
+ "title":"Article and Usage Examples"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"y x",
+ "12":"y x",
+ "13":"y x",
+ "14":"y x",
+ "15":"y x",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":64.68,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"vibration,mobile,device",
+ "ie_id":"vibrationapi",
+ "chrome_id":"5698768766763008",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/video.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/video.json
new file mode 100644
index 0000000..f8c6c2e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/video.json
@@ -0,0 +1,238 @@
+{
+ "title":"Video element",
+ "description":"Method of playing videos on webpages (without requiring a plug-in).",
+ "spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/",
+ "title":"Detailed article on video/audio elements"
+ },
+ {
+ "url":"http://webmproject.org",
+ "title":"WebM format information"
+ },
+ {
+ "url":"http://camendesign.co.uk/code/video_for_everybody",
+ "title":"Video for Everybody"
+ },
+ {
+ "url":"http://diveintohtml5.info/video.html",
+ "title":"Video on the Web - includes info on Android support"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/html/elements/video",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "HTML5"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Different browsers have support for different video formats, see sub-features for details. \r\n\r\nThe Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":91.12,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/viewport-units.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/viewport-units.json
new file mode 100644
index 0000000..b3558d7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/viewport-units.json
@@ -0,0 +1,247 @@
+{
+ "title":"Viewport units: vw, vh, vmin, vmax",
+ "description":"Length units representing 1% of the viewport size for viewport width (vw), height (vh), the smaller of the two (vmin), or the larger of the two (vmax).",
+ "spec":"http://www.w3.org/TR/css3-values/#viewport-relative-lengths",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://css-tricks.com/viewport-sized-typography/",
+ "title":"Blog post"
+ },
+ {
+ "url":"https://github.com/saabi/vminpoly",
+ "title":"Polyfill"
+ },
+ {
+ "url":"https://github.com/rodneyrehm/viewport-units-buggyfill",
+ "title":"Buggyfill - Polyfill that fixes buggy support"
+ },
+ {
+ "url":"http://blog.rodneyrehm.de/archives/34-iOS7-Mobile-Safari-And-Viewport-Units.html",
+ "title":"Back-Forward issue blog post"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Chrome does not support viewport units for border widths, column gaps, transform values, box shadows or in calc() until version 34."
+ },
+ {
+ "description":"Safari & iOS Safari (both 6 and 7) does not support viewport units for border widths, column gaps, transform values, box shadows or in calc()."
+ },
+ {
+ "description":"iOS 7 Safari sets viewport unit values to 0 if the page has been left and is returned to after 60 seconds."
+ },
+ {
+ "description":"Internet Explorer 9 in print-mode interprets vh as pages. 30vh = 30 pages"
+ },
+ {
+ "description":"iOS 7 Safari recalculates widths set in vh as vw, and heights set in vw as vh, when orientation changes."
+ },
+ {
+ "description":"Chrome does not print elements defined with vw or vh units."
+ }
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"a",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a #1",
+ "11":"a #1"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support in IE9 refers to supporting \"vm\" instead of \"vmin\".\r\n\r\nPartial support in iOS7 is due to buggy behavior of the \"vh\" unit (see [workaround](https://gist.github.com/pburtchaell/e702f441ba9b3f76f587)).\r\n\r\nAll other partial support refers to not supporting the \"vmax\" unit. ",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":68.78,
+ "usage_perc_a":14.06,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"vm,viewport-percentage",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/wai-aria.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/wai-aria.json
new file mode 100644
index 0000000..f60bc2e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/wai-aria.json
@@ -0,0 +1,234 @@
+{
+ "title":"WAI-ARIA Accessibility features",
+ "description":"Method of providing ways for people with disabilities to use dynamic web content and web applications.",
+ "spec":"http://www.w3.org/TR/wai-aria/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://www.w3.org/WAI/intro/aria",
+ "title":"Information page"
+ },
+ {
+ "url":"http://www.paciellogroup.com/blog/2011/10/browser-assistive-technology-tests-redux/",
+ "title":"Links to various test results"
+ },
+ {
+ "url":"http://en.wikipedia.org/wiki/WAI-ARIA",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://www.alistapart.com/articles/the-accessibility-of-wai-aria/",
+ "title":"ALA Article"
+ },
+ {
+ "url":"http://zufelt.ca/blog/are-you-confused-html5-and-wai-aria-yet",
+ "title":"HTML5/WAI-ARIA information"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"a",
+ "10.0-10.1":"a",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "11.6":"a",
+ "12":"a",
+ "12.1":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "12":"a",
+ "12.1":"a",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":27.2,
+ "usage_perc_a":63.25,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"wai,aria",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/web-animation.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/web-animation.json
new file mode 100644
index 0000000..a77683b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/web-animation.json
@@ -0,0 +1,229 @@
+{
+ "title":"Web Animations API",
+ "description":"Lets you create animations that are run in the browser and as well as inspect and manipulate animations created through declarative means like CSS.",
+ "spec":"http://w3c.github.io/web-animations/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"http://updates.html5rocks.com/2014/05/Web-Animations---element-animate-is-now-in-Chrome-36",
+ "title":"HTML5 Rocks"
+ },
+ {
+ "url":"http://updates.html5rocks.com/2013/12/New-Web-Animations-engine-in-Blink-drives-CSS-Animations-Transitions",
+ "title":"HTML5 Rocks"
+ },
+ {
+ "url":"https://birtles.github.io/areweanimatedyet/",
+ "title":"Current Firefox status"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"a d #3",
+ "34":"a d #3",
+ "35":"a d #3",
+ "36":"a d #3",
+ "37":"a d #3",
+ "38":"a d #3",
+ "39":"a d #3"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"a #1",
+ "37":"a #1",
+ "38":"a #1",
+ "39":"a #2",
+ "40":"a #2",
+ "41":"a #2",
+ "42":"a #2",
+ "43":"a #2",
+ "44":"a #2"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"a #1",
+ "24":"a #1",
+ "25":"a #1",
+ "26":"a #2",
+ "27":"a #2",
+ "28":"a #2",
+ "29":"a #2"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"a #1"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a #1"
+ },
+ "and_chr":{
+ "41":"a #1"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support refers to basic support of `element.animate()`",
+ "2":"Partial support refers to basic support of `element.animate()` and [playback control of AnimationPlayer](https://www.chromestatus.com/features/5633748733263872)",
+ "3":"Partial support in Firefox is detailed in [Are we animated yet?](https://birtles.github.io/areweanimatedyet/)"
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":53.34,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"animate,play,pause,reverse,finish,currentTime,startTime,playbackRate,playState",
+ "ie_id":"webanimationsjavascriptapi",
+ "chrome_id":"4854343836631040,5633748733263872",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/web-speech.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/web-speech.json
new file mode 100644
index 0000000..e951fc8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/web-speech.json
@@ -0,0 +1,230 @@
+{
+ "title":"Web Speech API",
+ "description":"Method to provide speech input and text-to-speech output features in a web browser.",
+ "spec":"https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API",
+ "title":"HTML5Rocks article"
+ },
+ {
+ "url":"http://www.sitepoint.com/introducing-web-speech-api/",
+ "title":"SitePoint article"
+ },
+ {
+ "url":"http://aurelio.audero.it/demo/web-speech-api-demo.html",
+ "title":"Demo"
+ },
+ {
+ "url":"http://zenorocha.github.io/voice-elements/",
+ "title":"Advanced demo and resource"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"n",
+ "37":"n",
+ "38":"n",
+ "39":"n"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"a x",
+ "26":"a x",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x",
+ "30":"a x",
+ "31":"a x",
+ "32":"a x",
+ "33":"a x",
+ "34":"a x",
+ "35":"a x",
+ "36":"a x",
+ "37":"a x",
+ "38":"a x",
+ "39":"a x",
+ "40":"a x",
+ "41":"a x",
+ "42":"a x",
+ "43":"a x",
+ "44":"a x"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"a x",
+ "7":"a x",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"a x",
+ "28":"a x",
+ "29":"a x"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"a x",
+ "8":"a x",
+ "8.1":"a x"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"n"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"n"
+ },
+ "and_chr":{
+ "41":"a x"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"Partial support in Chrome refers to some attributes missing. Partial support in Safari refers to only Speech Synthesis supported.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":54.81,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"speech,recognition,ASR",
+ "ie_id":"webspeechapiinput",
+ "chrome_id":"5908775487668224",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webgl.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webgl.json
new file mode 100644
index 0000000..e3ec468
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webgl.json
@@ -0,0 +1,236 @@
+{
+ "title":"WebGL - 3D Canvas graphics",
+ "description":"Method of generating dynamic 3D graphics using JavaScript, accelerated through hardware",
+ "spec":"https://www.khronos.org/registry/webgl/specs/1.0/",
+ "status":"other",
+ "links":[
+ {
+ "url":"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation",
+ "title":"Instructions on enabling WebGL"
+ },
+ {
+ "url":"http://www.khronos.org/webgl/wiki/Tutorial",
+ "title":"Tutorial"
+ },
+ {
+ "url":"http://hacks.mozilla.org/2009/12/webgl-draft-released-today/",
+ "title":"Firefox blog post"
+ },
+ {
+ "url":"http://webkit.org/blog/603/webgl-now-available-in-webkit-nightlies/",
+ "title":"Webkit blog post"
+ },
+ {
+ "url":"https://github.com/iewebgl/iewebgl",
+ "title":"Polyfill for IE"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Older versions of IE11 have only [partial support of the spec](http://connect.microsoft.com/IE/feedback/details/795172/ie11-fails-more-than-half-tests-in-official-webgl-conformance-test-suite), though it's much better with the latest update."
+ }
+ ],
+ "categories":[
+ "Canvas"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"a",
+ "12.1":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"a"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"a",
+ "12.1":"a",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Support listed as \"partial\" refers to the fact that not all users with these browsers have WebGL access. This is due to the additional requirement for users to have [up to date video drivers](http://www.khronos.org/webgl/wiki/BlacklistsAndWhitelists). This problem was [solved in Chrome on Windows](http://blog.chromium.org/2012/02/gpu-accelerating-2d-canvas-and-enabling.html) as of version 18.\r\n\r\nNote that WebGL is part of the [Khronos Group](http://www.khronos.org/webgl/), not the W3C.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":52.08,
+ "usage_perc_a":27.02,
+ "ucprefix":false,
+ "parent":"canvas",
+ "keywords":"web gl",
+ "ie_id":"webglcanvas3d,webglinstancingextension",
+ "chrome_id":"6049512976023552",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webm.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webm.json
new file mode 100644
index 0000000..1b00ddc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webm.json
@@ -0,0 +1,234 @@
+{
+ "title":"WebM video format",
+ "description":"Multimedia format designed to provide a royalty-free, high-quality open video compression format for use with HTML5 video. WebM supports the video codec VP8 and VP9.",
+ "spec":"http://www.webmproject.org/",
+ "status":"other",
+ "links":[
+ {
+ "url":"https://tools.google.com/dlpage/webmmf",
+ "title":"Codec for IE9 support"
+ },
+ {
+ "url":"http://www.broken-links.com/2010/09/01/playing-webm-in-safari-with-plugins/",
+ "title":"Info on supporting WebM in Safari"
+ },
+ {
+ "url":"http://webmproject.org",
+ "title":"Official website"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video-webm",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://perian.org/",
+ "title":"Perian :Mac OSX Webm Codec install"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "TP":"p"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"p",
+ "6":"p",
+ "6.1":"p",
+ "7":"p",
+ "7.1":"p",
+ "8":"p"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "11.6":"a",
+ "12":"a",
+ "12.1":"a",
+ "15":"a",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"a",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"p",
+ "11":"p"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Will work in IE9+ and Safari/MacOSX provided the user has the WebM codecs installed. Partial support indicates that at least one codec is supported but not all.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":60.45,
+ "usage_perc_a":8.06,
+ "ucprefix":false,
+ "parent":"video",
+ "keywords":"matroska",
+ "ie_id":"webmvideo",
+ "chrome_id":"6362186595172352",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webp.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webp.json
new file mode 100644
index 0000000..594d008
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webp.json
@@ -0,0 +1,234 @@
+{
+ "title":"WebP image format",
+ "description":"Image format that supports lossy and lossless compression, as well as animation and alpha transparency.",
+ "spec":"https://developers.google.com/speed/webp/",
+ "status":"other",
+ "links":[
+ {
+ "url":"https://developers.google.com/speed/webp/",
+ "title":"Official website"
+ },
+ {
+ "url":"http://antimatter15.github.io/weppy/demo.html",
+ "title":"Polyfill for browsers with WebM support"
+ },
+ {
+ "url":"http://libwebpjs.appspot.com/",
+ "title":"Decoder in JS"
+ },
+ {
+ "url":"http://webpjs.appspot.com/",
+ "title":"Polyfill for browsers with or without WebM support (i.e. IE6-IE9, Safari/iOS version 6.1 and below; Firefox versions 24 and bel"
+ },
+ {
+ "url":"https://developers.google.com/speed/webp/faq#which_web_browsers_natively_support_webp",
+ "title":"Official website FAQ - Which web browsers natively support WebP?"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"p",
+ "38":"p",
+ "39":"p"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"a",
+ "11.5":"a",
+ "11.6":"a",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"a",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"p"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in older Chrome, Opera and Android refers to browser not supporting lossless and alpha versions of WebP. Animated webp images are supported in Chrome 32+ and Opera 19+.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":57.48,
+ "usage_perc_a":1.54,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"webpimageformatsupport",
+ "chrome_id":"6471725441089536,4785074604081152",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/websockets.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/websockets.json
new file mode 100644
index 0000000..c2adc97
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/websockets.json
@@ -0,0 +1,237 @@
+{
+ "title":"Web Sockets",
+ "description":"Bidirectional communication technology for web apps",
+ "spec":"http://www.w3.org/TR/websockets/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"http://websocket.org/aboutwebsocket.html",
+ "title":"WebSockets information"
+ },
+ {
+ "url":"http://updates.html5rocks.com/2011/08/What-s-different-in-the-new-WebSocket-protocol",
+ "title":"Details on newer protocol"
+ },
+ {
+ "url":"http://en.wikipedia.org/wiki/WebSocket",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-websockets",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/websocket",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Firefox 36 and lower cannot host a WebSocket within a WebWorker context; see https://developer.mozilla.org/en-US/Firefox/Releases/37"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"a #1",
+ "5":"a #1",
+ "6":"a x #2",
+ "7":"a x #2",
+ "8":"a x #2",
+ "9":"a x #2",
+ "10":"a x #2",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a #1",
+ "5":"a #1",
+ "6":"a #1",
+ "7":"a #1",
+ "8":"a #1",
+ "9":"a #1",
+ "10":"a #1",
+ "11":"a #1",
+ "12":"a #1",
+ "13":"a #1",
+ "14":"a #1",
+ "15":"a #2",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"a #1",
+ "5.1":"a #1",
+ "6":"a #2",
+ "6.1":"a #2",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"a #1",
+ "11.1":"a #1",
+ "11.5":"a #1",
+ "11.6":"a #1",
+ "12":"a #1",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"a #1",
+ "5.0-5.1":"a #1",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y #1",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"a #1",
+ "11.1":"a #1",
+ "11.5":"a #1",
+ "12":"a #1",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support refers to the websockets implementation using an older version of the protocol and/or the implementation being disabled by default (due to security issues with the older protocol).",
+ "2":"Partial support refers to lacking support for binary data. "
+ },
+ "usage_perc_y":85.22,
+ "usage_perc_a":1.35,
+ "ucprefix":true,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"websocket",
+ "chrome_id":"6555138000945152",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webvtt.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webvtt.json
new file mode 100644
index 0000000..f25f84c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webvtt.json
@@ -0,0 +1,224 @@
+{
+ "title":"WebVTT - Web Video Text Tracks",
+ "description":"Format for marking up text captions for multimedia resources.",
+ "spec":"http://dev.w3.org/html5/webvtt/",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://www.html5rocks.com/en/tutorials/track/basics/",
+ "title":"Getting Started With the Track Element"
+ },
+ {
+ "url":"https://dev.opera.com/articles/view/an-introduction-to-webvtt-and-track/",
+ "title":"An Introduction to WebVTT and track"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"In Firefox, captions are not visible for audio-only files in the `video` tag ([see bug](https://bugzilla.mozilla.org/show_bug.cgi?id=992664))."
+ }
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n d",
+ "25":"n d",
+ "26":"n d",
+ "27":"n d",
+ "28":"n d",
+ "29":"n d",
+ "30":"n d",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"WebVTT must be used with the element.\r\n\r\nFirefox currently lacks support for the ::cue pseudo-element.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":80.02,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"video",
+ "keywords":"captions,track",
+ "ie_id":"",
+ "chrome_id":"6719115557339136",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webworkers.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webworkers.json
new file mode 100644
index 0000000..2fd667f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/webworkers.json
@@ -0,0 +1,230 @@
+{
+ "title":"Web Workers",
+ "description":"Method of running scripts in the background, isolated from the web page",
+ "spec":"https://html.spec.whatwg.org/multipage/workers.html",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/En/Using_web_workers",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://nerget.com/rayjs-mt/rayjs.html",
+ "title":"Web Worker demo"
+ },
+ {
+ "url":"http://code.google.com/p/ie-web-worker/",
+ "title":"Polyfill for IE (single threaded)"
+ },
+ {
+ "url":"http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/",
+ "title":"Tutorial"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":86.74,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/will-change.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/will-change.json
new file mode 100644
index 0000000..05de50e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/will-change.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS will-change property",
+ "description":"Method of optimizing animations by informing the browser which elements will change and what properties will change.",
+ "spec":"http://dev.w3.org/csswg/css-will-change/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://dev.opera.com/articles/css-will-change-property/",
+ "title":"Detailed article"
+ },
+ {
+ "url":"http://aerotwist.com/blog/bye-bye-layer-hacks/",
+ "title":"Blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n d #1",
+ "30":"n d #1",
+ "31":"n d #1",
+ "32":"n d #1",
+ "33":"n d #1",
+ "34":"n d #1",
+ "35":"n d #1",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Supported in Firefox behind the `layout.css.will-change.enabled` flag"
+ },
+ "usage_perc_y":44.03,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"scroll-position",
+ "ie_id":"csswillchange",
+ "chrome_id":"5954199330226176",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/woff.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/woff.json
new file mode 100644
index 0000000..bb41ddb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/woff.json
@@ -0,0 +1,218 @@
+{
+ "title":"WOFF - Web Open Font Format",
+ "description":"Compressed TrueType/OpenType font that contains information about the font's source.",
+ "spec":"http://www.w3.org/TR/WOFF/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://hacks.mozilla.org/2009/10/woff/",
+ "title":"Mozilla hacks blog post"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Reported to be supported in some modified versions of the Android 4.0 browser.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.33,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"fontface",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/woff2.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/woff2.json
new file mode 100644
index 0000000..85d4bdc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/woff2.json
@@ -0,0 +1,222 @@
+{
+ "title":"WOFF 2.0 - Web Open Font Format",
+ "description":"TrueType/OpenType font that provides better compression than WOFF 1.0.",
+ "spec":"http://www.w3.org/TR/WOFF2/",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://gist.github.com/sergejmueller/cf6b4f2133bcb3e2f64a",
+ "title":"Basics about WOFF 2.0"
+ },
+ {
+ "url":"http://everythingfonts.com/ttf-to-woff2",
+ "title":"WOFF 2.0 converter"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n d #1",
+ "36":"n d #1",
+ "37":"n d #1",
+ "38":"n d #1",
+ "39":"n d #1"
+ },
+ "chrome":{
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"n",
+ "24":"n",
+ "25":"n",
+ "26":"n",
+ "27":"n",
+ "28":"n",
+ "29":"n",
+ "30":"n",
+ "31":"n",
+ "32":"n",
+ "33":"n",
+ "34":"n",
+ "35":"n",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"n",
+ "5.1":"n",
+ "6":"n",
+ "6.1":"n",
+ "7":"n",
+ "7.1":"n",
+ "8":"n"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"n",
+ "16":"n",
+ "17":"n",
+ "18":"n",
+ "19":"n",
+ "20":"n",
+ "21":"n",
+ "22":"n",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"n",
+ "6.0-6.1":"n",
+ "7.0-7.1":"n",
+ "8":"n",
+ "8.1":"n"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"n",
+ "4":"n",
+ "4.1":"n",
+ "4.2-4.3":"n",
+ "4.4":"n",
+ "4.4.3-4.4.4":"n",
+ "37":"y"
+ },
+ "bb":{
+ "7":"n",
+ "10":"n"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"n"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"n"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Default 'enabled' for Firefox Developer Edition and Nightly, but Beta and Release versions will need to set a flag to 'true' to [use WOFF2](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#Browser_compatibility)."
+ },
+ "usage_perc_y":43.17,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"fontface",
+ "keywords":"woff, fontface, webfonts",
+ "ie_id":"wofffileformat20",
+ "chrome_id":"6718644721549312",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/word-break.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/word-break.json
new file mode 100644
index 0000000..db08450
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/word-break.json
@@ -0,0 +1,222 @@
+{
+ "title":"CSS3 word-break",
+ "description":"Property to prevent or allow words to be broken over multiple lines between letters.",
+ "spec":"http://www.w3.org/TR/css3-text/#word-break",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/CSS/word-break",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/word-break",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"n",
+ "3.6":"n",
+ "4":"n",
+ "5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "12":"n",
+ "13":"n",
+ "14":"n",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a",
+ "40":"a",
+ "41":"a",
+ "42":"a",
+ "43":"a",
+ "44":"a"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"a",
+ "7":"a",
+ "7.1":"a",
+ "8":"a"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"n",
+ "12.1":"n",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"a",
+ "8":"a",
+ "8.1":"a"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"a",
+ "4.4.3-4.4.4":"a",
+ "37":"a"
+ },
+ "bb":{
+ "7":"a",
+ "10":"a"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"n",
+ "12.1":"n",
+ "24":"a"
+ },
+ "and_chr":{
+ "41":"a"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"Partial support refers to supporting the \"break-all\" value, but not the \"keep-all\" value.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":27.01,
+ "usage_perc_a":66.54,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"break-all,keep-all",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/wordwrap.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/wordwrap.json
new file mode 100644
index 0000000..2528ffe
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/wordwrap.json
@@ -0,0 +1,226 @@
+{
+ "title":"CSS3 Overflow-wrap",
+ "description":"Allows lines to be broken within words if an otherwise unbreakable string is too long to fit. Currently mostly supported using the `word-wrap` property.",
+ "spec":"http://www.w3.org/TR/css3-text/#overflow-wrap",
+ "status":"wd",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/En/CSS/Word-wrap",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://www.css3files.com/text/#wordwrap",
+ "title":"Information page"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/css/properties/word-wrap",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "CSS3"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"a",
+ "3.6":"a",
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"a",
+ "24":"a",
+ "25":"a",
+ "26":"a",
+ "27":"a",
+ "28":"a",
+ "29":"a",
+ "30":"a",
+ "31":"a",
+ "32":"a",
+ "33":"a",
+ "34":"a",
+ "35":"a",
+ "36":"a",
+ "37":"a",
+ "38":"a",
+ "39":"a"
+ },
+ "chrome":{
+ "4":"a",
+ "5":"a",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "12":"a",
+ "13":"a",
+ "14":"a",
+ "15":"a",
+ "16":"a",
+ "17":"a",
+ "18":"a",
+ "19":"a",
+ "20":"a",
+ "21":"a",
+ "22":"a",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a",
+ "3.2":"a",
+ "4":"a",
+ "5":"a",
+ "5.1":"a",
+ "6":"a",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"a",
+ "10.6":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "11.6":"a",
+ "12":"a",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a",
+ "4.0-4.1":"a",
+ "4.2-4.3":"a",
+ "5.0-5.1":"a",
+ "6.0-6.1":"a",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"a"
+ },
+ "android":{
+ "2.1":"a",
+ "2.2":"a",
+ "2.3":"a",
+ "3":"a",
+ "4":"a",
+ "4.1":"a",
+ "4.2-4.3":"a",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"a",
+ "11":"a",
+ "11.1":"a",
+ "11.5":"a",
+ "12":"a",
+ "12.1":"a",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"a"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"a"
+ }
+ },
+ "notes":"Partial support refers to requiring the legacy name \"word-wrap\" (rather than overflow-wrap) to work.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":58.98,
+ "usage_perc_a":38.12,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"wordwrap,word-wrap",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/x-doc-messaging.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/x-doc-messaging.json
new file mode 100644
index 0000000..e18021c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/x-doc-messaging.json
@@ -0,0 +1,232 @@
+{
+ "title":"Cross-document messaging",
+ "description":"Method of sending information from a page on one domain to a page on a different one (using postMessage)",
+ "spec":"https://html.spec.whatwg.org/multipage/comms.html#crossDocumentMessages",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/DOM/window.postMessage",
+ "title":"MDN article"
+ },
+ {
+ "url":"http://html5demos.com/postmessage2",
+ "title":"Simple demo"
+ },
+ {
+ "url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-crosswindowmessaging",
+ "title":"has.js test"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/web-messaging/MessagePort/postMessage",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"Internet Explorer 8 and 9, and Firefox versions 6.0 and below only support strings as postMessage's message. References: https://dev.opera.com/articles/view/window-postmessage-messagechannel/#crossdoc, https://developer.mozilla.org/en-US/docs/DOM/window.postMessage"
+ }
+ ],
+ "categories":[
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"a",
+ "9":"a",
+ "10":"a",
+ "11":"a",
+ "TP":"a"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"a",
+ "11":"a"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"Partial support in IE8-9 refers to only working in frames/iframes (not other tabs/windows). Also in IE 9 and below an object cannot be sent using postMessage. Partial support in IE10 refers to [limitations in certain conditions](http://stackoverflow.com/questions/16226924/is-cross-origin-postmessage-broken-in-ie10)",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":82.03,
+ "usage_perc_a":14.89,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"",
+ "ie_id":"postmessage",
+ "chrome_id":"4786174115708928",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhr2.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhr2.json
new file mode 100644
index 0000000..a979a73
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhr2.json
@@ -0,0 +1,235 @@
+{
+ "title":"XMLHttpRequest 2",
+ "description":"Adds more functionality to AJAX requests like file uploads, transfer progress information and the ability to send form data.",
+ "spec":"https://xhr.spec.whatwg.org/",
+ "status":"ls",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en/XMLHttpRequest/FormData",
+ "title":"MDN article on FormData"
+ },
+ {
+ "url":"https://github.com/3nr1c/jUri.js",
+ "title":"Polyfill for FormData object"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/apis/xhr/XMLHttpRequest",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+ {
+ "description":"xhr.timeout and xhr.ontimeout are supported in Chrome 29+ and Firefox 12+."
+ },
+ {
+ "description":"Firefox 3.5 and 3.6 partial support refers to only including support for the progress event."
+ },
+ {
+ "description":"WebKit versions 535 and older (r103502) do not implement the onloadend event"
+ }
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"n",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"n",
+ "3":"n",
+ "3.5":"a",
+ "3.6":"a",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"u",
+ "5":"u",
+ "6":"u",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"n",
+ "3.2":"n",
+ "4":"n",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"n",
+ "9.5-9.6":"n",
+ "10.0-10.1":"n",
+ "10.5":"n",
+ "10.6":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "11.6":"n",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"n",
+ "4.0-4.1":"n",
+ "4.2-4.3":"n",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"n"
+ },
+ "android":{
+ "2.1":"n",
+ "2.2":"n",
+ "2.3":"n",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"n",
+ "11":"n",
+ "11.1":"n",
+ "11.5":"n",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":88.91,
+ "usage_perc_a":0.11,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"formdata",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhtml.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhtml.json
new file mode 100644
index 0000000..5e6e4a9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhtml.json
@@ -0,0 +1,226 @@
+{
+ "title":"XHTML served as application/xhtml+xml",
+ "description":"A strict form of HTML, and allows embedding of other XML languages",
+ "spec":"http://www.w3.org/TR/xhtml1/",
+ "status":"rec",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/XHTML",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://www.xmlplease.com/xhtml/xhtml5polyglot/",
+ "title":"Information on XHTML5"
+ },
+ {
+ "url":"http://docs.webplatform.org/wiki/concepts/internet_and_web/the_web_standards_model#What_is_XHTML.3F",
+ "title":"WebPlatform Docs"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"n",
+ "7":"n",
+ "8":"n",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"y",
+ "3":"y",
+ "3.5":"y",
+ "3.6":"y",
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"y",
+ "5":"y",
+ "6":"y",
+ "7":"y",
+ "8":"y",
+ "9":"y",
+ "10":"y",
+ "11":"y",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"y",
+ "3.2":"y",
+ "4":"y",
+ "5":"y",
+ "5.1":"y",
+ "6":"y",
+ "6.1":"y",
+ "7":"y",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"y",
+ "9.5-9.6":"y",
+ "10.0-10.1":"y",
+ "10.5":"y",
+ "10.6":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "11.6":"y",
+ "12":"y",
+ "12.1":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"y",
+ "4.0-4.1":"y",
+ "4.2-4.3":"y",
+ "5.0-5.1":"y",
+ "6.0-6.1":"y",
+ "7.0-7.1":"y",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"y"
+ },
+ "android":{
+ "2.1":"y",
+ "2.2":"y",
+ "2.3":"y",
+ "3":"y",
+ "4":"y",
+ "4.1":"y",
+ "4.2-4.3":"y",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"y",
+ "10":"y"
+ },
+ "op_mob":{
+ "10":"y",
+ "11":"y",
+ "11.1":"y",
+ "11.5":"y",
+ "12":"y",
+ "12.1":"y",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"y"
+ }
+ },
+ "notes":"The XHTML syntax is very close to HTML, and thus is almost always ([incorrectly](https://developer.mozilla.org/en-US/docs/XHTML#MIME_type_versus_DOCTYPE)) served as text/html on the web.",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":94.05,
+ "usage_perc_a":0,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"xhtml+xml",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhtmlsmil.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhtmlsmil.json
new file mode 100644
index 0000000..8b8a82a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xhtmlsmil.json
@@ -0,0 +1,222 @@
+{
+ "title":"XHTML+SMIL animation",
+ "description":"Method of using SMIL animation in web pages",
+ "spec":"http://www.w3.org/TR/XHTMLplusSMIL/",
+ "status":"unoff",
+ "links":[
+ {
+ "url":"http://en.wikipedia.org/wiki/XHTML%2BSMIL",
+ "title":"Wikipedia"
+ },
+ {
+ "url":"http://leunen.me/fakesmile/",
+ "title":"JS library to support XHTML+SMIL"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "Other"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"n",
+ "6":"a",
+ "7":"a",
+ "8":"a",
+ "9":"n",
+ "10":"n",
+ "11":"n",
+ "TP":"n"
+ },
+ "firefox":{
+ "2":"p",
+ "3":"p",
+ "3.5":"p",
+ "3.6":"p",
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"p",
+ "38":"p",
+ "39":"p"
+ },
+ "chrome":{
+ "4":"p",
+ "5":"p",
+ "6":"p",
+ "7":"p",
+ "8":"p",
+ "9":"p",
+ "10":"p",
+ "11":"p",
+ "12":"p",
+ "13":"p",
+ "14":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p",
+ "30":"p",
+ "31":"p",
+ "32":"p",
+ "33":"p",
+ "34":"p",
+ "35":"p",
+ "36":"p",
+ "37":"p",
+ "38":"p",
+ "39":"p",
+ "40":"p",
+ "41":"p",
+ "42":"p",
+ "43":"p",
+ "44":"p"
+ },
+ "safari":{
+ "3.1":"p",
+ "3.2":"p",
+ "4":"p",
+ "5":"p",
+ "5.1":"p",
+ "6":"p",
+ "6.1":"p",
+ "7":"p",
+ "7.1":"p",
+ "8":"p"
+ },
+ "opera":{
+ "9":"p",
+ "9.5-9.6":"p",
+ "10.0-10.1":"p",
+ "10.5":"p",
+ "10.6":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "11.6":"p",
+ "12":"p",
+ "12.1":"p",
+ "15":"p",
+ "16":"p",
+ "17":"p",
+ "18":"p",
+ "19":"p",
+ "20":"p",
+ "21":"p",
+ "22":"p",
+ "23":"p",
+ "24":"p",
+ "25":"p",
+ "26":"p",
+ "27":"p",
+ "28":"p",
+ "29":"p"
+ },
+ "ios_saf":{
+ "3.2":"p",
+ "4.0-4.1":"p",
+ "4.2-4.3":"p",
+ "5.0-5.1":"p",
+ "6.0-6.1":"p",
+ "7.0-7.1":"p",
+ "8":"p",
+ "8.1":"p"
+ },
+ "op_mini":{
+ "5.0-8.0":"p"
+ },
+ "android":{
+ "2.1":"p",
+ "2.2":"p",
+ "2.3":"p",
+ "3":"p",
+ "4":"p",
+ "4.1":"p",
+ "4.2-4.3":"p",
+ "4.4":"p",
+ "4.4.3-4.4.4":"p",
+ "37":"p"
+ },
+ "bb":{
+ "7":"p",
+ "10":"p"
+ },
+ "op_mob":{
+ "10":"p",
+ "11":"p",
+ "11.1":"p",
+ "11.5":"p",
+ "12":"p",
+ "12.1":"p",
+ "24":"p"
+ },
+ "and_chr":{
+ "41":"p"
+ },
+ "and_ff":{
+ "36":"p"
+ },
+ "ie_mob":{
+ "10":"n",
+ "11":"n"
+ },
+ "and_uc":{
+ "9.9":"p"
+ }
+ },
+ "notes":"Internet Explorer supports the W3C proposal HTML+TIME, which is largely the same as XHTML+SMIL",
+ "notes_by_num":{
+
+ },
+ "usage_perc_y":0,
+ "usage_perc_a":3.13,
+ "ucprefix":false,
+ "parent":"xhtml",
+ "keywords":"",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xml-serializer.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xml-serializer.json
new file mode 100644
index 0000000..5608a4f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/features-json/xml-serializer.json
@@ -0,0 +1,220 @@
+{
+ "title":"DOM Parsing and Serialization",
+ "description":"Various DOM parsing and serializing functions, specifically `DOMParser`, `XMLSerializer`, `innerHTML`, `outerHTML` and `adjacentHTML`.",
+ "spec":"http://www.w3.org/TR/DOM-Parsing/",
+ "status":"cr",
+ "links":[
+ {
+ "url":"https://developer.mozilla.org/en-US/docs/XMLSerializer",
+ "title":"MDN - XMLSerializer"
+ }
+ ],
+ "bugs":[
+
+ ],
+ "categories":[
+ "DOM",
+ "JS API"
+ ],
+ "stats":{
+ "ie":{
+ "5.5":"a #2",
+ "6":"a #2",
+ "7":"a #2",
+ "8":"a #2",
+ "9":"a #1",
+ "10":"y",
+ "11":"y",
+ "TP":"y"
+ },
+ "firefox":{
+ "2":"a #2",
+ "3":"a #2",
+ "3.5":"a #2",
+ "3.6":"a #2",
+ "4":"a #2",
+ "5":"a #2",
+ "6":"a #2",
+ "7":"a #2",
+ "8":"a #3",
+ "9":"a #3",
+ "10":"a #3",
+ "11":"a #1",
+ "12":"y",
+ "13":"y",
+ "14":"y",
+ "15":"y",
+ "16":"y",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y"
+ },
+ "chrome":{
+ "4":"a #1",
+ "5":"a #1",
+ "6":"a #1",
+ "7":"a #1",
+ "8":"a #1",
+ "9":"a #1",
+ "10":"a #1",
+ "11":"a #1",
+ "12":"a #1",
+ "13":"a #1",
+ "14":"a #1",
+ "15":"a #1",
+ "16":"a #1",
+ "17":"a #1",
+ "18":"a #1",
+ "19":"a #1",
+ "20":"a #1",
+ "21":"a #1",
+ "22":"a #1",
+ "23":"a #1",
+ "24":"a #1",
+ "25":"a #1",
+ "26":"a #1",
+ "27":"a #1",
+ "28":"a #1",
+ "29":"a #1",
+ "30":"y",
+ "31":"y",
+ "32":"y",
+ "33":"y",
+ "34":"y",
+ "35":"y",
+ "36":"y",
+ "37":"y",
+ "38":"y",
+ "39":"y",
+ "40":"y",
+ "41":"y",
+ "42":"y",
+ "43":"y",
+ "44":"y"
+ },
+ "safari":{
+ "3.1":"a #1",
+ "3.2":"a #1",
+ "4":"a #1",
+ "5":"a #1",
+ "5.1":"a #1",
+ "6":"a #1",
+ "6.1":"a #1",
+ "7":"a #1",
+ "7.1":"y",
+ "8":"y"
+ },
+ "opera":{
+ "9":"u",
+ "9.5-9.6":"u",
+ "10.0-10.1":"u",
+ "10.5":"u",
+ "10.6":"u",
+ "11":"u",
+ "11.1":"u",
+ "11.5":"u",
+ "11.6":"u",
+ "12":"u",
+ "12.1":"a #1",
+ "15":"a #1",
+ "16":"a #1",
+ "17":"y",
+ "18":"y",
+ "19":"y",
+ "20":"y",
+ "21":"y",
+ "22":"y",
+ "23":"y",
+ "24":"y",
+ "25":"y",
+ "26":"y",
+ "27":"y",
+ "28":"y",
+ "29":"y"
+ },
+ "ios_saf":{
+ "3.2":"a #1",
+ "4.0-4.1":"a #1",
+ "4.2-4.3":"a #1",
+ "5.0-5.1":"a #1",
+ "6.0-6.1":"a #1",
+ "7.0-7.1":"a #1",
+ "8":"y",
+ "8.1":"y"
+ },
+ "op_mini":{
+ "5.0-8.0":"u"
+ },
+ "android":{
+ "2.1":"a #1",
+ "2.2":"a #1",
+ "2.3":"a #1",
+ "3":"a #1",
+ "4":"a #1",
+ "4.1":"a #1",
+ "4.2-4.3":"a #1",
+ "4.4":"y",
+ "4.4.3-4.4.4":"y",
+ "37":"y"
+ },
+ "bb":{
+ "7":"a #1",
+ "10":"a #1"
+ },
+ "op_mob":{
+ "10":"u",
+ "11":"u",
+ "11.1":"u",
+ "11.5":"u",
+ "12":"u",
+ "12.1":"a #1",
+ "24":"y"
+ },
+ "and_chr":{
+ "41":"y"
+ },
+ "and_ff":{
+ "36":"y"
+ },
+ "ie_mob":{
+ "10":"y",
+ "11":"y"
+ },
+ "and_uc":{
+ "9.9":"a #1"
+ }
+ },
+ "notes":"",
+ "notes_by_num":{
+ "1":"Partial support refers to lacking support for `parseFromString` on the DOMParser.",
+ "2":"Partial support in older IE refers to only supporting `innerHTML`, nothing else."
+ },
+ "usage_perc_y":78.32,
+ "usage_perc_a":15.93,
+ "ucprefix":false,
+ "parent":"",
+ "keywords":"parseFromString",
+ "ie_id":"",
+ "chrome_id":"",
+ "shown":true
+}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/fulldata-json/data-1.0.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/fulldata-json/data-1.0.json
new file mode 100644
index 0000000..c361324
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/fulldata-json/data-1.0.json
@@ -0,0 +1 @@
+{"eras":{"e-37":"37 versions back","e-36":"36 versions back","e-35":"35 versions back","e-34":"34 versions back","e-33":"33 versions back","e-32":"32 versions back","e-31":"31 versions back","e-30":"30 versions back","e-29":"29 versions back","e-28":"28 versions back","e-27":"27 versions back","e-26":"26 versions back","e-25":"25 versions back","e-24":"24 versions back","e-23":"23 versions back","e-22":"22 versions back","e-21":"21 versions back","e-20":"20 versions back","e-19":"19 versions back","e-18":"18 versions back","e-17":"17 versions back","e-16":"16 versions back","e-15":"15 versions back","e-14":"14 versions back","e-13":"13 versions back","e-12":"12 versions back","e-11":"11 versions back","e-10":"10 versions back","e-9":"9 versions back","e-8":"8 versions back","e-7":"7 versions back","e-6":"6 versions back","e-5":"5 versions back","e-4":"4 versions back","e-3":"3 versions back","e-2":"2 versions back","e-1":"Previous version","e0":"Current","e1":"Near future","e2":"Farther future","e3":"3 versions ahead"},"agents":{"ie":{"browser":"IE","abbr":"IE","prefix":"ms","type":"desktop","usage_global":{"5.5":0.009298,"6":0.104359,"7":0.125231,"8":2.90119,"9":1.82281,"10":1.44016,"11":8.02175,"TP":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.5","6","7","8","9","10","11","TP",null,null]},"firefox":{"browser":"Firefox","abbr":"FF","prefix":"moz","type":"desktop","usage_global":{"2":0.013404,"3":0.040212,"3.5":0.013404,"3.6":0.093828,"4":0.020106,"5":0.013404,"6":0.020106,"7":0.013404,"8":0.046914,"9":0.013404,"10":0.026808,"11":0.03351,"12":0.053616,"13":0.020106,"14":0.026808,"15":0.03351,"16":0.046914,"17":0.03351,"18":0.03351,"19":0.026808,"20":0.03351,"21":0.053616,"22":0.026808,"23":0.040212,"24":0.060318,"25":0.060318,"26":0.046914,"27":0.127338,"28":0.046914,"29":0.073722,"30":0.10053,"31":0.455736,"32":0.281484,"33":0.174252,"34":0.321696,"35":8.93377,"36":0.717114,"37":0.020106,"38":0,"39":0},"versions":[null,"2","3","3.5","3.6","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39"]},"chrome":{"browser":"Chrome","abbr":"Chr.","prefix":"webkit","type":"desktop","usage_global":{"4":0.013404,"5":0.013404,"6":0.013404,"7":0.006702,"8":0.013404,"9":0.006702,"10":0.026808,"11":0.080424,"12":0.03351,"13":0.020106,"14":0.020106,"15":0.020106,"16":0.013404,"17":0.013404,"18":0.03351,"19":0.013404,"20":0.013404,"21":0.073722,"22":0.080424,"23":0.020106,"24":0.053616,"25":0.026808,"26":0.053616,"27":0.053616,"28":0.046914,"29":0.080424,"30":0.127338,"31":0.750624,"32":0.080424,"33":0.288186,"34":0.227868,"35":0.388716,"36":0.6702,"37":0.817644,"38":0.683604,"39":1.97039,"40":27.3777,"41":0.187656,"42":0.174252,"43":0,"44":0},"versions":["4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44"]},"safari":{"browser":"Safari","abbr":"Saf.","prefix":"webkit","type":"desktop","usage_global":{"3.1":0,"3.2":0.008692,"4":0.060318,"5":0.120636,"5.1":0.36861,"6":0.073722,"6.1":0.261378,"7":0.361908,"7.1":0.589776,"8":1.327},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.1","3.2","4","5","5.1","6","6.1","7","7.1","8",null,null,null]},"opera":{"browser":"Opera","abbr":"Op.","prefix":"webkit","type":"desktop","usage_global":{"9":0.0082,"9.5-9.6":0.00685,"10.0-10.1":0.020106,"10.5":0.008392,"10.6":0.007296,"11":0.014996,"11.1":0.008219,"11.5":0.006702,"11.6":0.013404,"12":0.013404,"12.1":0.227868,"15":0.00685,"16":0.00685,"17":0.00685,"18":0.006702,"19":0.006597,"20":0.013404,"21":0.006597,"22":0.006597,"23":0.013434,"24":0.006702,"25":0.013404,"26":0.03351,"27":0.697008,"28":0.013404,"29":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9","9.5-9.6","10.0-10.1","10.5","10.6","11","11.1","11.5","11.6","12","12.1","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29",null],"prefix_exceptions":{"9":"o","9.5-9.6":"o","10.0-10.1":"o","10.5":"o","10.6":"o","11":"o","11.1":"o","11.5":"o","11.6":"o","12":"o","12.1":"o"}},"ios_saf":{"browser":"iOS Safari","abbr":"iOS","prefix":"webkit","type":"mobile","usage_global":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0412818,"6.0-6.1":0.126742,"7.0-7.1":1.6042,"8":0.344739,"8.1":5.09577},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.2","4.0-4.1","4.2-4.3","5.0-5.1","6.0-6.1","7.0-7.1","8","8.1",null,null,null]},"op_mini":{"browser":"Opera Mini","abbr":"O.Mini","prefix":"o","type":"mobile","usage_global":{"5.0-8.0":2.82765},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.0-8.0",null,null,null]},"android":{"browser":"Android Browser","abbr":"And.","prefix":"webkit","type":"mobile","usage_global":{"2.1":0,"2.2":0,"2.3":0.124295,"3":0,"4":0.251206,"4.1":0.809224,"4.2-4.3":1.36986,"4.4":2.55916,"4.4.3-4.4.4":1.17884,"37":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"2.1","2.2","2.3","3","4","4.1","4.2-4.3","4.4","4.4.3-4.4.4","37",null,null,null]},"op_mob":{"browser":"Opera Mobile","abbr":"O.Mob","prefix":"o","type":"mobile","usage_global":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0040598,"12.1":0.0243588,"24":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11","11.1","11.5","12","12.1","24",null,null,null],"prefix_exceptions":{"24":"webkit"}},"bb":{"browser":"Blackberry Browser","abbr":"BB","prefix":"webkit","type":"mobile","usage_global":{"7":0.0816255,"10":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"7","10",null,null,null]},"and_chr":{"browser":"Chrome for Android","abbr":"Chr/And.","prefix":"webkit","type":"mobile","usage_global":{"41":10.5137},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"41",null,null,null]},"and_ff":{"browser":"Firefox for Android","abbr":"FF/And.","prefix":"moz","type":"mobile","usage_global":{"36":0.13192},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"36",null,null,null]},"ie_mob":{"browser":"IE Mobile","abbr":"IE.Mob","prefix":"ms","type":"mobile","usage_global":{"10":0.224915,"11":0.477559},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11",null,null,null]},"and_uc":{"browser":"UC Browser for Android","abbr":"UC","prefix":"webkit","type":"mobile","usage_global":{"9.9":3.84217},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9.9",null,null,null],"prefix_exceptions":{"9.9":"webkit"}}},"statuses":{"rec":"W3C Recommendation","pr":"W3C Proposed Recommendation","cr":"W3C Candidate Recommendation","wd":"W3C Working Draft","ls":"WHATWG Living Standard","other":"Other","unoff":"Unofficial / Note"},"cats":{"CSS":["CSS3","CSS","CSS2"],"HTML5":["Canvas","HTML5"],"JS API":["JS API"],"Other":["PNG","Other","DOM"],"SVG":["SVG"]},"updated":1427431772,"data":{"png-alpha":{"title":"PNG alpha transparency","description":"Semi-transparent areas in PNG files","spec":"http://www.w3.org/TR/PNG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Portable_Network_Graphics","title":"Wikipedia"},{"url":"http://dillerdesign.com/experiment/DD_belatedPNG/","title":"Workaround for IE6"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs.","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"apng":{"title":"Animated PNG (APNG)","description":"Like animated GIFs, but allowing 24-bit colors and alpha transparency","spec":"https://wiki.mozilla.org/APNG_Specification","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/APNG","title":"Wikipedia"},{"url":"https://github.com/davidmz/apng-canvas","title":"Polyfill using canvas"},{"url":"https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp","title":"Chrome extension providing support"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Where support for APNG is missing, only the first frame is displayed","notes_by_num":{},"usage_perc_y":19.44,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"video":{"title":"Video element","description":"Method of playing videos on webpages (without requiring a plug-in).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element","status":"ls","links":[{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://webmproject.org","title":"WebM format information"},{"url":"http://camendesign.co.uk/code/video_for_everybody","title":"Video for Everybody"},{"url":"http://diveintohtml5.info/video.html","title":"Video on the Web - includes info on Android support"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/video","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Different browsers have support for different video formats, see sub-features for details. \r\n\r\nThe Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"audio":{"title":"Audio element","description":"Method of playing sound on webpages (without requiring a plug-in).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-audio-element","status":"ls","links":[{"url":"http://html5doctor.com/native-audio-in-the-browser/","title":"HTML5 Doctor article"},{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://www.jplayer.org/latest/demos/","title":"Demos of audio player that uses the audio element"},{"url":"http://24ways.org/2010/the-state-of-html5-audio","title":"Detailed article on support"},{"url":"http://textopia.org/androidsoundformats.html","title":"File format test page"},{"url":"http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio","title":"The State of HTML5 Audio"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/audio.js#audio","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/audio","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"contenteditable":{"title":"contenteditable attribute (basic support)","description":"Method of making any HTML element editable.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#contenteditable","status":"ls","links":[{"url":"http://html5demos.com/contenteditable","title":"Demo page"},{"url":"https://blog.whatwg.org/the-road-to-html-5-contenteditable","title":"WHATWG blog post"},{"url":"http://accessgarage.wordpress.com/2009/05/08/how-to-hack-your-app-to-make-contenteditable-work/","title":"Blog post on usage problems"},{"url":"http://docs.webplatform.org/wiki/html/attributes/contentEditable","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"This support only refers to very basic editing capability, implementations vary significantly on how certain elements can be edited.","notes_by_num":{},"usage_perc_y":94.18,"usage_perc_a":0.04,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"dragndrop":{"title":"Drag and Drop","description":"Method of easily dragging and dropping elements on a page, requiring minimal JavaScript.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#dnd","status":"ls","links":[{"url":"http://html5doctor.com/native-drag-and-drop/","title":"HTML5 Doctor article"},{"url":"http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html","title":"Shopping cart demo"},{"url":"http://html5demos.com/drag","title":"Demo with link blocks"},{"url":"http://docs.webplatform.org/wiki/dom/DragEvent","title":"WebPlatform Docs"},{"url":"https://github.com/MihaiValentin/setDragImage-IE","title":"Polyfill for setDragImage in IE"},{"url":"http://blog.teamtreehouse.com/implementing-native-drag-and-drop","title":"Implementing Native Drag and Drop"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #2","11":"a #2","TP":"a #2"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM elements attached to the DOM and within the viewport of the browser for `.setDragImage`.","notes_by_num":{"1":"Partial support refers to no support for the `dataTransfer.files` or `.types` objects and limited supported formats for `dataTransfer.setData`/`getData`.","2":"Partial support refers to not supporting `.setDragImage`"},"usage_perc_y":51.71,"usage_perc_a":14.42,"ucprefix":false,"parent":"","keywords":"draganddrop","ie_id":"","chrome_id":""},"internationalization":{"title":"Internationalization API","description":"Locale-sensitive collation (string comparison), number formatting, and date and time formatting.","spec":"http://www.ecma-international.org/ecma-402/1.0/","status":"other","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl","title":"MDN reference"},{"url":"http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/","title":"The ECMAScript Internationalization API"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"u","4.4.3-4.4.4":"u","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":65.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"Intl,Collator,NumberFormat,DateTimeFormat","ie_id":"ecmascriptinternationalizationapi","chrome_id":""},"queryselector":{"title":"querySelector/querySelectorAll","description":"Method of accessing DOM elements using CSS selectors","spec":"http://www.w3.org/TR/selectors-api/","status":"rec","links":[{"url":"https://developer.mozilla.org/en/DOM/element.querySelector","title":"MDN article on querySelector"},{"url":"https://developer.mozilla.org/En/DOM/Element.querySelectorAll","title":"MDN article on querySelectorAll"},{"url":"http://cjihrig.com/blog/javascripts-selectors-api/","title":"Blog post"},{"url":"http://docs.webplatform.org/wiki/css/selectors_api/querySelector","title":"WebPlatform Docs"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"a #1","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in IE8 is due to being limited to [CSS 2.1 selectors](/#feat=css-sel2). Additionally, it will have trouble with selectors including unrecognized tags (for example HTML5 ones)."},"usage_perc_y":93.98,"usage_perc_a":2.9,"ucprefix":false,"parent":"","keywords":"query,selectors,selectors api","ie_id":"","chrome_id":""},"getelementsbyclassname":{"title":"getElementsByClassName","description":"Method of accessing DOM elements by class name","spec":"http://www.w3.org/TR/dom/#dom-document-getelementsbyclassname","status":"wd","links":[{"url":"http://www.quirksmode.org/dom/tests/basics.html#getElementsByClassName","title":"Test page"},{"url":"http://docs.webplatform.org/wiki/dom/HTMLElement/getElementsByClassName","title":"WebPlatform Docs"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"byclassname","ie_id":"","chrome_id":""},"forms":{"title":"HTML5 form features","description":"Expanded form options, including things like date pickers, sliders, validation, placeholders and multiple file uploads. Previously known as \"Web forms 2.0\".","spec":"https://html.spec.whatwg.org/multipage/forms.html#forms","status":"ls","links":[{"url":"https://miketaylr.com/code/input-type-attr.html","title":"HTML5 inputs and attribute support page"},{"url":"https://github.com/westonruter/webforms2","title":"Cross-browser JS implementation (based on original spec)"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"p","3.2":"p","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":7.03,"usage_perc_a":82.39,"ucprefix":false,"parent":"","keywords":"input,datepicker","ie_id":"","chrome_id":""},"html5semantic":{"title":"New semantic elements","description":"HTML5 offers some new elements, primarily for semantic purposes. The elements include: section, article, aside, header, footer, nav, figure, figcaption, time, mark, main.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#sections","status":"ls","links":[{"url":"https://blog.whatwg.org/supporting-new-elements-in-ie","title":"Workaround for IE"},{"url":"https://blog.whatwg.org/styling-ie-noscript","title":"Alternate workaround"},{"url":"http://oli.jp/2009/html5-structure3/","title":"Article on structural elements"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-html5-elements","title":"has.js test"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y #1","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"n","3":"a #1","3.5":"a #1","3.6":"a #1","4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"y #1","5.1":"y #1","6":"y #1","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a #1","9.5-9.6":"a #1","10.0-10.1":"a #1","10.5":"a #1","10.6":"a #1","11":"a #1","11.1":"y #1","11.5":"y #1","11.6":"y #1","12":"y #1","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a #1","4.0-4.1":"y #1","4.2-4.3":"y #1","5.0-5.1":"y #1","6.0-6.1":"y #1","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"a #1","2.2":"y #1","2.3":"y #1","3":"y #1","4":"y #1","4.1":"y #1","4.2-4.3":"y #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y #1","10":"y #1"},"op_mob":{"10":"a #1","11":"y #1","11.1":"y #1","11.5":"y #1","12":"y #1","12.1":"y #1","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y #1"}},"notes":"Partial support refers to missing the default styling. This is easily taken care of by using display:block for all new elements (except time and mark, these should be display:inline anyway). IE11 and older versions of other browsers do not support the element.","notes_by_num":{"1":"Does not include support for the element "},"usage_perc_y":90.9,"usage_perc_a":3.14,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"offline-apps":{"title":"Offline web applications","description":"Method of defining web page files to be cached using a cache manifest file, allowing them to work offline on subsequent visits to the page","spec":"https://html.spec.whatwg.org/multipage/browsers.html#offline","status":"ls","links":[{"url":"http://www.sitepoint.com/offline-web-application-tutorial/","title":"Sitepoint tutorial"},{"url":"http://diveintohtml5.info/offline.html","title":"Dive Into HTML5 article"},{"url":"http://hacks.mozilla.org/2010/01/offline-web-applications/","title":"Mozilla Hacks article/demo"},{"url":"http://docs.webplatform.org/wiki/apis/appcache/ApplicationCache","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":89.29,"usage_perc_a":0.04,"ucprefix":false,"parent":"","keywords":"appcache,app cache,application cache,online","ie_id":"applicationcache","chrome_id":"6192449487634432"},"webworkers":{"title":"Web Workers","description":"Method of running scripts in the background, isolated from the web page","spec":"https://html.spec.whatwg.org/multipage/workers.html","status":"ls","links":[{"url":"https://developer.mozilla.org/En/Using_web_workers","title":"MDN article"},{"url":"http://nerget.com/rayjs-mt/rayjs.html","title":"Web Worker demo"},{"url":"http://code.google.com/p/ie-web-worker/","title":"Polyfill for IE (single threaded)"},{"url":"http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/","title":"Tutorial"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":86.74,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"fontface":{"title":"@font-face Web fonts","description":"Method of displaying fonts downloaded from websites","spec":"http://www.w3.org/TR/css3-webfonts/","status":"cr","links":[{"url":"http://webfonts.info","title":"News and information site"},{"url":"http://en.wikipedia.org/wiki/Web_typography","title":"Wikipedia"},{"url":"http://www.css3files.com/font/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@font-face","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"a","2.3":"a","3":"a","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support before IE9 refers to only supporting EOT fonts. Safari for iOS 4.1 and below only supports SVG fonts.","notes_by_num":{},"usage_perc_y":90.95,"usage_perc_a":3.35,"ucprefix":false,"parent":"","keywords":"font face","ie_id":"","chrome_id":""},"eot":{"title":"EOT - Embedded OpenType fonts","description":"Type of font that can be derived from a regular font, allowing small files and legal use of high-quality fonts. Usage is restricted by the file being tied to the website","spec":"http://www.w3.org/Submission/EOT/","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/Embedded_OpenType","title":"Wikipedia"},{"url":"http://www.microsoft.com/typography/web/embedding/default.aspx","title":"Example pages"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Proposal by Microsoft, being considered for W3C standardization.","notes_by_num":{},"usage_perc_y":14.42,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"woff":{"title":"WOFF - Web Open Font Format","description":"Compressed TrueType/OpenType font that contains information about the font's source.","spec":"http://www.w3.org/TR/WOFF/","status":"rec","links":[{"url":"http://hacks.mozilla.org/2009/10/woff/","title":"Mozilla hacks blog post"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Reported to be supported in some modified versions of the Android 4.0 browser.","notes_by_num":{},"usage_perc_y":88.33,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"multibackgrounds":{"title":"CSS3 Multiple backgrounds","description":"Method of using multiple images as a background","spec":"http://www.w3.org/TR/css3-background/","status":"cr","links":[{"url":"http://www.css3.info/preview/multiple-backgrounds/","title":"Demo & information page"},{"url":"http://www.css3files.com/background/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/background-image","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"border-image":{"title":"CSS3 Border images","description":"Method of using images for borders","spec":"http://www.w3.org/TR/css3-background/#the-border-image","status":"cr","links":[{"url":"http://www.css3files.com/border/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/border-image","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"a x","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a x","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"a","10.6":"a","11":"a x","11.1":"a x","11.5":"a x","11.6":"a x","12":"a x","12.1":"a x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a x"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x","10":"y"},"op_mob":{"10":"n","11":"a x","11.1":"a x","11.5":"a x","12":"a x","12.1":"a x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Note that both the border-style and border-width must be specified for border-images to work according to spec, though older implementations may not have this requirement. Partial support refers to supporting the shorthand syntax, but not the individual properties (border-image-source, border-image-slice, etc). ","notes_by_num":{},"usage_perc_y":83.44,"usage_perc_a":7.04,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"background-img-opts":{"title":"CSS3 Background-image options","description":"New properties to affect background images, including background-clip, background-origin and background-size","spec":"http://www.w3.org/TR/css3-background/#backgrounds","status":"cr","links":[{"url":"http://www.standardista.com/css3/css3-background-properties","title":"Detailed compatibility tables and demos"},{"url":"http://www.css3files.com/background/","title":"Information page"},{"url":"https://github.com/louisremi/background-size-polyfill","title":"Polyfill for IE7-8"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #2 #3","3.2":"a #2 #3","4":"a #2 #3","5":"a #2 #3","5.1":"a #2 #3","6":"a #2 #3","6.1":"a #2 #3","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"a x","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a #3","6.0-6.1":"a","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"a x","2.2":"a x #3","2.3":"a x #3","3":"a #3","4":"a #3","4.1":"a #3","4.2-4.3":"a #3","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in Opera Mini refers to not supporting background sizing or background attachments. However Opera Mini 7.5 supports background sizing (including cover and contain values).","2":"Partial support in Safari 6 refers to not supporting background sizing offset from edges syntax.","3":"Does not support `background-size` values in the `background` shorthand"},"usage_perc_y":87.16,"usage_perc_a":6.81,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-table":{"title":"CSS Table display","description":"Method of displaying elements as tables, rows, and cells","spec":"http://www.w3.org/TR/CSS21/tables.html","status":"rec","links":[{"url":"http://www.onenaught.com/posts/201/use-css-displaytable-for-layout","title":"Blog post on usage"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"display:table, display: table,table-cell,table-row,table-layout","ie_id":"","chrome_id":""},"css-gencontent":{"title":"CSS Generated content for pseudo-elements","description":"Method of displaying text or images before or after the given element's contents using the ::before and ::after pseudo-elements. All browsers with support also support the `attr()` notation in the `content` property. ","spec":"http://www.w3.org/TR/CSS21/generate.html","status":"rec","links":[{"url":"http://www.westciv.com/style_master/academy/css_tutorial/advanced/generated_content.html","title":"Guide on usage"},{"url":"https://dev.opera.com/articles/view/css-generated-content-techniques/","title":"Dev.Opera article"},{"url":"http://docs.webplatform.org/wiki/css/generated_and_replaced_content","title":"WebPlatform Docs"}],"categories":["CSS2","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE8 only supports the single-colon CSS 2.1 syntax (i.e. :pseudo-class). It does not support the double-colon CSS3 syntax (i.e. ::pseudo-element)\r\n\r\nFor content to appear in pseudo-elements, the `content` property must be set (but may be an empty string).","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":2.9,"ucprefix":false,"parent":"","keywords":"before,after","ie_id":"","chrome_id":""},"css-fixed":{"title":"CSS position:fixed","description":"Method of keeping an element in a fixed location regardless of scroll position","spec":"http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning","status":"rec","links":[{"url":"http://www.css-101.org/fixed-positioning/05.php","title":"Workaround for IE6"},{"url":"http://bradfrostweb.com/blog/mobile/fixed-position/","title":"Article on mobile support"},{"url":"http://docs.webplatform.org/wiki/css/properties/position","title":"WebPlatform Docs"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Only works in Android 2.2+ by using the following meta tag: . \r\n\r\nPartial support in older iOS Safari refers to [buggy behavior](http://remysharp.com/2012/05/24/issues-with-position-fixed-scrolling-on-ios/).","notes_by_num":{},"usage_perc_y":92.35,"usage_perc_a":1.9,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"hashchange":{"title":"Hashchange event","description":"Event triggered in JavaScript when the URL's hash has changed (for example: page.html#foo to page.html#bar) ","spec":"https://html.spec.whatwg.org/multipage/browsers.html#the-hashchangeevent-interface","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/window.onhashchange","title":"MDN article"},{"url":"http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx","title":"MSDN article"},{"url":"http://www.quirksmode.org/dom/events/tests/hashchange.html","title":"Simple demo"},{"url":"http://github.com/3nr1c/jUri.js","title":"Polyfill"},{"url":"http://docs.webplatform.org/wiki/dom/Element/hashchange","title":"WebPlatform Docs"}],"categories":["HTML5","JS API"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.93,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"onhashchange,HashChangeEvent","ie_id":"","chrome_id":""},"css-sel2":{"title":"CSS 2.1 selectors","description":"Basic CSS selectors including: `*` (universal selector), `>` (child selector), `:first-child`, `:link`, `:visited`, `:active`, `:hover`, `:focus`, `:lang()`, `+` (adjacent sibling selector), `[attr]`, `[attr=\"val\"]`, `[attr~=\"val\"]`, `[attr|=\"bar\"]`, `.foo` (class selector), `#foo` (id selector)","spec":"http://www.w3.org/TR/CSS21/selector.html","status":"rec","links":[{"url":"http://www.quirksmode.org/css/contents.html","title":"Detailed support information"},{"url":"http://www.yourhtmlsource.com/stylesheets/advancedselectors.html","title":"Examples of advanced selectors"},{"url":"http://selectivizr.com","title":"Selectivizr: Polyfill for IE6-8"},{"url":"http://docs.webplatform.org/wiki/css/selectors","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-sel3":{"title":"CSS3 selectors","description":"Advanced element selection using selectors including: `[foo^=\"bar\"]`, `[foo$=\"bar\"]`, `[foo*=\"bar\"]`, `:root`, `:nth-child()`, `:nth-last-child()`, `nth-of-type`, `nth-last-of-type()`, `:last-child`, `:first-of-type`, `:last-of-type`, `:only-child`, `:only-of-type`, `:empty`, `:target`, `:enabled`, `:disabled`, `:checked`, `:not()`, `~` (general sibling)","spec":"http://www.w3.org/TR/css3-selectors/","status":"rec","links":[{"url":"http://www.quirksmode.org/css/selectors/","title":"Detailed support information"},{"url":"http://www.css3.info/selectors-test/","title":"Automated CSS3 selector test"},{"url":"http://selectivizr.com","title":"Selectivizr: Polyfill for IE6-8"},{"url":"http://docs.webplatform.org/wiki/css/selectors","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"p","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE7 and IE8 support only these CSS3 selectors: General siblings (`element1~element2`) and Attribute selectors `[attr^=val]`, `[attr$=val]`, and `[attr*=val]`","notes_by_num":{},"usage_perc_y":93.99,"usage_perc_a":3.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-textshadow":{"title":"CSS3 Text-shadow","description":"Method of applying one or more shadow or blur effects to text","spec":"http://www.w3.org/TR/css-text-decor-3/#text-shadow-property","status":"wd","links":[{"url":"http://hacks.mozilla.org/2009/06/text-shadow/","title":"Mozilla hacks article"},{"url":"http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_text-shadow.htm","title":"Live editor"},{"url":"http://www.css3files.com/shadow/#textshadow","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/text-shadow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y"}},"notes":"Opera Mini ignores the blur-radius set, so no blur effect is visible. Text-shadow behavior can be somewhat emulated in older IE versions using the non-standard \"dropshadow\" or \"glow\" filters. ","notes_by_num":{"1":"IE 10+ supports a fourth length value for the shadow's \"spread\". This is not (yet) part of the specification. "},"usage_perc_y":89.25,"usage_perc_a":2.92,"ucprefix":false,"parent":"","keywords":"text shadow","ie_id":"","chrome_id":""},"css-boxshadow":{"title":"CSS3 Box-shadow","description":"Method of displaying an inner or outer shadow effect to elements","spec":"http://www.w3.org/TR/css3-background/#box-shadow","status":"cr","links":[{"url":"https://developer.mozilla.org/En/CSS/-moz-box-shadow","title":"MDN article"},{"url":"http://westciv.com/tools/boxshadows/index.html","title":"Live editor"},{"url":"http://tests.themasta.com/blogstuff/boxshadowdemo.html","title":"Demo of various effects"},{"url":"http://www.css3files.com/shadow/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/box-shadow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y x","3.6":"y x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"y x","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y x","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Can be partially emulated in older IE versions using the non-standard \"shadow\" filter. Partial support in Safari, iOS Safari and Android Browser refers to missing \"inset\" and blur radius value support.","notes_by_num":{},"usage_perc_y":90.94,"usage_perc_a":0.19,"ucprefix":false,"parent":"","keywords":"box-shadows,boxshadows,box shadow,shaow","ie_id":"","chrome_id":""},"css3-colors":{"title":"CSS3 Colors","description":"Method of describing colors using Hue, Saturation and Lightness (hsl()) rather than just RGB, as well as allowing alpha-transparency with rgba() and hsla().","spec":"http://www.w3.org/TR/css3-color/","status":"rec","links":[{"url":"https://dev.opera.com/articles/view/color-in-opera-10-hsl-rgb-and-alpha-transparency/","title":"Dev.Opera article"},{"url":"http://www.css3files.com/color/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/color#RGBA_Notation","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.02,"usage_perc_a":0.02,"ucprefix":false,"parent":"","keywords":"rgb,hsl,rgba,hsla","ie_id":"","chrome_id":""},"css3-boxsizing":{"title":"CSS3 Box-sizing","description":"Method of specifying whether or not an element's borders and padding should be included in size units","spec":"http://www.w3.org/TR/css3-ui/#box-sizing","status":"wd","links":[{"url":"https://developer.mozilla.org/En/CSS/Box-sizing","title":"MDN article"},{"url":"http://www.456bereastreet.com/archive/201104/controlling_width_with_css3_box-sizing/","title":"Blog post"},{"url":"https://github.com/Schepp/box-sizing-polyfill","title":"Polyfill for IE"},{"url":"http://css-tricks.com/box-sizing/","title":"CSS Tricks"},{"url":"http://docs.webplatform.org/wiki/css/properties/box-sizing","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a x","10":"a"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to supporting only the `content-box` and `border-box` values, not `padding-box` (which was added to the spec later).","notes_by_num":{},"usage_perc_y":12.33,"usage_perc_a":84.61,"ucprefix":false,"parent":"","keywords":"border-box,content-box,padding-box","ie_id":"","chrome_id":""},"css-mediaqueries":{"title":"CSS3 Media Queries","description":"Method of applying styles based on media information. Includes things like page and device dimensions","spec":"http://www.w3.org/TR/css3-mediaqueries/","status":"rec","links":[{"url":"http://ie.microsoft.com/testdrive/HTML5/85CSS3_MediaQueries/","title":"IE demo page with information"},{"url":"http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries","title":"Media Queries tutorial"},{"url":"https://github.com/scottjehl/Respond","title":"Polyfill for IE"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@media","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Incomplete support by older webkit browsers refers to only acknowledging different media rules on page reload","notes_by_num":{},"usage_perc_y":93.98,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"@media","ie_id":"","chrome_id":""},"multicolumn":{"title":"CSS3 Multiple column layout","description":"Method of flowing information in multiple columns","spec":"http://www.w3.org/TR/css3-multicol/","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/css3-multi-column-layout/","title":"Dev.Opera article"},{"url":"http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/an-introduction-to-the-css3-multiple-column-layout-module/","title":"Introduction page"},{"url":"http://docs.webplatform.org/wiki/css/properties/column-width","title":"WebPlatform Docs"},{"url":"https://github.com/BetleyWhitehorne/CSS3MultiColumn","title":"Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"a x","3.5":"a x","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to not supporting the `break-before`, `break-after`, `break-inside` properties. Webkit browsers do have equivalent support for the non-standard `-webkit-column-break-*` properties while Firefox supports `page-break-*` to accomplish the same result.","notes_by_num":{},"usage_perc_y":13.29,"usage_perc_a":78.87,"ucprefix":false,"parent":"","keywords":"column-count","ie_id":"multicolumnfullsupport","chrome_id":"6526151266664448"},"border-radius":{"title":"CSS3 Border-radius (rounded corners)","description":"Method of making the border corners round","spec":"http://www.w3.org/TR/css3-background/#the-border-radius","status":"cr","links":[{"url":"http://border-radius.com","title":"Border-radius CSS Generator"},{"url":"http://muddledramblings.com/table-of-css3-border-radius-compliance","title":"Detailed compliance table"},{"url":"http://www.css3files.com/border/#borderradius","title":"Information page"},{"url":"http://css3pie.com/","title":"Polyfill which includes border-radius"},{"url":"http://docs.webplatform.org/wiki/css/properties/border-radius","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"y x","3.5":"y x","3.6":"y x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y","5.1":"y #1","6":"y #1","6.1":"y #1","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Safari 6.1 and earlier did not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128"},"usage_perc_y":91.17,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"roundedcorners, border radius,-moz-border-radius","ie_id":"","chrome_id":""},"transforms2d":{"title":"CSS3 Transforms","description":"Method of transforming an element including rotating, scaling, etc.","spec":"http://www.w3.org/TR/css3-2d-transforms/","status":"wd","links":[{"url":"http://www.westciv.com/tools/transforms/","title":"Live editor"},{"url":"https://developer.mozilla.org/en/CSS/-moz-transform","title":"MDN article"},{"url":"http://www.webresourcesdepot.com/cross-browser-css-transforms-csssandpaper/","title":"Workaround script for IE"},{"url":"http://www.css3files.com/transform/","title":"Information page"},{"url":"http://www.useragentman.com/IETransformsTranslator/","title":"Converter for IE"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/transforms/transform","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y x","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y x","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"The scale transform can be emulated in IE < 9 using Microsoft's \"zoom\" extension, others are (not easily) possible using the MS Matrix filter","notes_by_num":{},"usage_perc_y":91.13,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"transformation,translate,rotation,rotate,scale,css-transforms","ie_id":"transforms","chrome_id":"6437640580628480"},"use-strict":{"title":"ECMAScript 5 Strict Mode","description":"Method of placing code in a \"strict\" operating context.","spec":"http://ecma-international.org/ecma-262/5.1/#sec-14.1","status":"other","links":[{"url":"http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/","title":"Information page"},{"url":"http://javascriptweblog.wordpress.com/2011/05/03/javascript-strict-mode/","title":"Article with test suite"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari refers to strict mode still accepting a lot of JS that should be considered invalid.","notes_by_num":{},"usage_perc_y":88.27,"usage_perc_a":0.49,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"transforms3d":{"title":"CSS3 3D Transforms","description":"Method of transforming an element in the third dimension using the `transform` property. Includes support for the `perspective` property to set the perspective in z-space and the `backface-visibility` property to toggle display of the reverse side of a 3D-transformed element.","spec":"http://www.w3.org/TR/css3-3d-transforms/","status":"wd","links":[{"url":"http://css3.bradshawenterprises.com/flip/","title":"Multi-browser demo"},{"url":"http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/","title":"Mozilla hacks article"},{"url":"http://thewebrocks.com/demos/3D-css-tester/","title":"3D CSS Tester"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/transforms/transform","title":"WebPlatform Docs"},{"url":"http://desandro.github.io/3dtransforms/","title":"Intro to CSS 3D transforms"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in IE refers to not supporting [the transform-style: preserve-3d property](http://msdn.microsoft.com/en-us/library/ie/hh673529%28v=vs.85%29.aspx#the_ms_transform_style_property). This prevents nesting 3D transformed elements.","notes_by_num":{},"usage_perc_y":78.28,"usage_perc_a":10.16,"ucprefix":false,"parent":"","keywords":"css 3d,3dtransforms,translate3d,backface visibility,perspective","ie_id":"transforms,csstransformspreserve3d","chrome_id":"6437640580628480"},"sharedworkers":{"title":"Shared Web Workers","description":"Method of allowing multiple scripts to communicate with a single web worker.","spec":"https://html.spec.whatwg.org/multipage/workers.html#shared-workers-introduction","status":"ls","links":[{"url":"http://www.sitepoint.com/javascript-shared-web-workers-html5/","title":"Sitepoint article"},{"url":"http://greenido.wordpress.com/2011/11/03/web-workers-part-3-out-of-3-shared-wrokers/","title":"Blog post"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":51.61,"usage_perc_a":0,"ucprefix":false,"parent":"webworkers","keywords":"shared worker","ie_id":"sharedwebworkers","chrome_id":""},"css-hyphens":{"title":"CSS Hyphenation","description":"Method of controlling when words at the end of lines should be hyphenated using the \"hyphens\" property.","spec":"http://www.w3.org/TR/css3-text/#hyphenation","status":"wd","links":[{"url":"https://developer.mozilla.org/en/CSS/hyphens","title":"MDN article"},{"url":"http://blog.fontdeck.com/post/9037028497/hyphens","title":"Blog post"},{"url":"http://docs.webplatform.org/wiki/css/properties/hyphens","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","TP":"y x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x"}},"notes":"Chrome 29- and Android 4.0 Browser support \"-webkit-hyphens: none\", but not the \"auto\" property. Chrome 30+ doesn't support it either. It is [advisable to set the @lang attribute](http://blog.adrianroselli.com/2015/01/on-use-of-lang-attribute.html) on the HTML element to enable hyphenation support and improve accessibility.","notes_by_num":{},"usage_perc_y":31.79,"usage_perc_a":3.84,"ucprefix":false,"parent":"","keywords":"hyphen,shy","ie_id":"","chrome_id":""},"css-transitions":{"title":"CSS3 Transitions","description":"Simple method of animating certain properties of an element","spec":"http://www.w3.org/TR/css3-transitions/","status":"wd","links":[{"url":"http://www.webdesignerdepot.com/2010/01/css-transitions-101/","title":"Article on usage"},{"url":"http://www.css3files.com/transition/","title":"Information page"},{"url":"http://www.the-art-of-web.com/css/timing-function/","title":"Examples on timing functions"},{"url":"http://www.opera.com/docs/specs/presto2.12/css/transitions/","title":"Animation of property types support in Opera"},{"url":"http://docs.webplatform.org/wiki/css/properties/transition","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y x","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y x","10":"y"},"op_mob":{"10":"y x","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":89.2,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css transition","ie_id":"","chrome_id":""},"font-feature":{"title":"Font feature settings","description":"Method of applying advanced typographic and language-specific font features to supported OpenType fonts.","spec":"http://w3.org/TR/css3-fonts/#font-rend-props","status":"wd","links":[{"url":"http://ie.microsoft.com/testdrive/Graphics/opentype/","title":"Demo pages (IE/Firefox only)"},{"url":"http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/","title":"Mozilla hacks article"},{"url":"http://html5accessibility.com/","title":"Detailed tables on accessability support"},{"url":"http://docs.webplatform.org/wiki/css/properties/font-feature-settings","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in older Firefox versions refers to using an older syntax. Partial support in older Chrome versions refers to lacking support in Mac OS X. ","notes_by_num":{},"usage_perc_y":74.51,"usage_perc_a":1.17,"ucprefix":false,"parent":"","keywords":"font-feature,font-feature-settings,kern,kerning,font-variant-alternates,ligatures,font-variant-ligatures","ie_id":"","chrome_id":""},"css-animation":{"title":"CSS3 Animation","description":"Complex method of animating certain properties of an element","spec":"http://www.w3.org/TR/css3-animations/","status":"wd","links":[{"url":"http://robertnyman.com/2010/05/06/css3-animations/","title":"Blog post on usage"},{"url":"http://www.css3files.com/animation/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/animations","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y x","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in Android browser refers to buggy behavior in different scenarios.","notes_by_num":{},"usage_perc_y":88.99,"usage_perc_a":0.12,"ucprefix":false,"parent":"","keywords":"animations,css-animations,keyframe,keyframes","ie_id":"","chrome_id":""},"css-gradients":{"title":"CSS Gradients","description":"Method of defining a linear or radial color gradient as a CSS image.","spec":"http://www.w3.org/TR/css3-images/","status":"cr","links":[{"url":"http://www.colorzilla.com/gradient-editor/","title":"Cross-browser editor"},{"url":"http://www.css3files.com/gradient/","title":"Information page"},{"url":"http://css3pie.com/","title":"Tool to emulate support in IE"},{"url":"http://docs.webplatform.org/wiki/css/functions/linear-gradient","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"a x","5":"a x","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"a x","11.5":"a x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Syntax used by browsers with prefixed support may be incompatible with that for proper support. \r\n\r\nPartial support in Opera 11.10 and 11.50 also refers to only having support for linear gradients.\r\n\r\nSupport can be somewhat emulated in older IE versions using the non-standard \"gradient\" filter. \r\n\r\nFirefox 10+, Opera 11.6+, Chrome 26+ and IE10+ also support the new \"to (side)\" syntax.","notes_by_num":{},"usage_perc_y":88.79,"usage_perc_a":0.47,"ucprefix":false,"parent":"","keywords":"linear,linear-gradient,gradiant","ie_id":"gradients","chrome_id":"5785905063264256"},"css-canvas":{"title":"CSS Canvas Drawings","description":"Method of using HTML5 Canvas as a background image. Not currently part of any specification.","spec":"http://webkit.org/blog/176/css-canvas-drawing/","status":"unoff","links":[{"url":"http://webkit.org/blog/176/css-canvas-drawing/","title":"Webkit blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"A similar effect can be achieved in Firefox 4+ using the -moz-element() background property","notes_by_num":{},"usage_perc_y":66.53,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-reflections":{"title":"CSS Reflections","description":"Method of displaying a reflection of an element","spec":"http://webkit.org/blog/182/css-reflections/","status":"unoff","links":[{"url":"http://webkit.org/blog/182/css-reflections/","title":"Webkit blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Similar effect can be achieved in Firefox 4+ using the -moz-element() background property","notes_by_num":{},"usage_perc_y":62.69,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"box-reflect","ie_id":"","chrome_id":"5627300510957568"},"css-masks":{"title":"CSS Masks","description":"Method of displaying part of an element, using a selected image as a mask","spec":"http://www.w3.org/TR/css-masking/","status":"cr","links":[{"url":"http://docs.webplatform.org/wiki/css/properties/mask","title":"WebPlatform Docs"},{"url":"http://www.html5rocks.com/en/tutorials/masking/adobe/","title":"HTML5 Rocks article"},{"url":"http://thenittygritty.co/css-masking","title":"Detailed blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"a x","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x"}},"notes":"Partial support in WebKit/Blink browsers refers to supporting the mask-image and mask-box-image properties, but lacks support for other parts of the spec. Partial support in Firefox refers to only support for inline SVG mask elements i.e. mask: url(#foo).","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":78.81,"ucprefix":false,"parent":"","keywords":"","ie_id":"masks","chrome_id":"5381559662149632"},"svg":{"title":"SVG (basic support)","description":"Method of displaying basic Vector Graphics features using the embed or object elements. Refers to the SVG 1.1 spec.","spec":"http://www.w3.org/TR/SVG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Scalable_Vector_Graphics","title":"Wikipedia"},{"url":"http://www.alistapart.com/articles/using-svg-for-flexible-scalable-and-fun-backgrounds-part-i","title":"A List Apart article"},{"url":"http://svg-wow.org/","title":"SVG showcase site"},{"url":"http://code.google.com/p/svgweb/","title":"SVG Web: Flash-based polyfill"},{"url":"http://svg-edit.googlecode.com","title":"Web-based SVG editor"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg","title":"has.js test"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y #2","10":"y #2","11":"y #2","TP":"y #2"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a #1","4":"a #1","4.1":"a #1","4.2-4.3":"a #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #2","11":"y #2"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in Android 3 & 4 refers to not supporting masking.","2":"IE9-11 desktop & mobile don't properly scale SVG files. [Adding height, width, viewBox, and CSS rules](http://codepen.io/tomByrer/pen/qEBbzw?editors=110) seem to be the best workaround."},"usage_perc_y":91.48,"usage_perc_a":2.44,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-css":{"title":"SVG in CSS backgrounds","description":"Method of using SVG images as CSS backgrounds","spec":"http://www.w3.org/TR/css3-background/#background-image","status":"cr","links":[{"url":"http://designfestival.com/a-farewell-to-css3-gradients/","title":"Tutorial for advanced effects"}],"categories":["CSS3","SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Firefox and Opera Mini/Mobile refers to SVG images being blurry when scaled. Partial support in iOS Safari and older Safari versions refers to failing to support tiling or the background-position property.","notes_by_num":{},"usage_perc_y":90.2,"usage_perc_a":3.56,"ucprefix":false,"parent":"","keywords":"svg-in-css,svgincss,css-svg","ie_id":"","chrome_id":""},"svg-smil":{"title":"SVG SMIL animation","description":"Method of using animation elements to animate SVG images","spec":"http://www.w3.org/TR/SVG/animate.html","status":"rec","links":[{"url":"http://svg-wow.org/blog/category/animation/","title":"Examples on SVG WOW"},{"url":"https://developer.mozilla.org/en/SVG/SVG_animation_with_SMIL","title":"MDN article"},{"url":"http://leunen.me/fakesmile/","title":"JS library to support SMIL in SVG"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg-smil","title":"has.js test"},{"url":"https://github.com/madsgraphics/SVGEventListener","title":"Polyfill for SMIL animate events on SVG"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"a","5":"a","5.1":"a","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Safari refers to not working in HTML files.","notes_by_num":{},"usage_perc_y":78.26,"usage_perc_a":0.68,"ucprefix":false,"parent":"","keywords":"","ie_id":"svgsmilanimation","chrome_id":""},"svg-fonts":{"title":"SVG fonts","description":"Method of using fonts defined as SVG shapes. Considered among a number of browser vendors as a deprecated feature with support being removed.","spec":"http://www.w3.org/TR/SVG/fonts.html","status":"rec","links":[{"url":"http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different","title":"Blog post"},{"url":"http://opentype.info/blog/2010/04/13/the-ipad-and-svg-fonts-in-mobile-safari/","title":"Blog post on usage for iPad"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"n #1","39":"n #1","40":"n #1","41":"n #1","42":"n #1","43":"n #1","44":"n #1"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"n #1","26":"n #1","27":"n #1","28":"n #1","29":"n #1"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n #2"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"n #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Chrome 38 and newer support SVG fonts only on Windows Vista and XP.","2":"Supported in Opera Mini in SVG images only, not in HTML."},"usage_perc_y":25.12,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":"5930075908210688"},"svg-filters":{"title":"SVG filters","description":"Method of using photoshop-like effects on SVG objects including blurring and color manipulation.","spec":"http://www.w3.org/TR/SVG/filters.html","status":"rec","links":[{"url":"http://electricbeach.org/?p=950","title":"Experiments with filter effects"},{"url":"http://svg-wow.org/blog/category/filters/","title":"SVG filter demos"},{"url":"http://docs.webplatform.org/wiki/svg/elements/filter","title":"WebPlatform Docs"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"a","6":"a","7":"a","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.93,"usage_perc_a":0.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-html":{"title":"SVG effects for HTML","description":"Method of using SVG transforms, filters, etc on HTML elements using either CSS or the foreignObject element","spec":"http://www.w3.org/TR/SVG11/extend.html#ForeignObjectElement","status":"wd","links":[{"url":"https://developer.mozilla.org/en/SVG/Tutorial/Other_content_in_SVG","title":"MDN Tutorial"},{"url":"https://developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content","title":"MDN Reference page"},{"url":"http://www.w3.org/TR/filter-effects/","title":"Filter Effects draft"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support refers to lack of filter support or buggy result from effects. A [CSS Filter Effects](http://www.w3.org/TR/filter-effects/) specification is in the works that would replace this method.","notes_by_num":{},"usage_perc_y":12.28,"usage_perc_a":71.74,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-html5":{"title":"Inline SVG in HTML5","description":"Method of using SVG tags directly in HTML documents. Requires HTML5 parser.","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#svg-0","status":"ls","links":[{"url":"http://hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more/","title":"Mozilla Hacks blog post"},{"url":"http://samples.msdn.microsoft.com/ietestcenter/html5/svghtml_harness.htm?url=SVG_HTML_Elements_001","title":"Test suite"}],"categories":["HTML5","SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.45,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"canvas":{"title":"Canvas (basic support)","description":"Method of generating fast, dynamic graphics using JavaScript.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element","status":"ls","links":[{"url":"https://developer.mozilla.org/en/Canvas_tutorial","title":"Tutorial by Mozilla"},{"url":"http://www.canvasdemos.com/","title":"Showcase site"},{"url":"http://glimr.rubyforge.org/cake/canvas.html","title":"Animation kit "},{"url":"http://diveintohtml5.info/canvas.html","title":"Another tutorial"},{"url":"http://explorercanvas.googlecode.com/","title":"Implementation for Internet Explorer"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas","title":"has.js test"}],"categories":["Canvas","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Opera Mini supports the canvas element, but is unable to play animations or run other more complex applications. Android 2.x supports canvas except the toDataURL() function. See http://code.google.com/p/android/issues/detail?id=7901 Some (slow) workarounds are described here: http://stackoverflow.com/q/10488033/841830","notes_by_num":{},"usage_perc_y":91.1,"usage_perc_a":2.95,"ucprefix":false,"parent":"","keywords":"","ie_id":"canvas","chrome_id":"5100084685438976"},"canvas-text":{"title":"Text API for Canvas","description":"Method of displaying text on Canvas elements","spec":"https://html.spec.whatwg.org/multipage/scripting.html#drawing-text-to-the-bitmap","status":"ls","links":[{"url":"https://developer.mozilla.org/en/Drawing_text_using_a_canvas#Additional_examples","title":"Examples by Mozilla"},{"url":"http://code.google.com/p/canvas-text/","title":"Support library"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas-text","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/canvas/CanvasRenderingContext2D/fillText","title":"WebPlatform Docs"}],"categories":["Canvas","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0,"ucprefix":false,"parent":"canvas","keywords":"","ie_id":"","chrome_id":""},"namevalue-storage":{"title":"Web Storage - name/value pairs","description":"Method of storing data locally like cookies, but for larger amounts of data (sessionStorage and localStorage, used to fall under HTML5).","spec":"http://www.w3.org/TR/webstorage/#storage","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API","title":"MDN article"},{"url":"http://code.google.com/p/sessionstorage/","title":"Support library"},{"url":"http://html5demos.com/storage","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-localstorage;native-sessionstorage","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/web-storage/Storage/localStorage","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0.05,"ucprefix":false,"parent":"","keywords":"webstorage,local storage","ie_id":"webstorage","chrome_id":"5345825534246912"},"sql-storage":{"title":"Web SQL Database","description":"Method of storing data client-side, allows Sqlite database queries for access and manipulation","spec":"http://www.w3.org/TR/webdatabase/","status":"unoff","links":[{"url":"http://html5doctor.com/introducing-web-sql-databases/","title":"HTML5 Doctor article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-sql-db","title":"has.js test"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"The Web SQL Database specification is no longer being maintained and support may be dropped in future versions.","notes_by_num":{},"usage_perc_y":66.87,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"db-storage,websql","ie_id":"websqldatabase","chrome_id":"6330987952734208"},"indexeddb":{"title":"IndexedDB","description":"Method of storing data client-side, allows indexed database queries.","spec":"http://www.w3.org/TR/IndexedDB/","status":"cr","links":[{"url":"http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/","title":"Mozilla Hacks article"},{"url":"https://github.com/axemclion/IndexedDBShim","title":"Polyfill for browsers supporting WebSQL"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-indexeddb","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/indexedDB","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"n","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"a #2","8":"a #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"a #2","8.1":"a #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"n","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"p"}},"notes":"","notes_by_num":{"1":"Partial support in IE 10 & 11 refers to a number of subfeatures [not being supported](http://codepen.io/cemerick/pen/Itymi).","2":"Partial support in iOS 8 refers to [seriously buggy behavior](http://www.raymondcamden.com/2014/9/25/IndexedDB-on-iOS-8--Broken-Bad)."},"usage_perc_y":61.21,"usage_perc_a":18.06,"ucprefix":false,"parent":"","keywords":"indexdb","ie_id":"indexeddb","chrome_id":"6507459568992256"},"online-status":{"title":"Online/offline status","description":"Events to indicate when the user's connected (`online` and `offline` events) and the `navigator.onLine` property to see current status.","spec":"https://html.spec.whatwg.org/multipage/browsers.html#browser-state","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine.onLine#Specification","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a #2","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"a #3","16":"a #3","17":"a #3","18":"a #3","19":"a #3","20":"a #3","21":"a #3","22":"a #3","23":"a #3","24":"a #3","25":"a #3","26":"a #3","27":"a #3","28":"a #3","29":"a #3","30":"a #3","31":"a #3","32":"a #3","33":"a #3","34":"a #3","35":"a #3","36":"a #3","37":"a #3","38":"a #3","39":"a #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"u","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"u","2.2":"u","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a #1","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"\"online\" does not always mean connection to the internet, it can also just mean connection to some network.\r\n\r\nEarly versions of Chrome and Safari always reported \"true\" for `navigator.onLine`","notes_by_num":{"1":"Seems to support `navigator.onLine` but not `online`/`offline` events.","2":"IE8 only supports the `online`/`offline` events on `document.body`, rather than `window`.","3":"Desktop Firefox responds to the status of its \"Work Offline\" mode. If not in that mode, `navigator.onLine` is always `true`, regardless of the actual network connectivity status."},"usage_perc_y":74.55,"usage_perc_a":19.09,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"eventsource":{"title":"Server-sent events","description":"Method of continuously sending data from a server to the browser, rather than repeatedly requesting it (EventSource interface, used to fall under HTML5)","spec":"http://www.w3.org/TR/eventsource/","status":"pr","links":[{"url":"http://www.html5rocks.com/tutorials/eventsource/basics/","title":"HTML5 Rocks tutorial"},{"url":"http://samshull.blogspot.com/2010/10/ajax-push-in-ios-safari-and-chrome-with.html","title":"Blog post with demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-eventsource","title":"has.js test"},{"url":"https://github.com/Yaffle/EventSource","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":76.34,"usage_perc_a":0.05,"ucprefix":false,"parent":"","keywords":"serversent,s-sent-events","ie_id":"serversenteventseventsource","chrome_id":"5311740673785856"},"x-doc-messaging":{"title":"Cross-document messaging","description":"Method of sending information from a page on one domain to a page on a different one (using postMessage)","spec":"https://html.spec.whatwg.org/multipage/comms.html#crossDocumentMessages","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/window.postMessage","title":"MDN article"},{"url":"http://html5demos.com/postmessage2","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-crosswindowmessaging","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/web-messaging/MessagePort/postMessage","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE8-9 refers to only working in frames/iframes (not other tabs/windows). Also in IE 9 and below an object cannot be sent using postMessage. Partial support in IE10 refers to [limitations in certain conditions](http://stackoverflow.com/questions/16226924/is-cross-origin-postmessage-broken-in-ie10)","notes_by_num":{},"usage_perc_y":82.03,"usage_perc_a":14.89,"ucprefix":false,"parent":"","keywords":"","ie_id":"postmessage","chrome_id":"4786174115708928"},"datauri":{"title":"Data URIs","description":"Method of embedding images and other files in webpages as a string of text","spec":"http://www.ietf.org/rfc/rfc2397.txt","status":"other","links":[{"url":"http://css-tricks.com/data-uris/","title":"Information page"},{"url":"http://en.wikipedia.org/wiki/data_URI_scheme","title":"Wikipedia"},{"url":"http://www.websiteoptimization.com/speed/tweak/inline-images/","title":"Data URL converter"},{"url":"http://klevjers.com/papers/phishing.pdf","title":"Information on security issues"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Support in Internet Explorer 8 is limited to images and linked resources like CSS files, not HTML files. Max URI length in IE8 is 32KB. In IE9+ JavaScript files are supported too and the maximum size limit set to 4GB.","notes_by_num":{},"usage_perc_y":82.06,"usage_perc_a":14.89,"ucprefix":false,"parent":"","keywords":"data url,datauris,data uri,dataurl,dataurls,base64","ie_id":"","chrome_id":""},"mathml":{"title":"MathML","description":"Special tags that allow mathematical formulas and notations to be written on web pages.","spec":"http://www.w3.org/TR/MathML/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/MathML","title":"Wikipedia"},{"url":"http://www.mozilla.org/projects/mathml/demo/","title":"MathML demos"},{"url":"http://www.mathjax.org","title":"Cross-browser support script"},{"url":"https://developer.mozilla.org/en/MathML/Element","title":"MDN element reference"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"y","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a"}},"notes":"Opera's support is limited to a CSS profile of MathML. Support was added in Chrome 24, but removed afterwards due to instability.","notes_by_num":{},"usage_perc_y":22.58,"usage_perc_a":4.17,"ucprefix":false,"parent":"","keywords":"","ie_id":"mathml","chrome_id":"5240822173794304"},"css-featurequeries":{"title":"CSS Feature Queries","description":"CSS Feature Queries allow authors to condition rules based on whether particular property declarations are supported in CSS using the @supports at rule.","spec":"http://www.w3.org/TR/css3-conditional/#at-supports","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/@supports","title":"MDN Article"},{"url":"http://mcc.id.au/blog/2012/08/supports","title":"@supports in Firefox"},{"url":"http://dabblet.com/gist/3895764","title":"Test case"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@supports","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"See also the [CSS.supports() DOM API](#feat=css-supports-api)","notes_by_num":{},"usage_perc_y":60.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"supports,conditional","ie_id":"conditionalrules","chrome_id":"4993981813358592"},"xhtml":{"title":"XHTML served as application/xhtml+xml","description":"A strict form of HTML, and allows embedding of other XML languages","spec":"http://www.w3.org/TR/xhtml1/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/XHTML","title":"Wikipedia"},{"url":"http://www.xmlplease.com/xhtml/xhtml5polyglot/","title":"Information on XHTML5"},{"url":"http://docs.webplatform.org/wiki/concepts/internet_and_web/the_web_standards_model#What_is_XHTML.3F","title":"WebPlatform Docs"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"The XHTML syntax is very close to HTML, and thus is almost always ([incorrectly](https://developer.mozilla.org/en-US/docs/XHTML#MIME_type_versus_DOCTYPE)) served as text/html on the web.","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"xhtml+xml","ie_id":"","chrome_id":""},"xhtmlsmil":{"title":"XHTML+SMIL animation","description":"Method of using SMIL animation in web pages","spec":"http://www.w3.org/TR/XHTMLplusSMIL/","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/XHTML%2BSMIL","title":"Wikipedia"},{"url":"http://leunen.me/fakesmile/","title":"JS library to support XHTML+SMIL"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"a","7":"a","8":"a","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"p"}},"notes":"Internet Explorer supports the W3C proposal HTML+TIME, which is largely the same as XHTML+SMIL","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":3.13,"ucprefix":false,"parent":"xhtml","keywords":"","ie_id":"","chrome_id":""},"wai-aria":{"title":"WAI-ARIA Accessibility features","description":"Method of providing ways for people with disabilities to use dynamic web content and web applications.","spec":"http://www.w3.org/TR/wai-aria/","status":"rec","links":[{"url":"http://www.w3.org/WAI/intro/aria","title":"Information page"},{"url":"http://www.paciellogroup.com/blog/2011/10/browser-assistive-technology-tests-redux/","title":"Links to various test results"},{"url":"http://en.wikipedia.org/wiki/WAI-ARIA","title":"Wikipedia"},{"url":"http://www.alistapart.com/articles/the-accessibility-of-wai-aria/","title":"ALA Article"},{"url":"http://zufelt.ca/blog/are-you-confused-html5-and-wai-aria-yet","title":"HTML5/WAI-ARIA information"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":27.2,"usage_perc_a":63.25,"ucprefix":false,"parent":"","keywords":"wai,aria","ie_id":"","chrome_id":""},"geolocation":{"title":"Geolocation","description":"Method of informing a website of the user's geographical location","spec":"http://www.w3.org/TR/geolocation-API/","status":"cr","links":[{"url":"http://html5demos.com/geo","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-geolocation","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/geolocation","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.04,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"","ie_id":"geolocation","chrome_id":"6348855016685568"},"flexbox":{"title":"Flexible Box Layout Module","description":"Method of positioning elements in horizontal or vertical stacks. Support includes the support for the all properties prefixed with `flex` as well as `align-content`, `align-items`, `align-self`, and `justify-content`.","spec":"http://www.w3.org/TR/css3-flexbox/","status":"wd","links":[{"url":"http://bennettfeely.com/flexplorer/","title":"Flexbox CSS generator"},{"url":"http://www.adobe.com/devnet/html5/articles/working-with-flexbox-the-new-spec.html","title":"Article on using the latest spec"},{"url":"https://dev.opera.com/articles/view/advanced-cross-browser-flexbox/","title":"Tutorial on cross-browser support"},{"url":"http://philipwalton.github.io/solved-by-flexbox/","title":"Examples on how to solve common layout problems with flexbox"},{"url":"http://css-tricks.com/snippets/css/a-guide-to-flexbox/","title":"A Complete Guide to Flexbox"},{"url":"http://the-echoplex.net/flexyboxes/","title":"Flexbox playground and code generator"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #2","11":"y","TP":"y"},"firefox":{"2":"a x #1","3":"a x #1","3.5":"a x #1","3.6":"a x #1","4":"a x #1","5":"a x #1","6":"a x #1","7":"a x #1","8":"a x #1","9":"a x #1","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"a x #1","22":"a #3","23":"a #3","24":"a #3","25":"a #3","26":"a #3","27":"a #3","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x #1","5":"a x #1","6":"a x #1","7":"a x #1","8":"a x #1","9":"a x #1","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x #1","3.2":"a x #1","4":"a x #1","5":"a x #1","5.1":"a x #1","6":"a x #1","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x #1","4.0-4.1":"a x #1","4.2-4.3":"a x #1","5.0-5.1":"a x #1","6.0-6.1":"a x #1","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"a x #1","2.2":"a x #1","2.3":"a x #1","3":"a x #1","4":"a x #1","4.1":"a x #1","4.2-4.3":"a x #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x #1","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a x #2","11":"y"},"and_uc":{"9.9":"a x #1"}},"notes":"Most partial support refers to supporting an [older version](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/) of the specification or an [older syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/).","notes_by_num":{"1":"Only supports the [old flexbox](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723) specification and does not support wrapping.","2":"Only supports the [2012 syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)","3":"Does not support flex-wrap or flex-flow properties"},"usage_perc_y":81.74,"usage_perc_a":10.37,"ucprefix":false,"parent":"","keywords":"flex-box,flex-direction,flex-wrap,flex-flow,flex-grow,flex-basis","ie_id":"flexbox","chrome_id":"4837301406400512"},"webgl":{"title":"WebGL - 3D Canvas graphics","description":"Method of generating dynamic 3D graphics using JavaScript, accelerated through hardware","spec":"https://www.khronos.org/registry/webgl/specs/1.0/","status":"other","links":[{"url":"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation","title":"Instructions on enabling WebGL"},{"url":"http://www.khronos.org/webgl/wiki/Tutorial","title":"Tutorial"},{"url":"http://hacks.mozilla.org/2009/12/webgl-draft-released-today/","title":"Firefox blog post"},{"url":"http://webkit.org/blog/603/webgl-now-available-in-webkit-nightlies/","title":"Webkit blog post"},{"url":"https://github.com/iewebgl/iewebgl","title":"Polyfill for IE"}],"categories":["Canvas"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"a"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"p","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Support listed as \"partial\" refers to the fact that not all users with these browsers have WebGL access. This is due to the additional requirement for users to have [up to date video drivers](http://www.khronos.org/webgl/wiki/BlacklistsAndWhitelists). This problem was [solved in Chrome on Windows](http://blog.chromium.org/2012/02/gpu-accelerating-2d-canvas-and-enabling.html) as of version 18.\r\n\r\nNote that WebGL is part of the [Khronos Group](http://www.khronos.org/webgl/), not the W3C.","notes_by_num":{},"usage_perc_y":52.08,"usage_perc_a":27.02,"ucprefix":false,"parent":"canvas","keywords":"web gl","ie_id":"webglcanvas3d,webglinstancingextension","chrome_id":"6049512976023552"},"fileapi":{"title":"File API","description":"Method of manipulating file objects in web applications client-side, as well as programmatically selecting them and accessing their data.","spec":"http://www.w3.org/TR/FileAPI/","status":"wd","links":[{"url":"https://developer.mozilla.org/en/Using_files_from_web_applications","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/apis/file","title":"WebPlatform Docs"},{"url":"https://github.com/moxiecode/moxie","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari and other WebKit browsers refers to lacking FileReader support. ","notes_by_num":{},"usage_perc_y":85.6,"usage_perc_a":3.06,"ucprefix":false,"parent":"","keywords":"FileReader","ie_id":"","chrome_id":""},"shadowdom":{"title":"Shadow DOM","description":"Method of establishing and maintaining functional boundaries between DOM trees and how these trees interact with each other within a document, thus enabling better functional encapsulation within the DOM.","spec":"http://www.w3.org/TR/shadow-dom/","status":"wd","links":[{"url":"http://html5-demos.appspot.com/static/shadowdom-visualizer/index.html","title":"Shadow DOM Visualizer"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/shadowdom/","title":"HTML5Rocks - Shadow DOM 101 article"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `dom.webcomponents.enabled` flag."},"usage_perc_y":49.1,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"shadowdomunprefixed","chrome_id":"4507242028072960"},"websockets":{"title":"Web Sockets","description":"Bidirectional communication technology for web apps","spec":"http://www.w3.org/TR/websockets/","status":"cr","links":[{"url":"http://websocket.org/aboutwebsocket.html","title":"WebSockets information"},{"url":"http://updates.html5rocks.com/2011/08/What-s-different-in-the-new-WebSocket-protocol","title":"Details on newer protocol"},{"url":"http://en.wikipedia.org/wiki/WebSocket","title":"Wikipedia"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-websockets","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/websocket","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a #1","5":"a #1","6":"a x #2","7":"a x #2","8":"a x #2","9":"a x #2","10":"a x #2","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #2","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a #1","5.1":"a #1","6":"a #2","6.1":"a #2","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"a #1","11.1":"a #1","11.5":"a #1","11.6":"a #1","12":"a #1","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a #1","5.0-5.1":"a #1","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y #1","10":"y"},"op_mob":{"10":"n","11":"a #1","11.1":"a #1","11.5":"a #1","12":"a #1","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support refers to the websockets implementation using an older version of the protocol and/or the implementation being disabled by default (due to security issues with the older protocol).","2":"Partial support refers to lacking support for binary data. "},"usage_perc_y":85.22,"usage_perc_a":1.35,"ucprefix":true,"parent":"","keywords":"","ie_id":"websocket","chrome_id":"6555138000945152"},"hidden":{"title":"hidden attribute","description":"The `hidden` attribute may be applied to any element, and effectively hides elements similar to `display: none` in CSS.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute","status":"ls","links":[{"url":"http://davidwalsh.name/html5-hidden","title":"Article on hidden attribute"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"The hidden state can be easily overridden with a CSS `display` property set to anything other than `none`.","notes_by_num":{},"usage_perc_y":89.91,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"script-async":{"title":"async attribute for external scripts","description":"The boolean async attribute on script elements allows the external JavaScript file to run when it's available, without delaying page load first.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-script-async","status":"ls","links":[{"url":"https://developer.mozilla.org/en/HTML/Element/script#Attributes","title":"MDN article"},{"url":"http://ie.microsoft.com/testdrive/Performance/AsyncScripts/Default.html","title":"Demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-async","title":"has.js test"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Using script.async = false; to maintain execution order for dynamically-added scripts isn't supported in Safari 5.0","notes_by_num":{},"usage_perc_y":88.61,"usage_perc_a":0.12,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"cors":{"title":"Cross-Origin Resource Sharing","description":"Method of performing XMLHttpRequests across domains","spec":"http://www.w3.org/TR/cors/","status":"rec","links":[{"url":"http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/","title":"Mozilla Hacks blog post"},{"url":"http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx","title":"Alternative implementation by IE8"},{"url":"https://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/","title":"DOM access using CORS"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-cors-xhr","title":"has.js test"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Supported somewhat in IE8 and IE9 using the XDomainRequest object (but has [limitations]( http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx))","notes_by_num":{},"usage_perc_y":89.24,"usage_perc_a":4.72,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"calc":{"title":"calc() as CSS unit value","description":"Method of allowing calculated values for length units, i.e. `width: calc(100% - 3em)`","spec":"http://www.w3.org/TR/css3-values/#calc","status":"cr","links":[{"url":"http://hacks.mozilla.org/2010/06/css3-calc/","title":"Mozilla Hacks article"},{"url":"https://developer.mozilla.org/en/CSS/-moz-calc","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/functions/calc","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"Support can be somewhat emulated in older versions of IE using the non-standard `expression()` syntax. Partial support in IE9 refers to the browser crashing when used as a `background-position` value. Partial support in Android Browser 4.4 refers to the browser lacking the ability to multiply and divide values.","notes_by_num":{},"usage_perc_y":77.73,"usage_perc_a":5.56,"ucprefix":false,"parent":"","keywords":"","ie_id":"csscalc","chrome_id":"5765241438732288"},"ruby":{"title":"Ruby annotation","description":"Method of adding pronunciation or other annotations using ruby elements (primarily used in East Asian typography).","spec":"https://html.spec.whatwg.org/multipage/semantics.html#the-ruby-element","status":"ls","links":[{"url":"http://html5doctor.com/ruby-rt-rp-element/","title":"HTML5 Doctor article"},{"url":"http://docs.webplatform.org/wiki/html/elements/ruby","title":"WebPlatform Docs"},{"url":"https://addons.mozilla.org/firefox/addon/1935/","title":"Add-on \"XHTML Ruby Support\" for Firefox"},{"url":"https://addons.mozilla.org/firefox/addon/6812/","title":"Addon \"HTML Ruby\" for Firefox support"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"y","39":"y"},"chrome":{"4":"p","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"p","10":"a"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"p"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Browsers without native support can still simulate support using CSS. Partial support refers to only supporting basic ruby, may still be missing writing-mode, Complex ruby and CSS3 Ruby.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":81.38,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-opacity":{"title":"CSS3 Opacity","description":"Method of setting the transparency level of an element","spec":"http://www.w3.org/TR/css3-color/","status":"rec","links":[{"url":"http://www.css3files.com/color/#opacity","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/opacity","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Transparency for elements in IE8 and older can be achieved using the proprietary \"filter\" property and does not work well with PNG images using alpha transparency.","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":3.14,"ucprefix":false,"parent":"","keywords":"transparent,transparency,alpha","ie_id":"","chrome_id":""},"form-validation":{"title":"Form validation","description":"Method of setting required fields and field types without requiring JavaScript.","spec":"https://html.spec.whatwg.org/multipage/forms.html#client-side-form-validation","status":"ls","links":[{"url":"http://docs.webplatform.org/wiki/html/attributes/required","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Safari refers to lack of notice when form with required fields is attempted to be submitted. Partial support in IE10 mobile refers to lack of warning when blocking submission.","notes_by_num":{},"usage_perc_y":72.87,"usage_perc_a":3.81,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":"6091813840486400"},"history":{"title":"Session history management","description":"Method of manipulating the user's browser's session history in JavaScript using history.pushState, history.replaceState and the popstate event.","spec":"https://html.spec.whatwg.org/multipage/browsers.html#dom-history-pushstate","status":"ls","links":[{"url":"http://www.adequatelygood.com/2010/7/Saner-HTML5-History-Management","title":"Introduction to history management"},{"url":"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history","title":"MDN article"},{"url":"http://html5demos.com/history","title":"Demo page"},{"url":"https://github.com/browserstate/history.js","title":"History.js polyfill "},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-history-state","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/dom/History","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"n","4":"n","4.1":"n","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Older iOS versions and Android 4.0.4 claim support, but implementation is too buggy to be useful.","notes_by_num":{},"usage_perc_y":83.69,"usage_perc_a":4.33,"ucprefix":false,"parent":"","keywords":"onpushstate,onreplacestate","ie_id":"","chrome_id":""},"json":{"title":"JSON parsing","description":"Method of converting JavaScript objects to JSON strings and JSON back to objects using JSON.stringify() and JSON.parse()","spec":"http://es5.github.com/#x15.12","status":"other","links":[{"url":"https://developer.mozilla.org/En/Using_native_JSON","title":"MDN article"},{"url":"http://www.json.org/js.html","title":"JSON in JS (includes script w/support)"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/json.js#json","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/json","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Requires document to be in IE8+ [standards mode](http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx) to work in IE8.","notes_by_num":{},"usage_perc_y":96.85,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"classlist":{"title":"classList (DOMTokenList )","description":"Method of easily manipulating classes on elements, using the DOMTokenList object.","spec":"http://www.w3.org/TR/dom/#dom-element-classlist","status":"wd","links":[{"url":"http://hacks.mozilla.org/2010/01/classlist-in-firefox-3-6/","title":"Mozilla Hacks article"},{"url":"https://github.com/eligrey/classList.js","title":"Polyfill script"},{"url":"http://docs.webplatform.org/wiki/dom/Element/classList","title":"WebPlatform Docs"},{"url":"http://www.sitepoint.com/exploring-classlist-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/classlist-api-demo.html","title":"Demo using classList"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Element.classList","title":"MDN article"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"p","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.9,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"text-overflow":{"title":"CSS3 Text-overflow","description":"Append ellipsis when text overflows its containing element","spec":"http://www.w3.org/TR/css3-ui/#text-overflow0","status":"wd","links":[{"url":"https://github.com/rmorse/AutoEllipsis","title":"jQuery polyfill for Firefox"},{"url":"https://developer.mozilla.org/En/CSS/Text-overflow","title":"MDN article"},{"url":"http://www.css3files.com/text/","title":"Information page"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-text-overflow","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/properties/text-overflow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y x","9.5-9.6":"y x","10.0-10.1":"y x","10.5":"y x","10.6":"y x","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y x","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.97,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"textoverflow,ellipsis","ie_id":"","chrome_id":""},"webm":{"title":"WebM video format","description":"Multimedia format designed to provide a royalty-free, high-quality open video compression format for use with HTML5 video. WebM supports the video codec VP8 and VP9.","spec":"http://www.webmproject.org/","status":"other","links":[{"url":"https://tools.google.com/dlpage/webmmf","title":"Codec for IE9 support"},{"url":"http://www.broken-links.com/2010/09/01/playing-webm-in-safari-with-plugins/","title":"Info on supporting WebM in Safari"},{"url":"http://webmproject.org","title":"Official website"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video-webm","title":"has.js test"},{"url":"http://perian.org/","title":"Perian :Mac OSX Webm Codec install"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Will work in IE9+ and Safari/MacOSX provided the user has the WebM codecs installed. Partial support indicates that at least one codec is supported but not all.","notes_by_num":{},"usage_perc_y":60.45,"usage_perc_a":8.06,"ucprefix":false,"parent":"video","keywords":"matroska","ie_id":"webmvideo","chrome_id":"6362186595172352"},"mpeg4":{"title":"MPEG-4/H.264 video format","description":"Commonly used video compression format (not royalty-free)","spec":"http://ip.hhi.de/imagecom_G1/assets/pdfs/csvt_overview_0305.pdf","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC","title":"Wikipedia article"},{"url":"http://www.interoperabilitybridges.com/html5-extension-for-wmp-plugin","title":"Firefox extension allowing support in Win7"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"a"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"The Android 2.3 browser currently requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to play videos\r\n\r\nFirefox supports H.264 on Windows 7 and later since version 21. Firefox supports H.264 on Linux since version 26 if the appropriate gstreamer plug-ins are installed.\r\n\r\nPartial support for Firefox refers to the lack of support in OSX & some Linux platforms, for Android Firefox it refers to the inability of hardware acceleration.","notes_by_num":{},"usage_perc_y":81.75,"usage_perc_a":8.4,"ucprefix":false,"parent":"video","keywords":"avc,mp4,mpv,mov,aac,h264","ie_id":"","chrome_id":""},"ogv":{"title":"Ogg/Theora video format","description":"Free lossy video compression format.","spec":"http://theora.org/doc/","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/Theora","title":"Wikipedia article"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":51.85,"usage_perc_a":0,"ucprefix":false,"parent":"video","keywords":"xiph","ie_id":"","chrome_id":""},"wordwrap":{"title":"CSS3 Overflow-wrap","description":"Allows lines to be broken within words if an otherwise unbreakable string is too long to fit. Currently mostly supported using the `word-wrap` property.","spec":"http://www.w3.org/TR/css3-text/#overflow-wrap","status":"wd","links":[{"url":"https://developer.mozilla.org/En/CSS/Word-wrap","title":"MDN article"},{"url":"http://www.css3files.com/text/#wordwrap","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/word-wrap","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to requiring the legacy name \"word-wrap\" (rather than overflow-wrap) to work.","notes_by_num":{},"usage_perc_y":58.98,"usage_perc_a":38.12,"ucprefix":false,"parent":"","keywords":"wordwrap,word-wrap","ie_id":"","chrome_id":""},"progressmeter":{"title":"Progress & Meter","description":"Method of indicating a progress state (progress element) or the current level of a gauge (meter element).\r\n","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-progress-element","status":"ls","links":[{"url":"https://dev.opera.com/articles/new-form-features-in-html5/#newoutput","title":"Dev.Opera article"},{"url":"http://html5doctor.com/measure-up-with-the-meter-tag/","title":"HTML5 Doctor on meter element"},{"url":"http://peter.sh/examples/?/html/meter-progress.html","title":"Examples of progress and meter elements"},{"url":"http://docs.webplatform.org/wiki/html/elements/progress","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Firefox 6-15, IE10 & iOS7 Safari refers to supporting the progress element, but not the meter element. iOS7 Safari also does not support \"indeterminate\" progress elements.\r\n\r\nFor styling progress bars, [see this article](http://css-tricks.com/html5-progress-element/)","notes_by_num":{},"usage_perc_y":68.33,"usage_perc_a":17.5,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"object-fit":{"title":"CSS3 object-fit/object-position","description":"Method of specifying how an object (image or video) should fit inside its box. object-fit options include \"contain\" (fit according to aspect ratio), \"fill\" (stretches object to fill) and \"cover\" (overflows box but maintains ratio), where object-position allows the object to be repositioned like background-image does.","spec":"http://www.w3.org/TR/css3-images/","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/css3-object-fit-object-position/","title":"Dev.Opera article"},{"url":"http://docs.webplatform.org/wiki/css/properties/object-fit","title":"WebPlatform Docs"},{"url":"https://github.com/anselmh/object-fit","title":"object-fit JavaScript-Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a #1","8":"a #1"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y x","15":"n","16":"n","17":"n","18":"n","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a #1","8.1":"a #1"},"op_mini":{"5.0-8.0":"y x"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support in Safari refers to support for `object-fit` but not `object-position`."},"usage_perc_y":50.14,"usage_perc_a":7.36,"ucprefix":false,"parent":"","keywords":"objectfit,objectposition","ie_id":"objectfitandobjectposition","chrome_id":"5302669702856704"},"xhr2":{"title":"XMLHttpRequest 2","description":"Adds more functionality to AJAX requests like file uploads, transfer progress information and the ability to send form data.","spec":"https://xhr.spec.whatwg.org/","status":"ls","links":[{"url":"https://developer.mozilla.org/en/XMLHttpRequest/FormData","title":"MDN article on FormData"},{"url":"https://github.com/3nr1c/jUri.js","title":"Polyfill for FormData object"},{"url":"http://docs.webplatform.org/wiki/apis/xhr/XMLHttpRequest","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"u","6":"u","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.91,"usage_perc_a":0.11,"ucprefix":false,"parent":"","keywords":"formdata","ie_id":"","chrome_id":""},"minmaxwh":{"title":"CSS min/max-width/height","description":"Method of setting a minimum or maximum width or height to an element. ","spec":"http://www.w3.org/TR/CSS21/visudet.html#min-max-widths","status":"rec","links":[{"url":"http://code.google.com/p/ie7-js/","title":"JS library with support"},{"url":"http://docs.webplatform.org/wiki/css/properties/min-width","title":"WebPlatform Docs"},{"url":"http://www.impressivewebs.com/min-max-width-height-css/","title":"CSS Basics post"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE7 does not support \"inherit\" as a value on any of these properties. IE8 has some bugs with max-width/height combined with overflow: auto/scroll.","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"min-width,min-height,max-width,max-height","ie_id":"","chrome_id":""},"details":{"title":"Details & Summary elements","description":"The element generates a simple no-JavaScript widget to show/hide element contents, optionally by clicking on its child element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-details-element","status":"ls","links":[{"url":"https://mathiasbynens.be/notes/html5-details-jquery","title":"jQuery fallback script"},{"url":"https://gist.github.com/370590","title":"Fallback script"},{"url":"http://html5doctor.com/summary-figcaption-element/","title":"HTML5 Doctor article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-details","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/details","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":65.56,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"detailssummary","chrome_id":"5348024557502464"},"text-stroke":{"title":"CSS text-stroke","description":"Method of declaring the outline (stroke) width and color for text.","spec":"http://developer.apple.com/library/safari/documentation/appleapplications/reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-_webkit_text_stroke","status":"unoff","links":[{"url":"http://css-tricks.com/7405-adding-stroke-to-web-text/","title":"Information & workarounds"},{"url":"http://www.westciv.com/tools/textStroke/","title":"Live editor"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"a x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Does not yet appear in any W3C specification. Was briefly included in a spec as the \"text-outline\" property, but this was removed.","notes_by_num":{},"usage_perc_y":62.7,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"textstroke,stroke-color,stroke-width,fill-color","ie_id":"","chrome_id":""},"inline-block":{"title":"CSS inline-block","description":"Method of displaying an element as a block while flowing it with text. ","spec":"http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning","status":"rec","links":[{"url":"http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/","title":"Blog post w/info"},{"url":"http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/","title":"Info on cross browser support"},{"url":"http://docs.webplatform.org/wiki/css/properties/display","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Only supported in IE6 and IE7 on elements with a display of \"inline\" by default. [Alternative properties](http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/) are available to provide complete cross-browser support.","notes_by_num":{},"usage_perc_y":96.94,"usage_perc_a":0.25,"ucprefix":false,"parent":"","keywords":"inlineblock","ie_id":"","chrome_id":""},"notifications":{"title":"Web Notifications","description":"Method of alerting the user outside of a web page by displaying notifications (that do not require interaction by the user).","spec":"http://www.w3.org/TR/notifications/","status":"wd","links":[{"url":"http://www.html5rocks.com/tutorials/notifications/quick/","title":"HTML5 Rocks tutorial"},{"url":"http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification","title":"Chromium API"},{"url":"https://addons.mozilla.org/en-us/firefox/addon/221523/","title":"Add-on "},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/notification","title":"MDN Notifications"},{"url":"http://www.sitepoint.com/introduction-web-notifications-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/web-notifications-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":49.15,"usage_perc_a":4.15,"ucprefix":false,"parent":"","keywords":"","ie_id":"webnotifications","chrome_id":"5064350557536256"},"stream":{"title":"getUserMedia/Stream API","description":"Method of accessing external device data (such as a webcam video stream). Formerly this was envisioned as the element.","spec":"http://www.w3.org/TR/mediacapture-streams/","status":"wd","links":[{"url":"https://dev.opera.com/blog/webcam-orientation-preview/","title":"Technology preview from Opera"},{"url":"http://docs.webplatform.org/wiki/dom/Navigator/getUserMedia","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":61.48,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"camera,device,getUserMedia,media stream,Media Capture API","ie_id":"mediacaptureandstreams","chrome_id":"6067380039974912,6605041225957376"},"svg-img":{"title":"SVG in HTML img element","description":"Method of displaying SVG images in HTML using .","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html","status":"ls","links":[{"url":"http://blog.dholbert.org/2010/10/svg-as-image.html","title":"Blog post with examples"},{"url":"http://www.codedread.com/blog/","title":"Blog with SVGs an images"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.76,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"svg-as-img,svg-in-img","ie_id":"","chrome_id":""},"datalist":{"title":"Datalist element","description":"Method of setting a list of options for a user to select in a text field, while leaving the ability to enter a custom value.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element","status":"ls","links":[{"url":"http://hacks.mozilla.org/2010/11/firefox-4-html5-forms/","title":"Mozilla Hacks article"},{"url":"http://afarkas.github.com/webshim/demos/","title":"HTML5 Library including datalist support"},{"url":"https://developer.mozilla.org/en/HTML/Element/datalist","title":"MDN reference"},{"url":"http://docs.webplatform.org/wiki/html/elements/datalist","title":"WebPlatform Docs"},{"url":"http://demo.agektmr.com/datalist/","title":"Eiji Kitamura's options demos & tests"},{"url":"http://github.com/thgreasi/datalist-polyfill","title":"Minimal Datalist polyfill w/tutorial"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"p"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE10 refers to [significantly buggy behavior](http://playground.onereason.eu/2013/04/ie10s-lousy-support-for-datalists/). Firefox doesn't support [datalist association with inputs of type `number`](http://codepen.io/graste/pen/bNoVKW).","notes_by_num":{},"usage_perc_y":63.15,"usage_perc_a":9.46,"ucprefix":false,"parent":"forms","keywords":"list attribute","ie_id":"datalistelement","chrome_id":"6090950820495360"},"dataset":{"title":"dataset & data-* attributes","description":"Method of applying and accessing custom data to elements.","spec":"https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes","status":"ls","links":[{"url":"http://html5doctor.com/html5-custom-data-attributes/","title":"HTML5 Doctor article"},{"url":"http://html5demos.com/dataset","title":"Demo using dataset"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-dataset","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/data-*","title":"WebPlatform Docs"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset","title":"MDN Reference - dataset"},{"url":"https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes","title":"MDN Guide - Using data-* attributes"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"a","3.6":"a","4":"a","5":"a","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support refers to being able to use `data-*` attributes and access them using `getAttribute`. \r\n\r\n\"Supported\" refers to accessing the values using the `dataset` property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements.","notes_by_num":{},"usage_perc_y":87.12,"usage_perc_a":10.07,"ucprefix":false,"parent":"","keywords":"DOMStringMap","ie_id":"","chrome_id":""},"css-grid":{"title":"CSS Grid Layout","description":"Method of using a grid concept to lay out content, providing a mechanism for authors to divide available space for lay out into columns and rows using a set of predictable sizing behaviors","spec":"http://www.w3.org/TR/css3-grid-layout/","status":"wd","links":[{"url":"http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx","title":"IE Blog post"},{"url":"https://bugs.webkit.org/show_bug.cgi?id=60731","title":"Webkit (Chrome, Safari, etc.) feature request"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=616605","title":"Mozilla (Firefox) feature request"},{"url":"https://github.com/codler/Grid-Layout-Polyfill","title":"Polyfill based on old spec"},{"url":"https://github.com/FremyCompany/css-grid-polyfill/","title":"Polyfill based on new spec"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"a x #2","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"p","26":"p","27":"p","28":"p","29":"p d #1","30":"p d #1","31":"p d #1","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1","40":"p d #1","41":"p d #1","42":"p d #1","43":"p d #1","44":"p d #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"p d #1","29":"p d #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"a x #2","11":"a x #2"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Partial support in IE refers to supporting an [older version](http://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/) of the specification."},"usage_perc_y":0,"usage_perc_a":10.16,"ucprefix":false,"parent":"","keywords":"grids,grid-row,grid-column","ie_id":"grid","chrome_id":"4589636412243968"},"menu":{"title":"Toolbar/context menu","description":"Method of defining a toolbar menu, a context menu or a list of (interactive) options using the element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-menu-element","status":"ls","links":[{"url":"https://bug617528.bugzilla.mozilla.org/attachment.cgi?id=554309","title":"Demo"},{"url":"http://addyosmani.github.com/jQuery-contextMenu/","title":"jQuery polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/events.js#event-contextmenu","title":"has.js test"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Firefox refers to being limited to context menus, not toolbar menus.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":11.97,"ucprefix":false,"parent":"","keywords":"contextmenu,menuitem,command","ie_id":"","chrome_id":""},"rem":{"title":"rem (root em) units","description":"Type of unit similar to \"em\", but relative only to the root element, not any parent element. Thus compounding does not occur as it does with \"em\" units.","spec":"http://www.w3.org/TR/css3-values/#font-relative-lengths","status":"cr","links":[{"url":"http://snook.ca/archives/html_and_css/font-size-with-rem","title":"Article on usage"},{"url":"https://github.com/chuckcarpenter/REM-unit-polyfill","title":"REM Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"u","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"rems","ie_id":"","chrome_id":""},"ttf":{"title":"TTF/OTF - TrueType and OpenType font support","description":"Support for the TrueType (.ttf)and OpenType (.otf) outline font formats in @font-face. ","spec":"http://developer.apple.com/fonts/TTRefMan/index.html","status":"other","links":[{"url":"http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer","title":"What is the status of TTF support in Internet Explorer?"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"u","11":"u"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE9 refers to the fonts only working [when set to be \"installable\"](http://blogs.msdn.com/b/ie/archive/2010/07/15/the-css-corner-better-web-typography-for-better-design.aspx).","notes_by_num":{},"usage_perc_y":79.17,"usage_perc_a":11.28,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"touch":{"title":"Touch events","description":"Method of registering when, where and how the interface is touched, for devices with a touch screen. These DOM events are similar to mousedown, mousemove, etc.","spec":"http://www.w3.org/TR/touch-events/","status":"rec","links":[{"url":"http://www.quirksmode.org/mobile/tableTouch.html","title":"Detailed support tables"},{"url":"http://www.quirksmode.org/m/tests/drag2.html","title":"Multi-touch demo"},{"url":"http://schepers.cc/getintouch","title":"Information on the spec development"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh673557(v=vs.85).aspx","title":"Internet Explorer's gesture and touch implementation."},{"url":"http://github.com/CamHenlin/TouchPolyfill","title":"Touch polyfill for supporting touch events on Internet Explorer"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"a #2"},"and_uc":{"9.9":"y"}},"notes":"Internet Explorer implements Pointer Events specification which supports more input devices than Touch Events one.\r\n\r\nThere is a library on GitHub that is working toward bringing W3C touch events to IE 10 and 11: https://github.com/CamHenlin/TouchPolyfill \r\n\r\nRemoved support in Firefox refers to desktop Firefox only.","notes_by_num":{"1":"Can be enabled in Firefox using the dom.w3c_touch_events.enabled flag (disabled by default for site compatibility reasons)","2":"Supported on IE11 Mobile for phones with \"[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""},"usage_perc_y":63.38,"usage_perc_a":0.88,"ucprefix":false,"parent":"","keywords":"touchstart,touchend,touchmove,touchenter,touchleave,touchcancel","ie_id":"touchevents","chrome_id":"6156165603917824"},"matchesselector":{"title":"matches() DOM method","description":"Method of testing whether or not a DOM element matches a given selector. Formerly known (and largely supported with prefix) as matchesSelector.","spec":"https://dom.spec.whatwg.org/#dom-element-matches","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/Element.mozMatchesSelector","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/dom/HTMLElement/matchesSelector","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a x","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"a x","11.6":"a x","12":"a x","12.1":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"y"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"a x","12.1":"a x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to supporting the older specification's \"matchesSelector\" name rather than just \"matches\".","notes_by_num":{},"usage_perc_y":61.28,"usage_perc_a":29.73,"ucprefix":false,"parent":"","keywords":" matchesSelector","ie_id":"","chrome_id":""},"pointer-events":{"title":"CSS pointer-events (for HTML)","description":"This CSS property, when set to \"none\" allows elements to not receive hover/click events, instead the event will occur on anything behind it. ","spec":"http://wiki.csswg.org/spec/css4-ui#pointer-events","status":"unoff","links":[{"url":"http://robertnyman.com/2010/03/22/css-pointer-events-to-allow-clicks-on-underlying-elements/","title":"Article & tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-pointerevents","title":"has.js test"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Already part of the SVG specification, and all SVG-supporting browsers appear to support the property on SVG elements.","notes_by_num":{},"usage_perc_y":87.29,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"pointerevents","ie_id":"csspointerevents","chrome_id":""},"blobbuilder":{"title":"Blob constructing","description":"Construct Blobs (binary large objects) either using the BlobBuilder API (deprecated) or the Blob constructor.","spec":"http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/BlobBuilder","title":"MDN article on BlobBuilder"},{"url":"https://developer.mozilla.org/en-US/docs/DOM/Blob","title":"MDN article on Blobs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to only supporting the now deprecated BlobBuilder to create blobs.","notes_by_num":{},"usage_perc_y":77.73,"usage_perc_a":10.51,"ucprefix":true,"parent":"fileapi","keywords":"","ie_id":"blob","chrome_id":"5328783104016384"},"filereader":{"title":"FileReader API","description":"Method of reading the contents of a File or Blob object into memory","spec":"http://www.w3.org/TR/FileAPI/#dfn-filereader","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/FileReader","title":"FileReader API"},{"url":"http://docs.webplatform.org/wiki/apis/file/FileReader","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.43,"usage_perc_a":0,"ucprefix":false,"parent":"fileapi","keywords":"","ie_id":"filereader","chrome_id":"5171003185430528"},"filesystem":{"title":"Filesystem & FileWriter API","description":"Method of reading and writing files to a sandboxed file system.","spec":"http://www.w3.org/TR/file-system-api/","status":"unoff","links":[{"url":"http://www.html5rocks.com/en/tutorials/file/filesystem/","title":"HTML5 Rocks tutorial"},{"url":"http://docs.webplatform.org/wiki/apis/filesystem","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"The File API: Directories and System specification is no longer being maintained and support may be dropped in future versions.","notes_by_num":{},"usage_perc_y":45.73,"usage_perc_a":0.16,"ucprefix":false,"parent":"","keywords":"filewriter","ie_id":"filewriter","chrome_id":"5452478162141184"},"bloburls":{"title":"Blob URLs","description":"Method of creating URL handles to the specified File or Blob object.","spec":"http://www.w3.org/TR/FileAPI/#url","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/window.URL.createObjectURL","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":87.8,"usage_perc_a":0,"ucprefix":false,"parent":"fileapi","keywords":"createobjecturl","ie_id":"","chrome_id":""},"rellist":{"title":"relList (DOMTokenList)","description":"Method of easily manipulating rel attribute values on elements, using the DOMTokenList object (similar to classList).","spec":"https://html.spec.whatwg.org/multipage/semantics.html#dom-a-rellist","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/DOM/DOMTokenList","title":"MDN - DOMTokenList"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.14,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"typedarrays":{"title":"Typed Arrays","description":"JavaScript typed arrays provide a mechanism for accessing raw binary data much more efficiently.\r\n","spec":"http://www.khronos.org/registry/typedarray/specs/latest/","status":"other","links":[{"url":"https://developer.mozilla.org/en/javascript_typed_arrays","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a #2","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a #2","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"IE10 (and IE 10&11 mobile) does not support `Uint8ClampedArray`"},"usage_perc_y":86.21,"usage_perc_a":2.51,"ucprefix":false,"parent":"","keywords":"float64array,dataview,uint8array","ie_id":"typedarrays","chrome_id":"5135818813341696"},"deviceorientation":{"title":"DeviceOrientation events","description":"API for detecting orientation and motion events from the device running the browser.","spec":"http://www.w3.org/TR/orientation-event/","status":"wd","links":[{"url":"http://www.html5rocks.com/en/tutorials/device/orientation/","title":"HTML5 Rocks tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-orientation","title":"has.js test"},{"url":"http://html5labs.interoperabilitybridges.com/prototypes/device-orientation-events/device-orientation-events/info","title":"DeviceOrientation implementation prototype for IE10"},{"url":"http://aurelio.audero.it/demo/device-orientation-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a #1","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"p","4":"p","5":"p","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to the lack of compassneedscalibration event. Partial support also refers to the lack of devicemotion event support for Chrome 30- and Opera. Opera Mobile 14 lost the ondevicemotion event support. Firefox 3.6, 4 and 5 support the non-standard [MozOrientation](https://developer.mozilla.org/en/DOM/MozOrientation) event.","notes_by_num":{"1":"`compassneedscalibration` supported in IE11 only for compatible devices with Windows 8.1+."},"usage_perc_y":0.51,"usage_perc_a":83.28,"ucprefix":false,"parent":"","keywords":"","ie_id":"deviceorientation,devicemotion","chrome_id":"5874690627207168,5556931766779904"},"script-defer":{"title":"defer attribute for external scripts","description":"The boolean defer attribute on script elements allows the external JavaScript file to run when the DOM is loaded, without delaying page load first.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-script-defer","status":"ls","links":[{"url":"https://developer.mozilla.org/en/HTML/Element/script#Attributes","title":"MDN article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-defer","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/defer","title":"WebPlatform Docs"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older IE refers to a buggy implementation (see issue).","notes_by_num":{},"usage_perc_y":88.74,"usage_perc_a":4.96,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"nav-timing":{"title":"Navigation Timing API","description":"API for accessing timing information related to navigation and elements.","spec":"http://www.w3.org/TR/navigation-timing/","status":"rec","links":[{"url":"https://developer.mozilla.org/en/API/navigationTiming","title":"MDN article"},{"url":"http://www.html5rocks.com/en/tutorials/webperformance/basics/","title":"HTML5 Rocks tutorial"},{"url":"http://docs.webplatform.org/wiki/apis/navigation_timing","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Removed in iOS 8.1 due to poor performance.","notes_by_num":{},"usage_perc_y":81.7,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,performance.timing","ie_id":"navigationtimingapi","chrome_id":"5584144679567360"},"audio-api":{"title":"Web Audio API","description":"High-level JavaScript API for processing and synthesizing audio","spec":"http://www.w3.org/TR/webaudio/","status":"wd","links":[{"url":"https://github.com/corbanbrook/audionode.js","title":"Polyfill to support Web Audio API in Firefox"},{"url":"http://docs.webplatform.org/wiki/apis/webaudio","title":"WebPlatform Docs"},{"url":"http://www.doboism.com/projects/webaudio-compatibility/","title":"Additional browser compatibility tests for specific features"},{"url":"https://github.com/g200kg/WAAPISim","title":"Polyfill to enable Web Audio API through Firefox Audio Data api or flash"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Firefox versions < 25 support an alternative, deprecated audio API.\r\n\r\nChrome support [went through some changes](http://updates.html5rocks.com/2014/07/Web-Audio-Changes-in-m36) as of version 36.","notes_by_num":{},"usage_perc_y":67.15,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web-audio","ie_id":"webaudioapi","chrome_id":"6261718720184320"},"css-regions":{"title":"CSS Regions","description":"Method of flowing content into multiple elements.","spec":"http://www.w3.org/TR/css3-regions/","status":"wd","links":[{"url":"http://html.adobe.com/webstandards/cssregions/","title":"Adobe demos and samples"},{"url":"http://msdn.microsoft.com/en-us/ie/hh272902#_CSSConnected","title":"IE10 developer guide info"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@region","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"n d","20":"n d","21":"n d","22":"n d","23":"n d","24":"n d","25":"n d","26":"n d","27":"n d","28":"n d","29":"n d","30":"n d","31":"n d","32":"n d","33":"n d","34":"n d","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"y x"}},"notes":"Support in IE10 and IE11 is limited to using an iframe as a content source with the `-ms-flow-into: flow_name;` and `-ms-flow-from: flow_name;` syntax. ","notes_by_num":{},"usage_perc_y":13.43,"usage_perc_a":10.24,"ucprefix":false,"parent":"","keywords":"","ie_id":"regions","chrome_id":"5655612935372800"},"spellcheck-attribute":{"title":"Spellcheck attribute","description":"Attribute for `input`/`textarea` fields to enable/disable the browser's spellchecker.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#spelling-and-grammar-checking","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/HTML/Controlling_spell_checking_in_HTML_formsControlling_spell_checking_in_HTML_forms","title":"MDN article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"The partial support in mobile browsers results from their OS generally having built-in spell checking instead of using the wavy underline to indicate misspelled words. `spellcheck=\"false\"` does not seem to have any effect in these browsers.","notes_by_num":{},"usage_perc_y":60.31,"usage_perc_a":31.63,"ucprefix":false,"parent":"","keywords":"spelling","ie_id":"","chrome_id":""},"fullscreen":{"title":"Full Screen API","description":"API for allowing content (like a video or canvas element) to take up the entire screen.","spec":"http://www.w3.org/TR/fullscreen/","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/Using_full-screen_mode","title":"MDN article"},{"url":"http://jlongster.com/2011/11/21/canvas.html","title":"Blog post"},{"url":"http://hacks.mozilla.org/2012/01/using-the-fullscreen-api-in-web-browsers/","title":"Mozilla hacks article"},{"url":"http://docs.webplatform.org/wiki/dom/Element/requestFullscreen","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"n","11":"y x"},"and_uc":{"9.9":"n"}},"notes":"Partial support refers to supporting an earlier draft of the spec.","notes_by_num":{},"usage_perc_y":56.94,"usage_perc_a":12.5,"ucprefix":false,"parent":"","keywords":"full-screen","ie_id":"fullscreenapi","chrome_id":"5259513871466496"},"requestanimationframe":{"title":"requestAnimationFrame","description":"API allowing a more efficient way of running script-based animation, compared to traditional methods using timeouts.","spec":"http://www.w3.org/TR/animation-timing/#requestAnimationFrame","status":"cr","links":[{"url":"http://paulirish.com/2011/requestanimationframe-for-smart-animating/","title":"Blog post"},{"url":"http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/","title":"Mozilla Hacks article"},{"url":"http://docs.webplatform.org/wiki/dom/Window/requestAnimationFrame","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":85.57,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"requestanimationframe","chrome_id":"5233400470306816"},"input-range":{"title":"Range input type","description":"Form field type that allows the user to select a value using a slider widget.","spec":"https://html.spec.whatwg.org/multipage/forms.html#range-state-(type=range)","status":"ls","links":[{"url":"https://github.com/fryn/html5slider","title":"Polyfill for Firefox"},{"url":"https://github.com/freqdec/fd-slider","title":"Cross-browser polyfill"},{"url":"http://tutorialzine.com/2011/12/what-you-need-to-know-html5-range-input/","title":"Tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-range","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/range","title":"WebPlatform Docs"},{"url":"https://github.com/andreruffert/rangeslider.js","title":"rangeslider.js polyfill"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Currently all Android browsers with partial support hide the slider input field by default. However, the element [can be styled](http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/) to be made visible and usable.","notes_by_num":{},"usage_perc_y":87.46,"usage_perc_a":1.18,"ucprefix":false,"parent":"forms","keywords":"input type=\"range\"","ie_id":"","chrome_id":""},"matchmedia":{"title":"matchMedia","description":"API for finding out whether or not a media query applies to the document.","spec":"http://www.w3.org/TR/cssom-view/#dom-window-matchmedia","status":"wd","links":[{"url":"https://github.com/paulirish/matchMedia.js/","title":"matchMedia.js polyfill"},{"url":"https://developer.mozilla.org/en/DOM/window.matchMedia","title":"MDN article"},{"url":"https://developer.mozilla.org/en/CSS/Using_media_queries_from_code","title":"MDN tutorial"},{"url":"http://docs.webplatform.org/wiki/css/media_queries/apis/matchMedia","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.64,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"mediaquerylist","ie_id":"matchmedia","chrome_id":"4677872220372992"},"input-datetime":{"title":"Date and time input types","description":"Form field widget to easily allow users to enter a date or a time, generally by using a calendar/time input widget. Previously there was also a single field for both date & time, but this has been deprecated.","spec":"https://html.spec.whatwg.org/multipage/forms.html#date-state-(type=date)","status":"ls","links":[{"url":"http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-browser-datepickers-within-minutes/","title":"Datepicker tutorial w/polyfill"},{"url":"https://github.com/zoltan-dulac/html5Forms.js","title":"Polyfill for HTML5 forms"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-datetime;input-type-datetime-local","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/date","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Partial support in iOS refers to a lack of support for attributes like step, min, or max.\r\n\r\nOlder versions of Safari provide date-formatted text fields, but no real calendar widget.\r\n\r\nSome modified versions of the Android 4.x browser do have support for date/time fields.","notes_by_num":{},"usage_perc_y":60.76,"usage_perc_a":0,"ucprefix":false,"parent":"forms","keywords":"datepicker,timepicker,input type=\"date\",input type=\"time\"","ie_id":"daterelatedinputtypes,timerelatedinputtypes","chrome_id":"6640933999214592"},"input-color":{"title":"Color input type","description":"Form field allowing the user to select a color.","spec":"https://html.spec.whatwg.org/multipage/forms.html#color-state-(type=color)","status":"ls","links":[{"url":"http://www.html5tutorial.info/html5-color.php","title":"Tutorial"},{"url":"https://github.com/jonstipe/color-polyfill","title":"Polyfill"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/color","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a"}},"notes":"","notes_by_num":{},"usage_perc_y":60.93,"usage_perc_a":3.84,"ucprefix":false,"parent":"forms","keywords":"colour,input type=\"color\"","ie_id":"","chrome_id":""},"input-number":{"title":"Number input type","description":"Form field type for numbers.","spec":"https://html.spec.whatwg.org/multipage/forms.html#number-state-(type=number)","status":"ls","links":[{"url":"http://www.html5tutorial.info/html5-number.php","title":"Tutorial"},{"url":"https://github.com/jonstipe/number-polyfill","title":"Polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-number","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/number","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"iOS Safari, Android 4, Chrome for Android show number input, but do not use \"step\", \"min\" or \"max\" attributes or show increment/decrement buttons. Internet Explorer 10 and 11 do not show increment/decrement buttons. Firefox doesn't support [autocomplete content via datalist](http://codepen.io/graste/pen/bNoVKW) elements.","notes_by_num":{},"usage_perc_y":49.95,"usage_perc_a":38.03,"ucprefix":false,"parent":"forms","keywords":"spinner,input type=\"number\"","ie_id":"","chrome_id":""},"iframe-sandbox":{"title":"sandbox attribute for iframes","description":"Method of running external site pages with reduced privileges (e.g. no JavaScript) in iframes.","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-sandbox","status":"ls","links":[{"url":"http://blog.chromium.org/2010/05/security-in-depth-html5s-sandbox.html","title":"Chromium blog article"},{"url":"http://msdn.microsoft.com/en-us/hh563496","title":"MSDN article"},{"url":"http://docs.webplatform.org/wiki/html/attributes/sandbox","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":87.89,"usage_perc_a":0.54,"ucprefix":false,"parent":"","keywords":"","ie_id":"iframesandboxattribute","chrome_id":"5715536319086592"},"css-counters":{"title":"CSS Counters","description":"Method of controlling number values in generated content, using the counter-reset and counter-increment properties.","spec":"http://www.w3.org/TR/CSS21/generate.html#counters","status":"wd","links":[{"url":"http://onwebdev.blogspot.com/2012/02/css-counters-tutorial.html","title":"Tutorial and information"},{"url":"https://developer.mozilla.org/en/CSS_Counters","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/counter-reset","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-resize":{"title":"CSS resize property","description":"Method of allowing an element to be resized by the user, with options to limit to a given direction. ","spec":"http://www.w3.org/TR/css3-ui/#resize","status":"wd","links":[{"url":"http://css-tricks.com/almanac/properties/r/resize/","title":"CSS Tricks info"},{"url":"http://davidwalsh.name/textarea-resize","title":"On textarea resizing"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Opera 12.10+ currently only supports the resize property for textarea elements.","notes_by_num":{},"usage_perc_y":61.27,"usage_perc_a":0.23,"ucprefix":false,"parent":"","keywords":"horizontal,vertical","ie_id":"","chrome_id":""},"input-placeholder":{"title":"input placeholder attribute","description":"Method of setting placeholder text for text-like input fields, to suggest the expected inserted information.","spec":"https://html.spec.whatwg.org/multipage/forms.html#attr-input-placeholder","status":"ls","links":[{"url":"http://www.zachleat.com/web/placeholder/","title":"Article on usage"},{"url":"https://github.com/mathiasbynens/jquery-placeholder","title":"Polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-attr-placeholder","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/placeholder","title":"WebPlatform Docs"},{"url":"https://code.google.com/p/android/issues/detail?id=24626","title":"Issue 24626: Placeholder text for an input type="}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"a","11.1":"a","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari and Opera versions refers to lacking placeholder support on textarea elements. ","notes_by_num":{},"usage_perc_y":88.04,"usage_perc_a":1.15,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"spdy":{"title":"HTTP/2 protocol / SPDY","description":"Networking protocol for low-latency transport of content over the web. Originally started out from the SPDY protocol, now standardized as HTTP version 2.","spec":"http://http2.github.io/http2-spec/index.html","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/HTTP/2","title":"Wikipedia"},{"url":"http://dev.chromium.org/spdy/spdy-whitepaper","title":"SPDY whitepaper"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"u"}},"notes":"","notes_by_num":{},"usage_perc_y":71.53,"usage_perc_a":8.02,"ucprefix":false,"parent":"","keywords":"http2","ie_id":"http2","chrome_id":"5152586365665280"},"css-repeating-gradients":{"title":"CSS Repeating Gradients","description":"Method of defining a repeating linear or radial color gradient as a CSS image.","spec":"http://www.w3.org/TR/css3-images/#repeating-gradients","status":"cr","links":[{"url":"https://developer.mozilla.org/en/CSS/repeating-linear-gradient","title":"MDN article"},{"url":"http://www.css3files.com/gradient/#repeatinglineargradient","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/repeating-linear-gradient","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"a x","11.5":"a x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Firefox 10+, Chrome 26+ and Opera 11.6+ also support the new \"to (side)\" syntax.","notes_by_num":{},"usage_perc_y":88.79,"usage_perc_a":0.01,"ucprefix":false,"parent":"css-gradients","keywords":"","ie_id":"","chrome_id":""},"css-filters":{"title":"CSS Filter Effects","description":"Method of applying filter effects (like blur, grayscale, brightness, contrast and hue) to elements, previously only possible by using SVG.","spec":"http://www.w3.org/TR/filter-effects/","status":"wd","links":[{"url":"http://html5-demos.appspot.com/static/css/filters/index.html","title":"Demo file for WebKit browsers"},{"url":"http://www.html5rocks.com/en/tutorials/filters/understanding-css/","title":"HTML5Rocks article"},{"url":"http://dl.dropbox.com/u/3260327/angular/CSS3ImageManipulation.html","title":"Filter editor"},{"url":"http://bennettfeely.com/filters/","title":"Filter Playground"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a d #1","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"Note that this property is significantly different from and incompatible with Microsoft's [older \"filter\" property](http://msdn.microsoft.com/en-us/library/ie/ms530752%28v=vs.85%29.aspx).\r\n\r\nPartial support in Firefox before version 34 [only implemented the url() function of the filter property](https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Browser_compatibility)","notes_by_num":{"1":"Supported in Firefox under the `layout.css.filters.enabled` flag."},"usage_perc_y":72.81,"usage_perc_a":2.46,"ucprefix":false,"parent":"","keywords":"sepia,hue-rotate,invert,saturate","ie_id":"filters","chrome_id":"5822463824887808"},"getcomputedstyle":{"title":"getComputedStyle","description":"API to get the current computed CSS styles applied to an element. This may be the current value applied by an animation or as set by a stylesheet.","spec":"http://www.w3.org/TR/cssom/#dom-window-getcomputedstyle","status":"rec","links":[{"url":"https://developer.mozilla.org/en/DOM/window.getComputedStyle","title":"MDN article"},{"url":"http://ie.microsoft.com/testdrive/HTML5/getComputedStyle/","title":"Demo"},{"url":"http://snipplr.com/view/13523/","title":"Polyfill for IE"},{"url":"http://docs.webplatform.org/wiki/css/cssom/methods/getComputedStyle","title":"WebPlatform Docs"}],"categories":["CSS3","DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"a","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Firefox versions refers to requiring the second parameter to be included.\r\n\r\nPartial support in all other browsers refers to not supporting getComputedStyle on pseudo-elements.","notes_by_num":{},"usage_perc_y":90.65,"usage_perc_a":3.39,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"word-break":{"title":"CSS3 word-break","description":"Property to prevent or allow words to be broken over multiple lines between letters.","spec":"http://www.w3.org/TR/css3-text/#word-break","status":"wd","links":[{"url":"https://developer.mozilla.org/en/CSS/word-break","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/word-break","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to supporting the \"break-all\" value, but not the \"keep-all\" value.","notes_by_num":{},"usage_perc_y":27.01,"usage_perc_a":66.54,"ucprefix":false,"parent":"","keywords":"break-all,keep-all","ie_id":"","chrome_id":""},"viewport-units":{"title":"Viewport units: vw, vh, vmin, vmax","description":"Length units representing 1% of the viewport size for viewport width (vw), height (vh), the smaller of the two (vmin), or the larger of the two (vmax).","spec":"http://www.w3.org/TR/css3-values/#viewport-relative-lengths","status":"cr","links":[{"url":"http://css-tricks.com/viewport-sized-typography/","title":"Blog post"},{"url":"https://github.com/saabi/vminpoly","title":"Polyfill"},{"url":"https://github.com/rodneyrehm/viewport-units-buggyfill","title":"Buggyfill - Polyfill that fixes buggy support"},{"url":"http://blog.rodneyrehm.de/archives/34-iOS7-Mobile-Safari-And-Viewport-Units.html","title":"Back-Forward issue blog post"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"a","7.0-7.1":"a","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE9 refers to supporting \"vm\" instead of \"vmin\".\r\n\r\nPartial support in iOS7 is due to buggy behavior of the \"vh\" unit (see [workaround](https://gist.github.com/pburtchaell/e702f441ba9b3f76f587)).\r\n\r\nAll other partial support refers to not supporting the \"vmax\" unit. ","notes_by_num":{},"usage_perc_y":68.78,"usage_perc_a":14.06,"ucprefix":false,"parent":"","keywords":"vm,viewport-percentage","ie_id":"","chrome_id":""},"contentsecuritypolicy":{"title":"Content Security Policy 1.0","description":"Mitigate cross-site scripting attacks by whitelisting allowed sources of script, style, and other resources.","spec":"http://www.w3.org/TR/CSP/","status":"cr","links":[{"url":"http://html5rocks.com/en/tutorials/security/content-security-policy/","title":"HTML5Rocks article"},{"url":"http://content-security-policy.com/","title":"CSP Examples & Quick Reference"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"a #1","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y #2","15":"y #2","16":"y #2","17":"y #2","18":"y #2","19":"y #2","20":"y #2","21":"y #2","22":"y #2","23":"y #2","24":"y #2","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a #2","6":"y #2","6.1":"y #2","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a #2","6.0-6.1":"y #2","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y #2"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y x"}},"notes":"The standard HTTP header is `Content-Security-Policy` which is used unless otherwise noted.","notes_by_num":{"1":"Supported through the `X-Content-Security-Policy` header","2":"Supported through the `X-Webkit-CSP` header"},"usage_perc_y":75.25,"usage_perc_a":10.57,"ucprefix":false,"parent":"","keywords":"csp,security,header","ie_id":"contentsecuritypolicy","chrome_id":"5205088045891584"},"pagevisibility":{"title":"Page Visibility","description":"JavaScript API for determining whether a document is visible on the display","spec":"http://www.w3.org/TR/page-visibility/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/apis/timing/properties/visibilityState","title":"WebPlatform Docs"},{"url":"http://www.sitepoint.com/introduction-to-page-visibility-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/page-visibility-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y #1","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":85.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"visibilitystate","ie_id":"pagevisibilityapi","chrome_id":"5689697795833856"},"stricttransportsecurity":{"title":"Strict Transport Security","description":"Declare that a website is only accessible over a secure connection (HTTPS).","spec":"http://tools.ietf.org/html/rfc6797","status":"other","links":[{"url":"http://dev.chromium.org/sts","title":"Chromium article"},{"url":"https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security","title":"MDN article"},{"url":"https://www.owasp.org/index.php/HTTP_Strict_Transport_Security","title":"OWASP article"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"u","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"u"}},"notes":"The HTTP header is 'Strict-Transport-Security'.","notes_by_num":{},"usage_perc_y":69.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"sts,hsts,security,header","ie_id":"httpstricttransportsecurityhsts","chrome_id":"4941480133132288"},"style-scoped":{"title":"Scoped CSS","description":"Allows CSS rules to be scoped to part of the document, based on the position of the style element.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#attr-style-scoped","status":"ls","links":[{"url":"https://github.com/PM5544/scoped-polyfill","title":"Polyfill"},{"url":"http://html5doctor.com/the-scoped-attribute/","title":"HTML5 Doctor article"},{"url":"http://updates.html5rocks.com/2012/03/A-New-Experimental-Feature-style-scoped","title":"HTML5Rocks article"}],"categories":["CSS","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d #1","21":"n d #1","22":"n d #1","23":"n d #1","24":"n d #1","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"u","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":15.51,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"scope","ie_id":"scopedstyles","chrome_id":"5374137958662144"},"svg-fragment":{"title":"SVG fragment identifiers","description":"Method of displaying only a part of an SVG image by defining a view ID or view box dimensions as the file's fragment identifier.","spec":"http://www.w3.org/TR/SVG/linking.html#SVGFragmentIdentifiers","status":"rec","links":[{"url":"http://www.broken-links.com/2012/08/14/better-svg-sprites-with-fragment-identifiers/","title":"Blog post"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"u","11.1":"u","11.5":"u","11.6":"u","12":"u","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":75.65,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"fragments,sprite","ie_id":"","chrome_id":""},"outline":{"title":"CSS outline","description":"The CSS outline property is a shorthand property for setting one or more of the individual outline properties outline-style, outline-width and outline-color in a single rule. In most cases the use of this shortcut is preferable and more convenient.","spec":"http://www.w3.org/TR/CSS2/ui.html#propdef-outline","status":"rec","links":[{"url":"http://dev.w3.org/csswg/css3-ui/#outline","title":"CSS Basic User Interface Module Level 3"},{"url":"https://developer.mozilla.org/en-US/docs/CSS/outline","title":"Mozilla Developer Network: outline"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y #1","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Also supports the value of `invert` for `outline-color`. (support of this value is optional for browsers)"},"usage_perc_y":94.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"-moz-outline,outline-width,outline-style,outline-color","ie_id":"","chrome_id":""},"download":{"title":"Download attribute","description":"When used on an anchor, this attribute signifies that the browser should download the resource the anchor points to rather than navigate to it.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#downloading-resources","status":"ls","links":[{"url":"http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download","title":"HTML5Rocks post"},{"url":"http://html5-demos.appspot.com/static/a.download.html","title":"Demo: creating a text file and downloading it."}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":61.16,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"download,a.download,a[download],download attribute","ie_id":"adownloadattribute","chrome_id":"6473924464345088"},"pointer":{"title":"Pointer events","description":"This specification integrates various inputs from mice, touchscreens, and pens, making separate implementations no longer necessary and authoring for cross-device pointers easier. Not to be mistaken with the unrelated \"pointer-events\" CSS property.","spec":"http://www.w3.org/TR/pointerevents/","status":"rec","links":[{"url":"http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx","title":"Implementation of Pointer Events in IE10"},{"url":"http://blogs.msdn.com/b/eternalcoding/archive/2013/01/16/hand-js-a-polyfill-for-supporting-pointer-events-on-every-browser.aspx","title":"Hand.js, the polyfill for browsers only supporting Touch Events"},{"url":"http://blogs.msdn.com/b/davrous/archive/2013/02/20/handling-touch-in-your-html5-apps-thanks-to-the-pointer-events-of-ie10-and-windows-8.aspx","title":"Article & tutorial"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"u","7":"u","7.1":"u","8":"u"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"n","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"a x","11":"y"},"and_uc":{"9.9":"p"}},"notes":"Partial support in IE10 refers the lack of pointerenter and pointerleave events. Firefox Nightly provides 'dom.w3c_pointer_events.enabled' option to support this specification starting with version 28.","notes_by_num":{},"usage_perc_y":8.5,"usage_perc_a":1.67,"ucprefix":false,"parent":"","keywords":"pointerdown,pointermove,pointerup,pointercancel,pointerover,pointerout,pointerenter,pointerleave","ie_id":"pointerevents","chrome_id":"4504699138998272"},"user-select-none":{"title":"CSS user-select: none","description":"Method of preventing text/element selection using CSS. ","spec":"https://developer.mozilla.org/en-US/docs/CSS/user-select","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/CSS/user-select","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/u/user-select/","title":"CSS Tricks article"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh781492(v=vs.85).aspx","title":"MSDN Documentation"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","TP":"y x"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"u","5":"u","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y x","11":"y x"},"and_uc":{"9.9":"y x"}},"notes":"Currently the user-select property does not appear in any W3C specification. Support information here is only for \"none\" value, not others.","notes_by_num":{},"usage_perc_y":89.01,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"webp":{"title":"WebP image format","description":"Image format that supports lossy and lossless compression, as well as animation and alpha transparency.","spec":"https://developers.google.com/speed/webp/","status":"other","links":[{"url":"https://developers.google.com/speed/webp/","title":"Official website"},{"url":"http://antimatter15.github.io/weppy/demo.html","title":"Polyfill for browsers with WebM support"},{"url":"http://libwebpjs.appspot.com/","title":"Decoder in JS"},{"url":"http://webpjs.appspot.com/","title":"Polyfill for browsers with or without WebM support (i.e. IE6-IE9, Safari/iOS version 6.1 and below; Firefox versions 24 and bel"},{"url":"https://developers.google.com/speed/webp/faq#which_web_browsers_natively_support_webp","title":"Official website FAQ - Which web browsers natively support WebP?"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"n","5":"n","6":"p","7":"p","8":"p","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"p","11":"p","11.1":"a","11.5":"a","11.6":"a","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Chrome, Opera and Android refers to browser not supporting lossless and alpha versions of WebP. Animated webp images are supported in Chrome 32+ and Opera 19+.","notes_by_num":{},"usage_perc_y":57.48,"usage_perc_a":1.54,"ucprefix":false,"parent":"","keywords":"","ie_id":"webpimageformatsupport","chrome_id":"6471725441089536,4785074604081152"},"intrinsic-width":{"title":"Intrinsic & Extrinsic Sizing","description":"Allows for the heights and widths to be specified in intrinsic values using the fill-available, max-content, min-content, and fit-content properties.","spec":"http://www.w3.org/TR/css3-sizing/","status":"wd","links":[{"url":"http://demosthenes.info/blog/662/Design-From-the-Inside-Out-With-CSS-MinContent","title":"Min-Content tutorial"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Prefixes are on the values, not the property names (e.g. -webkit-min-content) Firefox currently supports the \"-moz-available\" property rather than \"-moz-fill-available\".","notes_by_num":{},"usage_perc_y":71,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"fill-available,max-content,min-content,fit-content,contain-floats","ie_id":"cssintrinsicsizing","chrome_id":"5901353784180736"},"cryptography":{"title":"Web Cryptography","description":"JavaScript API for performing basic cryptographic operations in web applications","spec":"http://www.w3.org/TR/WebCryptoAPI/","status":"wd","links":[{"url":"http://www.slideshare.net/Channy/the-history-and-status-of-web-crypto-api","title":"The History and Status of Web Crypto API"},{"url":"http://research.microsoft.com/en-us/projects/msrjscrypto/","title":"Microsoft Research JavaScript Cryptography Library"},{"url":"http://bitwiseshiftleft.github.io/sjcl/","title":"Cross-browser cryptography library"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"a x #1","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"n d #2","33":"n d #2","34":"a #4","35":"a #4","36":"a #4","37":"a #4","38":"a #4","39":"a #4"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"y x #3","8":"y x #3"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"y x #3","8.1":"y x #3"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"y"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"p","11":"a x #1"},"and_uc":{"9.9":"p"}},"notes":"Many browsers support the `[crypto.getRandomValues()](#feat=getrandomvalues)` method, but not actual cryptography functionality under `crypto.subtle`. \r\n\r\nFirefox also has support for [unofficial features](https://developer.mozilla.org/en-US/docs/JavaScript_crypto). \r\n\r\nIn Chrome the API is only usable over secure connections. ([corresponding bug](https://code.google.com/p/chromium/issues/detail?id=373032))","notes_by_num":{"1":"Support in IE11 is based an older version of the specification. ","2":"Supported in Firefox behind the `dom.webcrypto.enabled` flag. ","3":"Supported in Safari using the `crypto.webkitSubtle` prefix","4":"Partial support in Firefox is [described here](https://docs.google.com/spreadsheet/ccc?key=0AiAcidBZRLxndE9LWEs2R1oxZ0xidUVoU3FQbFFobkE#gid=1)"},"usage_perc_y":49.85,"usage_perc_a":18.49,"ucprefix":false,"parent":"","keywords":"subtle,subtlecrypto","ie_id":"webcryptoapi","chrome_id":"5030265697075200"},"template":{"title":"HTML templates","description":"Method of declaring a portion of reusable markup that is parsed but not rendered until cloned.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-template-element","status":"ls","links":[{"url":"http://www.html5rocks.com/en/tutorials/webcomponents/template/","title":"HTML5Rocks - HTML's New template Tag"},{"url":"http://polymer-project.org","title":"Polymer project (polyfill & web components framework)"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":68.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components, template","ie_id":"templateelement","chrome_id":"5207287069147136"},"opus":{"title":"Opus","description":"Royalty-free open audio codec by IETF, which incorporated SILK from Skype and CELT from Xiph.org, to serve higher sound quality and lower latency at the same bitrate.","spec":"http://tools.ietf.org/html/rfc6716","status":"other","links":[{"url":"https://hacks.mozilla.org/2012/07/firefox-beta-15-supports-the-new-opus-audio-format/","title":"Introduction of Opus by Mozilla"},{"url":"http://www.ietf.org/mail-archive/web/rtcweb/current/msg04953.html","title":"Google's statement about the use of VP8 and Opus codec for WebRTC standard"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"For Opera the Linux version may be able to play it when the GStreamer module is up to date and the served mime-type is 'audio/ogg'.","notes_by_num":{},"usage_perc_y":45.47,"usage_perc_a":0,"ucprefix":false,"parent":"audio","keywords":"","ie_id":"","chrome_id":"4891189287321600"},"jpegxr":{"title":"JPEG XR image format","description":"The latest JPEG image format of Joint Photographic Experts Group which boasts better compression and supports lossless compression, alpha channel, and 48-bit deep color over normal jpg format.","spec":"http://www.itu.int/rec/T-REC-T.832","status":"other","links":[{"url":"http://msdn.microsoft.com/en-us/library/windows/desktop/hh707223(v=vs.85).aspx","title":"Microsoft JPEG XR Codec Overview"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.99,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"channel-messaging":{"title":"Channel messaging","description":"Method for having two-way communication between browsing contexts (using MessageChannel)","spec":"http://www.w3.org/TR/webmessaging/#channel-messaging","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/window-postmessage-messagechannel/#channel","title":"An Introduction to HTML5 web messaging"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `dom.messageChannel.enabled` flag. Reported to not work in web workers."},"usage_perc_y":74.4,"usage_perc_a":0,"ucprefix":false,"parent":"x-doc-messaging","keywords":"","ie_id":"messagechannels","chrome_id":"6710044586409984"},"css3-tabsize":{"title":"CSS3 tab-size","description":"Method of customizing the width of the tab character. Only effective using 'white-space: pre' or 'white-space: pre-wrap'.","spec":"http://www.w3.org/TR/css3-text/#tab-size1","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/tab-size","title":"MDN article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y x"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":74.31,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"tab-size,tab-width","ie_id":"","chrome_id":""},"mutationobserver":{"title":"Mutation Observer","description":"Method for observing and reacting to changes to the DOM. Replaces MutationEvents, which is deprecated.","spec":"http://www.w3.org/TR/dom/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver","title":"MutationObserver from MDN"},{"url":"https://github.com/webcomponents/webcomponentsjs","title":"Polyfill"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"p","4.1":"p","4.2-4.3":"p","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"When the content of a node with a single CharacterData child node is changed by innerHTML attribute and the node have a single different one as a result, WebKit browsers consider it as a characterData mutation of the child CharacterData node, while other browsers think it as a childList mutation of the parent node.","notes_by_num":{},"usage_perc_y":83.42,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"MutationObserver","ie_id":"mutationobservers","chrome_id":"5021194726146048"},"css-selection":{"title":"::selection CSS pseudo-element","description":"The ::selection CSS pseudo-element applies rules to the portion of a document that has been highlighted (e.g., selected with the mouse or another pointing device) by the user.","spec":"https://developer.mozilla.org/en-US/docs/Web/CSS/::selection","status":"unoff","links":[{"url":"http://quirksmode.org/css/selectors/selection.html","title":"::selection test"},{"url":"http://docs.webplatform.org/wiki/css/selectors/pseudo-elements/::selection","title":"WebPlatform Docs"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":77.52,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"::selection,selection","ie_id":"","chrome_id":""},"css-placeholder":{"title":":placeholder-shown CSS pseudo-class","description":"The :placeholder-shown pseudo-class represents the placeholder contents of a form field with placeholder text.","spec":"http://www.w3.org/TR/selectors4/#placeholder","status":"wd","links":[{"url":"http://msdn.microsoft.com/en-us/library/ie/hh772745(v=vs.85).aspx","title":"MSDN article"},{"url":"http://css-tricks.com/snippets/css/style-placeholder-text/","title":"CSS-Tricks article with all prefixes"},{"url":"http://wiki.csswg.org/ideas/placeholder-styling","title":"CSSWG discussion"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"u","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to support for alternative syntax: ::-webkit-input-placeholder (Chrome/Safari/Opera),\r\n::-moz-placeholder (Firefox) and \r\n:-ms-input-placeholder (IE). ","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":88.72,"ucprefix":false,"parent":"","keywords":"::placeholder,placeholder","ie_id":"","chrome_id":""},"css-deviceadaptation":{"title":"CSS Device Adaptation","description":"A standard way to override the size of viewport in web page, standardizing and replacing Apple's own popular viewport implementation.","spec":"http://www.w3.org/TR/css-device-adapt/","status":"wd","links":[{"url":"https://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/","title":"Introduction to meta viewport and @viewport in Opera Mobile"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh708740(v=vs.85).aspx","title":"Device adaptation in Internet Explorer 10"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #1","TP":"a x #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"u","7":"u","7.1":"u","8":"u"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"a x #2"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"a x #2","11.1":"a x #2","11.5":"a x #2","12":"a x #2","12.1":"a x #2","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"a x #1","11":"a x #1"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"IE only supports the 'width' and 'height' properties.","2":"Opera Mobile and Opera Mini only support the 'orientation' property."},"usage_perc_y":0,"usage_perc_a":13.02,"ucprefix":false,"parent":"","keywords":"viewport","ie_id":"","chrome_id":""},"text-emphasis":{"title":"text-emphasis styling","description":"Method of using small symbols next to each glyph to emphasize a run of text, commonly used in East Asian languages. The `text-emphasis` shorthand, and its `text-emphasis-style` and `text-emphasis-color` longhands, can be used to apply marks to the text. The `text-emphasis-position` property, which inherits separately, allows setting the emphasis marks' position with respect to the text.","spec":"http://www.w3.org/TR/css-text-decor-3/#text-emphasis","status":"cr","links":[{"url":"https://github.com/zmmbreeze/jquery.emphasis/","title":"A javascript fallback for CSS3 emphasis mark."}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"a x #1","26":"a x #1","27":"a x #1","28":"a x #1","29":"a x #1","30":"a x #1","31":"a x #1","32":"a x #1","33":"a x #1","34":"a x #1","35":"a x #1","36":"a x #1","37":"a x #1","38":"a x #1","39":"a x #1","40":"a x #1","41":"a x #1","42":"a x #1","43":"a x #1","44":"a x #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"a x #1","7":"a x #1","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"a x #1","22":"a x #1","23":"a x #1","24":"a x #1","25":"a x #1","26":"a x #1","27":"a x #1","28":"a x #1","29":"a x #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x #1","4.4.3-4.4.4":"a x #1","37":"a x #1"},"bb":{"7":"n","10":"a x #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x #1"},"and_chr":{"41":"a x #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x #1"}},"notes":"Some old webkit browsers (like Chrome 24) support `-webkit-text-emphasis`, but does not support CJK languages and is therefore considered unsupported.","notes_by_num":{"1":"Partial support refers to incorrect support for `-webkit-text-emphasis-position`. These browsers support `over` and `under` as values, but not the added `left` and `right` values required by the spec."},"usage_perc_y":8.96,"usage_perc_a":53.56,"ucprefix":false,"parent":"","keywords":"text-emphasis,text-emphasis-position,text-emphasis-style,text-emphasis-color","ie_id":"","chrome_id":""},"midi":{"title":"Web MIDI API","description":"The Web MIDI API specification defines a means for web developers to enumerate, manipulate and access MIDI devices","spec":"http://webaudio.github.io/web-midi-api/","status":"wd","links":[{"url":"https://github.com/cwilso/WebMIDIAPIShim","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"webmidiapi","chrome_id":"4923613069180928"},"canvas-blending":{"title":"Canvas blend modes","description":"Method of defining the effect resulting from overlaying two layers on a Canvas element. ","spec":"http://www.w3.org/TR/compositing-1/#blending","status":"cr","links":[{"url":"http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/","title":"Blog post"}],"categories":["Canvas"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":70.11,"usage_perc_a":0,"ucprefix":false,"parent":"canvas","keywords":"","ie_id":"compositingandblendingincanvas2d","chrome_id":""},"clipboard":{"title":"Clipboard API","description":"API to provide copy, cut and paste functionality using the OS clipboard.","spec":"http://www.w3.org/TR/clipboard-apis/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent","title":"MDN page on ClipboardEvent"},{"url":"http://www.deluxeblogtips.com/2010/06/javascript-copy-to-clipboard.html","title":"Blog post on cross-browser usage"}],"categories":["JS API"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"u","3.2":"u","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE refers using [a non-standard method](http://msdn.microsoft.com/en-us/library/ie/ms535220%28v=vs.85%29.aspx) of interacting with the clipboard. For other browsers it refers to not supporting the ClipboardEvent constructor.","notes_by_num":{},"usage_perc_y":11.62,"usage_perc_a":74.26,"ucprefix":false,"parent":"","keywords":"cut,copy,paste,clipboarddata","ie_id":"clipboardapi","chrome_id":""},"rtcpeerconnection":{"title":"WebRTC Peer-to-peer connections","description":"Method of allowing two users to communicate directly, browser to browser using the RTCPeerConnection API.","spec":"http://www.w3.org/TR/webrtc/#peer-to-peer-connections","status":"wd","links":[{"url":"http://www.webrtc.org/","title":"WebRTC Project site"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y x"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"BlackBerry 10 recognizes RTCPeerConnection but real support is unconfirmed.","notes_by_num":{},"usage_perc_y":57.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"webrtcwebrtcv10api","chrome_id":"6612462929444864"},"css3-cursors":{"title":"CSS3 Cursors (original values)","description":"CSS3 cursor values added in the 2004 spec, including none, context-menu, cell, vertical-text, alias, copy, no-drop, not-allowed, nesw-resize, nwse-resize, col-resize, row-resize and all-scroll. ","spec":"http://www.w3.org/TR/css3-ui/#cursor","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor","title":"MDN Documentation"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"u"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE refers to no support for the alias, cell, copy, ew-resize, ns-resize, nesw-resize, nwse-resize or context-menu cursors. Opera 12.10- does not support 'none' or a URI.","notes_by_num":{},"usage_perc_y":61.84,"usage_perc_a":3.72,"ucprefix":false,"parent":"","keywords":"cursors, pointers","ie_id":"","chrome_id":""},"css3-cursors-newer":{"title":"CSS3 Cursors (new values)","description":"Support for `zoom-in` and `zoom-out` values for the CSS3 `cursor` property.","spec":"http://www.w3.org/TR/css3-ui/#cursor","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor","title":"MDN Documentation"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Chrome, Safari and Firefox also support the unofficial `grab` and `grabbing` values (with prefix)","notes_by_num":{},"usage_perc_y":51.13,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"cursors, pointers","ie_id":"","chrome_id":""},"webvtt":{"title":"WebVTT - Web Video Text Tracks","description":"Format for marking up text captions for multimedia resources.","spec":"http://dev.w3.org/html5/webvtt/","status":"unoff","links":[{"url":"http://www.html5rocks.com/en/tutorials/track/basics/","title":"Getting Started With the Track Element"},{"url":"https://dev.opera.com/articles/view/an-introduction-to-webvtt-and-track/","title":"An Introduction to WebVTT and track"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n d","25":"n d","26":"n d","27":"n d","28":"n d","29":"n d","30":"n d","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"n"}},"notes":"WebVTT must be used with the element.\r\n\r\nFirefox currently lacks support for the ::cue pseudo-element.","notes_by_num":{},"usage_perc_y":80.02,"usage_perc_a":0,"ucprefix":false,"parent":"video","keywords":"captions,track","ie_id":"","chrome_id":"6719115557339136"},"promises":{"title":"Promises","description":"A promise represents the eventual result of an asynchronous operation.","spec":"https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects","status":"other","links":[{"url":"http://promises-aplus.github.io/promises-spec/","title":"Promises/A+ spec"},{"url":"http://www.chromestatus.com/features/5681726336532480","title":"Chromium dashboard - ES6 Promises"},{"url":"http://www.html5rocks.com/en/tutorials/es6/promises/","title":"JavaScript Promises: There and back again - HTML5 Rocks"},{"url":"https://github.com/jakearchibald/ES6-Promises","title":"A polyfill for ES6-style Promises"}],"categories":["JS API"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"a","28":"a","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"a","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"a","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"p"}},"notes":"","notes_by_num":{},"usage_perc_y":63.85,"usage_perc_a":0.26,"ucprefix":false,"parent":"","keywords":"futures","ie_id":"","chrome_id":"5681726336532480"},"css-sticky":{"title":"CSS position:sticky","description":"Keeps elements positioned as \"fixed\" or \"relative\" depending on how it appears in the viewport. As a result the element is \"stuck\" when necessary while scrolling.","spec":"http://dev.w3.org/csswg/css-position/#sticky-positioning","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit","title":"HTML5Rocks"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/position","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/position","title":"WebPlatform Docs"},{"url":"https://github.com/filamentgroup/fixed-sticky","title":"Polyfill"},{"url":"https://github.com/wilddeer/stickyfill","title":"Another polyfill"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n d #2","24":"n d #2","25":"n d #2","26":"n d #2","27":"n d #2","28":"n d #2","29":"n d #2","30":"n d #2","31":"n d #2","32":"n d #2","33":"n d #2","34":"n d #2","35":"n d #2","36":"n d #2","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox by setting the about:config preference layout.css.sticky.enabled to true","2":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":20.29,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"positionsticky","chrome_id":"6190250464378880"},"dialog":{"title":"Dialog element","description":"Method of easily creating custom dialog boxes to display to the user with modal or non-modal options. Also includes a `::backdrop` pseudo-element for behind the element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-dialog-element","status":"ls","links":[{"url":"https://github.com/GoogleChrome/dialog-polyfill","title":"Polyfill"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n d #2","20":"n d #2","21":"n d #2","22":"n d #2","23":"n d #2","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled through the \"Experimental Web Platform features\" flag in `chrome://flags`","2":"Enabled through the \"Experimental Web Platform features\" flag in `opera://flags`"},"usage_perc_y":42.49,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"HTMLDialogElement,showModal,backdrop","ie_id":"dialogelementformodals","chrome_id":"5770237022568448"},"css-variables":{"title":"CSS Variables","description":"Permits the declaration and usage of cascading variables in stylesheets.","spec":"http://www.w3.org/TR/css-variables/","status":"wd","links":[{"url":"https://hacks.mozilla.org/2013/12/css-variables-in-firefox-nightly/","title":"Mozilla hacks article (older syntax)"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables","title":"MDN article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css variables","ie_id":"cssvariables","chrome_id":"6401356696911872"},"vibration":{"title":"Vibration API","description":"Method to access the vibration mechanism of the hosting device.","spec":"http://www.w3.org/TR/vibration/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/Guide/API/Vibration","title":"MDN article"},{"url":"http://davidwalsh.name/vibration-api","title":"Vibration API sample code & demo"},{"url":"http://code.tutsplus.com/tutorials/html5-vibration-api--mobile-22585","title":"Tuts+ article"},{"url":"http://aurelio.audero.it/demo/vibration-api-demo.html","title":"Demo"},{"url":"http://www.illyism.com/journal/vibration-api","title":"Article and Usage Examples"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":64.68,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"vibration,mobile,device","ie_id":"vibrationapi","chrome_id":"5698768766763008"},"css-backgroundblendmode":{"title":"CSS background-blend-mode","description":"Allows blending between CSS background images, gradients, and colors.","spec":"http://www.w3.org/TR/compositing-1/#background-blend-mode","status":"cr","links":[{"url":"http://codepen.io/bennettfeely/pen/rxoAc","title":"codepen example"},{"url":"https://medium.com/web-design-technique/6b51bf53743a","title":"Blog post"},{"url":"http://bennettfeely.com/gradients","title":"Demo"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":62.06,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css blend modes,css blending modes,blending,multiply,screen,background","ie_id":"","chrome_id":"5768037999312896"},"css-mixblendmode":{"title":"Blending of HTML/SVG elements","description":"Allows blending between arbitrary SVG and HTML elements","spec":"http://www.w3.org/TR/compositing-1/#mix-blend-mode","status":"cr","links":[{"url":"http://codepen.io/bennettfeely/pen/csjzd","title":"codepen example"},{"url":"http://css-tricks.com/basics-css-blend-modes/","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1","40":"n d #1","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":28.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"mix-blend-mode,css blend modes,css blending modes","ie_id":"mixblendmode","chrome_id":"6362616360337408"},"web-speech":{"title":"Web Speech API","description":"Method to provide speech input and text-to-speech output features in a web browser.","spec":"https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/introducing-web-speech-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/web-speech-api-demo.html","title":"Demo"},{"url":"http://zenorocha.github.io/voice-elements/","title":"Advanced demo and resource"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"a x","7":"a x","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Chrome refers to some attributes missing. Partial support in Safari refers to only Speech Synthesis supported.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":54.81,"ucprefix":false,"parent":"","keywords":"speech,recognition,ASR","ie_id":"webspeechapiinput","chrome_id":"5908775487668224"},"high-resolution-time":{"title":"High Resolution Time API","description":"Method to provide the current time in sub-millisecond resolution and such that it is not subject to system clock skew or adjustments. Called using `performance.now()`","spec":"http://www.w3.org/TR/hr-time/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()","title":"MDN article"},{"url":"http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/discovering-the-high-resolution-time-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/high-resolution-time-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":76.9,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,now,testing","ie_id":"highresolutiontime","chrome_id":"5349124069130240"},"battery-status":{"title":"Battery Status API","description":"Method to provide information about the battery status of the hosting device.","spec":"http://www.w3.org/TR/battery-status/","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/WebAPI/Battery_Status","title":"MDN Docs"},{"url":"http://www.smartjava.org/examples/webapi-battery/","title":"Simple demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"a #1","31":"a #1","32":"a #1","33":"a #1","34":"a #1","35":"a #1","36":"a #1","37":"a #1","38":"a #1","39":"a #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n d","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"a #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a #1"}},"notes":"","notes_by_num":{"1":"Partial support refers to support for the older specification's `navigator.battery` rather than `navigator.getBattery()` to access the `BatteryManager`."},"usage_perc_y":41.66,"usage_perc_a":15.88,"ucprefix":false,"parent":"","keywords":"navigator.battery,navigator.getbattery,batterymanager","ie_id":"batterystatusapi","chrome_id":"4537134732017664"},"serviceworkers":{"title":"Service Workers","description":"Method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline.","spec":"https://slightlyoff.github.io/ServiceWorker/spec/service_worker/","status":"wd","links":[{"url":"http://www.html5rocks.com/en/tutorials/service-worker/introduction/","title":"HTML5Rocks article (introduction)"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker_API","title":"MDN article"},{"url":"https://jakearchibald.github.io/isserviceworkerready/resources.html","title":"List of various resources"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"u"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Details on partial support can be found on [is ServiceWorker Ready?](https://jakearchibald.github.io/isserviceworkerready/)","notes_by_num":{"1":"Partial support can be enabled in Firefox with the `dom.serviceWorkers.enabled` flag."},"usage_perc_y":0,"usage_perc_a":39.02,"ucprefix":false,"parent":"","keywords":"","ie_id":"serviceworker","chrome_id":"6561526227927040"},"text-decoration":{"title":"text-decoration styling","description":"Method of defining the type, style and color of lines in the text-decoration property. These can be defined as shorthand (e.g. `text-decoration: line-through dashed blue`) or as single properties (e.g. `text-decoration-color: blue`)","spec":"http://www.w3.org/TR/css-text-decor-3/#line-decoration","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-style","title":"MDN Documentation for text-decoration-style"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color","title":"MDN Documentation for text-decoration-color"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-line","title":"MDN Documentation for text-decoration-line"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n x d #1","27":"n x d #1","28":"n x d #1","29":"n x d #1","30":"n x d #1","31":"n x d #1","32":"n x d #1","33":"n x d #1","34":"n x d #1","35":"n x d #1","36":"n x d #1","37":"n x d #1","38":"n x d #1","39":"n x d #1","40":"n x d #1","41":"n x d #1","42":"n x d #1","43":"n x d #1","44":"n x d #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a x #2","8":"a x #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a x #2","8.1":"a x #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"All browsers support the CSS2 version of `text-decoration`, which matches only the `text-decoration-line` values (`underline`, etc.)","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Partial support in Safari refers to not supporting the text-decoration-style property."},"usage_perc_y":12.14,"usage_perc_a":7.36,"ucprefix":false,"parent":"","keywords":"text-decoration-line,text-decoration-style,text-decoration-color","ie_id":"","chrome_id":""},"speech-synthesis":{"title":"Speech Synthesis API","description":"A web API for controlling a text-to-speech output.","spec":"https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2014/01/Web-apps-that-talk---Introduction-to-the-Speech-Synthesis-API","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/talking-web-pages-and-the-speech-synthesis-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/speech-synthesis-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":53.33,"usage_perc_a":0,"ucprefix":false,"parent":"web-speech","keywords":"speech,synthesis,speechSynthesis,TTS,SpeechSynthesisUtterance,","ie_id":"webspeechapisynthesis","chrome_id":"4782875580825600"},"user-timing":{"title":"User Timing API","description":"Method to help web developers measure the performance of their applications by giving them access to high precision timestamps.","spec":"http://www.w3.org/TR/user-timing/","status":"rec","links":[{"url":"http://www.sitepoint.com/discovering-user-timing-api/","title":"SitePoint article"},{"url":"http://www.html5rocks.com/en/tutorials/webperformance/usertiming/","title":"HTML5Rocks article"},{"url":"https://gist.github.com/pmeenan/5902672","title":"Polyfill"},{"url":"http://aurelio.audero.it/demo/user-timing-api-demo.html","title":"Demo"},{"url":"https://github.com/nicjansma/usertiming.js","title":"UserTiming.js polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":59.26,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,testing,mark,measure","ie_id":"usertimingapi","chrome_id":"5066549580791808"},"srcset":{"title":"Srcset attribute","description":"Allows authors to define various image resources and \"hints\" that assist a user agent to determine the most appropriate image source to display (e.g. high-resolution displays, small monitors, etc).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset","status":"ls","links":[{"url":"https://www.webkit.org/blog/2910/improved-support-for-high-resolution-displays-with-the-srcset-image-attribute/","title":"Improved support for high-resolution displays with the srcset image attribute"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"a #2","35":"a #2","36":"a #2","37":"a #2","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a #2","8":"a #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"a #2","22":"a #2","23":"a #2","24":"a #2","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a #2","8.1":"a #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a #2"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox by setting the about:config preference dom.image.srcset.enabled to true","2":"Supports the subset of the syntax for resolution switching (using the `x` descriptor), but not the full syntax that can be used with `sizes` (using the `w` descriptor)."},"usage_perc_y":41.66,"usage_perc_a":9.5,"ucprefix":false,"parent":"","keywords":"","ie_id":"imgsrcset","chrome_id":"4644337115725824"},"ambient-light":{"title":"Ambient Light API","description":"Defines events that provide information about the ambient light level, as measured by a device's light sensor.","spec":"http://www.w3.org/TR/ambient-light/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/ambient-light-api-demo.html","title":"Demo"},{"url":"http://modernweb.com/2014/05/27/introduction-to-the-ambient-light-api/","title":"Article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Firefox desktop supports this API only on Mac OS X. [Support for Windows 7 is in progress](https://bugzilla.mozilla.org/show_bug.cgi?id=754199)","notes_by_num":{},"usage_perc_y":11.62,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"ambientlightevents","chrome_id":"5298357018820608"},"will-change":{"title":"CSS will-change property","description":"Method of optimizing animations by informing the browser which elements will change and what properties will change.","spec":"http://dev.w3.org/csswg/css-will-change/","status":"wd","links":[{"url":"https://dev.opera.com/articles/css-will-change-property/","title":"Detailed article"},{"url":"http://aerotwist.com/blog/bye-bye-layer-hacks/","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `layout.css.will-change.enabled` flag"},"usage_perc_y":44.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"scroll-position","ie_id":"csswillchange","chrome_id":"5954199330226176"},"css-shapes":{"title":"CSS Shapes Level 1","description":"Allows geometric shapes to be set in CSS to define an area for text to flow around.","spec":"http://www.w3.org/TR/css-shapes/","status":"cr","links":[{"url":"http://html.adobe.com/webplatform/layout/shapes/","title":"Adobe demos and samples"},{"url":"http://html.adobe.com/webplatform/layout/shapes/browser-support/","title":"CSS shapes support test by Adobe"},{"url":"http://alistapart.com/article/css-shapes-101","title":"A List Apart article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #1","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":49.85,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"circle,ellipse,polygon,inset,shape-outside,shape-inside","ie_id":"shapes","chrome_id":"5163890719588352"},"domcontentloaded":{"title":"DOMContentLoaded","description":"JavaScript event that fires when the DOM is loaded, but before all page assets are loaded (CSS, images, etc.).","spec":"https://html.spec.whatwg.org/multipage/syntax.html#stop-parsing","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded","title":"MDN: DOMContentLoaded"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"dom,domready,onload,contentloaded,document","ie_id":"","chrome_id":""},"proximity":{"title":"Proximity API","description":"Defines events that provide information about the distance between a device and an object, as measured by a proximity sensor.","spec":"http://www.w3.org/TR/proximity/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/proximity-api-demo.html","title":"Demo"},{"url":"http://www.sitepoint.com/introducing-proximity-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.88,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"kerning-pairs-ligatures":{"title":"Improved kerning pairs & ligatures","description":"Currently non-standard method of improving kerning pairs & ligatures using text-rendering: optimizeLegibility.","spec":"http://www.w3.org/TR/SVG11/painting.html#TextRenderingProperty","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-rendering","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/t/text-rendering/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"u","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":78.58,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"optimizeLegibility,optimizeSpeed,geometricPrecision","ie_id":"","chrome_id":""},"iframe-seamless":{"title":"seamless attribute for iframes","description":"The seamless attribute makes an iframe's contents actually part of a page, and adopts the styles from its hosting page. ","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-seamless","status":"ls","links":[{"url":"https://github.com/ornj/seamless-polyfill","title":"Experimental polyfill"},{"url":"http://labs.ft.com/2013/01/seamless-iframes-not-quite-seamless/","title":"Article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d","21":"n d","22":"n d","23":"n d","24":"n d","25":"n d","26":"n d","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Chrome 20-26 had partial support behind a flag, though this was [later removed](http://crbug.com/229421). \r\n\r\nSafari 7 (& iOS 7 Safari) hides the border of seamless iframes and recognizes the 'seamless' DOM property, but does not provide actual support.","notes_by_num":{},"usage_perc_y":3.84,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"iframeseamlessattribute","chrome_id":"6630329993396224"},"css-image-orientation":{"title":"CSS3 image-orientation","description":"CSS property used generally to fix the intended orientation of an image. This can be done using 90 degree increments or based on the image's EXIF data using the \"from-image\" value.","spec":"http://www.w3.org/TR/css3-images/#image-orientation","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/image-orientation","title":"MDN article"},{"url":"http://sethfowler.org/blog/2013/09/13/new-in-firefox-26-css-image-orientation/","title":"Blog post"},{"url":"http://jsbin.com/EXUTolo/4","title":"Demo (Chinese)"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in iOS refers to the browser using EXIF data by default, though it does not actually support the property. Opening the image in a new tab in Chrome results in the image shown in the orientation according to the EXIF data.","notes_by_num":{},"usage_perc_y":11.43,"usage_perc_a":7.21,"ucprefix":false,"parent":"","keywords":"image-orientation,from-image,flip","ie_id":"","chrome_id":""},"picture":{"title":"Picture element","description":"A responsive images method to control which image resource a user agent presents to a user, based on resolution, media query and/or support for a particular image format","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element","status":"ls","links":[{"url":"http://responsiveimages.org/demos/","title":"Demo"},{"url":"http://code.tutsplus.com/tutorials/better-responsive-images-with-the-picture-element--net-36583","title":"Tutorial"},{"url":"http://usecases.responsiveimages.org/","title":"Read about the use cases"},{"url":"http://responsiveimages.org/","title":"General information about Responsive Images"},{"url":"https://dev.opera.com/articles/responsive-images/","title":"Blog post on usage"},{"url":"http://www.html5rocks.com/tutorials/responsive/picture-element/","title":"HTML5 Rocks tutorial"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #3","35":"n d #3","36":"n d #3","37":"n d #3","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n d #1","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n d #2","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Enabled in Opera through the \"experimental Web Platform features\" flag in opera://flags","3":"Enabled in Firefox by setting the about:config preference dom.image.picture.enable to true"},"usage_perc_y":41.66,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"pictureelement","chrome_id":"5910974510923776"},"woff2":{"title":"WOFF 2.0 - Web Open Font Format","description":"TrueType/OpenType font that provides better compression than WOFF 1.0.","spec":"http://www.w3.org/TR/WOFF2/","status":"wd","links":[{"url":"https://gist.github.com/sergejmueller/cf6b4f2133bcb3e2f64a","title":"Basics about WOFF 2.0"},{"url":"http://everythingfonts.com/ttf-to-woff2","title":"WOFF 2.0 converter"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Default 'enabled' for Firefox Developer Edition and Nightly, but Beta and Release versions will need to set a flag to 'true' to [use WOFF2](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#Browser_compatibility)."},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"woff, fontface, webfonts","ie_id":"wofffileformat20","chrome_id":"6718644721549312"},"text-size-adjust":{"title":"CSS text-size-adjust","description":"On mobile devices, the text-size-adjust CSS property allows Web authors to control if and how the text-inflating algorithm is applied to the textual content of the element it is applied to.","spec":"http://dev.w3.org/csswg/css-size-adjust/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-size-adjust","title":"MDN Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y x","11":"y x"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":11.89,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"web-animation":{"title":"Web Animations API","description":"Lets you create animations that are run in the browser and as well as inspect and manipulate animations created through declarative means like CSS.","spec":"http://w3c.github.io/web-animations/","status":"wd","links":[{"url":"http://updates.html5rocks.com/2014/05/Web-Animations---element-animate-is-now-in-Chrome-36","title":"HTML5 Rocks"},{"url":"http://updates.html5rocks.com/2013/12/New-Web-Animations-engine-in-Blink-drives-CSS-Animations-Transitions","title":"HTML5 Rocks"},{"url":"https://birtles.github.io/areweanimatedyet/","title":"Current Firefox status"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"a d #3","34":"a d #3","35":"a d #3","36":"a d #3","37":"a d #3","38":"a d #3","39":"a d #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"a #1","37":"a #1","38":"a #1","39":"a #2","40":"a #2","41":"a #2","42":"a #2","43":"a #2","44":"a #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"a #1","24":"a #1","25":"a #1","26":"a #2","27":"a #2","28":"a #2","29":"a #2"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"a #1"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a #1"},"and_chr":{"41":"a #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support refers to basic support of `element.animate()`","2":"Partial support refers to basic support of `element.animate()` and [playback control of AnimationPlayer](https://www.chromestatus.com/features/5633748733263872)","3":"Partial support in Firefox is detailed in [Are we animated yet?](https://birtles.github.io/areweanimatedyet/)"},"usage_perc_y":0,"usage_perc_a":53.34,"ucprefix":false,"parent":"","keywords":"animate,play,pause,reverse,finish,currentTime,startTime,playbackRate,playState","ie_id":"webanimationsjavascriptapi","chrome_id":"4854343836631040,5633748733263872"},"resource-timing":{"title":"Resource Timing","description":"Method to help web developers to collect complete timing information related to resources on a document.","spec":"http://www.w3.org/TR/resource-timing/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/resource-timing-api-demo.html","title":"Demo"},{"url":"http://googledevelopers.blogspot.com/2013/12/measuring-network-performance-with.html","title":"Blog post"},{"url":"http://www.sitepoint.com/introduction-resource-timing-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox using the dom.enable_resource_timing flag"},"usage_perc_y":68.93,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,testing,resource","ie_id":"resourcetimingapi","chrome_id":"5796350423728128"},"custom-elements":{"title":"Custom Elements","description":"Method of defining and using new types of DOM elements in a document.","spec":"http://www.w3.org/TR/custom-elements/","status":"wd","links":[{"url":"http://w3c.github.io/webcomponents/spec/custom/","title":"W3C Editor's Draft spec (closer to current implementations)"},{"url":"http://www.polymer-project.org/platform/custom-elements.html","title":"Polymer project (polyfill & web components framework)"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/customelements/","title":"HTML5Rocks - Custom Elements: defining new elements in HTML"},{"url":"https://code.google.com/p/chromium/issues/detail?id=234509","title":"Chromium tracking bug: Implement Custom Elements"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=889230","title":"Firefox tracking bug: Implement Custom Elements (from Web Components)"},{"url":"http://status.modern.ie/customelements","title":"IE Web Platform Status and Roadmap: Custom Elements"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n d #1","24":"n d #1","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"p d #1","31":"p d #1","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n d","28":"n d","29":"n d","30":"n d","31":"n d","32":"n d","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n d","16":"n d","17":"n d","18":"n d","19":"n d","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p d #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled through the \"dom.webcomponents.enabled\" preference in about:config"},"usage_perc_y":45.28,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"customelements","chrome_id":"4642138092470272"},"imports":{"title":"HTML Imports","description":"Method of including and reusing HTML documents in other HTML documents.","spec":"http://www.w3.org/TR/html-imports/","status":"wd","links":[{"url":"http://www.polymer-project.org/platform/html-imports.html","title":"Polymer project (polyfill & web components framework)"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/imports/","title":"HTML5Rocks - HTML Imports: #include for the web"},{"url":"https://code.google.com/p/chromium/issues/detail?id=240592","title":"Chromium tracking bug: Implement HTML Imports"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=877072","title":"Firefox tracking bug: Implement HTML Imports"},{"url":"http://status.modern.ie/htmlimports","title":"IE Web Platform Status and Roadmap: HTML Imports"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"p","31":"p","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n d #2","31":"n d #2","32":"n d #2","33":"n d #2","34":"n d #2","35":"p d #3","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n d #4","18":"n d #4","19":"n d #4","20":"n d #4","21":"n d #4","22":"p d #5","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Firefox [has no plans to support HTML imports](https://hacks.mozilla.org/2014/12/mozilla-and-web-components/) though for now it can be enabled through the \"dom.webcomponents.enabled\" preference in about:config","2":"Enabled through the \"Enable HTML Imports\" flag in chrome://flags","3":"Enabled through the \"Experimental Web Platform features\" flag in chrome://flags","4":"Enabled through the \"Enable HTML Imports\" flag in opera://flags","5":"Enabled through the \"Experimental Web Platform features\" flag in opera://flags"},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"htmlimports","chrome_id":"5144752345317376"},"input-file-multiple":{"title":"Multiple file selection","description":"Allows users to select multiple files in the file picker.","spec":"https://html.spec.whatwg.org/multipage/forms.html#attr-input-multiple","status":"ls","links":[{"url":"https://code.google.com/p/chromium/issues/detail?id=348912","title":"Chrome bug (for Android)"},{"url":"http://www.raymondcamden.com/2012/2/28/Working-with-HTML5s-multiple-file-upload-support","title":"Article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n #1"},"android":{"2.1":"n #1","2.2":"n #1","2.3":"n #1","3":"n #1","4":"n #1","4.1":"n #1","4.2-4.3":"n #1","4.4":"n #1","4.4.3-4.4.4":"n #1","37":"n #1"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n #1","11":"n #1","11.1":"n #1","11.5":"n #1","12":"n #1","12.1":"n #1","24":"n #1"},"and_chr":{"41":"n #1"},"and_ff":{"36":"n #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n #1"}},"notes":"","notes_by_num":{"1":"Not supported when tested on Android, presumably an OS limitation. "},"usage_perc_y":67.63,"usage_perc_a":0,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"atob-btoa":{"title":"Base64 encoding and decoding","description":"Utility functions for of encoding and decoding strings to and from base 64: window.atob() and window.btoa().","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#atob","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa","title":"MDN article on btoa()"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Window.atob","title":"MDN article on atob()"},{"url":"https://github.com/davidchambers/Base64.js","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":92.18,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"atob,btoa","ie_id":"","chrome_id":""},"css-appearance":{"title":"CSS Appearance","description":"The `appearance` property defines how elements (particularly form controls) appear by default. By setting the value to `none` the default appearance can be entirely redefined using other CSS properties.","spec":"http://wiki.csswg.org/spec/css4-ui#appearance","status":"unoff","links":[{"url":"http://css-tricks.com/almanac/properties/a/appearance/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"a #1"},"and_uc":{"9.9":"y x"}},"notes":"The `appearance` property currently does not appear in any CSS specification so there is no specifically correct usage.","notes_by_num":{"1":"`-webkit-appearance` with value `none` is supported on IE11 Mobile for phones with \"[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""},"usage_perc_y":78.87,"usage_perc_a":0.48,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-background-offsets":{"title":"CSS background-position edge offsets","description":"Allows CSS background images to be positioned relative to the specified edge using the 3 to 4 value syntax. For example: `background-position: right 5px bottom 5px;` for positioning 5px from the bottom-right corner.","spec":"http://www.w3.org/TR/css3-background/#background-position","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/background-position","title":"MDN article on background-position"},{"url":"http://briantree.se/quick-tip-06-use-four-value-syntax-properly-position-background-images/","title":"Basic information"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":85.49,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"4 value syntax","ie_id":"","chrome_id":""},"css-supports-api":{"title":"CSS.supports() API","description":"The CSS.supports() static methods returns a Boolean value indicating if the browser supports a given CSS feature, or not.","spec":"http://dev.w3.org/csswg/css-conditional/#the-css-interface","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/CSS.supports","title":"MDN Docs"},{"url":"http://jsbin.com/rimevilotari/1/edit","title":"Demo (Chinese)"},{"url":"https://dev.opera.com/articles/native-css-feature-detection/","title":"Native CSS Feature Detection via the @supports Rule"},{"url":"http://davidwalsh.name/css-supports","title":"CSS @supports"},{"url":"http://blog.csdn.net/hfahe/article/details/8619480","title":"Article (Chinese)"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d","21":"n d","22":"n d","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"See also [@supports in CSS](#feat=css-featurequeries)\r\n\r\nSee the [WebKit Bug](http://trac.webkit.org/changeset/142739) for status in Safari","notes_by_num":{"1":"Opera 12 uses a different method name('window.supportsCSS')"},"usage_perc_y":60.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"conditional","ie_id":"conditionalrules","chrome_id":"4993981813358592"},"css-touch-action":{"title":"CSS touch-action property","description":"touch-action is a CSS property that controls filtering of gesture events, providing developers with a declarative mechanism to selectively disable touch scrolling (in one or both axes), pinch-zooming or double-tap-zooming.","spec":"http://www.w3.org/TR/pointerevents/#the-touch-action-css-property","status":"cr","links":[{"url":"http://docs.webplatform.org/wiki/css/properties/touch-action","title":"WebPlatform Docs"},{"url":"http://msdn.microsoft.com/en-us/library/windows/apps/hh767313.aspx","title":"MSDN Docs"},{"url":"http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away","title":"300ms tap delay, gone away"},{"url":"http://blogs.telerik.com/appbuilder/posts/13-11-21/what-exactly-is.....-the-300ms-click-delay","title":"What Exactly Is..... The 300ms Click Delay"},{"url":"http://thx.github.io/mobile/300ms-click-delay/","title":"What Exactly Is..... The 300ms Click Delay(Chinese)"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x #2","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y x #2","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `layout.css.touch_action.enabled` flag, Firefox for Windows 8 Touch ('Metro') enabled by default.","2":"IE10+ has already supported these property which are not in standard at present such as'pinch-zoom','double-tap-zoom','cross-slide-x','cross-slide-y'."},"usage_perc_y":53.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"touch action","ie_id":"csstouchaction","chrome_id":"5912074022551552"},"autofocus":{"title":"Autofocus attribute","description":"Allows a form field to be immediately focused on page load.","spec":"https://html.spec.whatwg.org/multipage/forms.html#autofocusing-a-form-control:-the-autofocus-attribute","status":"ls","links":[{"url":"http://davidwalsh.name/autofocus","title":"Article on autofocus"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"While not supported in iOS Safari, it does work in iOS WebViews.","notes_by_num":{},"usage_perc_y":77.94,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-clip-path":{"title":"CSS clip-path property","description":"Method of defining the visible region of an element using SVG or a shape definition.","spec":"http://www.w3.org/TR/css-masking-1/#the-clip-path","status":"wd","links":[{"url":"http://css-tricks.com/almanac/properties/c/clip/","title":"CSS Tricks article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"a #1","3.6":"a #1","4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"a #1","31":"a #1","32":"a #1","33":"a #1","34":"a #1","35":"a #1","36":"a #1","37":"a #1","38":"a #1","39":"a #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"a x #2","25":"a x #2","26":"a x #2","27":"a x #2","28":"a x #2","29":"a x #2","30":"a x #2","31":"a x #2","32":"a x #2","33":"a x #2","34":"a x #2","35":"a x #2","36":"a x #2","37":"a x #2","38":"a x #2","39":"a x #2","40":"a x #2","41":"a x #2","42":"a x #2","43":"a x #2","44":"a x #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"a x #2","7.1":"a x #2","8":"a x #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x #2","16":"a x #2","17":"a x #2","18":"a x #2","19":"a x #2","20":"a x #2","21":"a x #2","22":"a x #2","23":"a x #2","24":"a x #2","25":"a x #2","26":"a x #2","27":"a x #2","28":"a x #2","29":"a x #2"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a x #2","8":"a x #2","8.1":"a x #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x #2","4.4.3-4.4.4":"a x #2","37":"a x #2"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x #2"},"and_chr":{"41":"a x #2"},"and_ff":{"36":"a #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support refers to only supporting the `url()` syntax.","2":"Partial support refers to supporting shapes and the `url(#foo)` syntax for inline SVG, but not shapes in external SVGs."},"usage_perc_y":0,"usage_perc_a":70.75,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"getrandomvalues":{"title":"crypto.getRandomValues()","description":"Method of generating cryptographically random values.","spec":"http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y x"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":79.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"screen-orientation":{"title":"Screen Orientation","description":"Provides the ability to read the screen orientation state, to be informed when this state changes, and to be able to lock the screen orientation to a specific state.","spec":"http://www.w3.org/TR/screen-orientation/","status":"wd","links":[{"url":"http://aurelio.audero.it/demo/screen-orientation-api-demo.html","title":"Demo"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Screen.orientation","title":"MDN article"},{"url":"http://www.sitepoint.com/introducing-screen-orientation-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"a x"},"and_uc":{"9.9":"y"}},"notes":"Partial support refers to an older version of the draft specification, and the spec has undergone significant changes since.","notes_by_num":{},"usage_perc_y":45.64,"usage_perc_a":20.13,"ucprefix":false,"parent":"","keywords":"","ie_id":"screenorientationapi","chrome_id":"6191285283061760"},"font-loading":{"title":"CSS Font Loading","description":"This CSS module defines a scripting interface to font faces in CSS, allowing font faces to be easily created and loaded from script. It also provides methods to track the loading status of an individual font, or of all the fonts on an entire page.","spec":"http://dev.w3.org/csswg/css-font-loading/","status":"cr","links":[{"url":"https://www.igvita.com/2014/01/31/optimizing-web-font-rendering-performance/#font-load-events","title":"Optimizing with font load events"}],"categories":["CSS3","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox using the `layout.css.font-loading-api.enabled` flag."},"usage_perc_y":43.59,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":"6244676289953792"},"font-unicode-range":{"title":"Font unicode-range subsetting","description":"This @font-face descriptor defines the set of Unicode codepoints that may be supported by the font face for which it is declared. The descriptor value is a comma-delimited list of Unicode range () values. The union of these ranges defines the set of codepoints that serves as a hint for user agents when deciding whether or not to download a font resource for a given text run.","spec":"http://dev.w3.org/csswg/css-fonts/#descdef-unicode-range","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-range","title":"MDN: unicode-range"},{"url":"https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/css/property/unicode-range","title":"Safari CSS Reference: unicode-range"},{"url":"http://docs.webplatform.org/wiki/css/properties/unicode-range","title":"Web Platform Docs: unicode-range"},{"url":"http://jsbin.com/jeqoguzeye/1/edit?html,output","title":"Demo"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n d #1","37":"n d #1","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"y"},"bb":{"7":"u","10":"u"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"y"},"and_ff":{"36":"n d #1"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support indicates that unnecessary code-ranges are downloaded by the browser - see [browser test matrix](https://docs.google.com/a/chromium.org/spreadsheets/d/18h-1gaosu4-KYxH8JUNL6ZDuOsOKmWfauoai3CS3hPY/edit?pli=1#gid=0).","notes_by_num":{"1":"Can be enabled in Firefox using the `layout.css.unicode-range.enabled` flag"},"usage_perc_y":43.17,"usage_perc_a":35.27,"ucprefix":false,"parent":"","keywords":"font face,unicode,unicode-range","ie_id":"","chrome_id":""},"gamepad":{"title":"Gamepad API","description":"API to support input from USB gamepad controllers though JavaScript.","spec":"http://www.w3.org/TR/gamepad/","status":"wd","links":[{"url":"http://luser.github.io/gamepadtest/","title":"Controller demo"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API","title":"MDN article"},{"url":"http://www.html5rocks.com/en/tutorials/doodles/gamepad/","title":"HTML5Rocks article"},{"url":"http://gamedevelopment.tutsplus.com/tutorials/using-the-html5-gamepad-api-to-add-controller-support-to-browser-games--cms-21345","title":"Detailed tutorial"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":46.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"gamepadapi","chrome_id":"5118776383111168"},"css-font-stretch":{"title":"CSS font-stretch","description":"If a font has multiple types of variations based on the width of characters, the `font-stretch` property allows the appropriate one to be selected. The property in itself does not cause the browser to stretch to a font.","spec":"http://www.w3.org/TR/css-fonts-3/#font-stretch-prop","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/f/font-stretch/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":24.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"font stretch","ie_id":"cssfontstretch","chrome_id":"4598830058176512"},"font-size-adjust":{"title":"CSS font-size-adjust","description":"Method of adjusting the font size in a matter that relates to the height of lowercase vs. uppercase letters. This makes it easier to set the size of fallback fonts.","spec":"http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop","status":"cr","links":[{"url":"http://webdesignernotebook.com/css/the-little-known-font-size-adjust-css3-property/","title":"Article on font-size-adjust"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/font-size-adjust","title":"MDN article on font-size-adjust"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Does not appear to work on Firefox mobile, despite recognition of the property.","notes_by_num":{},"usage_perc_y":12.18,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"link-icon-png":{"title":"PNG favicons","description":"Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the PNG format can be preferable.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#rel-icon","status":"ls","links":[{"url":"http://css-tricks.com/favicon-quiz/","title":"Detailed info on favicons for various uses"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1","30":"y #1","31":"y #1","32":"y #1","33":"y #1","34":"y #1","35":"y #1","36":"y #1","37":"y #1","38":"y #1","39":"y #1","40":"y #1","41":"y #1","42":"y #1","43":"y #1","44":"y #1"},"safari":{"3.1":"y #2","3.2":"y #2","4":"y #2","5":"y #2","5.1":"y #2","6":"y #2","6.1":"y #2","7":"y #2","7.1":"y #2","8":"y #2"},"opera":{"9":"y #3","9.5-9.6":"y #3","10.0-10.1":"y #3","10.5":"y #3","10.6":"y #3","11":"y #3","11.1":"y #3","11.5":"y #3","11.6":"y #3","12":"y #3","12.1":"y #3","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1"},"ios_saf":{"3.2":"n #4","4.0-4.1":"n #4","4.2-4.3":"n #4","5.0-5.1":"n #4","6.0-6.1":"n #4","7.0-7.1":"n #4","8":"n #4","8.1":"n #4"},"op_mini":{"5.0-8.0":"n #4"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y #3","4.4.3-4.4.4":"y #3","37":"y #3"},"bb":{"7":"y","10":"n #4"},"op_mob":{"10":"n #4","11":"n #4","11.1":"n #4","11.5":"n #4","12":"n #4","12.1":"n #4","24":"n #4"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n #4","11":"n #4"},"and_uc":{"9.9":"y #2"}},"notes":"Win8/IE10+ and iOS Safari support other types of icons for webpages too, using alternate tags.\r\n\r\nSee also [SVG favicons](#feat=link-icon-svg).","notes_by_num":{"1":"If both ICO and PNG are available, will use ICO over PNG if ICO has better matching sizes set.","2":"If both ICO and PNG are available, will ALWAYS use ICO file, regardless of sizes set.","3":"If multiple formats are available, will use the last one loaded, regardless of sizes (effectively picks at random).","4":"Does not use favicons at all (but may have alternative for bookmarks, etc.)."},"usage_perc_y":80.02,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"link-icon-svg":{"title":"SVG favicons","description":"Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the SVG format can be preferable to more easily support higher resolutions or larger icons.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#rel-icon","status":"ls","links":[{"url":"http://crbug.com/294179","title":"Chrome bug"}],"categories":["HTML5","SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n #1","4.0-4.1":"n #1","4.2-4.3":"n #1","5.0-5.1":"n #1","6.0-6.1":"n #1","7.0-7.1":"n #1","8":"n #1","8.1":"n #1"},"op_mini":{"5.0-8.0":"n #1"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n #1"},"op_mob":{"10":"n #1","11":"n #1","11.1":"n #1","11.5":"n #1","12":"n #1","12.1":"n #1","24":"n #1"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n #1","11":"n #1"},"and_uc":{"9.9":"n"}},"notes":"See also [PNG favicons](#feat=link-icon-png).","notes_by_num":{"1":"Does not use favicons at all"},"usage_perc_y":12.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-media-resolution":{"title":"Media Queries: resolution feature","description":"Allows a media query to be set based on the device pixels used per CSS unit. While the standard uses `min`/`max-resolution` for this, some browsers support the older non-standard `device-pixel-ratio` media query.","spec":"http://www.w3.org/TR/css3-mediaqueries/#resolution","status":"rec","links":[{"url":"http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio/","title":"How to unprefix -webkit-device-pixel-ratio"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a #1","10":"a #1","11":"a #1","TP":"a #2"},"firefox":{"2":"n","3":"n","3.5":"a #3","3.6":"a #3","4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"a #3","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x #4","5":"a x #4","6":"a x #4","7":"a x #4","8":"a x #4","9":"a x #4","10":"a x #4","11":"a x #4","12":"a x #4","13":"a x #4","14":"a x #4","15":"a x #4","16":"a x #4","17":"a x #4","18":"a x #4","19":"a x #4","20":"a x #4","21":"a x #4","22":"a x #4","23":"a x #4","24":"a x #4","25":"a x #4","26":"a x #4","27":"a x #4","28":"a x #4","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"a x #4","5":"a x #4","5.1":"a x #4","6":"a x #4","6.1":"a x #4","7":"a x #4","7.1":"a x #4","8":"a x #4"},"opera":{"9":"n","9.5-9.6":"a x #4","10.0-10.1":"a x #4","10.5":"a x #4","10.6":"a x #4","11":"a x #4","11.1":"a x #4","11.5":"a x #4","11.6":"a x #4","12":"a x #4","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"a x #4","4.2-4.3":"a x #4","5.0-5.1":"a x #4","6.0-6.1":"a x #4","7.0-7.1":"a x #4","8":"a x #4","8.1":"a x #4"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"u","2.2":"u","2.3":"u","3":"u","4":"a x #4","4.1":"a x #4","4.2-4.3":"a x #4","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x #4","10":"a x #4"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"a x #4"}},"notes":"","notes_by_num":{"1":"Supports the `dpi` unit, but does not support `dppx` or `dpcm` units.","2":"Supports the `dpi` and `dppx` units, but does not support `dpcm` units.","3":"Firefox before 16 supports only `dpi` unit, but you can set `2dppx` per `min--moz-device-pixel-ratio: 2`","4":"Supporte the non-standard `min`/`max-device-pixel-ratio`"},"usage_perc_y":61.01,"usage_perc_a":32.84,"ucprefix":false,"parent":"css-mediaqueries","keywords":"@media,device-pixel-ratio,resolution","ie_id":"mediaqueriesresolutionfeature,dppxunitfortheresolutionmediaquery","chrome_id":"5944509615570944"},"xml-serializer":{"title":"DOM Parsing and Serialization","description":"Various DOM parsing and serializing functions, specifically `DOMParser`, `XMLSerializer`, `innerHTML`, `outerHTML` and `adjacentHTML`.","spec":"http://www.w3.org/TR/DOM-Parsing/","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/XMLSerializer","title":"MDN - XMLSerializer"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"a #2","6":"a #2","7":"a #2","8":"a #2","9":"a #1","10":"y","11":"y","TP":"y"},"firefox":{"2":"a #2","3":"a #2","3.5":"a #2","3.6":"a #2","4":"a #2","5":"a #2","6":"a #2","7":"a #2","8":"a #3","9":"a #3","10":"a #3","11":"a #1","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"a #1","5.1":"a #1","6":"a #1","6.1":"a #1","7":"a #1","7.1":"y","8":"y"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"u","11.1":"u","11.5":"u","11.6":"u","12":"u","12.1":"a #1","15":"a #1","16":"a #1","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a #1","4.0-4.1":"a #1","4.2-4.3":"a #1","5.0-5.1":"a #1","6.0-6.1":"a #1","7.0-7.1":"a #1","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"u"},"android":{"2.1":"a #1","2.2":"a #1","2.3":"a #1","3":"a #1","4":"a #1","4.1":"a #1","4.2-4.3":"a #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a #1","10":"a #1"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"a #1","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"","notes_by_num":{"1":"Partial support refers to lacking support for `parseFromString` on the DOMParser.","2":"Partial support in older IE refers to only supporting `innerHTML`, nothing else."},"usage_perc_y":78.32,"usage_perc_a":15.93,"ucprefix":false,"parent":"","keywords":"parseFromString","ie_id":"","chrome_id":""},"css-image-set":{"title":"CSS image-set","description":"Method of letting the browser pick the most appropriate CSS background image from a given set, primarily for high PPI screens.","spec":"http://dev.w3.org/csswg/css-images-3/#image-set-notation","status":"unoff","links":[{"url":"http://cloudfour.com/examples/image-set/","title":"Demo"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"u","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":59.11,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-boxdecorationbreak":{"title":"CSS box-decoration-break","description":"Controls whether the box's margins, borders, padding, and other decorations wrap the broken edges of the box fragments (when the box is split by a break (page/column/region/line).","spec":"http://www.w3.org/TR/css3-break/#break-decoration","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break","title":"MDN article"},{"url":"http://jsbin.com/xojoro/edit?css,output","title":"Demo of effect on box border"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"u","10":"y x"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":72.56,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"box-decoration,box decoration,break","ie_id":"","chrome_id":""},"object-observe":{"title":"Object.observe data binding","description":"Method for data binding, part of the ECMAScript 7 proposals","spec":"http://wiki.ecmascript.org/doku.php?id=harmony:observe","status":"other","links":[{"url":"http://www.html5rocks.com/en/tutorials/es7/observe/","title":"Data-binding Revolutions with Object.observe()"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"objectobserve","chrome_id":"6147094632988672"},"broadcastchannel":{"title":"BroadcastChannel","description":"BroadcastChannel allows scripts from the same origin but other browsing contexts (windows, workers) to send each other messages.","spec":"https://html.spec.whatwg.org/multipage/comms.html#broadcasting-to-other-browsing-contexts","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"broadcast,channel,messaging","ie_id":"","chrome_id":"4585496197988352"},"css-crisp-edges":{"title":"Crisp edges/pixelated images","description":"Forces images to be scaled with an algorithm that preserves contrast and edges in the image, without smoothing colors or introduce blur. This is intended for images such as pixel art. Official values that accomplish this for the `image-rendering` property are `crisp-edges` and `pixelated`.","spec":"http://dev.w3.org/csswg/css-images-3/#valdef-image-rendering-crisp-edges","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering","title":"MDN article"},{"url":"http://updates.html5rocks.com/2015/01/pixelated","title":"HTML5Rocks article"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"a x #2","8":"a x #2","9":"a x #2","10":"a x #2","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x #3","4":"y x #3","5":"y x #3","6":"y x #3","7":"y x #3","8":"y x #3","9":"y x #3","10":"y x #3","11":"y x #3","12":"y x #3","13":"y x #3","14":"y x #3","15":"y x #3","16":"y x #3","17":"y x #3","18":"y x #3","19":"y x #3","20":"y x #3","21":"y x #3","22":"y x #3","23":"y x #3","24":"y x #3","25":"y x #3","26":"y x #3","27":"y x #3","28":"y x #3","29":"y x #3","30":"y x #3","31":"y x #3","32":"y x #3","33":"y x #3","34":"y x #3","35":"y x #3","36":"y x #3","37":"y x #3","38":"y x #3","39":"y x #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"y #4","42":"y #4","43":"y #4","44":"y #4"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"a x #1","6.1":"y x #3","7":"y x #3","7.1":"y x #3","8":"y x #3"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y x #3","12":"y x #3","12.1":"y x #3","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y #4","29":"y #4"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a x #1","6.0-6.1":"a x #1","7.0-7.1":"y x #3","8":"y x #3","8.1":"y x #3"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"a x #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y x #3","12.1":"y x #3","24":"n"},"and_chr":{"41":"y #4"},"and_ff":{"36":"y x #3"},"ie_mob":{"10":"a x #2","11":"a x #2"},"and_uc":{"9.9":"a x #1"}},"notes":"Note that prefixes apply to the value (e.g. `-moz-crisp-edges`), not the `image-rendering` property.","notes_by_num":{"1":"Supported using the non-standard value `-webkit-optimize-contrast`","2":"Internet Explorer accomplishes support using the non-standard declaration `-ms-interpolation-mode: nearest-neighbor`","3":"Supports the `crisp-edges` value, but not `pixelated`.","4":"Supports the `pixelated` value, but not `crisp-edges`."},"usage_perc_y":33.02,"usage_perc_a":19.1,"ucprefix":false,"parent":"","keywords":"image-rendering,crisp-edges","ie_id":"","chrome_id":"5118058116939776"},"css-text-align-last":{"title":"CSS3 text-align-last","description":"CSS property to describe how the last line of a block or a line right before a forced line break when `text-align` is `justify`.","spec":"http://www.w3.org/TR/css3-text/#text-align-last-property","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-align-last","title":"MDN text-align-last"},{"url":"http://blogs.adobe.com/webplatform/2014/02/25/improving-your-sites-visual-details-css3-text-align-last/","title":"Adobe Web Platform Article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #2","36":"n d #2","37":"n d #2","38":"n d #2","39":"n d #2","40":"n d #2","41":"n d #2","42":"n d #2","43":"n d #2","44":"n d #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n d #3","23":"n d #3","24":"n d #3","25":"n d #3","26":"n d #3","27":"n d #3","28":"n d #3","29":"n d #3"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"In Internet Explorer, the start and end values are not supported.","2":"Enabled through the \"Enable Experimental Web Platform Features\" flag in chrome://flags","3":"Enabled through the \"Enable Experimental Web Platform Features\" flag in opera://flags"},"usage_perc_y":11.98,"usage_perc_a":15.13,"ucprefix":false,"parent":"","keywords":"text align last","ie_id":"","chrome_id":""},"fetch":{"title":"Fetch","description":"A modern replacement for XMLHttpRequest.","spec":"https://fetch.spec.whatwg.org/","status":"ls","links":[{"url":"https://github.com/github/fetch","title":"Polyfill"},{"url":"http://addyosmani.com/demos/fetch-api/","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a #2","41":"a #2 #3","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a #2","28":"a #2 #3","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a #2"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support can be enabled in Firefox with the `dom.fetch.enabled` flag.","2":"Only available in Chrome and Opera within ServiceWorkers.","3":"Available in Chrome and Opera within Window and Workers by enabling the \"Experimental Web Platform Features\" flag in `chrome://flags`"},"usage_perc_y":0.17,"usage_perc_a":38.79,"ucprefix":false,"parent":"","keywords":"fetch,service,workers,xhr,xmlhttprequest","ie_id":"fetchapi","chrome_id":"6730533392351232"},"background-attachment":{"title":"CSS background-attachment","description":"Method of defining how a background image is attached to a scrollable element. Values include `scroll` (default), `fixed` and `local`.","spec":"http://www.w3.org/TR/css3-background/#the-background-attachment","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment","title":"MDN article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a #1","3":"a #1","3.5":"a #1","3.6":"a #1","4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a #1","9.5-9.6":"a #1","10.0-10.1":"a #1","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a #2","6.0-6.1":"a #2","7.0-7.1":"a #2","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"a #1","4.2-4.3":"a #1","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"a #2","10":"a #2"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"n"},"and_chr":{"41":"a #2"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"Most mobile devices have a delay in updating the background position after scrolling a page with `fixed` backgrounds.","notes_by_num":{"1":"Partial support refers to supporting `fixed` but not `local`","2":"Partial support refers to supporting `local` but not `fixed`"},"usage_perc_y":67.77,"usage_perc_a":22.47,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"currentcolor":{"title":"CSS currentColor value","description":"A CSS value that will apply the existing `color` value to other properties like `background-color`, etc. ","spec":"http://www.w3.org/TR/css3-color/#currentcolor","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentColor_keyword","title":"MDN article"},{"url":"http://css-tricks.com/currentcolor/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"input-pattern":{"title":"Pattern attribute for input fields","description":"Allows validation of an input field based on a given regular expression pattern.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-pattern-attribute","status":"ls","links":[{"url":"http://html5pattern.com","title":"Site with common sample patterns "}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a #1"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support refers to not displaying a message for invalid patterns"},"usage_perc_y":72.88,"usage_perc_a":0.7,"ucprefix":false,"parent":"form-validation","keywords":"","ie_id":"","chrome_id":""},"registerprotocolhandler":{"title":"Custom protocol handling","description":"Method of allowing a webpage to handle a given protocol using `navigator.registerProtocolHandler`. This allows certain URLs to be opened by a given web application, for example `mailto:` addresses can be opened by a webmail client.","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#custom-handlers","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler","title":"MDN article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1","30":"y #1","31":"y #1","32":"y #1","33":"y #1","34":"y #1","35":"y #1","36":"y #1","37":"y #1","38":"y #1","39":"y #1","40":"y #1","41":"y #1","42":"y #1","43":"y #1","44":"y #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y #1","12":"y #1","12.1":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supports protocols `mailto`, `mms`, `nntp`, `rtsp`, and `webcal` but requires custom protocols to start with `web+`"},"usage_perc_y":47.66,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-snappoints":{"title":"CSS Scroll snap points","description":"CSS technique that allows customizable scrolling experiences like pagination of carousels by setting defined snap points.","spec":"http://www.w3.org/TR/css-snappoints-1/","status":"wd","links":[{"url":"http://generatedcontent.org/post/66817675443/setting-native-like-scrolling-offsets-in-css-with","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n d #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Currently in development in WebKit with partial support in nightly builds.","notes_by_num":{"1":"Partial support in IE10 refers to support limited to touch screens.","2":"Partial support in IE11 [documented here](https://dl.dropboxusercontent.com/u/444684/openwebref/CSS/scroll-snap-points/support.html)","3":"Can be enabled in Firefox using the `layout.css.scroll-snap.enabled` flag in `about:config`"},"usage_perc_y":0,"usage_perc_a":9.46,"ucprefix":false,"parent":"","keywords":"scroll-snap-points-x,scroll-snap-points-y,scroll-snap-type,scroll-snap-destination,scroll-snap-coordinate","ie_id":"cssscrollingsnappoints","chrome_id":""},"input-minlength":{"title":"Minimum length attribute for input fields","description":"Declares a lower bound on the number of characters a user can input.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-maxlength-and-minlength-attributes","status":"ls","links":[{"url":"http://www.w3.org/TR/html5/forms.html#setting-minimum-input-length-requirements:-the-minlength-attribute","title":"W3C usage example"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Chrome and Opera is due to a [bug](http://crbug.com/470577) which prevents any validation from occurring if the field has any pre-filled value.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":38.96,"ucprefix":false,"parent":"form-validation","keywords":"","ie_id":"","chrome_id":"6023370181181440"}}}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/fulldata-json/data-2.0.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/fulldata-json/data-2.0.json
new file mode 100644
index 0000000..cfb4af6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/fulldata-json/data-2.0.json
@@ -0,0 +1 @@
+{"agents":{"ie":{"browser":"IE","abbr":"IE","prefix":"ms","type":"desktop","usage_global":{"5.5":0.009298,"6":0.104359,"7":0.125231,"8":2.90119,"9":1.82281,"10":1.44016,"11":8.02175,"TP":0},"version_list":[{"version":"5.5","global_usage":0.009298,"era":-6,"prefix":""},{"version":"6","global_usage":0.104359,"era":-5,"prefix":""},{"version":"7","global_usage":0.125231,"era":-4,"prefix":""},{"version":"8","global_usage":2.90119,"era":-3,"prefix":""},{"version":"9","global_usage":1.82281,"era":-2,"prefix":""},{"version":"10","global_usage":1.44016,"era":-1,"prefix":""},{"version":"11","global_usage":8.02175,"era":0,"prefix":""},{"version":"TP","global_usage":0,"era":1,"prefix":""}],"current_version":"11"},"firefox":{"browser":"Firefox","abbr":"FF","prefix":"moz","type":"desktop","usage_global":{"2":0.013404,"3":0.040212,"3.5":0.013404,"3.6":0.093828,"4":0.020106,"5":0.013404,"6":0.020106,"7":0.013404,"8":0.046914,"9":0.013404,"10":0.026808,"11":0.03351,"12":0.053616,"13":0.020106,"14":0.026808,"15":0.03351,"16":0.046914,"17":0.03351,"18":0.03351,"19":0.026808,"20":0.03351,"21":0.053616,"22":0.026808,"23":0.040212,"24":0.060318,"25":0.060318,"26":0.046914,"27":0.127338,"28":0.046914,"29":0.073722,"30":0.10053,"31":0.455736,"32":0.281484,"33":0.174252,"34":0.321696,"35":8.93377,"36":0.717114,"37":0.020106,"38":0,"39":0},"version_list":[{"version":"2","global_usage":0.013404,"era":-36,"prefix":""},{"version":"3","global_usage":0.040212,"era":-35,"prefix":""},{"version":"3.5","global_usage":0.013404,"era":-34,"prefix":""},{"version":"3.6","global_usage":0.093828,"era":-33,"prefix":""},{"version":"4","global_usage":0.020106,"era":-32,"prefix":""},{"version":"5","global_usage":0.013404,"era":-31,"prefix":""},{"version":"6","global_usage":0.020106,"era":-30,"prefix":""},{"version":"7","global_usage":0.013404,"era":-29,"prefix":""},{"version":"8","global_usage":0.046914,"era":-28,"prefix":""},{"version":"9","global_usage":0.013404,"era":-27,"prefix":""},{"version":"10","global_usage":0.026808,"era":-26,"prefix":""},{"version":"11","global_usage":0.03351,"era":-25,"prefix":""},{"version":"12","global_usage":0.053616,"era":-24,"prefix":""},{"version":"13","global_usage":0.020106,"era":-23,"prefix":""},{"version":"14","global_usage":0.026808,"era":-22,"prefix":""},{"version":"15","global_usage":0.03351,"era":-21,"prefix":""},{"version":"16","global_usage":0.046914,"era":-20,"prefix":""},{"version":"17","global_usage":0.03351,"era":-19,"prefix":""},{"version":"18","global_usage":0.03351,"era":-18,"prefix":""},{"version":"19","global_usage":0.026808,"era":-17,"prefix":""},{"version":"20","global_usage":0.03351,"era":-16,"prefix":""},{"version":"21","global_usage":0.053616,"era":-15,"prefix":""},{"version":"22","global_usage":0.026808,"era":-14,"prefix":""},{"version":"23","global_usage":0.040212,"era":-13,"prefix":""},{"version":"24","global_usage":0.060318,"era":-12,"prefix":""},{"version":"25","global_usage":0.060318,"era":-11,"prefix":""},{"version":"26","global_usage":0.046914,"era":-10,"prefix":""},{"version":"27","global_usage":0.127338,"era":-9,"prefix":""},{"version":"28","global_usage":0.046914,"era":-8,"prefix":""},{"version":"29","global_usage":0.073722,"era":-7,"prefix":""},{"version":"30","global_usage":0.10053,"era":-6,"prefix":""},{"version":"31","global_usage":0.455736,"era":-5,"prefix":""},{"version":"32","global_usage":0.281484,"era":-4,"prefix":""},{"version":"33","global_usage":0.174252,"era":-3,"prefix":""},{"version":"34","global_usage":0.321696,"era":-2,"prefix":""},{"version":"35","global_usage":8.93377,"era":-1,"prefix":""},{"version":"36","global_usage":0.717114,"era":0,"prefix":""},{"version":"37","global_usage":0.020106,"era":1,"prefix":""},{"version":"38","global_usage":0,"era":2,"prefix":""},{"version":"39","global_usage":0,"era":3,"prefix":""}],"current_version":"36"},"chrome":{"browser":"Chrome","abbr":"Chr.","prefix":"webkit","type":"desktop","usage_global":{"4":0.013404,"5":0.013404,"6":0.013404,"7":0.006702,"8":0.013404,"9":0.006702,"10":0.026808,"11":0.080424,"12":0.03351,"13":0.020106,"14":0.020106,"15":0.020106,"16":0.013404,"17":0.013404,"18":0.03351,"19":0.013404,"20":0.013404,"21":0.073722,"22":0.080424,"23":0.020106,"24":0.053616,"25":0.026808,"26":0.053616,"27":0.053616,"28":0.046914,"29":0.080424,"30":0.127338,"31":0.750624,"32":0.080424,"33":0.288186,"34":0.227868,"35":0.388716,"36":0.6702,"37":0.817644,"38":0.683604,"39":1.97039,"40":27.3777,"41":0.187656,"42":0.174252,"43":0,"44":0},"version_list":[{"version":"4","global_usage":0.013404,"era":-37,"prefix":""},{"version":"5","global_usage":0.013404,"era":-36,"prefix":""},{"version":"6","global_usage":0.013404,"era":-35,"prefix":""},{"version":"7","global_usage":0.006702,"era":-34,"prefix":""},{"version":"8","global_usage":0.013404,"era":-33,"prefix":""},{"version":"9","global_usage":0.006702,"era":-32,"prefix":""},{"version":"10","global_usage":0.026808,"era":-31,"prefix":""},{"version":"11","global_usage":0.080424,"era":-30,"prefix":""},{"version":"12","global_usage":0.03351,"era":-29,"prefix":""},{"version":"13","global_usage":0.020106,"era":-28,"prefix":""},{"version":"14","global_usage":0.020106,"era":-27,"prefix":""},{"version":"15","global_usage":0.020106,"era":-26,"prefix":""},{"version":"16","global_usage":0.013404,"era":-25,"prefix":""},{"version":"17","global_usage":0.013404,"era":-24,"prefix":""},{"version":"18","global_usage":0.03351,"era":-23,"prefix":""},{"version":"19","global_usage":0.013404,"era":-22,"prefix":""},{"version":"20","global_usage":0.013404,"era":-21,"prefix":""},{"version":"21","global_usage":0.073722,"era":-20,"prefix":""},{"version":"22","global_usage":0.080424,"era":-19,"prefix":""},{"version":"23","global_usage":0.020106,"era":-18,"prefix":""},{"version":"24","global_usage":0.053616,"era":-17,"prefix":""},{"version":"25","global_usage":0.026808,"era":-16,"prefix":""},{"version":"26","global_usage":0.053616,"era":-15,"prefix":""},{"version":"27","global_usage":0.053616,"era":-14,"prefix":""},{"version":"28","global_usage":0.046914,"era":-13,"prefix":""},{"version":"29","global_usage":0.080424,"era":-12,"prefix":""},{"version":"30","global_usage":0.127338,"era":-11,"prefix":""},{"version":"31","global_usage":0.750624,"era":-10,"prefix":""},{"version":"32","global_usage":0.080424,"era":-9,"prefix":""},{"version":"33","global_usage":0.288186,"era":-8,"prefix":""},{"version":"34","global_usage":0.227868,"era":-7,"prefix":""},{"version":"35","global_usage":0.388716,"era":-6,"prefix":""},{"version":"36","global_usage":0.6702,"era":-5,"prefix":""},{"version":"37","global_usage":0.817644,"era":-4,"prefix":""},{"version":"38","global_usage":0.683604,"era":-3,"prefix":""},{"version":"39","global_usage":1.97039,"era":-2,"prefix":""},{"version":"40","global_usage":27.3777,"era":-1,"prefix":""},{"version":"41","global_usage":0.187656,"era":0,"prefix":""},{"version":"42","global_usage":0.174252,"era":1,"prefix":""},{"version":"43","global_usage":0,"era":2,"prefix":""},{"version":"44","global_usage":0,"era":3,"prefix":""}],"current_version":"41"},"safari":{"browser":"Safari","abbr":"Saf.","prefix":"webkit","type":"desktop","usage_global":{"3.1":0,"3.2":0.008692,"4":0.060318,"5":0.120636,"5.1":0.36861,"6":0.073722,"6.1":0.261378,"7":0.361908,"7.1":0.589776,"8":1.327},"version_list":[{"version":"3.1","global_usage":0,"era":-9,"prefix":""},{"version":"3.2","global_usage":0.008692,"era":-8,"prefix":""},{"version":"4","global_usage":0.060318,"era":-7,"prefix":""},{"version":"5","global_usage":0.120636,"era":-6,"prefix":""},{"version":"5.1","global_usage":0.36861,"era":-5,"prefix":""},{"version":"6","global_usage":0.073722,"era":-4,"prefix":""},{"version":"6.1","global_usage":0.261378,"era":-3,"prefix":""},{"version":"7","global_usage":0.361908,"era":-2,"prefix":""},{"version":"7.1","global_usage":0.589776,"era":-1,"prefix":""},{"version":"8","global_usage":1.327,"era":0,"prefix":""}],"current_version":"8"},"opera":{"browser":"Opera","abbr":"Op.","prefix":"webkit","type":"desktop","usage_global":{"9":0.0082,"9.5-9.6":0.00685,"10.0-10.1":0.020106,"10.5":0.008392,"10.6":0.007296,"11":0.014996,"11.1":0.008219,"11.5":0.006702,"11.6":0.013404,"12":0.013404,"12.1":0.227868,"15":0.00685,"16":0.00685,"17":0.00685,"18":0.006702,"19":0.006597,"20":0.013404,"21":0.006597,"22":0.006597,"23":0.013434,"24":0.006702,"25":0.013404,"26":0.03351,"27":0.697008,"28":0.013404,"29":0},"version_list":[{"version":"9","global_usage":0.0082,"era":-23,"prefix":"o"},{"version":"9.5-9.6","global_usage":0.00685,"era":-22,"prefix":"o"},{"version":"10.0-10.1","global_usage":0.020106,"era":-21,"prefix":"o"},{"version":"10.5","global_usage":0.008392,"era":-20,"prefix":"o"},{"version":"10.6","global_usage":0.007296,"era":-19,"prefix":"o"},{"version":"11","global_usage":0.014996,"era":-18,"prefix":"o"},{"version":"11.1","global_usage":0.008219,"era":-17,"prefix":"o"},{"version":"11.5","global_usage":0.006702,"era":-16,"prefix":"o"},{"version":"11.6","global_usage":0.013404,"era":-15,"prefix":"o"},{"version":"12","global_usage":0.013404,"era":-14,"prefix":"o"},{"version":"12.1","global_usage":0.227868,"era":-13,"prefix":"o"},{"version":"15","global_usage":0.00685,"era":-12,"prefix":""},{"version":"16","global_usage":0.00685,"era":-11,"prefix":""},{"version":"17","global_usage":0.00685,"era":-10,"prefix":""},{"version":"18","global_usage":0.006702,"era":-9,"prefix":""},{"version":"19","global_usage":0.006597,"era":-8,"prefix":""},{"version":"20","global_usage":0.013404,"era":-7,"prefix":""},{"version":"21","global_usage":0.006597,"era":-6,"prefix":""},{"version":"22","global_usage":0.006597,"era":-5,"prefix":""},{"version":"23","global_usage":0.013434,"era":-4,"prefix":""},{"version":"24","global_usage":0.006702,"era":-3,"prefix":""},{"version":"25","global_usage":0.013404,"era":-2,"prefix":""},{"version":"26","global_usage":0.03351,"era":-1,"prefix":""},{"version":"27","global_usage":0.697008,"era":0,"prefix":""},{"version":"28","global_usage":0.013404,"era":1,"prefix":""},{"version":"29","global_usage":0,"era":2,"prefix":""}],"current_version":"27","prefix_exceptions":{"9":"o","9.5-9.6":"o","10.0-10.1":"o","10.5":"o","10.6":"o","11":"o","11.1":"o","11.5":"o","11.6":"o","12":"o","12.1":"o"}},"ios_saf":{"browser":"iOS Safari","abbr":"iOS","prefix":"webkit","type":"mobile","usage_global":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0412818,"6.0-6.1":0.126742,"7.0-7.1":1.6042,"8":0.344739,"8.1":5.09577},"version_list":[{"version":"3.2","global_usage":0,"era":-7,"prefix":""},{"version":"4.0-4.1","global_usage":0,"era":-6,"prefix":""},{"version":"4.2-4.3","global_usage":0,"era":-5,"prefix":""},{"version":"5.0-5.1","global_usage":0.0412818,"era":-4,"prefix":""},{"version":"6.0-6.1","global_usage":0.126742,"era":-3,"prefix":""},{"version":"7.0-7.1","global_usage":1.6042,"era":-2,"prefix":""},{"version":"8","global_usage":0.344739,"era":-1,"prefix":""},{"version":"8.1","global_usage":5.09577,"era":0,"prefix":""}],"current_version":"8.1"},"op_mini":{"browser":"Opera Mini","abbr":"O.Mini","prefix":"o","type":"mobile","usage_global":{"5.0-8.0":2.82765},"version_list":[{"version":"5.0-8.0","global_usage":2.82765,"era":0,"prefix":""}],"current_version":"5.0-8.0"},"android":{"browser":"Android Browser","abbr":"And.","prefix":"webkit","type":"mobile","usage_global":{"2.1":0,"2.2":0,"2.3":0.124295,"3":0,"4":0.251206,"4.1":0.809224,"4.2-4.3":1.36986,"4.4":2.55916,"4.4.3-4.4.4":1.17884,"37":0},"version_list":[{"version":"2.1","global_usage":0,"era":-9,"prefix":""},{"version":"2.2","global_usage":0,"era":-8,"prefix":""},{"version":"2.3","global_usage":0.124295,"era":-7,"prefix":""},{"version":"3","global_usage":0,"era":-6,"prefix":""},{"version":"4","global_usage":0.251206,"era":-5,"prefix":""},{"version":"4.1","global_usage":0.809224,"era":-4,"prefix":""},{"version":"4.2-4.3","global_usage":1.36986,"era":-3,"prefix":""},{"version":"4.4","global_usage":2.55916,"era":-2,"prefix":""},{"version":"4.4.3-4.4.4","global_usage":1.17884,"era":-1,"prefix":""},{"version":"37","global_usage":0,"era":0,"prefix":""}],"current_version":"37"},"op_mob":{"browser":"Opera Mobile","abbr":"O.Mob","prefix":"o","type":"mobile","usage_global":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0040598,"12.1":0.0243588,"24":0},"version_list":[{"version":"10","global_usage":0,"era":-6,"prefix":""},{"version":"11","global_usage":0,"era":-5,"prefix":""},{"version":"11.1","global_usage":0,"era":-4,"prefix":""},{"version":"11.5","global_usage":0,"era":-3,"prefix":""},{"version":"12","global_usage":0.0040598,"era":-2,"prefix":""},{"version":"12.1","global_usage":0.0243588,"era":-1,"prefix":""},{"version":"24","global_usage":0,"era":0,"prefix":"webkit"}],"current_version":"24","prefix_exceptions":{"24":"webkit"}},"bb":{"browser":"Blackberry Browser","abbr":"BB","prefix":"webkit","type":"mobile","usage_global":{"7":0.0816255,"10":0},"version_list":[{"version":"7","global_usage":0.0816255,"era":-1,"prefix":""},{"version":"10","global_usage":0,"era":0,"prefix":""}],"current_version":"10"},"and_chr":{"browser":"Chrome for Android","abbr":"Chr/And.","prefix":"webkit","type":"mobile","usage_global":{"41":10.5137},"version_list":[{"version":"41","global_usage":10.5137,"era":0,"prefix":""}],"current_version":"41"},"and_ff":{"browser":"Firefox for Android","abbr":"FF/And.","prefix":"moz","type":"mobile","usage_global":{"36":0.13192},"version_list":[{"version":"36","global_usage":0.13192,"era":0,"prefix":""}],"current_version":"36"},"ie_mob":{"browser":"IE Mobile","abbr":"IE.Mob","prefix":"ms","type":"mobile","usage_global":{"10":0.224915,"11":0.477559},"version_list":[{"version":"10","global_usage":0.224915,"era":-1,"prefix":""},{"version":"11","global_usage":0.477559,"era":0,"prefix":""}],"current_version":"11"},"and_uc":{"browser":"UC Browser for Android","abbr":"UC","prefix":"webkit","type":"mobile","usage_global":{"9.9":3.84217},"version_list":[{"version":"9.9","global_usage":3.84217,"era":0,"prefix":"webkit"}],"current_version":"9.9","prefix_exceptions":{"9.9":"webkit"}}},"statuses":{"rec":"W3C Recommendation","pr":"W3C Proposed Recommendation","cr":"W3C Candidate Recommendation","wd":"W3C Working Draft","ls":"WHATWG Living Standard","other":"Other","unoff":"Unofficial / Note"},"cats":{"CSS":["CSS3","CSS","CSS2"],"HTML5":["Canvas","HTML5"],"JS API":["JS API"],"Other":["PNG","Other","DOM"],"SVG":["SVG"]},"updated":1427431772,"data":{"png-alpha":{"title":"PNG alpha transparency","description":"Semi-transparent areas in PNG files","spec":"http://www.w3.org/TR/PNG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Portable_Network_Graphics","title":"Wikipedia"},{"url":"http://dillerdesign.com/experiment/DD_belatedPNG/","title":"Workaround for IE6"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs.","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"apng":{"title":"Animated PNG (APNG)","description":"Like animated GIFs, but allowing 24-bit colors and alpha transparency","spec":"https://wiki.mozilla.org/APNG_Specification","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/APNG","title":"Wikipedia"},{"url":"https://github.com/davidmz/apng-canvas","title":"Polyfill using canvas"},{"url":"https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp","title":"Chrome extension providing support"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Where support for APNG is missing, only the first frame is displayed","notes_by_num":{},"usage_perc_y":19.44,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"video":{"title":"Video element","description":"Method of playing videos on webpages (without requiring a plug-in).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element","status":"ls","links":[{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://webmproject.org","title":"WebM format information"},{"url":"http://camendesign.co.uk/code/video_for_everybody","title":"Video for Everybody"},{"url":"http://diveintohtml5.info/video.html","title":"Video on the Web - includes info on Android support"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/video","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Different browsers have support for different video formats, see sub-features for details. \r\n\r\nThe Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"audio":{"title":"Audio element","description":"Method of playing sound on webpages (without requiring a plug-in).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-audio-element","status":"ls","links":[{"url":"http://html5doctor.com/native-audio-in-the-browser/","title":"HTML5 Doctor article"},{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://www.jplayer.org/latest/demos/","title":"Demos of audio player that uses the audio element"},{"url":"http://24ways.org/2010/the-state-of-html5-audio","title":"Detailed article on support"},{"url":"http://textopia.org/androidsoundformats.html","title":"File format test page"},{"url":"http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio","title":"The State of HTML5 Audio"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/audio.js#audio","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/audio","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"contenteditable":{"title":"contenteditable attribute (basic support)","description":"Method of making any HTML element editable.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#contenteditable","status":"ls","links":[{"url":"http://html5demos.com/contenteditable","title":"Demo page"},{"url":"https://blog.whatwg.org/the-road-to-html-5-contenteditable","title":"WHATWG blog post"},{"url":"http://accessgarage.wordpress.com/2009/05/08/how-to-hack-your-app-to-make-contenteditable-work/","title":"Blog post on usage problems"},{"url":"http://docs.webplatform.org/wiki/html/attributes/contentEditable","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"This support only refers to very basic editing capability, implementations vary significantly on how certain elements can be edited.","notes_by_num":{},"usage_perc_y":94.18,"usage_perc_a":0.04,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"dragndrop":{"title":"Drag and Drop","description":"Method of easily dragging and dropping elements on a page, requiring minimal JavaScript.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#dnd","status":"ls","links":[{"url":"http://html5doctor.com/native-drag-and-drop/","title":"HTML5 Doctor article"},{"url":"http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html","title":"Shopping cart demo"},{"url":"http://html5demos.com/drag","title":"Demo with link blocks"},{"url":"http://docs.webplatform.org/wiki/dom/DragEvent","title":"WebPlatform Docs"},{"url":"https://github.com/MihaiValentin/setDragImage-IE","title":"Polyfill for setDragImage in IE"},{"url":"http://blog.teamtreehouse.com/implementing-native-drag-and-drop","title":"Implementing Native Drag and Drop"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #2","11":"a #2","TP":"a #2"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM elements attached to the DOM and within the viewport of the browser for `.setDragImage`.","notes_by_num":{"1":"Partial support refers to no support for the `dataTransfer.files` or `.types` objects and limited supported formats for `dataTransfer.setData`/`getData`.","2":"Partial support refers to not supporting `.setDragImage`"},"usage_perc_y":51.71,"usage_perc_a":14.42,"ucprefix":false,"parent":"","keywords":"draganddrop","ie_id":"","chrome_id":""},"internationalization":{"title":"Internationalization API","description":"Locale-sensitive collation (string comparison), number formatting, and date and time formatting.","spec":"http://www.ecma-international.org/ecma-402/1.0/","status":"other","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl","title":"MDN reference"},{"url":"http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/","title":"The ECMAScript Internationalization API"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"u","4.4.3-4.4.4":"u","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":65.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"Intl,Collator,NumberFormat,DateTimeFormat","ie_id":"ecmascriptinternationalizationapi","chrome_id":""},"queryselector":{"title":"querySelector/querySelectorAll","description":"Method of accessing DOM elements using CSS selectors","spec":"http://www.w3.org/TR/selectors-api/","status":"rec","links":[{"url":"https://developer.mozilla.org/en/DOM/element.querySelector","title":"MDN article on querySelector"},{"url":"https://developer.mozilla.org/En/DOM/Element.querySelectorAll","title":"MDN article on querySelectorAll"},{"url":"http://cjihrig.com/blog/javascripts-selectors-api/","title":"Blog post"},{"url":"http://docs.webplatform.org/wiki/css/selectors_api/querySelector","title":"WebPlatform Docs"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"a #1","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in IE8 is due to being limited to [CSS 2.1 selectors](/#feat=css-sel2). Additionally, it will have trouble with selectors including unrecognized tags (for example HTML5 ones)."},"usage_perc_y":93.98,"usage_perc_a":2.9,"ucprefix":false,"parent":"","keywords":"query,selectors,selectors api","ie_id":"","chrome_id":""},"getelementsbyclassname":{"title":"getElementsByClassName","description":"Method of accessing DOM elements by class name","spec":"http://www.w3.org/TR/dom/#dom-document-getelementsbyclassname","status":"wd","links":[{"url":"http://www.quirksmode.org/dom/tests/basics.html#getElementsByClassName","title":"Test page"},{"url":"http://docs.webplatform.org/wiki/dom/HTMLElement/getElementsByClassName","title":"WebPlatform Docs"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"byclassname","ie_id":"","chrome_id":""},"forms":{"title":"HTML5 form features","description":"Expanded form options, including things like date pickers, sliders, validation, placeholders and multiple file uploads. Previously known as \"Web forms 2.0\".","spec":"https://html.spec.whatwg.org/multipage/forms.html#forms","status":"ls","links":[{"url":"https://miketaylr.com/code/input-type-attr.html","title":"HTML5 inputs and attribute support page"},{"url":"https://github.com/westonruter/webforms2","title":"Cross-browser JS implementation (based on original spec)"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"p","3.2":"p","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":7.03,"usage_perc_a":82.39,"ucprefix":false,"parent":"","keywords":"input,datepicker","ie_id":"","chrome_id":""},"html5semantic":{"title":"New semantic elements","description":"HTML5 offers some new elements, primarily for semantic purposes. The elements include: section, article, aside, header, footer, nav, figure, figcaption, time, mark, main.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#sections","status":"ls","links":[{"url":"https://blog.whatwg.org/supporting-new-elements-in-ie","title":"Workaround for IE"},{"url":"https://blog.whatwg.org/styling-ie-noscript","title":"Alternate workaround"},{"url":"http://oli.jp/2009/html5-structure3/","title":"Article on structural elements"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-html5-elements","title":"has.js test"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y #1","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"n","3":"a #1","3.5":"a #1","3.6":"a #1","4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"y #1","5.1":"y #1","6":"y #1","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a #1","9.5-9.6":"a #1","10.0-10.1":"a #1","10.5":"a #1","10.6":"a #1","11":"a #1","11.1":"y #1","11.5":"y #1","11.6":"y #1","12":"y #1","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a #1","4.0-4.1":"y #1","4.2-4.3":"y #1","5.0-5.1":"y #1","6.0-6.1":"y #1","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"a #1","2.2":"y #1","2.3":"y #1","3":"y #1","4":"y #1","4.1":"y #1","4.2-4.3":"y #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y #1","10":"y #1"},"op_mob":{"10":"a #1","11":"y #1","11.1":"y #1","11.5":"y #1","12":"y #1","12.1":"y #1","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y #1"}},"notes":"Partial support refers to missing the default styling. This is easily taken care of by using display:block for all new elements (except time and mark, these should be display:inline anyway). IE11 and older versions of other browsers do not support the element.","notes_by_num":{"1":"Does not include support for the element "},"usage_perc_y":90.9,"usage_perc_a":3.14,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"offline-apps":{"title":"Offline web applications","description":"Method of defining web page files to be cached using a cache manifest file, allowing them to work offline on subsequent visits to the page","spec":"https://html.spec.whatwg.org/multipage/browsers.html#offline","status":"ls","links":[{"url":"http://www.sitepoint.com/offline-web-application-tutorial/","title":"Sitepoint tutorial"},{"url":"http://diveintohtml5.info/offline.html","title":"Dive Into HTML5 article"},{"url":"http://hacks.mozilla.org/2010/01/offline-web-applications/","title":"Mozilla Hacks article/demo"},{"url":"http://docs.webplatform.org/wiki/apis/appcache/ApplicationCache","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":89.29,"usage_perc_a":0.04,"ucprefix":false,"parent":"","keywords":"appcache,app cache,application cache,online","ie_id":"applicationcache","chrome_id":"6192449487634432"},"webworkers":{"title":"Web Workers","description":"Method of running scripts in the background, isolated from the web page","spec":"https://html.spec.whatwg.org/multipage/workers.html","status":"ls","links":[{"url":"https://developer.mozilla.org/En/Using_web_workers","title":"MDN article"},{"url":"http://nerget.com/rayjs-mt/rayjs.html","title":"Web Worker demo"},{"url":"http://code.google.com/p/ie-web-worker/","title":"Polyfill for IE (single threaded)"},{"url":"http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/","title":"Tutorial"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":86.74,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"fontface":{"title":"@font-face Web fonts","description":"Method of displaying fonts downloaded from websites","spec":"http://www.w3.org/TR/css3-webfonts/","status":"cr","links":[{"url":"http://webfonts.info","title":"News and information site"},{"url":"http://en.wikipedia.org/wiki/Web_typography","title":"Wikipedia"},{"url":"http://www.css3files.com/font/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@font-face","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"a","2.3":"a","3":"a","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support before IE9 refers to only supporting EOT fonts. Safari for iOS 4.1 and below only supports SVG fonts.","notes_by_num":{},"usage_perc_y":90.95,"usage_perc_a":3.35,"ucprefix":false,"parent":"","keywords":"font face","ie_id":"","chrome_id":""},"eot":{"title":"EOT - Embedded OpenType fonts","description":"Type of font that can be derived from a regular font, allowing small files and legal use of high-quality fonts. Usage is restricted by the file being tied to the website","spec":"http://www.w3.org/Submission/EOT/","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/Embedded_OpenType","title":"Wikipedia"},{"url":"http://www.microsoft.com/typography/web/embedding/default.aspx","title":"Example pages"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Proposal by Microsoft, being considered for W3C standardization.","notes_by_num":{},"usage_perc_y":14.42,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"woff":{"title":"WOFF - Web Open Font Format","description":"Compressed TrueType/OpenType font that contains information about the font's source.","spec":"http://www.w3.org/TR/WOFF/","status":"rec","links":[{"url":"http://hacks.mozilla.org/2009/10/woff/","title":"Mozilla hacks blog post"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Reported to be supported in some modified versions of the Android 4.0 browser.","notes_by_num":{},"usage_perc_y":88.33,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"multibackgrounds":{"title":"CSS3 Multiple backgrounds","description":"Method of using multiple images as a background","spec":"http://www.w3.org/TR/css3-background/","status":"cr","links":[{"url":"http://www.css3.info/preview/multiple-backgrounds/","title":"Demo & information page"},{"url":"http://www.css3files.com/background/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/background-image","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"border-image":{"title":"CSS3 Border images","description":"Method of using images for borders","spec":"http://www.w3.org/TR/css3-background/#the-border-image","status":"cr","links":[{"url":"http://www.css3files.com/border/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/border-image","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"a x","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a x","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"a","10.6":"a","11":"a x","11.1":"a x","11.5":"a x","11.6":"a x","12":"a x","12.1":"a x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a x"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x","10":"y"},"op_mob":{"10":"n","11":"a x","11.1":"a x","11.5":"a x","12":"a x","12.1":"a x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Note that both the border-style and border-width must be specified for border-images to work according to spec, though older implementations may not have this requirement. Partial support refers to supporting the shorthand syntax, but not the individual properties (border-image-source, border-image-slice, etc). ","notes_by_num":{},"usage_perc_y":83.44,"usage_perc_a":7.04,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"background-img-opts":{"title":"CSS3 Background-image options","description":"New properties to affect background images, including background-clip, background-origin and background-size","spec":"http://www.w3.org/TR/css3-background/#backgrounds","status":"cr","links":[{"url":"http://www.standardista.com/css3/css3-background-properties","title":"Detailed compatibility tables and demos"},{"url":"http://www.css3files.com/background/","title":"Information page"},{"url":"https://github.com/louisremi/background-size-polyfill","title":"Polyfill for IE7-8"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #2 #3","3.2":"a #2 #3","4":"a #2 #3","5":"a #2 #3","5.1":"a #2 #3","6":"a #2 #3","6.1":"a #2 #3","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"a x","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a #3","6.0-6.1":"a","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"a x","2.2":"a x #3","2.3":"a x #3","3":"a #3","4":"a #3","4.1":"a #3","4.2-4.3":"a #3","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in Opera Mini refers to not supporting background sizing or background attachments. However Opera Mini 7.5 supports background sizing (including cover and contain values).","2":"Partial support in Safari 6 refers to not supporting background sizing offset from edges syntax.","3":"Does not support `background-size` values in the `background` shorthand"},"usage_perc_y":87.16,"usage_perc_a":6.81,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-table":{"title":"CSS Table display","description":"Method of displaying elements as tables, rows, and cells","spec":"http://www.w3.org/TR/CSS21/tables.html","status":"rec","links":[{"url":"http://www.onenaught.com/posts/201/use-css-displaytable-for-layout","title":"Blog post on usage"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"display:table, display: table,table-cell,table-row,table-layout","ie_id":"","chrome_id":""},"css-gencontent":{"title":"CSS Generated content for pseudo-elements","description":"Method of displaying text or images before or after the given element's contents using the ::before and ::after pseudo-elements. All browsers with support also support the `attr()` notation in the `content` property. ","spec":"http://www.w3.org/TR/CSS21/generate.html","status":"rec","links":[{"url":"http://www.westciv.com/style_master/academy/css_tutorial/advanced/generated_content.html","title":"Guide on usage"},{"url":"https://dev.opera.com/articles/view/css-generated-content-techniques/","title":"Dev.Opera article"},{"url":"http://docs.webplatform.org/wiki/css/generated_and_replaced_content","title":"WebPlatform Docs"}],"categories":["CSS2","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE8 only supports the single-colon CSS 2.1 syntax (i.e. :pseudo-class). It does not support the double-colon CSS3 syntax (i.e. ::pseudo-element)\r\n\r\nFor content to appear in pseudo-elements, the `content` property must be set (but may be an empty string).","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":2.9,"ucprefix":false,"parent":"","keywords":"before,after","ie_id":"","chrome_id":""},"css-fixed":{"title":"CSS position:fixed","description":"Method of keeping an element in a fixed location regardless of scroll position","spec":"http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning","status":"rec","links":[{"url":"http://www.css-101.org/fixed-positioning/05.php","title":"Workaround for IE6"},{"url":"http://bradfrostweb.com/blog/mobile/fixed-position/","title":"Article on mobile support"},{"url":"http://docs.webplatform.org/wiki/css/properties/position","title":"WebPlatform Docs"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Only works in Android 2.2+ by using the following meta tag: . \r\n\r\nPartial support in older iOS Safari refers to [buggy behavior](http://remysharp.com/2012/05/24/issues-with-position-fixed-scrolling-on-ios/).","notes_by_num":{},"usage_perc_y":92.35,"usage_perc_a":1.9,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"hashchange":{"title":"Hashchange event","description":"Event triggered in JavaScript when the URL's hash has changed (for example: page.html#foo to page.html#bar) ","spec":"https://html.spec.whatwg.org/multipage/browsers.html#the-hashchangeevent-interface","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/window.onhashchange","title":"MDN article"},{"url":"http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx","title":"MSDN article"},{"url":"http://www.quirksmode.org/dom/events/tests/hashchange.html","title":"Simple demo"},{"url":"http://github.com/3nr1c/jUri.js","title":"Polyfill"},{"url":"http://docs.webplatform.org/wiki/dom/Element/hashchange","title":"WebPlatform Docs"}],"categories":["HTML5","JS API"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.93,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"onhashchange,HashChangeEvent","ie_id":"","chrome_id":""},"css-sel2":{"title":"CSS 2.1 selectors","description":"Basic CSS selectors including: `*` (universal selector), `>` (child selector), `:first-child`, `:link`, `:visited`, `:active`, `:hover`, `:focus`, `:lang()`, `+` (adjacent sibling selector), `[attr]`, `[attr=\"val\"]`, `[attr~=\"val\"]`, `[attr|=\"bar\"]`, `.foo` (class selector), `#foo` (id selector)","spec":"http://www.w3.org/TR/CSS21/selector.html","status":"rec","links":[{"url":"http://www.quirksmode.org/css/contents.html","title":"Detailed support information"},{"url":"http://www.yourhtmlsource.com/stylesheets/advancedselectors.html","title":"Examples of advanced selectors"},{"url":"http://selectivizr.com","title":"Selectivizr: Polyfill for IE6-8"},{"url":"http://docs.webplatform.org/wiki/css/selectors","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-sel3":{"title":"CSS3 selectors","description":"Advanced element selection using selectors including: `[foo^=\"bar\"]`, `[foo$=\"bar\"]`, `[foo*=\"bar\"]`, `:root`, `:nth-child()`, `:nth-last-child()`, `nth-of-type`, `nth-last-of-type()`, `:last-child`, `:first-of-type`, `:last-of-type`, `:only-child`, `:only-of-type`, `:empty`, `:target`, `:enabled`, `:disabled`, `:checked`, `:not()`, `~` (general sibling)","spec":"http://www.w3.org/TR/css3-selectors/","status":"rec","links":[{"url":"http://www.quirksmode.org/css/selectors/","title":"Detailed support information"},{"url":"http://www.css3.info/selectors-test/","title":"Automated CSS3 selector test"},{"url":"http://selectivizr.com","title":"Selectivizr: Polyfill for IE6-8"},{"url":"http://docs.webplatform.org/wiki/css/selectors","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"p","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE7 and IE8 support only these CSS3 selectors: General siblings (`element1~element2`) and Attribute selectors `[attr^=val]`, `[attr$=val]`, and `[attr*=val]`","notes_by_num":{},"usage_perc_y":93.99,"usage_perc_a":3.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-textshadow":{"title":"CSS3 Text-shadow","description":"Method of applying one or more shadow or blur effects to text","spec":"http://www.w3.org/TR/css-text-decor-3/#text-shadow-property","status":"wd","links":[{"url":"http://hacks.mozilla.org/2009/06/text-shadow/","title":"Mozilla hacks article"},{"url":"http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_text-shadow.htm","title":"Live editor"},{"url":"http://www.css3files.com/shadow/#textshadow","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/text-shadow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y"}},"notes":"Opera Mini ignores the blur-radius set, so no blur effect is visible. Text-shadow behavior can be somewhat emulated in older IE versions using the non-standard \"dropshadow\" or \"glow\" filters. ","notes_by_num":{"1":"IE 10+ supports a fourth length value for the shadow's \"spread\". This is not (yet) part of the specification. "},"usage_perc_y":89.25,"usage_perc_a":2.92,"ucprefix":false,"parent":"","keywords":"text shadow","ie_id":"","chrome_id":""},"css-boxshadow":{"title":"CSS3 Box-shadow","description":"Method of displaying an inner or outer shadow effect to elements","spec":"http://www.w3.org/TR/css3-background/#box-shadow","status":"cr","links":[{"url":"https://developer.mozilla.org/En/CSS/-moz-box-shadow","title":"MDN article"},{"url":"http://westciv.com/tools/boxshadows/index.html","title":"Live editor"},{"url":"http://tests.themasta.com/blogstuff/boxshadowdemo.html","title":"Demo of various effects"},{"url":"http://www.css3files.com/shadow/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/box-shadow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y x","3.6":"y x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"y x","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y x","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Can be partially emulated in older IE versions using the non-standard \"shadow\" filter. Partial support in Safari, iOS Safari and Android Browser refers to missing \"inset\" and blur radius value support.","notes_by_num":{},"usage_perc_y":90.94,"usage_perc_a":0.19,"ucprefix":false,"parent":"","keywords":"box-shadows,boxshadows,box shadow,shaow","ie_id":"","chrome_id":""},"css3-colors":{"title":"CSS3 Colors","description":"Method of describing colors using Hue, Saturation and Lightness (hsl()) rather than just RGB, as well as allowing alpha-transparency with rgba() and hsla().","spec":"http://www.w3.org/TR/css3-color/","status":"rec","links":[{"url":"https://dev.opera.com/articles/view/color-in-opera-10-hsl-rgb-and-alpha-transparency/","title":"Dev.Opera article"},{"url":"http://www.css3files.com/color/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/color#RGBA_Notation","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.02,"usage_perc_a":0.02,"ucprefix":false,"parent":"","keywords":"rgb,hsl,rgba,hsla","ie_id":"","chrome_id":""},"css3-boxsizing":{"title":"CSS3 Box-sizing","description":"Method of specifying whether or not an element's borders and padding should be included in size units","spec":"http://www.w3.org/TR/css3-ui/#box-sizing","status":"wd","links":[{"url":"https://developer.mozilla.org/En/CSS/Box-sizing","title":"MDN article"},{"url":"http://www.456bereastreet.com/archive/201104/controlling_width_with_css3_box-sizing/","title":"Blog post"},{"url":"https://github.com/Schepp/box-sizing-polyfill","title":"Polyfill for IE"},{"url":"http://css-tricks.com/box-sizing/","title":"CSS Tricks"},{"url":"http://docs.webplatform.org/wiki/css/properties/box-sizing","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a x","10":"a"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to supporting only the `content-box` and `border-box` values, not `padding-box` (which was added to the spec later).","notes_by_num":{},"usage_perc_y":12.33,"usage_perc_a":84.61,"ucprefix":false,"parent":"","keywords":"border-box,content-box,padding-box","ie_id":"","chrome_id":""},"css-mediaqueries":{"title":"CSS3 Media Queries","description":"Method of applying styles based on media information. Includes things like page and device dimensions","spec":"http://www.w3.org/TR/css3-mediaqueries/","status":"rec","links":[{"url":"http://ie.microsoft.com/testdrive/HTML5/85CSS3_MediaQueries/","title":"IE demo page with information"},{"url":"http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries","title":"Media Queries tutorial"},{"url":"https://github.com/scottjehl/Respond","title":"Polyfill for IE"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@media","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Incomplete support by older webkit browsers refers to only acknowledging different media rules on page reload","notes_by_num":{},"usage_perc_y":93.98,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"@media","ie_id":"","chrome_id":""},"multicolumn":{"title":"CSS3 Multiple column layout","description":"Method of flowing information in multiple columns","spec":"http://www.w3.org/TR/css3-multicol/","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/css3-multi-column-layout/","title":"Dev.Opera article"},{"url":"http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/an-introduction-to-the-css3-multiple-column-layout-module/","title":"Introduction page"},{"url":"http://docs.webplatform.org/wiki/css/properties/column-width","title":"WebPlatform Docs"},{"url":"https://github.com/BetleyWhitehorne/CSS3MultiColumn","title":"Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"a x","3.5":"a x","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"a x","3.2":"a x","4":"a x","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to not supporting the `break-before`, `break-after`, `break-inside` properties. Webkit browsers do have equivalent support for the non-standard `-webkit-column-break-*` properties while Firefox supports `page-break-*` to accomplish the same result.","notes_by_num":{},"usage_perc_y":13.29,"usage_perc_a":78.87,"ucprefix":false,"parent":"","keywords":"column-count","ie_id":"multicolumnfullsupport","chrome_id":"6526151266664448"},"border-radius":{"title":"CSS3 Border-radius (rounded corners)","description":"Method of making the border corners round","spec":"http://www.w3.org/TR/css3-background/#the-border-radius","status":"cr","links":[{"url":"http://border-radius.com","title":"Border-radius CSS Generator"},{"url":"http://muddledramblings.com/table-of-css3-border-radius-compliance","title":"Detailed compliance table"},{"url":"http://www.css3files.com/border/#borderradius","title":"Information page"},{"url":"http://css3pie.com/","title":"Polyfill which includes border-radius"},{"url":"http://docs.webplatform.org/wiki/css/properties/border-radius","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"y x","3.5":"y x","3.6":"y x","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y","5.1":"y #1","6":"y #1","6.1":"y #1","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Safari 6.1 and earlier did not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128"},"usage_perc_y":91.17,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"roundedcorners, border radius,-moz-border-radius","ie_id":"","chrome_id":""},"transforms2d":{"title":"CSS3 Transforms","description":"Method of transforming an element including rotating, scaling, etc.","spec":"http://www.w3.org/TR/css3-2d-transforms/","status":"wd","links":[{"url":"http://www.westciv.com/tools/transforms/","title":"Live editor"},{"url":"https://developer.mozilla.org/en/CSS/-moz-transform","title":"MDN article"},{"url":"http://www.webresourcesdepot.com/cross-browser-css-transforms-csssandpaper/","title":"Workaround script for IE"},{"url":"http://www.css3files.com/transform/","title":"Information page"},{"url":"http://www.useragentman.com/IETransformsTranslator/","title":"Converter for IE"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/transforms/transform","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y x","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y x","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"The scale transform can be emulated in IE < 9 using Microsoft's \"zoom\" extension, others are (not easily) possible using the MS Matrix filter","notes_by_num":{},"usage_perc_y":91.13,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"transformation,translate,rotation,rotate,scale,css-transforms","ie_id":"transforms","chrome_id":"6437640580628480"},"use-strict":{"title":"ECMAScript 5 Strict Mode","description":"Method of placing code in a \"strict\" operating context.","spec":"http://ecma-international.org/ecma-262/5.1/#sec-14.1","status":"other","links":[{"url":"http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/","title":"Information page"},{"url":"http://javascriptweblog.wordpress.com/2011/05/03/javascript-strict-mode/","title":"Article with test suite"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari refers to strict mode still accepting a lot of JS that should be considered invalid.","notes_by_num":{},"usage_perc_y":88.27,"usage_perc_a":0.49,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"transforms3d":{"title":"CSS3 3D Transforms","description":"Method of transforming an element in the third dimension using the `transform` property. Includes support for the `perspective` property to set the perspective in z-space and the `backface-visibility` property to toggle display of the reverse side of a 3D-transformed element.","spec":"http://www.w3.org/TR/css3-3d-transforms/","status":"wd","links":[{"url":"http://css3.bradshawenterprises.com/flip/","title":"Multi-browser demo"},{"url":"http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/","title":"Mozilla hacks article"},{"url":"http://thewebrocks.com/demos/3D-css-tester/","title":"3D CSS Tester"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/transforms/transform","title":"WebPlatform Docs"},{"url":"http://desandro.github.io/3dtransforms/","title":"Intro to CSS 3D transforms"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in IE refers to not supporting [the transform-style: preserve-3d property](http://msdn.microsoft.com/en-us/library/ie/hh673529%28v=vs.85%29.aspx#the_ms_transform_style_property). This prevents nesting 3D transformed elements.","notes_by_num":{},"usage_perc_y":78.28,"usage_perc_a":10.16,"ucprefix":false,"parent":"","keywords":"css 3d,3dtransforms,translate3d,backface visibility,perspective","ie_id":"transforms,csstransformspreserve3d","chrome_id":"6437640580628480"},"sharedworkers":{"title":"Shared Web Workers","description":"Method of allowing multiple scripts to communicate with a single web worker.","spec":"https://html.spec.whatwg.org/multipage/workers.html#shared-workers-introduction","status":"ls","links":[{"url":"http://www.sitepoint.com/javascript-shared-web-workers-html5/","title":"Sitepoint article"},{"url":"http://greenido.wordpress.com/2011/11/03/web-workers-part-3-out-of-3-shared-wrokers/","title":"Blog post"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":51.61,"usage_perc_a":0,"ucprefix":false,"parent":"webworkers","keywords":"shared worker","ie_id":"sharedwebworkers","chrome_id":""},"css-hyphens":{"title":"CSS Hyphenation","description":"Method of controlling when words at the end of lines should be hyphenated using the \"hyphens\" property.","spec":"http://www.w3.org/TR/css3-text/#hyphenation","status":"wd","links":[{"url":"https://developer.mozilla.org/en/CSS/hyphens","title":"MDN article"},{"url":"http://blog.fontdeck.com/post/9037028497/hyphens","title":"Blog post"},{"url":"http://docs.webplatform.org/wiki/css/properties/hyphens","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","TP":"y x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x"}},"notes":"Chrome 29- and Android 4.0 Browser support \"-webkit-hyphens: none\", but not the \"auto\" property. Chrome 30+ doesn't support it either. It is [advisable to set the @lang attribute](http://blog.adrianroselli.com/2015/01/on-use-of-lang-attribute.html) on the HTML element to enable hyphenation support and improve accessibility.","notes_by_num":{},"usage_perc_y":31.79,"usage_perc_a":3.84,"ucprefix":false,"parent":"","keywords":"hyphen,shy","ie_id":"","chrome_id":""},"css-transitions":{"title":"CSS3 Transitions","description":"Simple method of animating certain properties of an element","spec":"http://www.w3.org/TR/css3-transitions/","status":"wd","links":[{"url":"http://www.webdesignerdepot.com/2010/01/css-transitions-101/","title":"Article on usage"},{"url":"http://www.css3files.com/transition/","title":"Information page"},{"url":"http://www.the-art-of-web.com/css/timing-function/","title":"Examples on timing functions"},{"url":"http://www.opera.com/docs/specs/presto2.12/css/transitions/","title":"Animation of property types support in Opera"},{"url":"http://docs.webplatform.org/wiki/css/properties/transition","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y x","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y x","10":"y"},"op_mob":{"10":"y x","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":89.2,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css transition","ie_id":"","chrome_id":""},"font-feature":{"title":"Font feature settings","description":"Method of applying advanced typographic and language-specific font features to supported OpenType fonts.","spec":"http://w3.org/TR/css3-fonts/#font-rend-props","status":"wd","links":[{"url":"http://ie.microsoft.com/testdrive/Graphics/opentype/","title":"Demo pages (IE/Firefox only)"},{"url":"http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/","title":"Mozilla hacks article"},{"url":"http://html5accessibility.com/","title":"Detailed tables on accessability support"},{"url":"http://docs.webplatform.org/wiki/css/properties/font-feature-settings","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in older Firefox versions refers to using an older syntax. Partial support in older Chrome versions refers to lacking support in Mac OS X. ","notes_by_num":{},"usage_perc_y":74.51,"usage_perc_a":1.17,"ucprefix":false,"parent":"","keywords":"font-feature,font-feature-settings,kern,kerning,font-variant-alternates,ligatures,font-variant-ligatures","ie_id":"","chrome_id":""},"css-animation":{"title":"CSS3 Animation","description":"Complex method of animating certain properties of an element","spec":"http://www.w3.org/TR/css3-animations/","status":"wd","links":[{"url":"http://robertnyman.com/2010/05/06/css3-animations/","title":"Blog post on usage"},{"url":"http://www.css3files.com/animation/","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/animations","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y x","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Partial support in Android browser refers to buggy behavior in different scenarios.","notes_by_num":{},"usage_perc_y":88.99,"usage_perc_a":0.12,"ucprefix":false,"parent":"","keywords":"animations,css-animations,keyframe,keyframes","ie_id":"","chrome_id":""},"css-gradients":{"title":"CSS Gradients","description":"Method of defining a linear or radial color gradient as a CSS image.","spec":"http://www.w3.org/TR/css3-images/","status":"cr","links":[{"url":"http://www.colorzilla.com/gradient-editor/","title":"Cross-browser editor"},{"url":"http://www.css3files.com/gradient/","title":"Information page"},{"url":"http://css3pie.com/","title":"Tool to emulate support in IE"},{"url":"http://docs.webplatform.org/wiki/css/functions/linear-gradient","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"a x","5":"a x","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"a x","11.5":"a x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Syntax used by browsers with prefixed support may be incompatible with that for proper support. \r\n\r\nPartial support in Opera 11.10 and 11.50 also refers to only having support for linear gradients.\r\n\r\nSupport can be somewhat emulated in older IE versions using the non-standard \"gradient\" filter. \r\n\r\nFirefox 10+, Opera 11.6+, Chrome 26+ and IE10+ also support the new \"to (side)\" syntax.","notes_by_num":{},"usage_perc_y":88.79,"usage_perc_a":0.47,"ucprefix":false,"parent":"","keywords":"linear,linear-gradient,gradiant","ie_id":"gradients","chrome_id":"5785905063264256"},"css-canvas":{"title":"CSS Canvas Drawings","description":"Method of using HTML5 Canvas as a background image. Not currently part of any specification.","spec":"http://webkit.org/blog/176/css-canvas-drawing/","status":"unoff","links":[{"url":"http://webkit.org/blog/176/css-canvas-drawing/","title":"Webkit blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"A similar effect can be achieved in Firefox 4+ using the -moz-element() background property","notes_by_num":{},"usage_perc_y":66.53,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-reflections":{"title":"CSS Reflections","description":"Method of displaying a reflection of an element","spec":"http://webkit.org/blog/182/css-reflections/","status":"unoff","links":[{"url":"http://webkit.org/blog/182/css-reflections/","title":"Webkit blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Similar effect can be achieved in Firefox 4+ using the -moz-element() background property","notes_by_num":{},"usage_perc_y":62.69,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"box-reflect","ie_id":"","chrome_id":"5627300510957568"},"css-masks":{"title":"CSS Masks","description":"Method of displaying part of an element, using a selected image as a mask","spec":"http://www.w3.org/TR/css-masking/","status":"cr","links":[{"url":"http://docs.webplatform.org/wiki/css/properties/mask","title":"WebPlatform Docs"},{"url":"http://www.html5rocks.com/en/tutorials/masking/adobe/","title":"HTML5 Rocks article"},{"url":"http://thenittygritty.co/css-masking","title":"Detailed blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"a x","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"a x","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x"}},"notes":"Partial support in WebKit/Blink browsers refers to supporting the mask-image and mask-box-image properties, but lacks support for other parts of the spec. Partial support in Firefox refers to only support for inline SVG mask elements i.e. mask: url(#foo).","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":78.81,"ucprefix":false,"parent":"","keywords":"","ie_id":"masks","chrome_id":"5381559662149632"},"svg":{"title":"SVG (basic support)","description":"Method of displaying basic Vector Graphics features using the embed or object elements. Refers to the SVG 1.1 spec.","spec":"http://www.w3.org/TR/SVG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Scalable_Vector_Graphics","title":"Wikipedia"},{"url":"http://www.alistapart.com/articles/using-svg-for-flexible-scalable-and-fun-backgrounds-part-i","title":"A List Apart article"},{"url":"http://svg-wow.org/","title":"SVG showcase site"},{"url":"http://code.google.com/p/svgweb/","title":"SVG Web: Flash-based polyfill"},{"url":"http://svg-edit.googlecode.com","title":"Web-based SVG editor"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg","title":"has.js test"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y #2","10":"y #2","11":"y #2","TP":"y #2"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a #1","4":"a #1","4.1":"a #1","4.2-4.3":"a #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #2","11":"y #2"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support in Android 3 & 4 refers to not supporting masking.","2":"IE9-11 desktop & mobile don't properly scale SVG files. [Adding height, width, viewBox, and CSS rules](http://codepen.io/tomByrer/pen/qEBbzw?editors=110) seem to be the best workaround."},"usage_perc_y":91.48,"usage_perc_a":2.44,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-css":{"title":"SVG in CSS backgrounds","description":"Method of using SVG images as CSS backgrounds","spec":"http://www.w3.org/TR/css3-background/#background-image","status":"cr","links":[{"url":"http://designfestival.com/a-farewell-to-css3-gradients/","title":"Tutorial for advanced effects"}],"categories":["CSS3","SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Firefox and Opera Mini/Mobile refers to SVG images being blurry when scaled. Partial support in iOS Safari and older Safari versions refers to failing to support tiling or the background-position property.","notes_by_num":{},"usage_perc_y":90.2,"usage_perc_a":3.56,"ucprefix":false,"parent":"","keywords":"svg-in-css,svgincss,css-svg","ie_id":"","chrome_id":""},"svg-smil":{"title":"SVG SMIL animation","description":"Method of using animation elements to animate SVG images","spec":"http://www.w3.org/TR/SVG/animate.html","status":"rec","links":[{"url":"http://svg-wow.org/blog/category/animation/","title":"Examples on SVG WOW"},{"url":"https://developer.mozilla.org/en/SVG/SVG_animation_with_SMIL","title":"MDN article"},{"url":"http://leunen.me/fakesmile/","title":"JS library to support SMIL in SVG"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg-smil","title":"has.js test"},{"url":"https://github.com/madsgraphics/SVGEventListener","title":"Polyfill for SMIL animate events on SVG"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"a","5":"a","5.1":"a","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Safari refers to not working in HTML files.","notes_by_num":{},"usage_perc_y":78.26,"usage_perc_a":0.68,"ucprefix":false,"parent":"","keywords":"","ie_id":"svgsmilanimation","chrome_id":""},"svg-fonts":{"title":"SVG fonts","description":"Method of using fonts defined as SVG shapes. Considered among a number of browser vendors as a deprecated feature with support being removed.","spec":"http://www.w3.org/TR/SVG/fonts.html","status":"rec","links":[{"url":"http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different","title":"Blog post"},{"url":"http://opentype.info/blog/2010/04/13/the-ipad-and-svg-fonts-in-mobile-safari/","title":"Blog post on usage for iPad"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"n #1","39":"n #1","40":"n #1","41":"n #1","42":"n #1","43":"n #1","44":"n #1"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"n #1","26":"n #1","27":"n #1","28":"n #1","29":"n #1"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n #2"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"n #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Chrome 38 and newer support SVG fonts only on Windows Vista and XP.","2":"Supported in Opera Mini in SVG images only, not in HTML."},"usage_perc_y":25.12,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":"5930075908210688"},"svg-filters":{"title":"SVG filters","description":"Method of using photoshop-like effects on SVG objects including blurring and color manipulation.","spec":"http://www.w3.org/TR/SVG/filters.html","status":"rec","links":[{"url":"http://electricbeach.org/?p=950","title":"Experiments with filter effects"},{"url":"http://svg-wow.org/blog/category/filters/","title":"SVG filter demos"},{"url":"http://docs.webplatform.org/wiki/svg/elements/filter","title":"WebPlatform Docs"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"a","6":"a","7":"a","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.93,"usage_perc_a":0.03,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-html":{"title":"SVG effects for HTML","description":"Method of using SVG transforms, filters, etc on HTML elements using either CSS or the foreignObject element","spec":"http://www.w3.org/TR/SVG11/extend.html#ForeignObjectElement","status":"wd","links":[{"url":"https://developer.mozilla.org/en/SVG/Tutorial/Other_content_in_SVG","title":"MDN Tutorial"},{"url":"https://developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content","title":"MDN Reference page"},{"url":"http://www.w3.org/TR/filter-effects/","title":"Filter Effects draft"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support refers to lack of filter support or buggy result from effects. A [CSS Filter Effects](http://www.w3.org/TR/filter-effects/) specification is in the works that would replace this method.","notes_by_num":{},"usage_perc_y":12.28,"usage_perc_a":71.74,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"svg-html5":{"title":"Inline SVG in HTML5","description":"Method of using SVG tags directly in HTML documents. Requires HTML5 parser.","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#svg-0","status":"ls","links":[{"url":"http://hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more/","title":"Mozilla Hacks blog post"},{"url":"http://samples.msdn.microsoft.com/ietestcenter/html5/svghtml_harness.htm?url=SVG_HTML_Elements_001","title":"Test suite"}],"categories":["HTML5","SVG"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.45,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"canvas":{"title":"Canvas (basic support)","description":"Method of generating fast, dynamic graphics using JavaScript.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element","status":"ls","links":[{"url":"https://developer.mozilla.org/en/Canvas_tutorial","title":"Tutorial by Mozilla"},{"url":"http://www.canvasdemos.com/","title":"Showcase site"},{"url":"http://glimr.rubyforge.org/cake/canvas.html","title":"Animation kit "},{"url":"http://diveintohtml5.info/canvas.html","title":"Another tutorial"},{"url":"http://explorercanvas.googlecode.com/","title":"Implementation for Internet Explorer"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas","title":"has.js test"}],"categories":["Canvas","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Opera Mini supports the canvas element, but is unable to play animations or run other more complex applications. Android 2.x supports canvas except the toDataURL() function. See http://code.google.com/p/android/issues/detail?id=7901 Some (slow) workarounds are described here: http://stackoverflow.com/q/10488033/841830","notes_by_num":{},"usage_perc_y":91.1,"usage_perc_a":2.95,"ucprefix":false,"parent":"","keywords":"","ie_id":"canvas","chrome_id":"5100084685438976"},"canvas-text":{"title":"Text API for Canvas","description":"Method of displaying text on Canvas elements","spec":"https://html.spec.whatwg.org/multipage/scripting.html#drawing-text-to-the-bitmap","status":"ls","links":[{"url":"https://developer.mozilla.org/en/Drawing_text_using_a_canvas#Additional_examples","title":"Examples by Mozilla"},{"url":"http://code.google.com/p/canvas-text/","title":"Support library"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas-text","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/canvas/CanvasRenderingContext2D/fillText","title":"WebPlatform Docs"}],"categories":["Canvas","HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.12,"usage_perc_a":0,"ucprefix":false,"parent":"canvas","keywords":"","ie_id":"","chrome_id":""},"namevalue-storage":{"title":"Web Storage - name/value pairs","description":"Method of storing data locally like cookies, but for larger amounts of data (sessionStorage and localStorage, used to fall under HTML5).","spec":"http://www.w3.org/TR/webstorage/#storage","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API","title":"MDN article"},{"url":"http://code.google.com/p/sessionstorage/","title":"Support library"},{"url":"http://html5demos.com/storage","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-localstorage;native-sessionstorage","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/web-storage/Storage/localStorage","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0.05,"ucprefix":false,"parent":"","keywords":"webstorage,local storage","ie_id":"webstorage","chrome_id":"5345825534246912"},"sql-storage":{"title":"Web SQL Database","description":"Method of storing data client-side, allows Sqlite database queries for access and manipulation","spec":"http://www.w3.org/TR/webdatabase/","status":"unoff","links":[{"url":"http://html5doctor.com/introducing-web-sql-databases/","title":"HTML5 Doctor article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-sql-db","title":"has.js test"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"The Web SQL Database specification is no longer being maintained and support may be dropped in future versions.","notes_by_num":{},"usage_perc_y":66.87,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"db-storage,websql","ie_id":"websqldatabase","chrome_id":"6330987952734208"},"indexeddb":{"title":"IndexedDB","description":"Method of storing data client-side, allows indexed database queries.","spec":"http://www.w3.org/TR/IndexedDB/","status":"cr","links":[{"url":"http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/","title":"Mozilla Hacks article"},{"url":"https://github.com/axemclion/IndexedDBShim","title":"Polyfill for browsers supporting WebSQL"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-indexeddb","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/indexedDB","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"n","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"a #2","8":"a #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"a #2","8.1":"a #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"n","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"p"}},"notes":"","notes_by_num":{"1":"Partial support in IE 10 & 11 refers to a number of subfeatures [not being supported](http://codepen.io/cemerick/pen/Itymi).","2":"Partial support in iOS 8 refers to [seriously buggy behavior](http://www.raymondcamden.com/2014/9/25/IndexedDB-on-iOS-8--Broken-Bad)."},"usage_perc_y":61.21,"usage_perc_a":18.06,"ucprefix":false,"parent":"","keywords":"indexdb","ie_id":"indexeddb","chrome_id":"6507459568992256"},"online-status":{"title":"Online/offline status","description":"Events to indicate when the user's connected (`online` and `offline` events) and the `navigator.onLine` property to see current status.","spec":"https://html.spec.whatwg.org/multipage/browsers.html#browser-state","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine.onLine#Specification","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a #2","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"a #3","16":"a #3","17":"a #3","18":"a #3","19":"a #3","20":"a #3","21":"a #3","22":"a #3","23":"a #3","24":"a #3","25":"a #3","26":"a #3","27":"a #3","28":"a #3","29":"a #3","30":"a #3","31":"a #3","32":"a #3","33":"a #3","34":"a #3","35":"a #3","36":"a #3","37":"a #3","38":"a #3","39":"a #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"u","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"u","2.2":"u","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a #1","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"\"online\" does not always mean connection to the internet, it can also just mean connection to some network.\r\n\r\nEarly versions of Chrome and Safari always reported \"true\" for `navigator.onLine`","notes_by_num":{"1":"Seems to support `navigator.onLine` but not `online`/`offline` events.","2":"IE8 only supports the `online`/`offline` events on `document.body`, rather than `window`.","3":"Desktop Firefox responds to the status of its \"Work Offline\" mode. If not in that mode, `navigator.onLine` is always `true`, regardless of the actual network connectivity status."},"usage_perc_y":74.55,"usage_perc_a":19.09,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"eventsource":{"title":"Server-sent events","description":"Method of continuously sending data from a server to the browser, rather than repeatedly requesting it (EventSource interface, used to fall under HTML5)","spec":"http://www.w3.org/TR/eventsource/","status":"pr","links":[{"url":"http://www.html5rocks.com/tutorials/eventsource/basics/","title":"HTML5 Rocks tutorial"},{"url":"http://samshull.blogspot.com/2010/10/ajax-push-in-ios-safari-and-chrome-with.html","title":"Blog post with demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-eventsource","title":"has.js test"},{"url":"https://github.com/Yaffle/EventSource","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":76.34,"usage_perc_a":0.05,"ucprefix":false,"parent":"","keywords":"serversent,s-sent-events","ie_id":"serversenteventseventsource","chrome_id":"5311740673785856"},"x-doc-messaging":{"title":"Cross-document messaging","description":"Method of sending information from a page on one domain to a page on a different one (using postMessage)","spec":"https://html.spec.whatwg.org/multipage/comms.html#crossDocumentMessages","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/window.postMessage","title":"MDN article"},{"url":"http://html5demos.com/postmessage2","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-crosswindowmessaging","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/web-messaging/MessagePort/postMessage","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE8-9 refers to only working in frames/iframes (not other tabs/windows). Also in IE 9 and below an object cannot be sent using postMessage. Partial support in IE10 refers to [limitations in certain conditions](http://stackoverflow.com/questions/16226924/is-cross-origin-postmessage-broken-in-ie10)","notes_by_num":{},"usage_perc_y":82.03,"usage_perc_a":14.89,"ucprefix":false,"parent":"","keywords":"","ie_id":"postmessage","chrome_id":"4786174115708928"},"datauri":{"title":"Data URIs","description":"Method of embedding images and other files in webpages as a string of text","spec":"http://www.ietf.org/rfc/rfc2397.txt","status":"other","links":[{"url":"http://css-tricks.com/data-uris/","title":"Information page"},{"url":"http://en.wikipedia.org/wiki/data_URI_scheme","title":"Wikipedia"},{"url":"http://www.websiteoptimization.com/speed/tweak/inline-images/","title":"Data URL converter"},{"url":"http://klevjers.com/papers/phishing.pdf","title":"Information on security issues"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Support in Internet Explorer 8 is limited to images and linked resources like CSS files, not HTML files. Max URI length in IE8 is 32KB. In IE9+ JavaScript files are supported too and the maximum size limit set to 4GB.","notes_by_num":{},"usage_perc_y":82.06,"usage_perc_a":14.89,"ucprefix":false,"parent":"","keywords":"data url,datauris,data uri,dataurl,dataurls,base64","ie_id":"","chrome_id":""},"mathml":{"title":"MathML","description":"Special tags that allow mathematical formulas and notations to be written on web pages.","spec":"http://www.w3.org/TR/MathML/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/MathML","title":"Wikipedia"},{"url":"http://www.mozilla.org/projects/mathml/demo/","title":"MathML demos"},{"url":"http://www.mathjax.org","title":"Cross-browser support script"},{"url":"https://developer.mozilla.org/en/MathML/Element","title":"MDN element reference"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"y","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a"}},"notes":"Opera's support is limited to a CSS profile of MathML. Support was added in Chrome 24, but removed afterwards due to instability.","notes_by_num":{},"usage_perc_y":22.58,"usage_perc_a":4.17,"ucprefix":false,"parent":"","keywords":"","ie_id":"mathml","chrome_id":"5240822173794304"},"css-featurequeries":{"title":"CSS Feature Queries","description":"CSS Feature Queries allow authors to condition rules based on whether particular property declarations are supported in CSS using the @supports at rule.","spec":"http://www.w3.org/TR/css3-conditional/#at-supports","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/@supports","title":"MDN Article"},{"url":"http://mcc.id.au/blog/2012/08/supports","title":"@supports in Firefox"},{"url":"http://dabblet.com/gist/3895764","title":"Test case"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@supports","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"See also the [CSS.supports() DOM API](#feat=css-supports-api)","notes_by_num":{},"usage_perc_y":60.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"supports,conditional","ie_id":"conditionalrules","chrome_id":"4993981813358592"},"xhtml":{"title":"XHTML served as application/xhtml+xml","description":"A strict form of HTML, and allows embedding of other XML languages","spec":"http://www.w3.org/TR/xhtml1/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/XHTML","title":"Wikipedia"},{"url":"http://www.xmlplease.com/xhtml/xhtml5polyglot/","title":"Information on XHTML5"},{"url":"http://docs.webplatform.org/wiki/concepts/internet_and_web/the_web_standards_model#What_is_XHTML.3F","title":"WebPlatform Docs"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"The XHTML syntax is very close to HTML, and thus is almost always ([incorrectly](https://developer.mozilla.org/en-US/docs/XHTML#MIME_type_versus_DOCTYPE)) served as text/html on the web.","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"xhtml+xml","ie_id":"","chrome_id":""},"xhtmlsmil":{"title":"XHTML+SMIL animation","description":"Method of using SMIL animation in web pages","spec":"http://www.w3.org/TR/XHTMLplusSMIL/","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/XHTML%2BSMIL","title":"Wikipedia"},{"url":"http://leunen.me/fakesmile/","title":"JS library to support XHTML+SMIL"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"a","7":"a","8":"a","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"p"}},"notes":"Internet Explorer supports the W3C proposal HTML+TIME, which is largely the same as XHTML+SMIL","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":3.13,"ucprefix":false,"parent":"xhtml","keywords":"","ie_id":"","chrome_id":""},"wai-aria":{"title":"WAI-ARIA Accessibility features","description":"Method of providing ways for people with disabilities to use dynamic web content and web applications.","spec":"http://www.w3.org/TR/wai-aria/","status":"rec","links":[{"url":"http://www.w3.org/WAI/intro/aria","title":"Information page"},{"url":"http://www.paciellogroup.com/blog/2011/10/browser-assistive-technology-tests-redux/","title":"Links to various test results"},{"url":"http://en.wikipedia.org/wiki/WAI-ARIA","title":"Wikipedia"},{"url":"http://www.alistapart.com/articles/the-accessibility-of-wai-aria/","title":"ALA Article"},{"url":"http://zufelt.ca/blog/are-you-confused-html5-and-wai-aria-yet","title":"HTML5/WAI-ARIA information"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":27.2,"usage_perc_a":63.25,"ucprefix":false,"parent":"","keywords":"wai,aria","ie_id":"","chrome_id":""},"geolocation":{"title":"Geolocation","description":"Method of informing a website of the user's geographical location","spec":"http://www.w3.org/TR/geolocation-API/","status":"cr","links":[{"url":"http://html5demos.com/geo","title":"Simple demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-geolocation","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/geolocation","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"p","10.5":"p","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":91.04,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"","ie_id":"geolocation","chrome_id":"6348855016685568"},"flexbox":{"title":"Flexible Box Layout Module","description":"Method of positioning elements in horizontal or vertical stacks. Support includes the support for the all properties prefixed with `flex` as well as `align-content`, `align-items`, `align-self`, and `justify-content`.","spec":"http://www.w3.org/TR/css3-flexbox/","status":"wd","links":[{"url":"http://bennettfeely.com/flexplorer/","title":"Flexbox CSS generator"},{"url":"http://www.adobe.com/devnet/html5/articles/working-with-flexbox-the-new-spec.html","title":"Article on using the latest spec"},{"url":"https://dev.opera.com/articles/view/advanced-cross-browser-flexbox/","title":"Tutorial on cross-browser support"},{"url":"http://philipwalton.github.io/solved-by-flexbox/","title":"Examples on how to solve common layout problems with flexbox"},{"url":"http://css-tricks.com/snippets/css/a-guide-to-flexbox/","title":"A Complete Guide to Flexbox"},{"url":"http://the-echoplex.net/flexyboxes/","title":"Flexbox playground and code generator"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #2","11":"y","TP":"y"},"firefox":{"2":"a x #1","3":"a x #1","3.5":"a x #1","3.6":"a x #1","4":"a x #1","5":"a x #1","6":"a x #1","7":"a x #1","8":"a x #1","9":"a x #1","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"a x #1","22":"a #3","23":"a #3","24":"a #3","25":"a #3","26":"a #3","27":"a #3","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x #1","5":"a x #1","6":"a x #1","7":"a x #1","8":"a x #1","9":"a x #1","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a x #1","3.2":"a x #1","4":"a x #1","5":"a x #1","5.1":"a x #1","6":"a x #1","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a x #1","4.0-4.1":"a x #1","4.2-4.3":"a x #1","5.0-5.1":"a x #1","6.0-6.1":"a x #1","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"a x #1","2.2":"a x #1","2.3":"a x #1","3":"a x #1","4":"a x #1","4.1":"a x #1","4.2-4.3":"a x #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x #1","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a x #2","11":"y"},"and_uc":{"9.9":"a x #1"}},"notes":"Most partial support refers to supporting an [older version](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/) of the specification or an [older syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/).","notes_by_num":{"1":"Only supports the [old flexbox](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723) specification and does not support wrapping.","2":"Only supports the [2012 syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)","3":"Does not support flex-wrap or flex-flow properties"},"usage_perc_y":81.74,"usage_perc_a":10.37,"ucprefix":false,"parent":"","keywords":"flex-box,flex-direction,flex-wrap,flex-flow,flex-grow,flex-basis","ie_id":"flexbox","chrome_id":"4837301406400512"},"webgl":{"title":"WebGL - 3D Canvas graphics","description":"Method of generating dynamic 3D graphics using JavaScript, accelerated through hardware","spec":"https://www.khronos.org/registry/webgl/specs/1.0/","status":"other","links":[{"url":"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation","title":"Instructions on enabling WebGL"},{"url":"http://www.khronos.org/webgl/wiki/Tutorial","title":"Tutorial"},{"url":"http://hacks.mozilla.org/2009/12/webgl-draft-released-today/","title":"Firefox blog post"},{"url":"http://webkit.org/blog/603/webgl-now-available-in-webkit-nightlies/","title":"Webkit blog post"},{"url":"https://github.com/iewebgl/iewebgl","title":"Polyfill for IE"}],"categories":["Canvas"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"a","12.1":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"a"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"p","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Support listed as \"partial\" refers to the fact that not all users with these browsers have WebGL access. This is due to the additional requirement for users to have [up to date video drivers](http://www.khronos.org/webgl/wiki/BlacklistsAndWhitelists). This problem was [solved in Chrome on Windows](http://blog.chromium.org/2012/02/gpu-accelerating-2d-canvas-and-enabling.html) as of version 18.\r\n\r\nNote that WebGL is part of the [Khronos Group](http://www.khronos.org/webgl/), not the W3C.","notes_by_num":{},"usage_perc_y":52.08,"usage_perc_a":27.02,"ucprefix":false,"parent":"canvas","keywords":"web gl","ie_id":"webglcanvas3d,webglinstancingextension","chrome_id":"6049512976023552"},"fileapi":{"title":"File API","description":"Method of manipulating file objects in web applications client-side, as well as programmatically selecting them and accessing their data.","spec":"http://www.w3.org/TR/FileAPI/","status":"wd","links":[{"url":"https://developer.mozilla.org/en/Using_files_from_web_applications","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/apis/file","title":"WebPlatform Docs"},{"url":"https://github.com/moxiecode/moxie","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari and other WebKit browsers refers to lacking FileReader support. ","notes_by_num":{},"usage_perc_y":85.6,"usage_perc_a":3.06,"ucprefix":false,"parent":"","keywords":"FileReader","ie_id":"","chrome_id":""},"shadowdom":{"title":"Shadow DOM","description":"Method of establishing and maintaining functional boundaries between DOM trees and how these trees interact with each other within a document, thus enabling better functional encapsulation within the DOM.","spec":"http://www.w3.org/TR/shadow-dom/","status":"wd","links":[{"url":"http://html5-demos.appspot.com/static/shadowdom-visualizer/index.html","title":"Shadow DOM Visualizer"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/shadowdom/","title":"HTML5Rocks - Shadow DOM 101 article"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `dom.webcomponents.enabled` flag."},"usage_perc_y":49.1,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"shadowdomunprefixed","chrome_id":"4507242028072960"},"websockets":{"title":"Web Sockets","description":"Bidirectional communication technology for web apps","spec":"http://www.w3.org/TR/websockets/","status":"cr","links":[{"url":"http://websocket.org/aboutwebsocket.html","title":"WebSockets information"},{"url":"http://updates.html5rocks.com/2011/08/What-s-different-in-the-new-WebSocket-protocol","title":"Details on newer protocol"},{"url":"http://en.wikipedia.org/wiki/WebSocket","title":"Wikipedia"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-websockets","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/websocket","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a #1","5":"a #1","6":"a x #2","7":"a x #2","8":"a x #2","9":"a x #2","10":"a x #2","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #2","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a #1","5.1":"a #1","6":"a #2","6.1":"a #2","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"a #1","11.1":"a #1","11.5":"a #1","11.6":"a #1","12":"a #1","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a #1","5.0-5.1":"a #1","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y #1","10":"y"},"op_mob":{"10":"n","11":"a #1","11.1":"a #1","11.5":"a #1","12":"a #1","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support refers to the websockets implementation using an older version of the protocol and/or the implementation being disabled by default (due to security issues with the older protocol).","2":"Partial support refers to lacking support for binary data. "},"usage_perc_y":85.22,"usage_perc_a":1.35,"ucprefix":true,"parent":"","keywords":"","ie_id":"websocket","chrome_id":"6555138000945152"},"hidden":{"title":"hidden attribute","description":"The `hidden` attribute may be applied to any element, and effectively hides elements similar to `display: none` in CSS.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute","status":"ls","links":[{"url":"http://davidwalsh.name/html5-hidden","title":"Article on hidden attribute"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"The hidden state can be easily overridden with a CSS `display` property set to anything other than `none`.","notes_by_num":{},"usage_perc_y":89.91,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"script-async":{"title":"async attribute for external scripts","description":"The boolean async attribute on script elements allows the external JavaScript file to run when it's available, without delaying page load first.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-script-async","status":"ls","links":[{"url":"https://developer.mozilla.org/en/HTML/Element/script#Attributes","title":"MDN article"},{"url":"http://ie.microsoft.com/testdrive/Performance/AsyncScripts/Default.html","title":"Demo"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-async","title":"has.js test"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Using script.async = false; to maintain execution order for dynamically-added scripts isn't supported in Safari 5.0","notes_by_num":{},"usage_perc_y":88.61,"usage_perc_a":0.12,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"cors":{"title":"Cross-Origin Resource Sharing","description":"Method of performing XMLHttpRequests across domains","spec":"http://www.w3.org/TR/cors/","status":"rec","links":[{"url":"http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/","title":"Mozilla Hacks blog post"},{"url":"http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx","title":"Alternative implementation by IE8"},{"url":"https://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/","title":"DOM access using CORS"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-cors-xhr","title":"has.js test"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"a","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Supported somewhat in IE8 and IE9 using the XDomainRequest object (but has [limitations]( http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx))","notes_by_num":{},"usage_perc_y":89.24,"usage_perc_a":4.72,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"calc":{"title":"calc() as CSS unit value","description":"Method of allowing calculated values for length units, i.e. `width: calc(100% - 3em)`","spec":"http://www.w3.org/TR/css3-values/#calc","status":"cr","links":[{"url":"http://hacks.mozilla.org/2010/06/css3-calc/","title":"Mozilla Hacks article"},{"url":"https://developer.mozilla.org/en/CSS/-moz-calc","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/functions/calc","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"Support can be somewhat emulated in older versions of IE using the non-standard `expression()` syntax. Partial support in IE9 refers to the browser crashing when used as a `background-position` value. Partial support in Android Browser 4.4 refers to the browser lacking the ability to multiply and divide values.","notes_by_num":{},"usage_perc_y":77.73,"usage_perc_a":5.56,"ucprefix":false,"parent":"","keywords":"","ie_id":"csscalc","chrome_id":"5765241438732288"},"ruby":{"title":"Ruby annotation","description":"Method of adding pronunciation or other annotations using ruby elements (primarily used in East Asian typography).","spec":"https://html.spec.whatwg.org/multipage/semantics.html#the-ruby-element","status":"ls","links":[{"url":"http://html5doctor.com/ruby-rt-rp-element/","title":"HTML5 Doctor article"},{"url":"http://docs.webplatform.org/wiki/html/elements/ruby","title":"WebPlatform Docs"},{"url":"https://addons.mozilla.org/firefox/addon/1935/","title":"Add-on \"XHTML Ruby Support\" for Firefox"},{"url":"https://addons.mozilla.org/firefox/addon/6812/","title":"Addon \"HTML Ruby\" for Firefox support"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"y","39":"y"},"chrome":{"4":"p","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"p","10":"a"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"p"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Browsers without native support can still simulate support using CSS. Partial support refers to only supporting basic ruby, may still be missing writing-mode, Complex ruby and CSS3 Ruby.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":81.38,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-opacity":{"title":"CSS3 Opacity","description":"Method of setting the transparency level of an element","spec":"http://www.w3.org/TR/css3-color/","status":"rec","links":[{"url":"http://www.css3files.com/color/#opacity","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/opacity","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Transparency for elements in IE8 and older can be achieved using the proprietary \"filter\" property and does not work well with PNG images using alpha transparency.","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":3.14,"ucprefix":false,"parent":"","keywords":"transparent,transparency,alpha","ie_id":"","chrome_id":""},"form-validation":{"title":"Form validation","description":"Method of setting required fields and field types without requiring JavaScript.","spec":"https://html.spec.whatwg.org/multipage/forms.html#client-side-form-validation","status":"ls","links":[{"url":"http://docs.webplatform.org/wiki/html/attributes/required","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Safari refers to lack of notice when form with required fields is attempted to be submitted. Partial support in IE10 mobile refers to lack of warning when blocking submission.","notes_by_num":{},"usage_perc_y":72.87,"usage_perc_a":3.81,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":"6091813840486400"},"history":{"title":"Session history management","description":"Method of manipulating the user's browser's session history in JavaScript using history.pushState, history.replaceState and the popstate event.","spec":"https://html.spec.whatwg.org/multipage/browsers.html#dom-history-pushstate","status":"ls","links":[{"url":"http://www.adequatelygood.com/2010/7/Saner-HTML5-History-Management","title":"Introduction to history management"},{"url":"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history","title":"MDN article"},{"url":"http://html5demos.com/history","title":"Demo page"},{"url":"https://github.com/browserstate/history.js","title":"History.js polyfill "},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-history-state","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/dom/History","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a","5.1":"a","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"n","4":"n","4.1":"n","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Older iOS versions and Android 4.0.4 claim support, but implementation is too buggy to be useful.","notes_by_num":{},"usage_perc_y":83.69,"usage_perc_a":4.33,"ucprefix":false,"parent":"","keywords":"onpushstate,onreplacestate","ie_id":"","chrome_id":""},"json":{"title":"JSON parsing","description":"Method of converting JavaScript objects to JSON strings and JSON back to objects using JSON.stringify() and JSON.parse()","spec":"http://es5.github.com/#x15.12","status":"other","links":[{"url":"https://developer.mozilla.org/En/Using_native_JSON","title":"MDN article"},{"url":"http://www.json.org/js.html","title":"JSON in JS (includes script w/support)"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/json.js#json","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/apis/json","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Requires document to be in IE8+ [standards mode](http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx) to work in IE8.","notes_by_num":{},"usage_perc_y":96.85,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"classlist":{"title":"classList (DOMTokenList )","description":"Method of easily manipulating classes on elements, using the DOMTokenList object.","spec":"http://www.w3.org/TR/dom/#dom-element-classlist","status":"wd","links":[{"url":"http://hacks.mozilla.org/2010/01/classlist-in-firefox-3-6/","title":"Mozilla Hacks article"},{"url":"https://github.com/eligrey/classList.js","title":"Polyfill script"},{"url":"http://docs.webplatform.org/wiki/dom/Element/classList","title":"WebPlatform Docs"},{"url":"http://www.sitepoint.com/exploring-classlist-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/classlist-api-demo.html","title":"Demo using classList"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Element.classList","title":"MDN article"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"p","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.9,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"text-overflow":{"title":"CSS3 Text-overflow","description":"Append ellipsis when text overflows its containing element","spec":"http://www.w3.org/TR/css3-ui/#text-overflow0","status":"wd","links":[{"url":"https://github.com/rmorse/AutoEllipsis","title":"jQuery polyfill for Firefox"},{"url":"https://developer.mozilla.org/En/CSS/Text-overflow","title":"MDN article"},{"url":"http://www.css3files.com/text/","title":"Information page"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-text-overflow","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/css/properties/text-overflow","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y x","9.5-9.6":"y x","10.0-10.1":"y x","10.5":"y x","10.6":"y x","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y x","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.97,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"textoverflow,ellipsis","ie_id":"","chrome_id":""},"webm":{"title":"WebM video format","description":"Multimedia format designed to provide a royalty-free, high-quality open video compression format for use with HTML5 video. WebM supports the video codec VP8 and VP9.","spec":"http://www.webmproject.org/","status":"other","links":[{"url":"https://tools.google.com/dlpage/webmmf","title":"Codec for IE9 support"},{"url":"http://www.broken-links.com/2010/09/01/playing-webm-in-safari-with-plugins/","title":"Info on supporting WebM in Safari"},{"url":"http://webmproject.org","title":"Official website"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video-webm","title":"has.js test"},{"url":"http://perian.org/","title":"Perian :Mac OSX Webm Codec install"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"a","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Will work in IE9+ and Safari/MacOSX provided the user has the WebM codecs installed. Partial support indicates that at least one codec is supported but not all.","notes_by_num":{},"usage_perc_y":60.45,"usage_perc_a":8.06,"ucprefix":false,"parent":"video","keywords":"matroska","ie_id":"webmvideo","chrome_id":"6362186595172352"},"mpeg4":{"title":"MPEG-4/H.264 video format","description":"Commonly used video compression format (not royalty-free)","spec":"http://ip.hhi.de/imagecom_G1/assets/pdfs/csvt_overview_0305.pdf","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC","title":"Wikipedia article"},{"url":"http://www.interoperabilitybridges.com/html5-extension-for-wmp-plugin","title":"Firefox extension allowing support in Win7"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"a"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"The Android 2.3 browser currently requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to play videos\r\n\r\nFirefox supports H.264 on Windows 7 and later since version 21. Firefox supports H.264 on Linux since version 26 if the appropriate gstreamer plug-ins are installed.\r\n\r\nPartial support for Firefox refers to the lack of support in OSX & some Linux platforms, for Android Firefox it refers to the inability of hardware acceleration.","notes_by_num":{},"usage_perc_y":81.75,"usage_perc_a":8.4,"ucprefix":false,"parent":"video","keywords":"avc,mp4,mpv,mov,aac,h264","ie_id":"","chrome_id":""},"ogv":{"title":"Ogg/Theora video format","description":"Free lossy video compression format.","spec":"http://theora.org/doc/","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/Theora","title":"Wikipedia article"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":51.85,"usage_perc_a":0,"ucprefix":false,"parent":"video","keywords":"xiph","ie_id":"","chrome_id":""},"wordwrap":{"title":"CSS3 Overflow-wrap","description":"Allows lines to be broken within words if an otherwise unbreakable string is too long to fit. Currently mostly supported using the `word-wrap` property.","spec":"http://www.w3.org/TR/css3-text/#overflow-wrap","status":"wd","links":[{"url":"https://developer.mozilla.org/En/CSS/Word-wrap","title":"MDN article"},{"url":"http://www.css3files.com/text/#wordwrap","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/properties/word-wrap","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to requiring the legacy name \"word-wrap\" (rather than overflow-wrap) to work.","notes_by_num":{},"usage_perc_y":58.98,"usage_perc_a":38.12,"ucprefix":false,"parent":"","keywords":"wordwrap,word-wrap","ie_id":"","chrome_id":""},"progressmeter":{"title":"Progress & Meter","description":"Method of indicating a progress state (progress element) or the current level of a gauge (meter element).\r\n","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-progress-element","status":"ls","links":[{"url":"https://dev.opera.com/articles/new-form-features-in-html5/#newoutput","title":"Dev.Opera article"},{"url":"http://html5doctor.com/measure-up-with-the-meter-tag/","title":"HTML5 Doctor on meter element"},{"url":"http://peter.sh/examples/?/html/meter-progress.html","title":"Examples of progress and meter elements"},{"url":"http://docs.webplatform.org/wiki/html/elements/progress","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"y"}},"notes":"Partial support in Firefox 6-15, IE10 & iOS7 Safari refers to supporting the progress element, but not the meter element. iOS7 Safari also does not support \"indeterminate\" progress elements.\r\n\r\nFor styling progress bars, [see this article](http://css-tricks.com/html5-progress-element/)","notes_by_num":{},"usage_perc_y":68.33,"usage_perc_a":17.5,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"object-fit":{"title":"CSS3 object-fit/object-position","description":"Method of specifying how an object (image or video) should fit inside its box. object-fit options include \"contain\" (fit according to aspect ratio), \"fill\" (stretches object to fill) and \"cover\" (overflows box but maintains ratio), where object-position allows the object to be repositioned like background-image does.","spec":"http://www.w3.org/TR/css3-images/","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/css3-object-fit-object-position/","title":"Dev.Opera article"},{"url":"http://docs.webplatform.org/wiki/css/properties/object-fit","title":"WebPlatform Docs"},{"url":"https://github.com/anselmh/object-fit","title":"object-fit JavaScript-Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a #1","8":"a #1"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y x","15":"n","16":"n","17":"n","18":"n","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a #1","8.1":"a #1"},"op_mini":{"5.0-8.0":"y x"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support in Safari refers to support for `object-fit` but not `object-position`."},"usage_perc_y":50.14,"usage_perc_a":7.36,"ucprefix":false,"parent":"","keywords":"objectfit,objectposition","ie_id":"objectfitandobjectposition","chrome_id":"5302669702856704"},"xhr2":{"title":"XMLHttpRequest 2","description":"Adds more functionality to AJAX requests like file uploads, transfer progress information and the ability to send form data.","spec":"https://xhr.spec.whatwg.org/","status":"ls","links":[{"url":"https://developer.mozilla.org/en/XMLHttpRequest/FormData","title":"MDN article on FormData"},{"url":"https://github.com/3nr1c/jUri.js","title":"Polyfill for FormData object"},{"url":"http://docs.webplatform.org/wiki/apis/xhr/XMLHttpRequest","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"u","6":"u","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.91,"usage_perc_a":0.11,"ucprefix":false,"parent":"","keywords":"formdata","ie_id":"","chrome_id":""},"minmaxwh":{"title":"CSS min/max-width/height","description":"Method of setting a minimum or maximum width or height to an element. ","spec":"http://www.w3.org/TR/CSS21/visudet.html#min-max-widths","status":"rec","links":[{"url":"http://code.google.com/p/ie7-js/","title":"JS library with support"},{"url":"http://docs.webplatform.org/wiki/css/properties/min-width","title":"WebPlatform Docs"},{"url":"http://www.impressivewebs.com/min-max-width-height-css/","title":"CSS Basics post"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"p","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE7 does not support \"inherit\" as a value on any of these properties. IE8 has some bugs with max-width/height combined with overflow: auto/scroll.","notes_by_num":{},"usage_perc_y":97.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"min-width,min-height,max-width,max-height","ie_id":"","chrome_id":""},"details":{"title":"Details & Summary elements","description":"The element generates a simple no-JavaScript widget to show/hide element contents, optionally by clicking on its child element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-details-element","status":"ls","links":[{"url":"https://mathiasbynens.be/notes/html5-details-jquery","title":"jQuery fallback script"},{"url":"https://gist.github.com/370590","title":"Fallback script"},{"url":"http://html5doctor.com/summary-figcaption-element/","title":"HTML5 Doctor article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-details","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/details","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":65.56,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"detailssummary","chrome_id":"5348024557502464"},"text-stroke":{"title":"CSS text-stroke","description":"Method of declaring the outline (stroke) width and color for text.","spec":"http://developer.apple.com/library/safari/documentation/appleapplications/reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-_webkit_text_stroke","status":"unoff","links":[{"url":"http://css-tricks.com/7405-adding-stroke-to-web-text/","title":"Information & workarounds"},{"url":"http://www.westciv.com/tools/textStroke/","title":"Live editor"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"a x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Does not yet appear in any W3C specification. Was briefly included in a spec as the \"text-outline\" property, but this was removed.","notes_by_num":{},"usage_perc_y":62.7,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"textstroke,stroke-color,stroke-width,fill-color","ie_id":"","chrome_id":""},"inline-block":{"title":"CSS inline-block","description":"Method of displaying an element as a block while flowing it with text. ","spec":"http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning","status":"rec","links":[{"url":"http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/","title":"Blog post w/info"},{"url":"http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/","title":"Info on cross browser support"},{"url":"http://docs.webplatform.org/wiki/css/properties/display","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a x","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Only supported in IE6 and IE7 on elements with a display of \"inline\" by default. [Alternative properties](http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/) are available to provide complete cross-browser support.","notes_by_num":{},"usage_perc_y":96.94,"usage_perc_a":0.25,"ucprefix":false,"parent":"","keywords":"inlineblock","ie_id":"","chrome_id":""},"notifications":{"title":"Web Notifications","description":"Method of alerting the user outside of a web page by displaying notifications (that do not require interaction by the user).","spec":"http://www.w3.org/TR/notifications/","status":"wd","links":[{"url":"http://www.html5rocks.com/tutorials/notifications/quick/","title":"HTML5 Rocks tutorial"},{"url":"http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification","title":"Chromium API"},{"url":"https://addons.mozilla.org/en-us/firefox/addon/221523/","title":"Add-on "},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/notification","title":"MDN Notifications"},{"url":"http://www.sitepoint.com/introduction-web-notifications-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/web-notifications-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":49.15,"usage_perc_a":4.15,"ucprefix":false,"parent":"","keywords":"","ie_id":"webnotifications","chrome_id":"5064350557536256"},"stream":{"title":"getUserMedia/Stream API","description":"Method of accessing external device data (such as a webcam video stream). Formerly this was envisioned as the element.","spec":"http://www.w3.org/TR/mediacapture-streams/","status":"wd","links":[{"url":"https://dev.opera.com/blog/webcam-orientation-preview/","title":"Technology preview from Opera"},{"url":"http://docs.webplatform.org/wiki/dom/Navigator/getUserMedia","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":61.48,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"camera,device,getUserMedia,media stream,Media Capture API","ie_id":"mediacaptureandstreams","chrome_id":"6067380039974912,6605041225957376"},"svg-img":{"title":"SVG in HTML img element","description":"Method of displaying SVG images in HTML using .","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html","status":"ls","links":[{"url":"http://blog.dholbert.org/2010/10/svg-as-image.html","title":"Blog post with examples"},{"url":"http://www.codedread.com/blog/","title":"Blog with SVGs an images"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"a","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.76,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"svg-as-img,svg-in-img","ie_id":"","chrome_id":""},"datalist":{"title":"Datalist element","description":"Method of setting a list of options for a user to select in a text field, while leaving the ability to enter a custom value.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element","status":"ls","links":[{"url":"http://hacks.mozilla.org/2010/11/firefox-4-html5-forms/","title":"Mozilla Hacks article"},{"url":"http://afarkas.github.com/webshim/demos/","title":"HTML5 Library including datalist support"},{"url":"https://developer.mozilla.org/en/HTML/Element/datalist","title":"MDN reference"},{"url":"http://docs.webplatform.org/wiki/html/elements/datalist","title":"WebPlatform Docs"},{"url":"http://demo.agektmr.com/datalist/","title":"Eiji Kitamura's options demos & tests"},{"url":"http://github.com/thgreasi/datalist-polyfill","title":"Minimal Datalist polyfill w/tutorial"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"a","11":"a","TP":"a"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"p"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE10 refers to [significantly buggy behavior](http://playground.onereason.eu/2013/04/ie10s-lousy-support-for-datalists/). Firefox doesn't support [datalist association with inputs of type `number`](http://codepen.io/graste/pen/bNoVKW).","notes_by_num":{},"usage_perc_y":63.15,"usage_perc_a":9.46,"ucprefix":false,"parent":"forms","keywords":"list attribute","ie_id":"datalistelement","chrome_id":"6090950820495360"},"dataset":{"title":"dataset & data-* attributes","description":"Method of applying and accessing custom data to elements.","spec":"https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes","status":"ls","links":[{"url":"http://html5doctor.com/html5-custom-data-attributes/","title":"HTML5 Doctor article"},{"url":"http://html5demos.com/dataset","title":"Demo using dataset"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-dataset","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/data-*","title":"WebPlatform Docs"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset","title":"MDN Reference - dataset"},{"url":"https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes","title":"MDN Guide - Using data-* attributes"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"a","3.6":"a","4":"a","5":"a","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support refers to being able to use `data-*` attributes and access them using `getAttribute`. \r\n\r\n\"Supported\" refers to accessing the values using the `dataset` property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements.","notes_by_num":{},"usage_perc_y":87.12,"usage_perc_a":10.07,"ucprefix":false,"parent":"","keywords":"DOMStringMap","ie_id":"","chrome_id":""},"css-grid":{"title":"CSS Grid Layout","description":"Method of using a grid concept to lay out content, providing a mechanism for authors to divide available space for lay out into columns and rows using a set of predictable sizing behaviors","spec":"http://www.w3.org/TR/css3-grid-layout/","status":"wd","links":[{"url":"http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx","title":"IE Blog post"},{"url":"https://bugs.webkit.org/show_bug.cgi?id=60731","title":"Webkit (Chrome, Safari, etc.) feature request"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=616605","title":"Mozilla (Firefox) feature request"},{"url":"https://github.com/codler/Grid-Layout-Polyfill","title":"Polyfill based on old spec"},{"url":"https://github.com/FremyCompany/css-grid-polyfill/","title":"Polyfill based on new spec"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"a x #2","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"p","26":"p","27":"p","28":"p","29":"p d #1","30":"p d #1","31":"p d #1","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1","40":"p d #1","41":"p d #1","42":"p d #1","43":"p d #1","44":"p d #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"p d #1","29":"p d #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"a x #2","11":"a x #2"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Partial support in IE refers to supporting an [older version](http://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/) of the specification."},"usage_perc_y":0,"usage_perc_a":10.16,"ucprefix":false,"parent":"","keywords":"grids,grid-row,grid-column","ie_id":"grid","chrome_id":"4589636412243968"},"menu":{"title":"Toolbar/context menu","description":"Method of defining a toolbar menu, a context menu or a list of (interactive) options using the element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-menu-element","status":"ls","links":[{"url":"https://bug617528.bugzilla.mozilla.org/attachment.cgi?id=554309","title":"Demo"},{"url":"http://addyosmani.github.com/jQuery-contextMenu/","title":"jQuery polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/events.js#event-contextmenu","title":"has.js test"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Firefox refers to being limited to context menus, not toolbar menus.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":11.97,"ucprefix":false,"parent":"","keywords":"contextmenu,menuitem,command","ie_id":"","chrome_id":""},"rem":{"title":"rem (root em) units","description":"Type of unit similar to \"em\", but relative only to the root element, not any parent element. Thus compounding does not occur as it does with \"em\" units.","spec":"http://www.w3.org/TR/css3-values/#font-relative-lengths","status":"cr","links":[{"url":"http://snook.ca/archives/html_and_css/font-size-with-rem","title":"Article on usage"},{"url":"https://github.com/chuckcarpenter/REM-unit-polyfill","title":"REM Polyfill"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"u","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":93.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"rems","ie_id":"","chrome_id":""},"ttf":{"title":"TTF/OTF - TrueType and OpenType font support","description":"Support for the TrueType (.ttf)and OpenType (.otf) outline font formats in @font-face. ","spec":"http://developer.apple.com/fonts/TTRefMan/index.html","status":"other","links":[{"url":"http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer","title":"What is the status of TTF support in Internet Explorer?"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"u","11":"u"},"and_uc":{"9.9":"y"}},"notes":"Partial support in IE9 refers to the fonts only working [when set to be \"installable\"](http://blogs.msdn.com/b/ie/archive/2010/07/15/the-css-corner-better-web-typography-for-better-design.aspx).","notes_by_num":{},"usage_perc_y":79.17,"usage_perc_a":11.28,"ucprefix":false,"parent":"fontface","keywords":"","ie_id":"","chrome_id":""},"touch":{"title":"Touch events","description":"Method of registering when, where and how the interface is touched, for devices with a touch screen. These DOM events are similar to mousedown, mousemove, etc.","spec":"http://www.w3.org/TR/touch-events/","status":"rec","links":[{"url":"http://www.quirksmode.org/mobile/tableTouch.html","title":"Detailed support tables"},{"url":"http://www.quirksmode.org/m/tests/drag2.html","title":"Multi-touch demo"},{"url":"http://schepers.cc/getintouch","title":"Information on the spec development"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh673557(v=vs.85).aspx","title":"Internet Explorer's gesture and touch implementation."},{"url":"http://github.com/CamHenlin/TouchPolyfill","title":"Touch polyfill for supporting touch events on Internet Explorer"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"a #2"},"and_uc":{"9.9":"y"}},"notes":"Internet Explorer implements Pointer Events specification which supports more input devices than Touch Events one.\r\n\r\nThere is a library on GitHub that is working toward bringing W3C touch events to IE 10 and 11: https://github.com/CamHenlin/TouchPolyfill \r\n\r\nRemoved support in Firefox refers to desktop Firefox only.","notes_by_num":{"1":"Can be enabled in Firefox using the dom.w3c_touch_events.enabled flag (disabled by default for site compatibility reasons)","2":"Supported on IE11 Mobile for phones with \"[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""},"usage_perc_y":63.38,"usage_perc_a":0.88,"ucprefix":false,"parent":"","keywords":"touchstart,touchend,touchmove,touchenter,touchleave,touchcancel","ie_id":"touchevents","chrome_id":"6156165603917824"},"matchesselector":{"title":"matches() DOM method","description":"Method of testing whether or not a DOM element matches a given selector. Formerly known (and largely supported with prefix) as matchesSelector.","spec":"https://dom.spec.whatwg.org/#dom-element-matches","status":"ls","links":[{"url":"https://developer.mozilla.org/en/DOM/Element.mozMatchesSelector","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/dom/HTMLElement/matchesSelector","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a x","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a x","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"a x","11.6":"a x","12":"a x","12.1":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"a x","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"y"},"bb":{"7":"a x","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"a x","12.1":"a x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to supporting the older specification's \"matchesSelector\" name rather than just \"matches\".","notes_by_num":{},"usage_perc_y":61.28,"usage_perc_a":29.73,"ucprefix":false,"parent":"","keywords":" matchesSelector","ie_id":"","chrome_id":""},"pointer-events":{"title":"CSS pointer-events (for HTML)","description":"This CSS property, when set to \"none\" allows elements to not receive hover/click events, instead the event will occur on anything behind it. ","spec":"http://wiki.csswg.org/spec/css4-ui#pointer-events","status":"unoff","links":[{"url":"http://robertnyman.com/2010/03/22/css-pointer-events-to-allow-clicks-on-underlying-elements/","title":"Article & tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-pointerevents","title":"has.js test"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Already part of the SVG specification, and all SVG-supporting browsers appear to support the property on SVG elements.","notes_by_num":{},"usage_perc_y":87.29,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"pointerevents","ie_id":"csspointerevents","chrome_id":""},"blobbuilder":{"title":"Blob constructing","description":"Construct Blobs (binary large objects) either using the BlobBuilder API (deprecated) or the Blob constructor.","spec":"http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/BlobBuilder","title":"MDN article on BlobBuilder"},{"url":"https://developer.mozilla.org/en-US/docs/DOM/Blob","title":"MDN article on Blobs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to only supporting the now deprecated BlobBuilder to create blobs.","notes_by_num":{},"usage_perc_y":77.73,"usage_perc_a":10.51,"ucprefix":true,"parent":"fileapi","keywords":"","ie_id":"blob","chrome_id":"5328783104016384"},"filereader":{"title":"FileReader API","description":"Method of reading the contents of a File or Blob object into memory","spec":"http://www.w3.org/TR/FileAPI/#dfn-filereader","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/FileReader","title":"FileReader API"},{"url":"http://docs.webplatform.org/wiki/apis/file/FileReader","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.43,"usage_perc_a":0,"ucprefix":false,"parent":"fileapi","keywords":"","ie_id":"filereader","chrome_id":"5171003185430528"},"filesystem":{"title":"Filesystem & FileWriter API","description":"Method of reading and writing files to a sandboxed file system.","spec":"http://www.w3.org/TR/file-system-api/","status":"unoff","links":[{"url":"http://www.html5rocks.com/en/tutorials/file/filesystem/","title":"HTML5 Rocks tutorial"},{"url":"http://docs.webplatform.org/wiki/apis/filesystem","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"The File API: Directories and System specification is no longer being maintained and support may be dropped in future versions.","notes_by_num":{},"usage_perc_y":45.73,"usage_perc_a":0.16,"ucprefix":false,"parent":"","keywords":"filewriter","ie_id":"filewriter","chrome_id":"5452478162141184"},"bloburls":{"title":"Blob URLs","description":"Method of creating URL handles to the specified File or Blob object.","spec":"http://www.w3.org/TR/FileAPI/#url","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/window.URL.createObjectURL","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":87.8,"usage_perc_a":0,"ucprefix":false,"parent":"fileapi","keywords":"createobjecturl","ie_id":"","chrome_id":""},"rellist":{"title":"relList (DOMTokenList)","description":"Method of easily manipulating rel attribute values on elements, using the DOMTokenList object (similar to classList).","spec":"https://html.spec.whatwg.org/multipage/semantics.html#dom-a-rellist","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/DOM/DOMTokenList","title":"MDN - DOMTokenList"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.14,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"typedarrays":{"title":"Typed Arrays","description":"JavaScript typed arrays provide a mechanism for accessing raw binary data much more efficiently.\r\n","spec":"http://www.khronos.org/registry/typedarray/specs/latest/","status":"other","links":[{"url":"https://developer.mozilla.org/en/javascript_typed_arrays","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a #2","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a #2","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"IE10 (and IE 10&11 mobile) does not support `Uint8ClampedArray`"},"usage_perc_y":86.21,"usage_perc_a":2.51,"ucprefix":false,"parent":"","keywords":"float64array,dataview,uint8array","ie_id":"typedarrays","chrome_id":"5135818813341696"},"deviceorientation":{"title":"DeviceOrientation events","description":"API for detecting orientation and motion events from the device running the browser.","spec":"http://www.w3.org/TR/orientation-event/","status":"wd","links":[{"url":"http://www.html5rocks.com/en/tutorials/device/orientation/","title":"HTML5 Rocks tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-orientation","title":"has.js test"},{"url":"http://html5labs.interoperabilitybridges.com/prototypes/device-orientation-events/device-orientation-events/info","title":"DeviceOrientation implementation prototype for IE10"},{"url":"http://aurelio.audero.it/demo/device-orientation-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a #1","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"p","4":"p","5":"p","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a"},"chrome":{"4":"n","5":"n","6":"n","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to the lack of compassneedscalibration event. Partial support also refers to the lack of devicemotion event support for Chrome 30- and Opera. Opera Mobile 14 lost the ondevicemotion event support. Firefox 3.6, 4 and 5 support the non-standard [MozOrientation](https://developer.mozilla.org/en/DOM/MozOrientation) event.","notes_by_num":{"1":"`compassneedscalibration` supported in IE11 only for compatible devices with Windows 8.1+."},"usage_perc_y":0.51,"usage_perc_a":83.28,"ucprefix":false,"parent":"","keywords":"","ie_id":"deviceorientation,devicemotion","chrome_id":"5874690627207168,5556931766779904"},"script-defer":{"title":"defer attribute for external scripts","description":"The boolean defer attribute on script elements allows the external JavaScript file to run when the DOM is loaded, without delaying page load first.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-script-defer","status":"ls","links":[{"url":"https://developer.mozilla.org/en/HTML/Element/script#Attributes","title":"MDN article"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-defer","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/defer","title":"WebPlatform Docs"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"a","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older IE refers to a buggy implementation (see issue).","notes_by_num":{},"usage_perc_y":88.74,"usage_perc_a":4.96,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"nav-timing":{"title":"Navigation Timing API","description":"API for accessing timing information related to navigation and elements.","spec":"http://www.w3.org/TR/navigation-timing/","status":"rec","links":[{"url":"https://developer.mozilla.org/en/API/navigationTiming","title":"MDN article"},{"url":"http://www.html5rocks.com/en/tutorials/webperformance/basics/","title":"HTML5 Rocks tutorial"},{"url":"http://docs.webplatform.org/wiki/apis/navigation_timing","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Removed in iOS 8.1 due to poor performance.","notes_by_num":{},"usage_perc_y":81.7,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,performance.timing","ie_id":"navigationtimingapi","chrome_id":"5584144679567360"},"audio-api":{"title":"Web Audio API","description":"High-level JavaScript API for processing and synthesizing audio","spec":"http://www.w3.org/TR/webaudio/","status":"wd","links":[{"url":"https://github.com/corbanbrook/audionode.js","title":"Polyfill to support Web Audio API in Firefox"},{"url":"http://docs.webplatform.org/wiki/apis/webaudio","title":"WebPlatform Docs"},{"url":"http://www.doboism.com/projects/webaudio-compatibility/","title":"Additional browser compatibility tests for specific features"},{"url":"https://github.com/g200kg/WAAPISim","title":"Polyfill to enable Web Audio API through Firefox Audio Data api or flash"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Firefox versions < 25 support an alternative, deprecated audio API.\r\n\r\nChrome support [went through some changes](http://updates.html5rocks.com/2014/07/Web-Audio-Changes-in-m36) as of version 36.","notes_by_num":{},"usage_perc_y":67.15,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web-audio","ie_id":"webaudioapi","chrome_id":"6261718720184320"},"css-regions":{"title":"CSS Regions","description":"Method of flowing content into multiple elements.","spec":"http://www.w3.org/TR/css3-regions/","status":"wd","links":[{"url":"http://html.adobe.com/webstandards/cssregions/","title":"Adobe demos and samples"},{"url":"http://msdn.microsoft.com/en-us/ie/hh272902#_CSSConnected","title":"IE10 developer guide info"},{"url":"http://docs.webplatform.org/wiki/css/atrules/@region","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"n d","20":"n d","21":"n d","22":"n d","23":"n d","24":"n d","25":"n d","26":"n d","27":"n d","28":"n d","29":"n d","30":"n d","31":"n d","32":"n d","33":"n d","34":"n d","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"y x"}},"notes":"Support in IE10 and IE11 is limited to using an iframe as a content source with the `-ms-flow-into: flow_name;` and `-ms-flow-from: flow_name;` syntax. ","notes_by_num":{},"usage_perc_y":13.43,"usage_perc_a":10.24,"ucprefix":false,"parent":"","keywords":"","ie_id":"regions","chrome_id":"5655612935372800"},"spellcheck-attribute":{"title":"Spellcheck attribute","description":"Attribute for `input`/`textarea` fields to enable/disable the browser's spellchecker.","spec":"https://html.spec.whatwg.org/multipage/interaction.html#spelling-and-grammar-checking","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/HTML/Controlling_spell_checking_in_HTML_formsControlling_spell_checking_in_HTML_forms","title":"MDN article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"a","11.1":"a","11.5":"a","12":"a","12.1":"a","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"The partial support in mobile browsers results from their OS generally having built-in spell checking instead of using the wavy underline to indicate misspelled words. `spellcheck=\"false\"` does not seem to have any effect in these browsers.","notes_by_num":{},"usage_perc_y":60.31,"usage_perc_a":31.63,"ucprefix":false,"parent":"","keywords":"spelling","ie_id":"","chrome_id":""},"fullscreen":{"title":"Full Screen API","description":"API for allowing content (like a video or canvas element) to take up the entire screen.","spec":"http://www.w3.org/TR/fullscreen/","status":"wd","links":[{"url":"https://developer.mozilla.org/en/DOM/Using_full-screen_mode","title":"MDN article"},{"url":"http://jlongster.com/2011/11/21/canvas.html","title":"Blog post"},{"url":"http://hacks.mozilla.org/2012/01/using-the-fullscreen-api-in-web-browsers/","title":"Mozilla hacks article"},{"url":"http://docs.webplatform.org/wiki/dom/Element/requestFullscreen","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"n","11":"y x"},"and_uc":{"9.9":"n"}},"notes":"Partial support refers to supporting an earlier draft of the spec.","notes_by_num":{},"usage_perc_y":56.94,"usage_perc_a":12.5,"ucprefix":false,"parent":"","keywords":"full-screen","ie_id":"fullscreenapi","chrome_id":"5259513871466496"},"requestanimationframe":{"title":"requestAnimationFrame","description":"API allowing a more efficient way of running script-based animation, compared to traditional methods using timeouts.","spec":"http://www.w3.org/TR/animation-timing/#requestAnimationFrame","status":"cr","links":[{"url":"http://paulirish.com/2011/requestanimationframe-for-smart-animating/","title":"Blog post"},{"url":"http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/","title":"Mozilla Hacks article"},{"url":"http://docs.webplatform.org/wiki/dom/Window/requestAnimationFrame","title":"WebPlatform Docs"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":85.57,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"requestanimationframe","chrome_id":"5233400470306816"},"input-range":{"title":"Range input type","description":"Form field type that allows the user to select a value using a slider widget.","spec":"https://html.spec.whatwg.org/multipage/forms.html#range-state-(type=range)","status":"ls","links":[{"url":"https://github.com/fryn/html5slider","title":"Polyfill for Firefox"},{"url":"https://github.com/freqdec/fd-slider","title":"Cross-browser polyfill"},{"url":"http://tutorialzine.com/2011/12/what-you-need-to-know-html5-range-input/","title":"Tutorial"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-range","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/range","title":"WebPlatform Docs"},{"url":"https://github.com/andreruffert/rangeslider.js","title":"rangeslider.js polyfill"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"u","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Currently all Android browsers with partial support hide the slider input field by default. However, the element [can be styled](http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/) to be made visible and usable.","notes_by_num":{},"usage_perc_y":87.46,"usage_perc_a":1.18,"ucprefix":false,"parent":"forms","keywords":"input type=\"range\"","ie_id":"","chrome_id":""},"matchmedia":{"title":"matchMedia","description":"API for finding out whether or not a media query applies to the document.","spec":"http://www.w3.org/TR/cssom-view/#dom-window-matchmedia","status":"wd","links":[{"url":"https://github.com/paulirish/matchMedia.js/","title":"matchMedia.js polyfill"},{"url":"https://developer.mozilla.org/en/DOM/window.matchMedia","title":"MDN article"},{"url":"https://developer.mozilla.org/en/CSS/Using_media_queries_from_code","title":"MDN tutorial"},{"url":"http://docs.webplatform.org/wiki/css/media_queries/apis/matchMedia","title":"WebPlatform Docs"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":88.64,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"mediaquerylist","ie_id":"matchmedia","chrome_id":"4677872220372992"},"input-datetime":{"title":"Date and time input types","description":"Form field widget to easily allow users to enter a date or a time, generally by using a calendar/time input widget. Previously there was also a single field for both date & time, but this has been deprecated.","spec":"https://html.spec.whatwg.org/multipage/forms.html#date-state-(type=date)","status":"ls","links":[{"url":"http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-browser-datepickers-within-minutes/","title":"Datepicker tutorial w/polyfill"},{"url":"https://github.com/zoltan-dulac/html5Forms.js","title":"Polyfill for HTML5 forms"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-datetime;input-type-datetime-local","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/date","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Partial support in iOS refers to a lack of support for attributes like step, min, or max.\r\n\r\nOlder versions of Safari provide date-formatted text fields, but no real calendar widget.\r\n\r\nSome modified versions of the Android 4.x browser do have support for date/time fields.","notes_by_num":{},"usage_perc_y":60.76,"usage_perc_a":0,"ucprefix":false,"parent":"forms","keywords":"datepicker,timepicker,input type=\"date\",input type=\"time\"","ie_id":"daterelatedinputtypes,timerelatedinputtypes","chrome_id":"6640933999214592"},"input-color":{"title":"Color input type","description":"Form field allowing the user to select a color.","spec":"https://html.spec.whatwg.org/multipage/forms.html#color-state-(type=color)","status":"ls","links":[{"url":"http://www.html5tutorial.info/html5-color.php","title":"Tutorial"},{"url":"https://github.com/jonstipe/color-polyfill","title":"Polyfill"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/color","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a"}},"notes":"","notes_by_num":{},"usage_perc_y":60.93,"usage_perc_a":3.84,"ucprefix":false,"parent":"forms","keywords":"colour,input type=\"color\"","ie_id":"","chrome_id":""},"input-number":{"title":"Number input type","description":"Form field type for numbers.","spec":"https://html.spec.whatwg.org/multipage/forms.html#number-state-(type=number)","status":"ls","links":[{"url":"http://www.html5tutorial.info/html5-number.php","title":"Tutorial"},{"url":"https://github.com/jonstipe/number-polyfill","title":"Polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-number","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/input/type/number","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"a"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"iOS Safari, Android 4, Chrome for Android show number input, but do not use \"step\", \"min\" or \"max\" attributes or show increment/decrement buttons. Internet Explorer 10 and 11 do not show increment/decrement buttons. Firefox doesn't support [autocomplete content via datalist](http://codepen.io/graste/pen/bNoVKW) elements.","notes_by_num":{},"usage_perc_y":49.95,"usage_perc_a":38.03,"ucprefix":false,"parent":"forms","keywords":"spinner,input type=\"number\"","ie_id":"","chrome_id":""},"iframe-sandbox":{"title":"sandbox attribute for iframes","description":"Method of running external site pages with reduced privileges (e.g. no JavaScript) in iframes.","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-sandbox","status":"ls","links":[{"url":"http://blog.chromium.org/2010/05/security-in-depth-html5s-sandbox.html","title":"Chromium blog article"},{"url":"http://msdn.microsoft.com/en-us/hh563496","title":"MSDN article"},{"url":"http://docs.webplatform.org/wiki/html/attributes/sandbox","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":87.89,"usage_perc_a":0.54,"ucprefix":false,"parent":"","keywords":"","ie_id":"iframesandboxattribute","chrome_id":"5715536319086592"},"css-counters":{"title":"CSS Counters","description":"Method of controlling number values in generated content, using the counter-reset and counter-increment properties.","spec":"http://www.w3.org/TR/CSS21/generate.html#counters","status":"wd","links":[{"url":"http://onwebdev.blogspot.com/2012/02/css-counters-tutorial.html","title":"Tutorial and information"},{"url":"https://developer.mozilla.org/en/CSS_Counters","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/counter-reset","title":"WebPlatform Docs"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":96.95,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-resize":{"title":"CSS resize property","description":"Method of allowing an element to be resized by the user, with options to limit to a given direction. ","spec":"http://www.w3.org/TR/css3-ui/#resize","status":"wd","links":[{"url":"http://css-tricks.com/almanac/properties/r/resize/","title":"CSS Tricks info"},{"url":"http://davidwalsh.name/textarea-resize","title":"On textarea resizing"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Opera 12.10+ currently only supports the resize property for textarea elements.","notes_by_num":{},"usage_perc_y":61.27,"usage_perc_a":0.23,"ucprefix":false,"parent":"","keywords":"horizontal,vertical","ie_id":"","chrome_id":""},"input-placeholder":{"title":"input placeholder attribute","description":"Method of setting placeholder text for text-like input fields, to suggest the expected inserted information.","spec":"https://html.spec.whatwg.org/multipage/forms.html#attr-input-placeholder","status":"ls","links":[{"url":"http://www.zachleat.com/web/placeholder/","title":"Article on usage"},{"url":"https://github.com/mathiasbynens/jquery-placeholder","title":"Polyfill"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-attr-placeholder","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/attributes/placeholder","title":"WebPlatform Docs"},{"url":"https://code.google.com/p/android/issues/detail?id=24626","title":"Issue 24626: Placeholder text for an input type="}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"a","11.1":"a","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Safari and Opera versions refers to lacking placeholder support on textarea elements. ","notes_by_num":{},"usage_perc_y":88.04,"usage_perc_a":1.15,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"spdy":{"title":"HTTP/2 protocol / SPDY","description":"Networking protocol for low-latency transport of content over the web. Originally started out from the SPDY protocol, now standardized as HTTP version 2.","spec":"http://http2.github.io/http2-spec/index.html","status":"other","links":[{"url":"http://en.wikipedia.org/wiki/HTTP/2","title":"Wikipedia"},{"url":"http://dev.chromium.org/spdy/spdy-whitepaper","title":"SPDY whitepaper"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"u"}},"notes":"","notes_by_num":{},"usage_perc_y":71.53,"usage_perc_a":8.02,"ucprefix":false,"parent":"","keywords":"http2","ie_id":"http2","chrome_id":"5152586365665280"},"css-repeating-gradients":{"title":"CSS Repeating Gradients","description":"Method of defining a repeating linear or radial color gradient as a CSS image.","spec":"http://www.w3.org/TR/css3-images/#repeating-gradients","status":"cr","links":[{"url":"https://developer.mozilla.org/en/CSS/repeating-linear-gradient","title":"MDN article"},{"url":"http://www.css3files.com/gradient/#repeatinglineargradient","title":"Information page"},{"url":"http://docs.webplatform.org/wiki/css/repeating-linear-gradient","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"y x","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"a x","11.5":"a x","11.6":"y x","12":"y x","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"a x","11.5":"a x","12":"y x","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"Firefox 10+, Chrome 26+ and Opera 11.6+ also support the new \"to (side)\" syntax.","notes_by_num":{},"usage_perc_y":88.79,"usage_perc_a":0.01,"ucprefix":false,"parent":"css-gradients","keywords":"","ie_id":"","chrome_id":""},"css-filters":{"title":"CSS Filter Effects","description":"Method of applying filter effects (like blur, grayscale, brightness, contrast and hue) to elements, previously only possible by using SVG.","spec":"http://www.w3.org/TR/filter-effects/","status":"wd","links":[{"url":"http://html5-demos.appspot.com/static/css/filters/index.html","title":"Demo file for WebKit browsers"},{"url":"http://www.html5rocks.com/en/tutorials/filters/understanding-css/","title":"HTML5Rocks article"},{"url":"http://dl.dropbox.com/u/3260327/angular/CSS3ImageManipulation.html","title":"Filter editor"},{"url":"http://bennettfeely.com/filters/","title":"Filter Playground"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"a","4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a d #1","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y x"}},"notes":"Note that this property is significantly different from and incompatible with Microsoft's [older \"filter\" property](http://msdn.microsoft.com/en-us/library/ie/ms530752%28v=vs.85%29.aspx).\r\n\r\nPartial support in Firefox before version 34 [only implemented the url() function of the filter property](https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Browser_compatibility)","notes_by_num":{"1":"Supported in Firefox under the `layout.css.filters.enabled` flag."},"usage_perc_y":72.81,"usage_perc_a":2.46,"ucprefix":false,"parent":"","keywords":"sepia,hue-rotate,invert,saturate","ie_id":"filters","chrome_id":"5822463824887808"},"getcomputedstyle":{"title":"getComputedStyle","description":"API to get the current computed CSS styles applied to an element. This may be the current value applied by an animation or as set by a stylesheet.","spec":"http://www.w3.org/TR/cssom/#dom-window-getcomputedstyle","status":"rec","links":[{"url":"https://developer.mozilla.org/en/DOM/window.getComputedStyle","title":"MDN article"},{"url":"http://ie.microsoft.com/testdrive/HTML5/getComputedStyle/","title":"Demo"},{"url":"http://snipplr.com/view/13523/","title":"Polyfill for IE"},{"url":"http://docs.webplatform.org/wiki/css/cssom/methods/getComputedStyle","title":"WebPlatform Docs"}],"categories":["CSS3","DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"a","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"a"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a","10":"y"},"op_mob":{"10":"a","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Firefox versions refers to requiring the second parameter to be included.\r\n\r\nPartial support in all other browsers refers to not supporting getComputedStyle on pseudo-elements.","notes_by_num":{},"usage_perc_y":90.65,"usage_perc_a":3.39,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"word-break":{"title":"CSS3 word-break","description":"Property to prevent or allow words to be broken over multiple lines between letters.","spec":"http://www.w3.org/TR/css3-text/#word-break","status":"wd","links":[{"url":"https://developer.mozilla.org/en/CSS/word-break","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/word-break","title":"WebPlatform Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"a","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a"}},"notes":"Partial support refers to supporting the \"break-all\" value, but not the \"keep-all\" value.","notes_by_num":{},"usage_perc_y":27.01,"usage_perc_a":66.54,"ucprefix":false,"parent":"","keywords":"break-all,keep-all","ie_id":"","chrome_id":""},"viewport-units":{"title":"Viewport units: vw, vh, vmin, vmax","description":"Length units representing 1% of the viewport size for viewport width (vw), height (vh), the smaller of the two (vmin), or the larger of the two (vmax).","spec":"http://www.w3.org/TR/css3-values/#viewport-relative-lengths","status":"cr","links":[{"url":"http://css-tricks.com/viewport-sized-typography/","title":"Blog post"},{"url":"https://github.com/saabi/vminpoly","title":"Polyfill"},{"url":"https://github.com/rodneyrehm/viewport-units-buggyfill","title":"Buggyfill - Polyfill that fixes buggy support"},{"url":"http://blog.rodneyrehm.de/archives/34-iOS7-Mobile-Safari-And-Viewport-Units.html","title":"Back-Forward issue blog post"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"a","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"a","7.0-7.1":"a","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE9 refers to supporting \"vm\" instead of \"vmin\".\r\n\r\nPartial support in iOS7 is due to buggy behavior of the \"vh\" unit (see [workaround](https://gist.github.com/pburtchaell/e702f441ba9b3f76f587)).\r\n\r\nAll other partial support refers to not supporting the \"vmax\" unit. ","notes_by_num":{},"usage_perc_y":68.78,"usage_perc_a":14.06,"ucprefix":false,"parent":"","keywords":"vm,viewport-percentage","ie_id":"","chrome_id":""},"contentsecuritypolicy":{"title":"Content Security Policy 1.0","description":"Mitigate cross-site scripting attacks by whitelisting allowed sources of script, style, and other resources.","spec":"http://www.w3.org/TR/CSP/","status":"cr","links":[{"url":"http://html5rocks.com/en/tutorials/security/content-security-policy/","title":"HTML5Rocks article"},{"url":"http://content-security-policy.com/","title":"CSP Examples & Quick Reference"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a #1","11":"a #1","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y #2","15":"y #2","16":"y #2","17":"y #2","18":"y #2","19":"y #2","20":"y #2","21":"y #2","22":"y #2","23":"y #2","24":"y #2","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"a #2","6":"y #2","6.1":"y #2","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a #2","6.0-6.1":"y #2","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y #2"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y x"}},"notes":"The standard HTTP header is `Content-Security-Policy` which is used unless otherwise noted.","notes_by_num":{"1":"Supported through the `X-Content-Security-Policy` header","2":"Supported through the `X-Webkit-CSP` header"},"usage_perc_y":75.25,"usage_perc_a":10.57,"ucprefix":false,"parent":"","keywords":"csp,security,header","ie_id":"contentsecuritypolicy","chrome_id":"5205088045891584"},"pagevisibility":{"title":"Page Visibility","description":"JavaScript API for determining whether a document is visible on the display","spec":"http://www.w3.org/TR/page-visibility/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/apis/timing/properties/visibilityState","title":"WebPlatform Docs"},{"url":"http://www.sitepoint.com/introduction-to-page-visibility-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/page-visibility-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y #1","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":85.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"visibilitystate","ie_id":"pagevisibilityapi","chrome_id":"5689697795833856"},"stricttransportsecurity":{"title":"Strict Transport Security","description":"Declare that a website is only accessible over a secure connection (HTTPS).","spec":"http://tools.ietf.org/html/rfc6797","status":"other","links":[{"url":"http://dev.chromium.org/sts","title":"Chromium article"},{"url":"https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security","title":"MDN article"},{"url":"https://www.owasp.org/index.php/HTTP_Strict_Transport_Security","title":"OWASP article"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"u","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"u"}},"notes":"The HTTP header is 'Strict-Transport-Security'.","notes_by_num":{},"usage_perc_y":69.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"sts,hsts,security,header","ie_id":"httpstricttransportsecurityhsts","chrome_id":"4941480133132288"},"style-scoped":{"title":"Scoped CSS","description":"Allows CSS rules to be scoped to part of the document, based on the position of the style element.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#attr-style-scoped","status":"ls","links":[{"url":"https://github.com/PM5544/scoped-polyfill","title":"Polyfill"},{"url":"http://html5doctor.com/the-scoped-attribute/","title":"HTML5 Doctor article"},{"url":"http://updates.html5rocks.com/2012/03/A-New-Experimental-Feature-style-scoped","title":"HTML5Rocks article"}],"categories":["CSS","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d #1","21":"n d #1","22":"n d #1","23":"n d #1","24":"n d #1","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"u","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":15.51,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"scope","ie_id":"scopedstyles","chrome_id":"5374137958662144"},"svg-fragment":{"title":"SVG fragment identifiers","description":"Method of displaying only a part of an SVG image by defining a view ID or view box dimensions as the file's fragment identifier.","spec":"http://www.w3.org/TR/SVG/linking.html#SVGFragmentIdentifiers","status":"rec","links":[{"url":"http://www.broken-links.com/2012/08/14/better-svg-sprites-with-fragment-identifiers/","title":"Blog post"}],"categories":["SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"u","11.1":"u","11.5":"u","11.6":"u","12":"u","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":75.65,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"fragments,sprite","ie_id":"","chrome_id":""},"outline":{"title":"CSS outline","description":"The CSS outline property is a shorthand property for setting one or more of the individual outline properties outline-style, outline-width and outline-color in a single rule. In most cases the use of this shortcut is preferable and more convenient.","spec":"http://www.w3.org/TR/CSS2/ui.html#propdef-outline","status":"rec","links":[{"url":"http://dev.w3.org/csswg/css3-ui/#outline","title":"CSS Basic User Interface Module Level 3"},{"url":"https://developer.mozilla.org/en-US/docs/CSS/outline","title":"Mozilla Developer Network: outline"}],"categories":["CSS2"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"y","9":"y #1","10":"y #1","11":"y #1","TP":"y #1"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y #1","11":"y #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Also supports the value of `invert` for `outline-color`. (support of this value is optional for browsers)"},"usage_perc_y":94.12,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"-moz-outline,outline-width,outline-style,outline-color","ie_id":"","chrome_id":""},"download":{"title":"Download attribute","description":"When used on an anchor, this attribute signifies that the browser should download the resource the anchor points to rather than navigate to it.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#downloading-resources","status":"ls","links":[{"url":"http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download","title":"HTML5Rocks post"},{"url":"http://html5-demos.appspot.com/static/a.download.html","title":"Demo: creating a text file and downloading it."}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":61.16,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"download,a.download,a[download],download attribute","ie_id":"adownloadattribute","chrome_id":"6473924464345088"},"pointer":{"title":"Pointer events","description":"This specification integrates various inputs from mice, touchscreens, and pens, making separate implementations no longer necessary and authoring for cross-device pointers easier. Not to be mistaken with the unrelated \"pointer-events\" CSS property.","spec":"http://www.w3.org/TR/pointerevents/","status":"rec","links":[{"url":"http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx","title":"Implementation of Pointer Events in IE10"},{"url":"http://blogs.msdn.com/b/eternalcoding/archive/2013/01/16/hand-js-a-polyfill-for-supporting-pointer-events-on-every-browser.aspx","title":"Hand.js, the polyfill for browsers only supporting Touch Events"},{"url":"http://blogs.msdn.com/b/davrous/archive/2013/02/20/handling-touch-in-your-html5-apps-thanks-to-the-pointer-events-of-ie10-and-windows-8.aspx","title":"Article & tutorial"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p","40":"p","41":"p","42":"p","43":"p","44":"p"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"u","7":"u","7.1":"u","8":"u"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"p"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"n","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"p"},"and_chr":{"41":"p"},"and_ff":{"36":"p"},"ie_mob":{"10":"a x","11":"y"},"and_uc":{"9.9":"p"}},"notes":"Partial support in IE10 refers the lack of pointerenter and pointerleave events. Firefox Nightly provides 'dom.w3c_pointer_events.enabled' option to support this specification starting with version 28.","notes_by_num":{},"usage_perc_y":8.5,"usage_perc_a":1.67,"ucprefix":false,"parent":"","keywords":"pointerdown,pointermove,pointerup,pointercancel,pointerover,pointerout,pointerenter,pointerleave","ie_id":"pointerevents","chrome_id":"4504699138998272"},"user-select-none":{"title":"CSS user-select: none","description":"Method of preventing text/element selection using CSS. ","spec":"https://developer.mozilla.org/en-US/docs/CSS/user-select","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/CSS/user-select","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/u/user-select/","title":"CSS Tricks article"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh781492(v=vs.85).aspx","title":"MSDN Documentation"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x","11":"y x","TP":"y x"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"u","5":"u","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y x","11":"y x"},"and_uc":{"9.9":"y x"}},"notes":"Currently the user-select property does not appear in any W3C specification. Support information here is only for \"none\" value, not others.","notes_by_num":{},"usage_perc_y":89.01,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"webp":{"title":"WebP image format","description":"Image format that supports lossy and lossless compression, as well as animation and alpha transparency.","spec":"https://developers.google.com/speed/webp/","status":"other","links":[{"url":"https://developers.google.com/speed/webp/","title":"Official website"},{"url":"http://antimatter15.github.io/weppy/demo.html","title":"Polyfill for browsers with WebM support"},{"url":"http://libwebpjs.appspot.com/","title":"Decoder in JS"},{"url":"http://webpjs.appspot.com/","title":"Polyfill for browsers with or without WebM support (i.e. IE6-IE9, Safari/iOS version 6.1 and below; Firefox versions 24 and bel"},{"url":"https://developers.google.com/speed/webp/faq#which_web_browsers_natively_support_webp","title":"Official website FAQ - Which web browsers natively support WebP?"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"p","38":"p","39":"p"},"chrome":{"4":"n","5":"n","6":"p","7":"p","8":"p","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"p","11":"p","11.1":"a","11.5":"a","11.6":"a","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"a","4.1":"a","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"a","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Partial support in older Chrome, Opera and Android refers to browser not supporting lossless and alpha versions of WebP. Animated webp images are supported in Chrome 32+ and Opera 19+.","notes_by_num":{},"usage_perc_y":57.48,"usage_perc_a":1.54,"ucprefix":false,"parent":"","keywords":"","ie_id":"webpimageformatsupport","chrome_id":"6471725441089536,4785074604081152"},"intrinsic-width":{"title":"Intrinsic & Extrinsic Sizing","description":"Allows for the heights and widths to be specified in intrinsic values using the fill-available, max-content, min-content, and fit-content properties.","spec":"http://www.w3.org/TR/css3-sizing/","status":"wd","links":[{"url":"http://demosthenes.info/blog/662/Design-From-the-Inside-Out-With-CSS-MinContent","title":"Min-Content tutorial"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"n","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Prefixes are on the values, not the property names (e.g. -webkit-min-content) Firefox currently supports the \"-moz-available\" property rather than \"-moz-fill-available\".","notes_by_num":{},"usage_perc_y":71,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"fill-available,max-content,min-content,fit-content,contain-floats","ie_id":"cssintrinsicsizing","chrome_id":"5901353784180736"},"cryptography":{"title":"Web Cryptography","description":"JavaScript API for performing basic cryptographic operations in web applications","spec":"http://www.w3.org/TR/WebCryptoAPI/","status":"wd","links":[{"url":"http://www.slideshare.net/Channy/the-history-and-status-of-web-crypto-api","title":"The History and Status of Web Crypto API"},{"url":"http://research.microsoft.com/en-us/projects/msrjscrypto/","title":"Microsoft Research JavaScript Cryptography Library"},{"url":"http://bitwiseshiftleft.github.io/sjcl/","title":"Cross-browser cryptography library"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"p","7":"p","8":"p","9":"p","10":"p","11":"a x #1","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"n d #2","33":"n d #2","34":"a #4","35":"a #4","36":"a #4","37":"a #4","38":"a #4","39":"a #4"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"p","33":"p","34":"p","35":"p","36":"p","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"y x #3","8":"y x #3"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"y x #3","8.1":"y x #3"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"p","37":"y"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"p","11":"a x #1"},"and_uc":{"9.9":"p"}},"notes":"Many browsers support the `[crypto.getRandomValues()](#feat=getrandomvalues)` method, but not actual cryptography functionality under `crypto.subtle`. \r\n\r\nFirefox also has support for [unofficial features](https://developer.mozilla.org/en-US/docs/JavaScript_crypto). \r\n\r\nIn Chrome the API is only usable over secure connections. ([corresponding bug](https://code.google.com/p/chromium/issues/detail?id=373032))","notes_by_num":{"1":"Support in IE11 is based an older version of the specification. ","2":"Supported in Firefox behind the `dom.webcrypto.enabled` flag. ","3":"Supported in Safari using the `crypto.webkitSubtle` prefix","4":"Partial support in Firefox is [described here](https://docs.google.com/spreadsheet/ccc?key=0AiAcidBZRLxndE9LWEs2R1oxZ0xidUVoU3FQbFFobkE#gid=1)"},"usage_perc_y":49.85,"usage_perc_a":18.49,"ucprefix":false,"parent":"","keywords":"subtle,subtlecrypto","ie_id":"webcryptoapi","chrome_id":"5030265697075200"},"template":{"title":"HTML templates","description":"Method of declaring a portion of reusable markup that is parsed but not rendered until cloned.","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-template-element","status":"ls","links":[{"url":"http://www.html5rocks.com/en/tutorials/webcomponents/template/","title":"HTML5Rocks - HTML's New template Tag"},{"url":"http://polymer-project.org","title":"Polymer project (polyfill & web components framework)"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":68.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components, template","ie_id":"templateelement","chrome_id":"5207287069147136"},"opus":{"title":"Opus","description":"Royalty-free open audio codec by IETF, which incorporated SILK from Skype and CELT from Xiph.org, to serve higher sound quality and lower latency at the same bitrate.","spec":"http://tools.ietf.org/html/rfc6716","status":"other","links":[{"url":"https://hacks.mozilla.org/2012/07/firefox-beta-15-supports-the-new-opus-audio-format/","title":"Introduction of Opus by Mozilla"},{"url":"http://www.ietf.org/mail-archive/web/rtcweb/current/msg04953.html","title":"Google's statement about the use of VP8 and Opus codec for WebRTC standard"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"For Opera the Linux version may be able to play it when the GStreamer module is up to date and the served mime-type is 'audio/ogg'.","notes_by_num":{},"usage_perc_y":45.47,"usage_perc_a":0,"ucprefix":false,"parent":"audio","keywords":"","ie_id":"","chrome_id":"4891189287321600"},"jpegxr":{"title":"JPEG XR image format","description":"The latest JPEG image format of Joint Photographic Experts Group which boasts better compression and supports lossless compression, alpha channel, and 48-bit deep color over normal jpg format.","spec":"http://www.itu.int/rec/T-REC-T.832","status":"other","links":[{"url":"http://msdn.microsoft.com/en-us/library/windows/desktop/hh707223(v=vs.85).aspx","title":"Microsoft JPEG XR Codec Overview"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.99,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"channel-messaging":{"title":"Channel messaging","description":"Method for having two-way communication between browsing contexts (using MessageChannel)","spec":"http://www.w3.org/TR/webmessaging/#channel-messaging","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/window-postmessage-messagechannel/#channel","title":"An Introduction to HTML5 web messaging"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `dom.messageChannel.enabled` flag. Reported to not work in web workers."},"usage_perc_y":74.4,"usage_perc_a":0,"ucprefix":false,"parent":"x-doc-messaging","keywords":"","ie_id":"messagechannels","chrome_id":"6710044586409984"},"css3-tabsize":{"title":"CSS3 tab-size","description":"Method of customizing the width of the tab character. Only effective using 'white-space: pre' or 'white-space: pre-wrap'.","spec":"http://www.w3.org/TR/css3-text/#tab-size1","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/tab-size","title":"MDN article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y x","11":"y x","11.1":"y x","11.5":"y x","11.6":"y x","12":"y x","12.1":"y x","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y x"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y x","11.1":"y x","11.5":"y x","12":"y x","12.1":"y x","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":74.31,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"tab-size,tab-width","ie_id":"","chrome_id":""},"mutationobserver":{"title":"Mutation Observer","description":"Method for observing and reacting to changes to the DOM. Replaces MutationEvents, which is deprecated.","spec":"http://www.w3.org/TR/dom/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver","title":"MutationObserver from MDN"},{"url":"https://github.com/webcomponents/webcomponentsjs","title":"Polyfill"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"p","10":"p","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"p","4.1":"p","4.2-4.3":"p","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"y"},"and_uc":{"9.9":"y x"}},"notes":"When the content of a node with a single CharacterData child node is changed by innerHTML attribute and the node have a single different one as a result, WebKit browsers consider it as a characterData mutation of the child CharacterData node, while other browsers think it as a childList mutation of the parent node.","notes_by_num":{},"usage_perc_y":83.42,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"MutationObserver","ie_id":"mutationobservers","chrome_id":"5021194726146048"},"css-selection":{"title":"::selection CSS pseudo-element","description":"The ::selection CSS pseudo-element applies rules to the portion of a document that has been highlighted (e.g., selected with the mouse or another pointing device) by the user.","spec":"https://developer.mozilla.org/en-US/docs/Web/CSS/::selection","status":"unoff","links":[{"url":"http://quirksmode.org/css/selectors/selection.html","title":"::selection test"},{"url":"http://docs.webplatform.org/wiki/css/selectors/pseudo-elements/::selection","title":"WebPlatform Docs"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":77.52,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"::selection,selection","ie_id":"","chrome_id":""},"css-placeholder":{"title":":placeholder-shown CSS pseudo-class","description":"The :placeholder-shown pseudo-class represents the placeholder contents of a form field with placeholder text.","spec":"http://www.w3.org/TR/selectors4/#placeholder","status":"wd","links":[{"url":"http://msdn.microsoft.com/en-us/library/ie/hh772745(v=vs.85).aspx","title":"MSDN article"},{"url":"http://css-tricks.com/snippets/css/style-placeholder-text/","title":"CSS-Tricks article with all prefixes"},{"url":"http://wiki.csswg.org/ideas/placeholder-styling","title":"CSSWG discussion"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"a x","5":"a x","6":"a x","7":"a x","8":"a x","9":"a x","10":"a x","11":"a x","12":"a x","13":"a x","14":"a x","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"a x","5.1":"a x","6":"a x","6.1":"a x","7":"a x","7.1":"a x","8":"a x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x","16":"a x","17":"a x","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"a x","5.0-5.1":"a x","6.0-6.1":"a x","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a x","2.2":"a x","2.3":"a x","3":"a x","4":"a x","4.1":"a x","4.2-4.3":"a x","4.4":"a x","4.4.3-4.4.4":"a x","37":"a x"},"bb":{"7":"u","10":"a x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x"},"and_chr":{"41":"a x"},"and_ff":{"36":"a x"},"ie_mob":{"10":"a x","11":"a x"},"and_uc":{"9.9":"a x"}},"notes":"Partial support refers to support for alternative syntax: ::-webkit-input-placeholder (Chrome/Safari/Opera),\r\n::-moz-placeholder (Firefox) and \r\n:-ms-input-placeholder (IE). ","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":88.72,"ucprefix":false,"parent":"","keywords":"::placeholder,placeholder","ie_id":"","chrome_id":""},"css-deviceadaptation":{"title":"CSS Device Adaptation","description":"A standard way to override the size of viewport in web page, standardizing and replacing Apple's own popular viewport implementation.","spec":"http://www.w3.org/TR/css-device-adapt/","status":"wd","links":[{"url":"https://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/","title":"Introduction to meta viewport and @viewport in Opera Mobile"},{"url":"http://msdn.microsoft.com/en-us/library/ie/hh708740(v=vs.85).aspx","title":"Device adaptation in Internet Explorer 10"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #1","TP":"a x #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"u","7":"u","7.1":"u","8":"u"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"a x #2"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"a x #2","11.1":"a x #2","11.5":"a x #2","12":"a x #2","12.1":"a x #2","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"a x #1","11":"a x #1"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"IE only supports the 'width' and 'height' properties.","2":"Opera Mobile and Opera Mini only support the 'orientation' property."},"usage_perc_y":0,"usage_perc_a":13.02,"ucprefix":false,"parent":"","keywords":"viewport","ie_id":"","chrome_id":""},"text-emphasis":{"title":"text-emphasis styling","description":"Method of using small symbols next to each glyph to emphasize a run of text, commonly used in East Asian languages. The `text-emphasis` shorthand, and its `text-emphasis-style` and `text-emphasis-color` longhands, can be used to apply marks to the text. The `text-emphasis-position` property, which inherits separately, allows setting the emphasis marks' position with respect to the text.","spec":"http://www.w3.org/TR/css-text-decor-3/#text-emphasis","status":"cr","links":[{"url":"https://github.com/zmmbreeze/jquery.emphasis/","title":"A javascript fallback for CSS3 emphasis mark."}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"a x #1","26":"a x #1","27":"a x #1","28":"a x #1","29":"a x #1","30":"a x #1","31":"a x #1","32":"a x #1","33":"a x #1","34":"a x #1","35":"a x #1","36":"a x #1","37":"a x #1","38":"a x #1","39":"a x #1","40":"a x #1","41":"a x #1","42":"a x #1","43":"a x #1","44":"a x #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"a x #1","7":"a x #1","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x #1","16":"a x #1","17":"a x #1","18":"a x #1","19":"a x #1","20":"a x #1","21":"a x #1","22":"a x #1","23":"a x #1","24":"a x #1","25":"a x #1","26":"a x #1","27":"a x #1","28":"a x #1","29":"a x #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x #1","4.4.3-4.4.4":"a x #1","37":"a x #1"},"bb":{"7":"n","10":"a x #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x #1"},"and_chr":{"41":"a x #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a x #1"}},"notes":"Some old webkit browsers (like Chrome 24) support `-webkit-text-emphasis`, but does not support CJK languages and is therefore considered unsupported.","notes_by_num":{"1":"Partial support refers to incorrect support for `-webkit-text-emphasis-position`. These browsers support `over` and `under` as values, but not the added `left` and `right` values required by the spec."},"usage_perc_y":8.96,"usage_perc_a":53.56,"ucprefix":false,"parent":"","keywords":"text-emphasis,text-emphasis-position,text-emphasis-style,text-emphasis-color","ie_id":"","chrome_id":""},"midi":{"title":"Web MIDI API","description":"The Web MIDI API specification defines a means for web developers to enumerate, manipulate and access MIDI devices","spec":"http://webaudio.github.io/web-midi-api/","status":"wd","links":[{"url":"https://github.com/cwilso/WebMIDIAPIShim","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"webmidiapi","chrome_id":"4923613069180928"},"canvas-blending":{"title":"Canvas blend modes","description":"Method of defining the effect resulting from overlaying two layers on a Canvas element. ","spec":"http://www.w3.org/TR/compositing-1/#blending","status":"cr","links":[{"url":"http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/","title":"Blog post"}],"categories":["Canvas"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":70.11,"usage_perc_a":0,"ucprefix":false,"parent":"canvas","keywords":"","ie_id":"compositingandblendingincanvas2d","chrome_id":""},"clipboard":{"title":"Clipboard API","description":"API to provide copy, cut and paste functionality using the OS clipboard.","spec":"http://www.w3.org/TR/clipboard-apis/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent","title":"MDN page on ClipboardEvent"},{"url":"http://www.deluxeblogtips.com/2010/06/javascript-copy-to-clipboard.html","title":"Blog post on cross-browser usage"}],"categories":["JS API"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"a","37":"a","38":"a","39":"a","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"u","3.2":"u","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a","4.4.3-4.4.4":"a","37":"a"},"bb":{"7":"n","10":"a"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"a"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE refers using [a non-standard method](http://msdn.microsoft.com/en-us/library/ie/ms535220%28v=vs.85%29.aspx) of interacting with the clipboard. For other browsers it refers to not supporting the ClipboardEvent constructor.","notes_by_num":{},"usage_perc_y":11.62,"usage_perc_a":74.26,"ucprefix":false,"parent":"","keywords":"cut,copy,paste,clipboarddata","ie_id":"clipboardapi","chrome_id":""},"rtcpeerconnection":{"title":"WebRTC Peer-to-peer connections","description":"Method of allowing two users to communicate directly, browser to browser using the RTCPeerConnection API.","spec":"http://www.w3.org/TR/webrtc/#peer-to-peer-connections","status":"wd","links":[{"url":"http://www.webrtc.org/","title":"WebRTC Project site"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y x"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"BlackBerry 10 recognizes RTCPeerConnection but real support is unconfirmed.","notes_by_num":{},"usage_perc_y":57.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"webrtcwebrtcv10api","chrome_id":"6612462929444864"},"css3-cursors":{"title":"CSS3 Cursors (original values)","description":"CSS3 cursor values added in the 2004 spec, including none, context-menu, cell, vertical-text, alias, copy, no-drop, not-allowed, nesw-resize, nwse-resize, col-resize, row-resize and all-scroll. ","spec":"http://www.w3.org/TR/css3-ui/#cursor","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor","title":"MDN Documentation"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a","6":"a","7":"a","8":"a","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a","3":"a","3.5":"a","3.6":"a","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a","9.5-9.6":"a","10.0-10.1":"a","10.5":"a","10.6":"a","11":"a","11.1":"a","11.5":"a","11.6":"a","12":"a","12.1":"a","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"u"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in IE refers to no support for the alias, cell, copy, ew-resize, ns-resize, nesw-resize, nwse-resize or context-menu cursors. Opera 12.10- does not support 'none' or a URI.","notes_by_num":{},"usage_perc_y":61.84,"usage_perc_a":3.72,"ucprefix":false,"parent":"","keywords":"cursors, pointers","ie_id":"","chrome_id":""},"css3-cursors-newer":{"title":"CSS3 Cursors (new values)","description":"Support for `zoom-in` and `zoom-out` values for the CSS3 `cursor` property.","spec":"http://www.w3.org/TR/css3-ui/#cursor","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor","title":"MDN Documentation"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y","12":"y","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Chrome, Safari and Firefox also support the unofficial `grab` and `grabbing` values (with prefix)","notes_by_num":{},"usage_perc_y":51.13,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"cursors, pointers","ie_id":"","chrome_id":""},"webvtt":{"title":"WebVTT - Web Video Text Tracks","description":"Format for marking up text captions for multimedia resources.","spec":"http://dev.w3.org/html5/webvtt/","status":"unoff","links":[{"url":"http://www.html5rocks.com/en/tutorials/track/basics/","title":"Getting Started With the Track Element"},{"url":"https://dev.opera.com/articles/view/an-introduction-to-webvtt-and-track/","title":"An Introduction to WebVTT and track"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n d","25":"n d","26":"n d","27":"n d","28":"n d","29":"n d","30":"n d","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y"},"and_uc":{"9.9":"n"}},"notes":"WebVTT must be used with the element.\r\n\r\nFirefox currently lacks support for the ::cue pseudo-element.","notes_by_num":{},"usage_perc_y":80.02,"usage_perc_a":0,"ucprefix":false,"parent":"video","keywords":"captions,track","ie_id":"","chrome_id":"6719115557339136"},"promises":{"title":"Promises","description":"A promise represents the eventual result of an asynchronous operation.","spec":"https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects","status":"other","links":[{"url":"http://promises-aplus.github.io/promises-spec/","title":"Promises/A+ spec"},{"url":"http://www.chromestatus.com/features/5681726336532480","title":"Chromium dashboard - ES6 Promises"},{"url":"http://www.html5rocks.com/en/tutorials/es6/promises/","title":"JavaScript Promises: There and back again - HTML5 Rocks"},{"url":"https://github.com/jakearchibald/ES6-Promises","title":"A polyfill for ES6-style Promises"}],"categories":["JS API"],"stats":{"ie":{"5.5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","TP":"y"},"firefox":{"2":"p","3":"p","3.5":"p","3.6":"p","4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"a","28":"a","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"p","5":"p","6":"p","7":"p","8":"p","9":"p","10":"p","11":"p","12":"p","13":"p","14":"p","15":"p","16":"p","17":"p","18":"p","19":"p","20":"p","21":"p","22":"p","23":"p","24":"p","25":"p","26":"p","27":"p","28":"p","29":"p","30":"p","31":"p","32":"a","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"p","3.2":"p","4":"p","5":"p","5.1":"p","6":"p","6.1":"p","7":"p","7.1":"y","8":"y"},"opera":{"9":"p","9.5-9.6":"p","10.0-10.1":"p","10.5":"p","10.6":"p","11":"p","11.1":"p","11.5":"p","11.6":"p","12":"p","12.1":"p","15":"p","16":"p","17":"p","18":"p","19":"a","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"p","4.0-4.1":"p","4.2-4.3":"p","5.0-5.1":"p","6.0-6.1":"p","7.0-7.1":"p","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"p"},"android":{"2.1":"p","2.2":"p","2.3":"p","3":"p","4":"p","4.1":"p","4.2-4.3":"p","4.4":"p","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"p","10":"p"},"op_mob":{"10":"p","11":"p","11.1":"p","11.5":"p","12":"p","12.1":"p","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"p","11":"p"},"and_uc":{"9.9":"p"}},"notes":"","notes_by_num":{},"usage_perc_y":63.85,"usage_perc_a":0.26,"ucprefix":false,"parent":"","keywords":"futures","ie_id":"","chrome_id":"5681726336532480"},"css-sticky":{"title":"CSS position:sticky","description":"Keeps elements positioned as \"fixed\" or \"relative\" depending on how it appears in the viewport. As a result the element is \"stuck\" when necessary while scrolling.","spec":"http://dev.w3.org/csswg/css-position/#sticky-positioning","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit","title":"HTML5Rocks"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/position","title":"MDN article"},{"url":"http://docs.webplatform.org/wiki/css/properties/position","title":"WebPlatform Docs"},{"url":"https://github.com/filamentgroup/fixed-sticky","title":"Polyfill"},{"url":"https://github.com/wilddeer/stickyfill","title":"Another polyfill"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"n d #1","31":"n d #1","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n d #2","24":"n d #2","25":"n d #2","26":"n d #2","27":"n d #2","28":"n d #2","29":"n d #2","30":"n d #2","31":"n d #2","32":"n d #2","33":"n d #2","34":"n d #2","35":"n d #2","36":"n d #2","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox by setting the about:config preference layout.css.sticky.enabled to true","2":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":20.29,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"positionsticky","chrome_id":"6190250464378880"},"dialog":{"title":"Dialog element","description":"Method of easily creating custom dialog boxes to display to the user with modal or non-modal options. Also includes a `::backdrop` pseudo-element for behind the element.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-dialog-element","status":"ls","links":[{"url":"https://github.com/GoogleChrome/dialog-polyfill","title":"Polyfill"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n d #2","20":"n d #2","21":"n d #2","22":"n d #2","23":"n d #2","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled through the \"Experimental Web Platform features\" flag in `chrome://flags`","2":"Enabled through the \"Experimental Web Platform features\" flag in `opera://flags`"},"usage_perc_y":42.49,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"HTMLDialogElement,showModal,backdrop","ie_id":"dialogelementformodals","chrome_id":"5770237022568448"},"css-variables":{"title":"CSS Variables","description":"Permits the declaration and usage of cascading variables in stylesheets.","spec":"http://www.w3.org/TR/css-variables/","status":"wd","links":[{"url":"https://hacks.mozilla.org/2013/12/css-variables-in-firefox-nightly/","title":"Mozilla hacks article (older syntax)"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables","title":"MDN article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css variables","ie_id":"cssvariables","chrome_id":"6401356696911872"},"vibration":{"title":"Vibration API","description":"Method to access the vibration mechanism of the hosting device.","spec":"http://www.w3.org/TR/vibration/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/Guide/API/Vibration","title":"MDN article"},{"url":"http://davidwalsh.name/vibration-api","title":"Vibration API sample code & demo"},{"url":"http://code.tutsplus.com/tutorials/html5-vibration-api--mobile-22585","title":"Tuts+ article"},{"url":"http://aurelio.audero.it/demo/vibration-api-demo.html","title":"Demo"},{"url":"http://www.illyism.com/journal/vibration-api","title":"Article and Usage Examples"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":64.68,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"vibration,mobile,device","ie_id":"vibrationapi","chrome_id":"5698768766763008"},"css-backgroundblendmode":{"title":"CSS background-blend-mode","description":"Allows blending between CSS background images, gradients, and colors.","spec":"http://www.w3.org/TR/compositing-1/#background-blend-mode","status":"cr","links":[{"url":"http://codepen.io/bennettfeely/pen/rxoAc","title":"codepen example"},{"url":"https://medium.com/web-design-technique/6b51bf53743a","title":"Blog post"},{"url":"http://bennettfeely.com/gradients","title":"Demo"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":62.06,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"css blend modes,css blending modes,blending,multiply,screen,background","ie_id":"","chrome_id":"5768037999312896"},"css-mixblendmode":{"title":"Blending of HTML/SVG elements","description":"Allows blending between arbitrary SVG and HTML elements","spec":"http://www.w3.org/TR/compositing-1/#mix-blend-mode","status":"cr","links":[{"url":"http://codepen.io/bennettfeely/pen/csjzd","title":"codepen example"},{"url":"http://css-tricks.com/basics-css-blend-modes/","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1","40":"n d #1","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":28.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"mix-blend-mode,css blend modes,css blending modes","ie_id":"mixblendmode","chrome_id":"6362616360337408"},"web-speech":{"title":"Web Speech API","description":"Method to provide speech input and text-to-speech output features in a web browser.","spec":"https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/introducing-web-speech-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/web-speech-api-demo.html","title":"Demo"},{"url":"http://zenorocha.github.io/voice-elements/","title":"Advanced demo and resource"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x","40":"a x","41":"a x","42":"a x","43":"a x","44":"a x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"a x","7":"a x","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a x","28":"a x","29":"a x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a x","8":"a x","8.1":"a x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Chrome refers to some attributes missing. Partial support in Safari refers to only Speech Synthesis supported.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":54.81,"ucprefix":false,"parent":"","keywords":"speech,recognition,ASR","ie_id":"webspeechapiinput","chrome_id":"5908775487668224"},"high-resolution-time":{"title":"High Resolution Time API","description":"Method to provide the current time in sub-millisecond resolution and such that it is not subject to system clock skew or adjustments. Called using `performance.now()`","spec":"http://www.w3.org/TR/hr-time/","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()","title":"MDN article"},{"url":"http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/discovering-the-high-resolution-time-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/high-resolution-time-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"y x","21":"y x","22":"y x","23":"y x","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":76.9,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,now,testing","ie_id":"highresolutiontime","chrome_id":"5349124069130240"},"battery-status":{"title":"Battery Status API","description":"Method to provide information about the battery status of the hosting device.","spec":"http://www.w3.org/TR/battery-status/","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/WebAPI/Battery_Status","title":"MDN Docs"},{"url":"http://www.smartjava.org/examples/webapi-battery/","title":"Simple demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #1","12":"a x #1","13":"a x #1","14":"a x #1","15":"a x #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"a #1","31":"a #1","32":"a #1","33":"a #1","34":"a #1","35":"a #1","36":"a #1","37":"a #1","38":"a #1","39":"a #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n d","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"a #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"a #1"}},"notes":"","notes_by_num":{"1":"Partial support refers to support for the older specification's `navigator.battery` rather than `navigator.getBattery()` to access the `BatteryManager`."},"usage_perc_y":41.66,"usage_perc_a":15.88,"ucprefix":false,"parent":"","keywords":"navigator.battery,navigator.getbattery,batterymanager","ie_id":"batterystatusapi","chrome_id":"4537134732017664"},"serviceworkers":{"title":"Service Workers","description":"Method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline.","spec":"https://slightlyoff.github.io/ServiceWorker/spec/service_worker/","status":"wd","links":[{"url":"http://www.html5rocks.com/en/tutorials/service-worker/introduction/","title":"HTML5Rocks article (introduction)"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker_API","title":"MDN article"},{"url":"https://jakearchibald.github.io/isserviceworkerready/resources.html","title":"List of various resources"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"u"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Details on partial support can be found on [is ServiceWorker Ready?](https://jakearchibald.github.io/isserviceworkerready/)","notes_by_num":{"1":"Partial support can be enabled in Firefox with the `dom.serviceWorkers.enabled` flag."},"usage_perc_y":0,"usage_perc_a":39.02,"ucprefix":false,"parent":"","keywords":"","ie_id":"serviceworker","chrome_id":"6561526227927040"},"text-decoration":{"title":"text-decoration styling","description":"Method of defining the type, style and color of lines in the text-decoration property. These can be defined as shorthand (e.g. `text-decoration: line-through dashed blue`) or as single properties (e.g. `text-decoration-color: blue`)","spec":"http://www.w3.org/TR/css-text-decor-3/#line-decoration","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-style","title":"MDN Documentation for text-decoration-style"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color","title":"MDN Documentation for text-decoration-color"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-line","title":"MDN Documentation for text-decoration-line"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n x d #1","27":"n x d #1","28":"n x d #1","29":"n x d #1","30":"n x d #1","31":"n x d #1","32":"n x d #1","33":"n x d #1","34":"n x d #1","35":"n x d #1","36":"n x d #1","37":"n x d #1","38":"n x d #1","39":"n x d #1","40":"n x d #1","41":"n x d #1","42":"n x d #1","43":"n x d #1","44":"n x d #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a x #2","8":"a x #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a x #2","8.1":"a x #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"All browsers support the CSS2 version of `text-decoration`, which matches only the `text-decoration-line` values (`underline`, etc.)","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Partial support in Safari refers to not supporting the text-decoration-style property."},"usage_perc_y":12.14,"usage_perc_a":7.36,"ucprefix":false,"parent":"","keywords":"text-decoration-line,text-decoration-style,text-decoration-color","ie_id":"","chrome_id":""},"speech-synthesis":{"title":"Speech Synthesis API","description":"A web API for controlling a text-to-speech output.","spec":"https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section","status":"unoff","links":[{"url":"http://updates.html5rocks.com/2014/01/Web-apps-that-talk---Introduction-to-the-Speech-Synthesis-API","title":"HTML5Rocks article"},{"url":"http://www.sitepoint.com/talking-web-pages-and-the-speech-synthesis-api/","title":"SitePoint article"},{"url":"http://aurelio.audero.it/demo/speech-synthesis-api-demo.html","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":53.33,"usage_perc_a":0,"ucprefix":false,"parent":"web-speech","keywords":"speech,synthesis,speechSynthesis,TTS,SpeechSynthesisUtterance,","ie_id":"webspeechapisynthesis","chrome_id":"4782875580825600"},"user-timing":{"title":"User Timing API","description":"Method to help web developers measure the performance of their applications by giving them access to high precision timestamps.","spec":"http://www.w3.org/TR/user-timing/","status":"rec","links":[{"url":"http://www.sitepoint.com/discovering-user-timing-api/","title":"SitePoint article"},{"url":"http://www.html5rocks.com/en/tutorials/webperformance/usertiming/","title":"HTML5Rocks article"},{"url":"https://gist.github.com/pmeenan/5902672","title":"Polyfill"},{"url":"http://aurelio.audero.it/demo/user-timing-api-demo.html","title":"Demo"},{"url":"https://github.com/nicjansma/usertiming.js","title":"UserTiming.js polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":59.26,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,testing,mark,measure","ie_id":"usertimingapi","chrome_id":"5066549580791808"},"srcset":{"title":"Srcset attribute","description":"Allows authors to define various image resources and \"hints\" that assist a user agent to determine the most appropriate image source to display (e.g. high-resolution displays, small monitors, etc).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset","status":"ls","links":[{"url":"https://www.webkit.org/blog/2910/improved-support-for-high-resolution-displays-with-the-srcset-image-attribute/","title":"Improved support for high-resolution displays with the srcset image attribute"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"a #2","35":"a #2","36":"a #2","37":"a #2","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"a #2","8":"a #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"a #2","22":"a #2","23":"a #2","24":"a #2","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"a #2","8.1":"a #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a #2"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox by setting the about:config preference dom.image.srcset.enabled to true","2":"Supports the subset of the syntax for resolution switching (using the `x` descriptor), but not the full syntax that can be used with `sizes` (using the `w` descriptor)."},"usage_perc_y":41.66,"usage_perc_a":9.5,"ucprefix":false,"parent":"","keywords":"","ie_id":"imgsrcset","chrome_id":"4644337115725824"},"ambient-light":{"title":"Ambient Light API","description":"Defines events that provide information about the ambient light level, as measured by a device's light sensor.","spec":"http://www.w3.org/TR/ambient-light/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/ambient-light-api-demo.html","title":"Demo"},{"url":"http://modernweb.com/2014/05/27/introduction-to-the-ambient-light-api/","title":"Article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Firefox desktop supports this API only on Mac OS X. [Support for Windows 7 is in progress](https://bugzilla.mozilla.org/show_bug.cgi?id=754199)","notes_by_num":{},"usage_perc_y":11.62,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"ambientlightevents","chrome_id":"5298357018820608"},"will-change":{"title":"CSS will-change property","description":"Method of optimizing animations by informing the browser which elements will change and what properties will change.","spec":"http://dev.w3.org/csswg/css-will-change/","status":"wd","links":[{"url":"https://dev.opera.com/articles/css-will-change-property/","title":"Detailed article"},{"url":"http://aerotwist.com/blog/bye-bye-layer-hacks/","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `layout.css.will-change.enabled` flag"},"usage_perc_y":44.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"scroll-position","ie_id":"csswillchange","chrome_id":"5954199330226176"},"css-shapes":{"title":"CSS Shapes Level 1","description":"Allows geometric shapes to be set in CSS to define an area for text to flow around.","spec":"http://www.w3.org/TR/css-shapes/","status":"cr","links":[{"url":"http://html.adobe.com/webplatform/layout/shapes/","title":"Adobe demos and samples"},{"url":"http://html.adobe.com/webplatform/layout/shapes/browser-support/","title":"CSS shapes support test by Adobe"},{"url":"http://alistapart.com/article/css-shapes-101","title":"A List Apart article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #1","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags"},"usage_perc_y":49.85,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"circle,ellipse,polygon,inset,shape-outside,shape-inside","ie_id":"shapes","chrome_id":"5163890719588352"},"domcontentloaded":{"title":"DOMContentLoaded","description":"JavaScript event that fires when the DOM is loaded, but before all page assets are loaded (CSS, images, etc.).","spec":"https://html.spec.whatwg.org/multipage/syntax.html#stop-parsing","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded","title":"MDN: DOMContentLoaded"}],"categories":["DOM"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.05,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"dom,domready,onload,contentloaded,document","ie_id":"","chrome_id":""},"proximity":{"title":"Proximity API","description":"Defines events that provide information about the distance between a device and an object, as measured by a proximity sensor.","spec":"http://www.w3.org/TR/proximity/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/proximity-api-demo.html","title":"Demo"},{"url":"http://www.sitepoint.com/introducing-proximity-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":11.88,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"kerning-pairs-ligatures":{"title":"Improved kerning pairs & ligatures","description":"Currently non-standard method of improving kerning pairs & ligatures using text-rendering: optimizeLegibility.","spec":"http://www.w3.org/TR/SVG11/painting.html#TextRenderingProperty","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-rendering","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/t/text-rendering/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"u","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":78.58,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"optimizeLegibility,optimizeSpeed,geometricPrecision","ie_id":"","chrome_id":""},"iframe-seamless":{"title":"seamless attribute for iframes","description":"The seamless attribute makes an iframe's contents actually part of a page, and adopts the styles from its hosting page. ","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-seamless","status":"ls","links":[{"url":"https://github.com/ornj/seamless-polyfill","title":"Experimental polyfill"},{"url":"http://labs.ft.com/2013/01/seamless-iframes-not-quite-seamless/","title":"Article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"u","38":"u","39":"u"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d","21":"n d","22":"n d","23":"n d","24":"n d","25":"n d","26":"n d","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"y"}},"notes":"Chrome 20-26 had partial support behind a flag, though this was [later removed](http://crbug.com/229421). \r\n\r\nSafari 7 (& iOS 7 Safari) hides the border of seamless iframes and recognizes the 'seamless' DOM property, but does not provide actual support.","notes_by_num":{},"usage_perc_y":3.84,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"iframeseamlessattribute","chrome_id":"6630329993396224"},"css-image-orientation":{"title":"CSS3 image-orientation","description":"CSS property used generally to fix the intended orientation of an image. This can be done using 90 degree increments or based on the image's EXIF data using the \"from-image\" value.","spec":"http://www.w3.org/TR/css3-images/#image-orientation","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/image-orientation","title":"MDN article"},{"url":"http://sethfowler.org/blog/2013/09/13/new-in-firefox-26-css-image-orientation/","title":"Blog post"},{"url":"http://jsbin.com/EXUTolo/4","title":"Demo (Chinese)"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in iOS refers to the browser using EXIF data by default, though it does not actually support the property. Opening the image in a new tab in Chrome results in the image shown in the orientation according to the EXIF data.","notes_by_num":{},"usage_perc_y":11.43,"usage_perc_a":7.21,"ucprefix":false,"parent":"","keywords":"image-orientation,from-image,flip","ie_id":"","chrome_id":""},"picture":{"title":"Picture element","description":"A responsive images method to control which image resource a user agent presents to a user, based on resolution, media query and/or support for a particular image format","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element","status":"ls","links":[{"url":"http://responsiveimages.org/demos/","title":"Demo"},{"url":"http://code.tutsplus.com/tutorials/better-responsive-images-with-the-picture-element--net-36583","title":"Tutorial"},{"url":"http://usecases.responsiveimages.org/","title":"Read about the use cases"},{"url":"http://responsiveimages.org/","title":"General information about Responsive Images"},{"url":"https://dev.opera.com/articles/responsive-images/","title":"Blog post on usage"},{"url":"http://www.html5rocks.com/tutorials/responsive/picture-element/","title":"HTML5 Rocks tutorial"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #3","35":"n d #3","36":"n d #3","37":"n d #3","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n d #1","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n d #2","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled in Chrome through the \"experimental Web Platform features\" flag in chrome://flags","2":"Enabled in Opera through the \"experimental Web Platform features\" flag in opera://flags","3":"Enabled in Firefox by setting the about:config preference dom.image.picture.enable to true"},"usage_perc_y":41.66,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"pictureelement","chrome_id":"5910974510923776"},"woff2":{"title":"WOFF 2.0 - Web Open Font Format","description":"TrueType/OpenType font that provides better compression than WOFF 1.0.","spec":"http://www.w3.org/TR/WOFF2/","status":"wd","links":[{"url":"https://gist.github.com/sergejmueller/cf6b4f2133bcb3e2f64a","title":"Basics about WOFF 2.0"},{"url":"http://everythingfonts.com/ttf-to-woff2","title":"WOFF 2.0 converter"}],"categories":["Other"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Default 'enabled' for Firefox Developer Edition and Nightly, but Beta and Release versions will need to set a flag to 'true' to [use WOFF2](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#Browser_compatibility)."},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"fontface","keywords":"woff, fontface, webfonts","ie_id":"wofffileformat20","chrome_id":"6718644721549312"},"text-size-adjust":{"title":"CSS text-size-adjust","description":"On mobile devices, the text-size-adjust CSS property allows Web authors to control if and how the text-inflating algorithm is applied to the textual content of the element it is applied to.","spec":"http://dev.w3.org/csswg/css-size-adjust/","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-size-adjust","title":"MDN Docs"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"y x","11":"y x"},"and_uc":{"9.9":"y x"}},"notes":"","notes_by_num":{},"usage_perc_y":11.89,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"web-animation":{"title":"Web Animations API","description":"Lets you create animations that are run in the browser and as well as inspect and manipulate animations created through declarative means like CSS.","spec":"http://w3c.github.io/web-animations/","status":"wd","links":[{"url":"http://updates.html5rocks.com/2014/05/Web-Animations---element-animate-is-now-in-Chrome-36","title":"HTML5 Rocks"},{"url":"http://updates.html5rocks.com/2013/12/New-Web-Animations-engine-in-Blink-drives-CSS-Animations-Transitions","title":"HTML5 Rocks"},{"url":"https://birtles.github.io/areweanimatedyet/","title":"Current Firefox status"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"a d #3","34":"a d #3","35":"a d #3","36":"a d #3","37":"a d #3","38":"a d #3","39":"a d #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"a #1","37":"a #1","38":"a #1","39":"a #2","40":"a #2","41":"a #2","42":"a #2","43":"a #2","44":"a #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"a #1","24":"a #1","25":"a #1","26":"a #2","27":"a #2","28":"a #2","29":"a #2"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"a #1"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a #1"},"and_chr":{"41":"a #1"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support refers to basic support of `element.animate()`","2":"Partial support refers to basic support of `element.animate()` and [playback control of AnimationPlayer](https://www.chromestatus.com/features/5633748733263872)","3":"Partial support in Firefox is detailed in [Are we animated yet?](https://birtles.github.io/areweanimatedyet/)"},"usage_perc_y":0,"usage_perc_a":53.34,"ucprefix":false,"parent":"","keywords":"animate,play,pause,reverse,finish,currentTime,startTime,playbackRate,playState","ie_id":"webanimationsjavascriptapi","chrome_id":"4854343836631040,5633748733263872"},"resource-timing":{"title":"Resource Timing","description":"Method to help web developers to collect complete timing information related to resources on a document.","spec":"http://www.w3.org/TR/resource-timing/","status":"cr","links":[{"url":"http://aurelio.audero.it/demo/resource-timing-api-demo.html","title":"Demo"},{"url":"http://googledevelopers.blogspot.com/2013/12/measuring-network-performance-with.html","title":"Blog post"},{"url":"http://www.sitepoint.com/introduction-resource-timing-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox using the dom.enable_resource_timing flag"},"usage_perc_y":68.93,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"performance,testing,resource","ie_id":"resourcetimingapi","chrome_id":"5796350423728128"},"custom-elements":{"title":"Custom Elements","description":"Method of defining and using new types of DOM elements in a document.","spec":"http://www.w3.org/TR/custom-elements/","status":"wd","links":[{"url":"http://w3c.github.io/webcomponents/spec/custom/","title":"W3C Editor's Draft spec (closer to current implementations)"},{"url":"http://www.polymer-project.org/platform/custom-elements.html","title":"Polymer project (polyfill & web components framework)"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/customelements/","title":"HTML5Rocks - Custom Elements: defining new elements in HTML"},{"url":"https://code.google.com/p/chromium/issues/detail?id=234509","title":"Chromium tracking bug: Implement Custom Elements"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=889230","title":"Firefox tracking bug: Implement Custom Elements (from Web Components)"},{"url":"http://status.modern.ie/customelements","title":"IE Web Platform Status and Roadmap: Custom Elements"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n d #1","24":"n d #1","25":"n d #1","26":"n d #1","27":"n d #1","28":"n d #1","29":"n d #1","30":"p d #1","31":"p d #1","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n d","28":"n d","29":"n d","30":"n d","31":"n d","32":"n d","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n d","16":"n d","17":"n d","18":"n d","19":"n d","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p d #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Enabled through the \"dom.webcomponents.enabled\" preference in about:config"},"usage_perc_y":45.28,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"customelements","chrome_id":"4642138092470272"},"imports":{"title":"HTML Imports","description":"Method of including and reusing HTML documents in other HTML documents.","spec":"http://www.w3.org/TR/html-imports/","status":"wd","links":[{"url":"http://www.polymer-project.org/platform/html-imports.html","title":"Polymer project (polyfill & web components framework)"},{"url":"http://www.html5rocks.com/tutorials/webcomponents/imports/","title":"HTML5Rocks - HTML Imports: #include for the web"},{"url":"https://code.google.com/p/chromium/issues/detail?id=240592","title":"Chromium tracking bug: Implement HTML Imports"},{"url":"https://bugzilla.mozilla.org/show_bug.cgi?id=877072","title":"Firefox tracking bug: Implement HTML Imports"},{"url":"http://status.modern.ie/htmlimports","title":"IE Web Platform Status and Roadmap: HTML Imports"}],"categories":["DOM","HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"p","11":"p","TP":"p"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"p","31":"p","32":"p d #1","33":"p d #1","34":"p d #1","35":"p d #1","36":"p d #1","37":"p d #1","38":"p d #1","39":"p d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n d #2","31":"n d #2","32":"n d #2","33":"n d #2","34":"n d #2","35":"p d #3","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"p","6.1":"p","7":"p","7.1":"p","8":"p"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n d #4","18":"n d #4","19":"n d #4","20":"n d #4","21":"n d #4","22":"p d #5","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"p","8":"p","8.1":"p"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"p"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Firefox [has no plans to support HTML imports](https://hacks.mozilla.org/2014/12/mozilla-and-web-components/) though for now it can be enabled through the \"dom.webcomponents.enabled\" preference in about:config","2":"Enabled through the \"Enable HTML Imports\" flag in chrome://flags","3":"Enabled through the \"Experimental Web Platform features\" flag in chrome://flags","4":"Enabled through the \"Enable HTML Imports\" flag in opera://flags","5":"Enabled through the \"Experimental Web Platform features\" flag in opera://flags"},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"web components","ie_id":"htmlimports","chrome_id":"5144752345317376"},"input-file-multiple":{"title":"Multiple file selection","description":"Allows users to select multiple files in the file picker.","spec":"https://html.spec.whatwg.org/multipage/forms.html#attr-input-multiple","status":"ls","links":[{"url":"https://code.google.com/p/chromium/issues/detail?id=348912","title":"Chrome bug (for Android)"},{"url":"http://www.raymondcamden.com/2012/2/28/Working-with-HTML5s-multiple-file-upload-support","title":"Article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n #1"},"android":{"2.1":"n #1","2.2":"n #1","2.3":"n #1","3":"n #1","4":"n #1","4.1":"n #1","4.2-4.3":"n #1","4.4":"n #1","4.4.3-4.4.4":"n #1","37":"n #1"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n #1","11":"n #1","11.1":"n #1","11.5":"n #1","12":"n #1","12.1":"n #1","24":"n #1"},"and_chr":{"41":"n #1"},"and_ff":{"36":"n #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n #1"}},"notes":"","notes_by_num":{"1":"Not supported when tested on Android, presumably an OS limitation. "},"usage_perc_y":67.63,"usage_perc_a":0,"ucprefix":false,"parent":"forms","keywords":"","ie_id":"","chrome_id":""},"atob-btoa":{"title":"Base64 encoding and decoding","description":"Utility functions for of encoding and decoding strings to and from base 64: window.atob() and window.btoa().","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#atob","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa","title":"MDN article on btoa()"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Window.atob","title":"MDN article on atob()"},{"url":"https://github.com/davidchambers/Base64.js","title":"Polyfill"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":92.18,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"atob,btoa","ie_id":"","chrome_id":""},"css-appearance":{"title":"CSS Appearance","description":"The `appearance` property defines how elements (particularly form controls) appear by default. By setting the value to `none` the default appearance can be entirely redefined using other CSS properties.","spec":"http://wiki.csswg.org/spec/css4-ui#appearance","status":"unoff","links":[{"url":"http://css-tricks.com/almanac/properties/a/appearance/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"y x","3":"y x","3.5":"y x","3.6":"y x","4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"y x","5":"y x","6":"y x","7":"y x","8":"y x","9":"y x","10":"y x","11":"y x","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"y x","3.2":"y x","4":"y x","5":"y x","5.1":"y x","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"y x","4.0-4.1":"y x","4.2-4.3":"y x","5.0-5.1":"y x","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"y x","2.2":"y x","2.3":"y x","3":"y x","4":"y x","4.1":"y x","4.2-4.3":"y x","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"y x","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"a #1"},"and_uc":{"9.9":"y x"}},"notes":"The `appearance` property currently does not appear in any CSS specification so there is no specifically correct usage.","notes_by_num":{"1":"`-webkit-appearance` with value `none` is supported on IE11 Mobile for phones with \"[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""},"usage_perc_y":78.87,"usage_perc_a":0.48,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-background-offsets":{"title":"CSS background-position edge offsets","description":"Allows CSS background images to be positioned relative to the specified edge using the 3 to 4 value syntax. For example: `background-position: right 5px bottom 5px;` for positioning 5px from the bottom-right corner.","spec":"http://www.w3.org/TR/css3-background/#background-position","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/background-position","title":"MDN article on background-position"},{"url":"http://briantree.se/quick-tip-06-use-four-value-syntax-properly-position-background-images/","title":"Basic information"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":85.49,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"4 value syntax","ie_id":"","chrome_id":""},"css-supports-api":{"title":"CSS.supports() API","description":"The CSS.supports() static methods returns a Boolean value indicating if the browser supports a given CSS feature, or not.","spec":"http://dev.w3.org/csswg/css-conditional/#the-css-interface","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/CSS.supports","title":"MDN Docs"},{"url":"http://jsbin.com/rimevilotari/1/edit","title":"Demo (Chinese)"},{"url":"https://dev.opera.com/articles/native-css-feature-detection/","title":"Native CSS Feature Detection via the @supports Rule"},{"url":"http://davidwalsh.name/css-supports","title":"CSS @supports"},{"url":"http://blog.csdn.net/hfahe/article/details/8619480","title":"Article (Chinese)"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n d","21":"n d","22":"n d","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"y #1","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"See also [@supports in CSS](#feat=css-featurequeries)\r\n\r\nSee the [WebKit Bug](http://trac.webkit.org/changeset/142739) for status in Safari","notes_by_num":{"1":"Opera 12 uses a different method name('window.supportsCSS')"},"usage_perc_y":60.81,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"conditional","ie_id":"conditionalrules","chrome_id":"4993981813358592"},"css-touch-action":{"title":"CSS touch-action property","description":"touch-action is a CSS property that controls filtering of gesture events, providing developers with a declarative mechanism to selectively disable touch scrolling (in one or both axes), pinch-zooming or double-tap-zooming.","spec":"http://www.w3.org/TR/pointerevents/#the-touch-action-css-property","status":"cr","links":[{"url":"http://docs.webplatform.org/wiki/css/properties/touch-action","title":"WebPlatform Docs"},{"url":"http://msdn.microsoft.com/en-us/library/windows/apps/hh767313.aspx","title":"MSDN Docs"},{"url":"http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away","title":"300ms tap delay, gone away"},{"url":"http://blogs.telerik.com/appbuilder/posts/13-11-21/what-exactly-is.....-the-300ms-click-delay","title":"What Exactly Is..... The 300ms Click Delay"},{"url":"http://thx.github.io/mobile/300ms-click-delay/","title":"What Exactly Is..... The 300ms Click Delay(Chinese)"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y x #2","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n d #1","30":"n d #1","31":"n d #1","32":"n d #1","33":"n d #1","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"n d #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"y x #2","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supported in Firefox behind the `layout.css.touch_action.enabled` flag, Firefox for Windows 8 Touch ('Metro') enabled by default.","2":"IE10+ has already supported these property which are not in standard at present such as'pinch-zoom','double-tap-zoom','cross-slide-x','cross-slide-y'."},"usage_perc_y":53.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"touch action","ie_id":"csstouchaction","chrome_id":"5912074022551552"},"autofocus":{"title":"Autofocus attribute","description":"Allows a form field to be immediately focused on page load.","spec":"https://html.spec.whatwg.org/multipage/forms.html#autofocusing-a-form-control:-the-autofocus-attribute","status":"ls","links":[{"url":"http://davidwalsh.name/autofocus","title":"Article on autofocus"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"While not supported in iOS Safari, it does work in iOS WebViews.","notes_by_num":{},"usage_perc_y":77.94,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-clip-path":{"title":"CSS clip-path property","description":"Method of defining the visible region of an element using SVG or a shape definition.","spec":"http://www.w3.org/TR/css-masking-1/#the-clip-path","status":"wd","links":[{"url":"http://css-tricks.com/almanac/properties/c/clip/","title":"CSS Tricks article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"a #1","3.6":"a #1","4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"a #1","31":"a #1","32":"a #1","33":"a #1","34":"a #1","35":"a #1","36":"a #1","37":"a #1","38":"a #1","39":"a #1"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"a x #2","25":"a x #2","26":"a x #2","27":"a x #2","28":"a x #2","29":"a x #2","30":"a x #2","31":"a x #2","32":"a x #2","33":"a x #2","34":"a x #2","35":"a x #2","36":"a x #2","37":"a x #2","38":"a x #2","39":"a x #2","40":"a x #2","41":"a x #2","42":"a x #2","43":"a x #2","44":"a x #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"a x #2","7.1":"a x #2","8":"a x #2"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a x #2","16":"a x #2","17":"a x #2","18":"a x #2","19":"a x #2","20":"a x #2","21":"a x #2","22":"a x #2","23":"a x #2","24":"a x #2","25":"a x #2","26":"a x #2","27":"a x #2","28":"a x #2","29":"a x #2"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"a x #2","8":"a x #2","8.1":"a x #2"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"a x #2","4.4.3-4.4.4":"a x #2","37":"a x #2"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a x #2"},"and_chr":{"41":"a x #2"},"and_ff":{"36":"a #1"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support refers to only supporting the `url()` syntax.","2":"Partial support refers to supporting shapes and the `url(#foo)` syntax for inline SVG, but not shapes in external SVGs."},"usage_perc_y":0,"usage_perc_a":70.75,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"getrandomvalues":{"title":"crypto.getRandomValues()","description":"Method of generating cryptographically random values.","spec":"http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y x","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"y x"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":79.34,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"screen-orientation":{"title":"Screen Orientation","description":"Provides the ability to read the screen orientation state, to be informed when this state changes, and to be able to lock the screen orientation to a specific state.","spec":"http://www.w3.org/TR/screen-orientation/","status":"wd","links":[{"url":"http://aurelio.audero.it/demo/screen-orientation-api-demo.html","title":"Demo"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Screen.orientation","title":"MDN article"},{"url":"http://www.sitepoint.com/introducing-screen-orientation-api/","title":"SitePoint article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"a x","TP":"a x"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"a x","19":"a x","20":"a x","21":"a x","22":"a x","23":"a x","24":"a x","25":"a x","26":"a x","27":"a x","28":"a x","29":"a x","30":"a x","31":"a x","32":"a x","33":"a x","34":"a x","35":"a x","36":"a x","37":"a x","38":"a x","39":"a x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"y"},"and_ff":{"36":"y x"},"ie_mob":{"10":"n","11":"a x"},"and_uc":{"9.9":"y"}},"notes":"Partial support refers to an older version of the draft specification, and the spec has undergone significant changes since.","notes_by_num":{},"usage_perc_y":45.64,"usage_perc_a":20.13,"ucprefix":false,"parent":"","keywords":"","ie_id":"screenorientationapi","chrome_id":"6191285283061760"},"font-loading":{"title":"CSS Font Loading","description":"This CSS module defines a scripting interface to font faces in CSS, allowing font faces to be easily created and loaded from script. It also provides methods to track the loading status of an individual font, or of all the fonts on an entire page.","spec":"http://dev.w3.org/csswg/css-font-loading/","status":"cr","links":[{"url":"https://www.igvita.com/2014/01/31/optimizing-web-font-rendering-performance/#font-load-events","title":"Optimizing with font load events"}],"categories":["CSS3","JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #1","36":"n d #1","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Can be enabled in Firefox using the `layout.css.font-loading-api.enabled` flag."},"usage_perc_y":43.59,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":"6244676289953792"},"font-unicode-range":{"title":"Font unicode-range subsetting","description":"This @font-face descriptor defines the set of Unicode codepoints that may be supported by the font face for which it is declared. The descriptor value is a comma-delimited list of Unicode range () values. The union of these ranges defines the set of codepoints that serves as a hint for user agents when deciding whether or not to download a font resource for a given text run.","spec":"http://dev.w3.org/csswg/css-fonts/#descdef-unicode-range","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-range","title":"MDN: unicode-range"},{"url":"https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/css/property/unicode-range","title":"Safari CSS Reference: unicode-range"},{"url":"http://docs.webplatform.org/wiki/css/properties/unicode-range","title":"Web Platform Docs: unicode-range"},{"url":"http://jsbin.com/jeqoguzeye/1/edit?html,output","title":"Demo"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a","10":"a","11":"a","TP":"a"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n d #1","37":"n d #1","38":"y","39":"y"},"chrome":{"4":"a","5":"a","6":"a","7":"a","8":"a","9":"a","10":"a","11":"a","12":"a","13":"a","14":"a","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"a","24":"a","25":"a","26":"a","27":"a","28":"a","29":"a","30":"a","31":"a","32":"a","33":"a","34":"a","35":"a","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a","3.2":"a","4":"a","5":"a","5.1":"a","6":"a","6.1":"a","7":"a","7.1":"a","8":"a"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"a","16":"a","17":"a","18":"a","19":"a","20":"a","21":"a","22":"a","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a","4.0-4.1":"a","4.2-4.3":"a","5.0-5.1":"a","6.0-6.1":"a","7.0-7.1":"a","8":"a","8.1":"a"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"a","3":"a","4":"a","4.1":"a","4.2-4.3":"a","4.4":"a","4.4.3-4.4.4":"a","37":"y"},"bb":{"7":"u","10":"u"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"a"},"and_chr":{"41":"y"},"and_ff":{"36":"n d #1"},"ie_mob":{"10":"a","11":"a"},"and_uc":{"9.9":"a"}},"notes":"Partial support indicates that unnecessary code-ranges are downloaded by the browser - see [browser test matrix](https://docs.google.com/a/chromium.org/spreadsheets/d/18h-1gaosu4-KYxH8JUNL6ZDuOsOKmWfauoai3CS3hPY/edit?pli=1#gid=0).","notes_by_num":{"1":"Can be enabled in Firefox using the `layout.css.unicode-range.enabled` flag"},"usage_perc_y":43.17,"usage_perc_a":35.27,"ucprefix":false,"parent":"","keywords":"font face,unicode,unicode-range","ie_id":"","chrome_id":""},"gamepad":{"title":"Gamepad API","description":"API to support input from USB gamepad controllers though JavaScript.","spec":"http://www.w3.org/TR/gamepad/","status":"wd","links":[{"url":"http://luser.github.io/gamepadtest/","title":"Controller demo"},{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API","title":"MDN article"},{"url":"http://www.html5rocks.com/en/tutorials/doodles/gamepad/","title":"HTML5Rocks article"},{"url":"http://gamedevelopment.tutsplus.com/tutorials/using-the-html5-gamepad-api-to-add-controller-support-to-browser-games--cms-21345","title":"Detailed tutorial"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":46.08,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"gamepadapi","chrome_id":"5118776383111168"},"css-font-stretch":{"title":"CSS font-stretch","description":"If a font has multiple types of variations based on the width of characters, the `font-stretch` property allows the appropriate one to be selected. The property in itself does not cause the browser to stretch to a font.","spec":"http://www.w3.org/TR/css-fonts-3/#font-stretch-prop","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch","title":"MDN article"},{"url":"http://css-tricks.com/almanac/properties/f/font-stretch/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":24.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"font stretch","ie_id":"cssfontstretch","chrome_id":"4598830058176512"},"font-size-adjust":{"title":"CSS font-size-adjust","description":"Method of adjusting the font size in a matter that relates to the height of lowercase vs. uppercase letters. This makes it easier to set the size of fallback fonts.","spec":"http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop","status":"cr","links":[{"url":"http://webdesignernotebook.com/css/the-little-known-font-size-adjust-css3-property/","title":"Article on font-size-adjust"},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/font-size-adjust","title":"MDN article on font-size-adjust"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Does not appear to work on Firefox mobile, despite recognition of the property.","notes_by_num":{},"usage_perc_y":12.18,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"link-icon-png":{"title":"PNG favicons","description":"Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the PNG format can be preferable.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#rel-icon","status":"ls","links":[{"url":"http://css-tricks.com/favicon-quiz/","title":"Detailed info on favicons for various uses"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y #1","5":"y #1","6":"y #1","7":"y #1","8":"y #1","9":"y #1","10":"y #1","11":"y #1","12":"y #1","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1","30":"y #1","31":"y #1","32":"y #1","33":"y #1","34":"y #1","35":"y #1","36":"y #1","37":"y #1","38":"y #1","39":"y #1","40":"y #1","41":"y #1","42":"y #1","43":"y #1","44":"y #1"},"safari":{"3.1":"y #2","3.2":"y #2","4":"y #2","5":"y #2","5.1":"y #2","6":"y #2","6.1":"y #2","7":"y #2","7.1":"y #2","8":"y #2"},"opera":{"9":"y #3","9.5-9.6":"y #3","10.0-10.1":"y #3","10.5":"y #3","10.6":"y #3","11":"y #3","11.1":"y #3","11.5":"y #3","11.6":"y #3","12":"y #3","12.1":"y #3","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1"},"ios_saf":{"3.2":"n #4","4.0-4.1":"n #4","4.2-4.3":"n #4","5.0-5.1":"n #4","6.0-6.1":"n #4","7.0-7.1":"n #4","8":"n #4","8.1":"n #4"},"op_mini":{"5.0-8.0":"n #4"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y #3","4.4.3-4.4.4":"y #3","37":"y #3"},"bb":{"7":"y","10":"n #4"},"op_mob":{"10":"n #4","11":"n #4","11.1":"n #4","11.5":"n #4","12":"n #4","12.1":"n #4","24":"n #4"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"n #4","11":"n #4"},"and_uc":{"9.9":"y #2"}},"notes":"Win8/IE10+ and iOS Safari support other types of icons for webpages too, using alternate tags.\r\n\r\nSee also [SVG favicons](#feat=link-icon-svg).","notes_by_num":{"1":"If both ICO and PNG are available, will use ICO over PNG if ICO has better matching sizes set.","2":"If both ICO and PNG are available, will ALWAYS use ICO file, regardless of sizes set.","3":"If multiple formats are available, will use the last one loaded, regardless of sizes (effectively picks at random).","4":"Does not use favicons at all (but may have alternative for bookmarks, etc.)."},"usage_perc_y":80.02,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"link-icon-svg":{"title":"SVG favicons","description":"Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the SVG format can be preferable to more easily support higher resolutions or larger icons.","spec":"https://html.spec.whatwg.org/multipage/semantics.html#rel-icon","status":"ls","links":[{"url":"http://crbug.com/294179","title":"Chrome bug"}],"categories":["HTML5","SVG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"u","43":"u","44":"u"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"u","29":"u"},"ios_saf":{"3.2":"n #1","4.0-4.1":"n #1","4.2-4.3":"n #1","5.0-5.1":"n #1","6.0-6.1":"n #1","7.0-7.1":"n #1","8":"n #1","8.1":"n #1"},"op_mini":{"5.0-8.0":"n #1"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n #1"},"op_mob":{"10":"n #1","11":"n #1","11.1":"n #1","11.5":"n #1","12":"n #1","12.1":"n #1","24":"n #1"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n #1","11":"n #1"},"and_uc":{"9.9":"n"}},"notes":"See also [PNG favicons](#feat=link-icon-png).","notes_by_num":{"1":"Does not use favicons at all"},"usage_perc_y":12.04,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-media-resolution":{"title":"Media Queries: resolution feature","description":"Allows a media query to be set based on the device pixels used per CSS unit. While the standard uses `min`/`max-resolution` for this, some browsers support the older non-standard `device-pixel-ratio` media query.","spec":"http://www.w3.org/TR/css3-mediaqueries/#resolution","status":"rec","links":[{"url":"http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio/","title":"How to unprefix -webkit-device-pixel-ratio"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"a #1","10":"a #1","11":"a #1","TP":"a #2"},"firefox":{"2":"n","3":"n","3.5":"a #3","3.6":"a #3","4":"a #3","5":"a #3","6":"a #3","7":"a #3","8":"a #3","9":"a #3","10":"a #3","11":"a #3","12":"a #3","13":"a #3","14":"a #3","15":"a #3","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a x #4","5":"a x #4","6":"a x #4","7":"a x #4","8":"a x #4","9":"a x #4","10":"a x #4","11":"a x #4","12":"a x #4","13":"a x #4","14":"a x #4","15":"a x #4","16":"a x #4","17":"a x #4","18":"a x #4","19":"a x #4","20":"a x #4","21":"a x #4","22":"a x #4","23":"a x #4","24":"a x #4","25":"a x #4","26":"a x #4","27":"a x #4","28":"a x #4","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"a x #4","5":"a x #4","5.1":"a x #4","6":"a x #4","6.1":"a x #4","7":"a x #4","7.1":"a x #4","8":"a x #4"},"opera":{"9":"n","9.5-9.6":"a x #4","10.0-10.1":"a x #4","10.5":"a x #4","10.6":"a x #4","11":"a x #4","11.1":"a x #4","11.5":"a x #4","11.6":"a x #4","12":"a x #4","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"a x #4","4.2-4.3":"a x #4","5.0-5.1":"a x #4","6.0-6.1":"a x #4","7.0-7.1":"a x #4","8":"a x #4","8.1":"a x #4"},"op_mini":{"5.0-8.0":"a #1"},"android":{"2.1":"u","2.2":"u","2.3":"u","3":"u","4":"a x #4","4.1":"a x #4","4.2-4.3":"a x #4","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a x #4","10":"a x #4"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"a x #4"}},"notes":"","notes_by_num":{"1":"Supports the `dpi` unit, but does not support `dppx` or `dpcm` units.","2":"Supports the `dpi` and `dppx` units, but does not support `dpcm` units.","3":"Firefox before 16 supports only `dpi` unit, but you can set `2dppx` per `min--moz-device-pixel-ratio: 2`","4":"Supporte the non-standard `min`/`max-device-pixel-ratio`"},"usage_perc_y":61.01,"usage_perc_a":32.84,"ucprefix":false,"parent":"css-mediaqueries","keywords":"@media,device-pixel-ratio,resolution","ie_id":"mediaqueriesresolutionfeature,dppxunitfortheresolutionmediaquery","chrome_id":"5944509615570944"},"xml-serializer":{"title":"DOM Parsing and Serialization","description":"Various DOM parsing and serializing functions, specifically `DOMParser`, `XMLSerializer`, `innerHTML`, `outerHTML` and `adjacentHTML`.","spec":"http://www.w3.org/TR/DOM-Parsing/","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/XMLSerializer","title":"MDN - XMLSerializer"}],"categories":["DOM","JS API"],"stats":{"ie":{"5.5":"a #2","6":"a #2","7":"a #2","8":"a #2","9":"a #1","10":"y","11":"y","TP":"y"},"firefox":{"2":"a #2","3":"a #2","3.5":"a #2","3.6":"a #2","4":"a #2","5":"a #2","6":"a #2","7":"a #2","8":"a #3","9":"a #3","10":"a #3","11":"a #1","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"a #1","26":"a #1","27":"a #1","28":"a #1","29":"a #1","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"a #1","5.1":"a #1","6":"a #1","6.1":"a #1","7":"a #1","7.1":"y","8":"y"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"u","11.1":"u","11.5":"u","11.6":"u","12":"u","12.1":"a #1","15":"a #1","16":"a #1","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"a #1","4.0-4.1":"a #1","4.2-4.3":"a #1","5.0-5.1":"a #1","6.0-6.1":"a #1","7.0-7.1":"a #1","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"u"},"android":{"2.1":"a #1","2.2":"a #1","2.3":"a #1","3":"a #1","4":"a #1","4.1":"a #1","4.2-4.3":"a #1","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"a #1","10":"a #1"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"a #1","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"","notes_by_num":{"1":"Partial support refers to lacking support for `parseFromString` on the DOMParser.","2":"Partial support in older IE refers to only supporting `innerHTML`, nothing else."},"usage_perc_y":78.32,"usage_perc_a":15.93,"ucprefix":false,"parent":"","keywords":"parseFromString","ie_id":"","chrome_id":""},"css-image-set":{"title":"CSS image-set","description":"Method of letting the browser pick the most appropriate CSS background image from a given set, primarily for high PPI screens.","spec":"http://dev.w3.org/csswg/css-images-3/#image-set-notation","status":"unoff","links":[{"url":"http://cloudfour.com/examples/image-set/","title":"Demo"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"y x","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"y x","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"u","10":"y x"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":59.11,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-boxdecorationbreak":{"title":"CSS box-decoration-break","description":"Controls whether the box's margins, borders, padding, and other decorations wrap the broken edges of the box fragments (when the box is split by a break (page/column/region/line).","spec":"http://www.w3.org/TR/css3-break/#break-decoration","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break","title":"MDN article"},{"url":"http://jsbin.com/xojoro/edit?css,output","title":"Demo of effect on box border"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x","40":"y x","41":"y x","42":"y x","43":"y x","44":"y x"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"y x","7":"y x","7.1":"y x","8":"y x"},"opera":{"9":"u","9.5-9.6":"u","10.0-10.1":"u","10.5":"u","10.6":"u","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"y x","8":"y x","8.1":"y x"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"y x","4.4.3-4.4.4":"y x","37":"y x"},"bb":{"7":"u","10":"y x"},"op_mob":{"10":"u","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y x"},"and_chr":{"41":"y x"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":72.56,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"box-decoration,box decoration,break","ie_id":"","chrome_id":""},"object-observe":{"title":"Object.observe data binding","description":"Method for data binding, part of the ECMAScript 7 proposals","spec":"http://wiki.ecmascript.org/doku.php?id=harmony:observe","status":"other","links":[{"url":"http://www.html5rocks.com/en/tutorials/es7/observe/","title":"Data-binding Revolutions with Object.observe()"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"y"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":43.17,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"objectobserve","chrome_id":"6147094632988672"},"broadcastchannel":{"title":"BroadcastChannel","description":"BroadcastChannel allows scripts from the same origin but other browsing contexts (windows, workers) to send each other messages.","spec":"https://html.spec.whatwg.org/multipage/comms.html#broadcasting-to-other-browsing-contexts","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel","title":"MDN article"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"broadcast,channel,messaging","ie_id":"","chrome_id":"4585496197988352"},"css-crisp-edges":{"title":"Crisp edges/pixelated images","description":"Forces images to be scaled with an algorithm that preserves contrast and edges in the image, without smoothing colors or introduce blur. This is intended for images such as pixel art. Official values that accomplish this for the `image-rendering` property are `crisp-edges` and `pixelated`.","spec":"http://dev.w3.org/csswg/css-images-3/#valdef-image-rendering-crisp-edges","status":"unoff","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering","title":"MDN article"},{"url":"http://updates.html5rocks.com/2015/01/pixelated","title":"HTML5Rocks article"}],"categories":["CSS","CSS3"],"stats":{"ie":{"5.5":"n","6":"n","7":"a x #2","8":"a x #2","9":"a x #2","10":"a x #2","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"y x #3","4":"y x #3","5":"y x #3","6":"y x #3","7":"y x #3","8":"y x #3","9":"y x #3","10":"y x #3","11":"y x #3","12":"y x #3","13":"y x #3","14":"y x #3","15":"y x #3","16":"y x #3","17":"y x #3","18":"y x #3","19":"y x #3","20":"y x #3","21":"y x #3","22":"y x #3","23":"y x #3","24":"y x #3","25":"y x #3","26":"y x #3","27":"y x #3","28":"y x #3","29":"y x #3","30":"y x #3","31":"y x #3","32":"y x #3","33":"y x #3","34":"y x #3","35":"y x #3","36":"y x #3","37":"y x #3","38":"y x #3","39":"y x #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"y #4","42":"y #4","43":"y #4","44":"y #4"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"a x #1","6.1":"y x #3","7":"y x #3","7.1":"y x #3","8":"y x #3"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y x #3","12":"y x #3","12.1":"y x #3","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"y #4","29":"y #4"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a x #1","6.0-6.1":"a x #1","7.0-7.1":"y x #3","8":"y x #3","8.1":"y x #3"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"a x #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"y x #3","12.1":"y x #3","24":"n"},"and_chr":{"41":"y #4"},"and_ff":{"36":"y x #3"},"ie_mob":{"10":"a x #2","11":"a x #2"},"and_uc":{"9.9":"a x #1"}},"notes":"Note that prefixes apply to the value (e.g. `-moz-crisp-edges`), not the `image-rendering` property.","notes_by_num":{"1":"Supported using the non-standard value `-webkit-optimize-contrast`","2":"Internet Explorer accomplishes support using the non-standard declaration `-ms-interpolation-mode: nearest-neighbor`","3":"Supports the `crisp-edges` value, but not `pixelated`.","4":"Supports the `pixelated` value, but not `crisp-edges`."},"usage_perc_y":33.02,"usage_perc_a":19.1,"ucprefix":false,"parent":"","keywords":"image-rendering,crisp-edges","ie_id":"","chrome_id":"5118058116939776"},"css-text-align-last":{"title":"CSS3 text-align-last","description":"CSS property to describe how the last line of a block or a line right before a forced line break when `text-align` is `justify`.","spec":"http://www.w3.org/TR/css3-text/#text-align-last-property","status":"wd","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-align-last","title":"MDN text-align-last"},{"url":"http://blogs.adobe.com/webplatform/2014/02/25/improving-your-sites-visual-details-css3-text-align-last/","title":"Adobe Web Platform Article"}],"categories":["CSS3"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","TP":"a #1"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"y x","13":"y x","14":"y x","15":"y x","16":"y x","17":"y x","18":"y x","19":"y x","20":"y x","21":"y x","22":"y x","23":"y x","24":"y x","25":"y x","26":"y x","27":"y x","28":"y x","29":"y x","30":"y x","31":"y x","32":"y x","33":"y x","34":"y x","35":"y x","36":"y x","37":"y x","38":"y x","39":"y x"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n d #2","36":"n d #2","37":"n d #2","38":"n d #2","39":"n d #2","40":"n d #2","41":"n d #2","42":"n d #2","43":"n d #2","44":"n d #2"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n d #3","23":"n d #3","24":"n d #3","25":"n d #3","26":"n d #3","27":"n d #3","28":"n d #3","29":"n d #3"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y x"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"In Internet Explorer, the start and end values are not supported.","2":"Enabled through the \"Enable Experimental Web Platform Features\" flag in chrome://flags","3":"Enabled through the \"Enable Experimental Web Platform Features\" flag in opera://flags"},"usage_perc_y":11.98,"usage_perc_a":15.13,"ucprefix":false,"parent":"","keywords":"text align last","ie_id":"","chrome_id":""},"fetch":{"title":"Fetch","description":"A modern replacement for XMLHttpRequest.","spec":"https://fetch.spec.whatwg.org/","status":"ls","links":[{"url":"https://github.com/github/fetch","title":"Polyfill"},{"url":"http://addyosmani.com/demos/fetch-api/","title":"Demo"}],"categories":["JS API"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n d #1","35":"n d #1","36":"n d #1","37":"n d #1","38":"n d #1","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a #2","41":"a #2 #3","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a #2","28":"a #2 #3","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a #2"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Partial support can be enabled in Firefox with the `dom.fetch.enabled` flag.","2":"Only available in Chrome and Opera within ServiceWorkers.","3":"Available in Chrome and Opera within Window and Workers by enabling the \"Experimental Web Platform Features\" flag in `chrome://flags`"},"usage_perc_y":0.17,"usage_perc_a":38.79,"ucprefix":false,"parent":"","keywords":"fetch,service,workers,xhr,xmlhttprequest","ie_id":"fetchapi","chrome_id":"6730533392351232"},"background-attachment":{"title":"CSS background-attachment","description":"Method of defining how a background image is attached to a scrollable element. Values include `scroll` (default), `fixed` and `local`.","spec":"http://www.w3.org/TR/css3-background/#the-background-attachment","status":"cr","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment","title":"MDN article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"a #1","3":"a #1","3.5":"a #1","3.6":"a #1","4":"a #1","5":"a #1","6":"a #1","7":"a #1","8":"a #1","9":"a #1","10":"a #1","11":"a #1","12":"a #1","13":"a #1","14":"a #1","15":"a #1","16":"a #1","17":"a #1","18":"a #1","19":"a #1","20":"a #1","21":"a #1","22":"a #1","23":"a #1","24":"a #1","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"a #1","3.2":"a #1","4":"a #1","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"a #1","9.5-9.6":"a #1","10.0-10.1":"a #1","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a #2","6.0-6.1":"a #2","7.0-7.1":"a #2","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"a #1","4.2-4.3":"a #1","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"a #2","10":"a #2"},"op_mob":{"10":"u","11":"u","11.1":"u","11.5":"u","12":"u","12.1":"y","24":"n"},"and_chr":{"41":"a #2"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"a #1"}},"notes":"Most mobile devices have a delay in updating the background position after scrolling a page with `fixed` backgrounds.","notes_by_num":{"1":"Partial support refers to supporting `fixed` but not `local`","2":"Partial support refers to supporting `local` but not `fixed`"},"usage_perc_y":67.77,"usage_perc_a":22.47,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"currentcolor":{"title":"CSS currentColor value","description":"A CSS value that will apply the existing `color` value to other properties like `background-color`, etc. ","spec":"http://www.w3.org/TR/css3-color/#currentcolor","status":"rec","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentColor_keyword","title":"MDN article"},{"url":"http://css-tricks.com/currentcolor/","title":"CSS Tricks article"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"u","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{},"usage_perc_y":94.03,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"input-pattern":{"title":"Pattern attribute for input fields","description":"Allows validation of an input field based on a given regular expression pattern.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-pattern-attribute","status":"ls","links":[{"url":"http://html5pattern.com","title":"Site with common sample patterns "}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"n","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"a #1"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"a #1","11":"a #1"},"and_uc":{"9.9":"y"}},"notes":"","notes_by_num":{"1":"Partial support refers to not displaying a message for invalid patterns"},"usage_perc_y":72.88,"usage_perc_a":0.7,"ucprefix":false,"parent":"form-validation","keywords":"","ie_id":"","chrome_id":""},"registerprotocolhandler":{"title":"Custom protocol handling","description":"Method of allowing a webpage to handle a given protocol using `navigator.registerProtocolHandler`. This allows certain URLs to be opened by a given web application, for example `mailto:` addresses can be opened by a webmail client.","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#custom-handlers","status":"ls","links":[{"url":"https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler","title":"MDN article"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"y #1","14":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1","30":"y #1","31":"y #1","32":"y #1","33":"y #1","34":"y #1","35":"y #1","36":"y #1","37":"y #1","38":"y #1","39":"y #1","40":"y #1","41":"y #1","42":"y #1","43":"y #1","44":"y #1"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"y #1","12":"y #1","12.1":"y #1","15":"y #1","16":"y #1","17":"y #1","18":"y #1","19":"y #1","20":"y #1","21":"y #1","22":"y #1","23":"y #1","24":"y #1","25":"y #1","26":"y #1","27":"y #1","28":"y #1","29":"y #1"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"y #1"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"","notes_by_num":{"1":"Supports protocols `mailto`, `mms`, `nntp`, `rtsp`, and `webcal` but requires custom protocols to start with `web+`"},"usage_perc_y":47.66,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"css-snappoints":{"title":"CSS Scroll snap points","description":"CSS technique that allows customizable scrolling experiences like pagination of carousels by setting defined snap points.","spec":"http://www.w3.org/TR/css-snappoints-1/","status":"wd","links":[{"url":"http://generatedcontent.org/post/66817675443/setting-native-like-scrolling-offsets-in-css-with","title":"Blog post"}],"categories":["CSS"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"a x #1","11":"a x #2","TP":"a x #2"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n d #3"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Currently in development in WebKit with partial support in nightly builds.","notes_by_num":{"1":"Partial support in IE10 refers to support limited to touch screens.","2":"Partial support in IE11 [documented here](https://dl.dropboxusercontent.com/u/444684/openwebref/CSS/scroll-snap-points/support.html)","3":"Can be enabled in Firefox using the `layout.css.scroll-snap.enabled` flag in `about:config`"},"usage_perc_y":0,"usage_perc_a":9.46,"ucprefix":false,"parent":"","keywords":"scroll-snap-points-x,scroll-snap-points-y,scroll-snap-type,scroll-snap-destination,scroll-snap-coordinate","ie_id":"cssscrollingsnappoints","chrome_id":""},"input-minlength":{"title":"Minimum length attribute for input fields","description":"Declares a lower bound on the number of characters a user can input.","spec":"https://html.spec.whatwg.org/multipage/forms.html#the-maxlength-and-minlength-attributes","status":"ls","links":[{"url":"http://www.w3.org/TR/html5/forms.html#setting-minimum-input-length-requirements:-the-minlength-attribute","title":"W3C usage example"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"n","3.5":"n","3.6":"n","4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"a","41":"a","42":"a","43":"a","44":"a"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"n"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"n","10.6":"n","11":"n","11.1":"n","11.5":"n","11.6":"n","12":"n","12.1":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"a","28":"a","29":"a"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"n","8.1":"n"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"n","11":"n","11.1":"n","11.5":"n","12":"n","12.1":"n","24":"n"},"and_chr":{"41":"a"},"and_ff":{"36":"n"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Partial support in Chrome and Opera is due to a [bug](http://crbug.com/470577) which prevents any validation from occurring if the field has any pre-filled value.","notes_by_num":{},"usage_perc_y":0,"usage_perc_a":38.96,"ucprefix":false,"parent":"form-validation","keywords":"","ie_id":"","chrome_id":"6023370181181440"}}}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/package.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/package.json
new file mode 100644
index 0000000..95c1af0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "caniuse-db",
+ "version": "1.0.30000107",
+ "description": "Raw browser/feature support data from caniuse.com",
+ "keywords": [
+ "support",
+ "css",
+ "js",
+ "html5",
+ "svg"
+ ],
+ "author": {
+ "name": "Alexis Deveria",
+ "email": "adeveria@gmail.com"
+ },
+ "license": "CC-BY",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Fyrd/caniuse.git"
+ },
+ "gitHead": "46bb07577c5a46caedc0478bbf61258abb2ac631",
+ "bugs": {
+ "url": "https://github.com/Fyrd/caniuse/issues"
+ },
+ "homepage": "https://github.com/Fyrd/caniuse",
+ "_id": "caniuse-db@1.0.30000107",
+ "scripts": {},
+ "_shasum": "9eaab91301a0d3c9639bc368e72362bd907597a1",
+ "_from": "caniuse-db@^1.0.30000106",
+ "_npmVersion": "2.1.10",
+ "_nodeVersion": "0.10.28",
+ "_npmUser": {
+ "name": "fyrd",
+ "email": "adeveria@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "fyrd",
+ "email": "adeveria@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "9eaab91301a0d3c9639bc368e72362bd907597a1",
+ "tarball": "http://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000107.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000107.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AD.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AD.json
new file mode 100644
index 0000000..697bdb3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AD.json
@@ -0,0 +1 @@
+{"id":"AD","name":"Andorra","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007593,"3.5":null,"3.6":0.07593,"4":0.015186,"5":0.060744,"6":null,"7":0.007593,"8":null,"9":0.015186,"10":null,"11":0.022779,"12":0.015186,"13":0.007593,"14":null,"15":0.007593,"16":0.045558,"17":null,"18":null,"19":0.007593,"20":0.022779,"21":0.060744,"22":null,"23":null,"24":0.015186,"25":null,"26":0.098709,"27":0.007593,"28":0.015186,"29":0.045558,"30":0.053151,"31":0.144267,"32":0.136674,"33":0.189825,"34":0.197418,"35":12.050091,"36":0.516324,"37":0.022779,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.106302,"12":0.030372,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":0.045558,"23":null,"24":0.007593,"25":0.015186,"26":null,"27":0.022779,"28":0.030372,"29":0.053151,"30":null,"31":0.136674,"32":0.098709,"33":0.167046,"34":0.098709,"35":0.296127,"36":0.569475,"37":0.220197,"38":0.387243,"39":1.131357,"40":31.693182,"41":0.129081,"42":0.068337,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.07593,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.015186,"27":0.630219,"28":0.015186,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.030372,"5":0.410022,"5.1":0.888381,"6":0.113895,"6.1":0.508731,"7":0.645405,"7.1":1.685646,"8":2.824596},"android":{"2.1":0,"2.2":0,"2.3":0.110968730637,"3":0,"4":0.224273645077,"4.1":0.722464841044,"4.2-4.3":1.22299222081,"4.4":2.28478775923,"4.4.3-4.4.4":1.0524508032,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0461784363892,"6.0-6.1":0.141775901195,"7.0-7.1":1.79447783512,"8":0.38563045125,"8.1":5.70020137604},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":7.86936744847e-5,"12.1":0.000472162046908,"0":null},"ie":{"5.5":null,"6":null,"7":0.0837409808612,"8":1.71288369943,"9":1.37030695955,"10":1.27895316224,"11":13.0483673815,"0":null},"ie_mob":{"10":0.149508482456,"11":0.317449517544},"bb":{"7":0.00661925,"10":null},"and_uc":{"0":0.012035},"op_mini":{"5.0-8.0":0.0548101442786},"and_chr":{"0":10.183777},"and_ff":{"0":0.129978}},"total":99.0510194336}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AE.json
new file mode 100644
index 0000000..19210ce
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AE.json
@@ -0,0 +1 @@
+{"id":"AE","name":"United Arab Emirates","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.014607,"3.5":null,"3.6":0.029214,"4":0.009738,"5":null,"6":0.014607,"7":null,"8":null,"9":null,"10":0.009738,"11":0.019476,"12":0.024345,"13":0.004869,"14":0.009738,"15":0.004869,"16":0.019476,"17":0.004869,"18":0.009738,"19":0.009738,"20":0.004869,"21":0.009738,"22":0.009738,"23":0.009738,"24":0.009738,"25":0.014607,"26":0.019476,"27":0.014607,"28":0.009738,"29":0.024345,"30":0.038952,"31":0.073035,"32":0.063297,"33":0.058428,"34":0.107118,"35":3.55437,"36":0.525852,"37":0.019476,"38":null,"39":null},"chrome":{"4":0.014607,"5":0.004869,"6":0.009738,"7":0.014607,"8":0.009738,"9":0.004869,"10":0.024345,"11":0.058428,"12":0.034083,"13":0.019476,"14":0.029214,"15":0.014607,"16":0.024345,"17":null,"18":0.009738,"19":0.004869,"20":0.004869,"21":0.014607,"22":0.077904,"23":0.009738,"24":0.009738,"25":0.024345,"26":0.043821,"27":0.019476,"28":0.038952,"29":0.063297,"30":0.107118,"31":0.131463,"32":0.068166,"33":0.379782,"34":0.09738,"35":0.331092,"36":0.671922,"37":0.326223,"38":0.676791,"39":1.923255,"40":24.656616,"41":0.287271,"42":0.477162,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.04869,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.014607,"27":0.696267,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.019476,"5":0.073035,"5.1":0.24345,"6":0.107118,"6.1":0.165546,"7":0.326223,"7.1":0.467424,"8":1.226988},"android":{"2.1":0,"2.2":0,"2.3":0.135505554631,"3":0,"4":0.273863857781,"4.1":0.882212479364,"4.2-4.3":1.49341384946,"4.4":2.78998805115,"4.4.3-4.4.4":1.28516320761,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0368263498343,"6.0-6.1":0.113063354754,"7.0-7.1":1.43105903304,"8":0.307532324932,"8.1":4.54579293744},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00358112437811,"12.1":0.0214867462687,"0":null},"ie":{"5.5":null,"6":0.0247878803749,"7":0.0446181846748,"8":1.63104252867,"9":1.17990310584,"10":1.10058188864,"11":5.0121094118,"0":null},"ie_mob":{"10":0.179067399123,"11":0.380211600877},"bb":{"7":0.19112975,"10":null},"and_uc":{"0":23.074107},"op_mini":{"5.0-8.0":2.49425312935},"and_chr":{"0":10.447699},"and_ff":{"0":0.076965}},"total":98.01545375}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AF.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AF.json
new file mode 100644
index 0000000..bbb3396
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AF.json
@@ -0,0 +1 @@
+{"id":"AF","name":"Afghanistan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.015087,"3":0.065377,"3.5":0.10058,"3.6":0.060348,"4":0.211218,"5":0.035203,"6":0.085493,"7":0.030174,"8":0.10058,"9":0.145841,"10":0.196131,"11":0.090522,"12":0.191102,"13":0.080464,"14":0.115667,"15":0.120696,"16":0.055319,"17":0.120696,"18":0.170986,"19":0.085493,"20":0.090522,"21":0.110638,"22":0.176015,"23":0.05029,"24":0.558219,"25":0.135783,"26":0.110638,"27":0.090522,"28":0.05029,"29":0.447581,"30":0.372146,"31":0.30174,"32":0.266537,"33":0.623596,"34":0.764408,"35":8.664967,"36":1.367888,"37":0.020116,"38":null,"39":null},"chrome":{"4":0.030174,"5":0.025145,"6":0.015087,"7":null,"8":0.020116,"9":0.010058,"10":0.025145,"11":0.125725,"12":0.070406,"13":0.010058,"14":0.040232,"15":0.060348,"16":0.035203,"17":0.010058,"18":0.025145,"19":0.035203,"20":0.025145,"21":0.040232,"22":0.035203,"23":0.020116,"24":0.030174,"25":0.085493,"26":0.030174,"27":0.045261,"28":0.055319,"29":0.055319,"30":0.186073,"31":0.206189,"32":0.040232,"33":0.256479,"34":0.125725,"35":0.176015,"36":0.759379,"37":0.130754,"38":0.286653,"39":0.990713,"40":15.092029,"41":0.15087,"42":0.306769,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.005029,"11":0.015087,"11.1":0.020116,"11.5":0.010058,"11.6":0.045261,"12":0.025145,"12.1":0.170986,"15":0.020116,"16":0.015087,"17":0.015087,"18":0.015087,"19":0.005029,"20":0.030174,"21":0.035203,"22":0.025145,"23":0.005029,"24":0.035203,"25":0.020116,"26":0.120696,"27":1.061119,"28":null,"29":0.005029},"safari":{"3.1":null,"3.2":null,"4":0.05029,"5":0.025145,"5.1":0.075435,"6":0.135783,"6.1":0.055319,"7":0.110638,"7.1":0.266537,"8":0.507929},"android":{"2.1":0,"2.2":0,"2.3":0.236834377794,"3":0,"4":0.478654742489,"4.1":1.54191644911,"4.2-4.3":2.61016414263,"4.4":4.8762951891,"4.4.3-4.4.4":2.24618709887,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0298454667135,"6.0-6.1":0.0916308188573,"7.0-7.1":1.15978436439,"8":0.249235827292,"8.1":3.68408252274},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0118286481876,"12.1":0.0709718891258,"0":null},"ie":{"5.5":null,"6":0.101408822104,"7":0.106479263209,"8":2.07888085313,"9":1.24225807077,"10":1.45521659719,"11":5.46593551139,"0":null},"ie_mob":{"10":0.0970871184211,"11":0.206143881579},"bb":{"7":0.01615575,"10":null},"and_uc":{"0":6.059649},"op_mini":{"5.0-8.0":8.23865346269},"and_chr":{"0":10.96939},"and_ff":{"0":0.372825}},"total":92.5716848678}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AG.json
new file mode 100644
index 0000000..4dc73d5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AG.json
@@ -0,0 +1 @@
+{"id":"AG","name":"Antigua and Barbuda","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.097175,"3.5":0.007475,"3.6":0.04485,"4":0.01495,"5":0.007475,"6":null,"7":null,"8":0.007475,"9":null,"10":0.007475,"11":0.04485,"12":0.01495,"13":0.007475,"14":0.127075,"15":0.022425,"16":0.07475,"17":0.022425,"18":0.022425,"19":0.01495,"20":0.0299,"21":0.366275,"22":0.022425,"23":0.04485,"24":0.0299,"25":0.01495,"26":0.007475,"27":null,"28":null,"29":0.022425,"30":0.1196,"31":0.0598,"32":0.082225,"33":0.067275,"34":0.112125,"35":7.631975,"36":0.710125,"37":0.01495,"38":0.01495,"39":null},"chrome":{"4":0.007475,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.052325,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.04485,"19":0.007475,"20":null,"21":0.022425,"22":0.082225,"23":null,"24":0.082225,"25":0.007475,"26":0.052325,"27":0.142025,"28":0.0598,"29":0.306475,"30":0.052325,"31":0.3887,"32":0.07475,"33":0.261625,"34":0.1495,"35":0.216775,"36":1.42025,"37":0.1794,"38":0.49335,"39":1.45015,"40":32.194825,"41":0.411125,"42":0.22425,"43":null},"opera":{"9":null,"9.5-9.6":0.01495,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.01495,"11.1":0.0299,"11.5":0.0897,"11.6":0.022425,"12":0.052325,"12.1":0.231725,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.007475,"27":0.64285,"28":0.01495,"29":null},"safari":{"3.1":null,"3.2":0.007475,"4":0.1196,"5":0.156975,"5.1":0.411125,"6":0.0897,"6.1":0.396175,"7":0.500825,"7.1":1.248325,"8":2.46675},"android":{"2.1":0,"2.2":0,"2.3":0.183241657137,"3":0,"4":0.370341033371,"4.1":1.19299963094,"4.2-4.3":2.0195159476,"4.4":3.77284927747,"4.4.3-4.4.4":1.73790245348,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0257963776484,"6.0-6.1":0.0791994050607,"7.0-7.1":1.00243818405,"8":0.215422381765,"8.1":3.18426865147},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000778855721393,"12.1":0.00467313432836,"0":null},"ie":{"5.5":null,"6":0.0495305426716,"7":0.0577856331169,"8":3.07089364564,"9":1.60974263683,"10":1.9151809833,"11":11.0948415584,"0":null},"ie_mob":{"10":0.240916008772,"11":0.511533991228},"bb":{"7":0.19000625,"10":null},"and_uc":{"0":0.3434},"op_mini":{"5.0-8.0":0.54247300995},"and_chr":{"0":9.48815},"and_ff":{"0":0.10605}},"total":97.80168125}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AI.json
new file mode 100644
index 0000000..3d1826b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AI.json
@@ -0,0 +1 @@
+{"id":"AI","name":"Anguilla","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":0.024165,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":0.008055,"16":0.104715,"17":null,"18":null,"19":null,"20":null,"21":0.008055,"22":null,"23":0.008055,"24":0.008055,"25":null,"26":null,"27":0.040275,"28":null,"29":0.01611,"30":0.024165,"31":0.120825,"32":0.153045,"33":0.14499,"34":0.08055,"35":10.27818,"36":0.72495,"37":0.008055,"38":null,"39":null},"chrome":{"4":null,"5":0.01611,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.04833,"12":0.024165,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.024165,"19":null,"20":0.01611,"21":null,"22":0.01611,"23":0.01611,"24":null,"25":0.01611,"26":0.04833,"27":0.040275,"28":null,"29":null,"30":0.01611,"31":0.233595,"32":0.03222,"33":0.04833,"34":0.330255,"35":0.08055,"36":1.715715,"37":0.06444,"38":2.28762,"39":1.22436,"40":30.278745,"41":0.90216,"42":1.03104,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.01611,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.298035,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.20943,"5.1":0.4833,"6":0.12888,"6.1":2.77092,"7":0.894105,"7.1":1.40157,"8":2.94813},"android":{"2.1":0,"2.2":0,"2.3":0.0987746179437,"3":0,"4":0.199628701528,"4.1":0.643074749454,"4.2-4.3":1.08860026302,"4.4":2.03371739682,"4.4.3-4.4.4":0.936799271234,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0326394397028,"6.0-6.1":0.100208806105,"7.0-7.1":1.26835717442,"8":0.272567952606,"8.1":4.02896662717},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000212885572139,"12.1":0.00127731343284,"0":null},"ie":{"5.5":null,"6":null,"7":0.056385,"8":0.475245,"9":0.56385,"10":1.46601,"11":17.41491,"0":null},"ie_mob":{"10":0.0871837719298,"11":0.18511622807},"bb":{"7":0.21735375,"10":null},"and_uc":{"0":0.091415},"op_mini":{"5.0-8.0":0.148274800995},"and_chr":{"0":7.47813},"and_ff":{"0":0.15171}},"total":98.45408875}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AL.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AL.json
new file mode 100644
index 0000000..51e781b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AL.json
@@ -0,0 +1 @@
+{"id":"AL","name":"Albania","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007146,"3":0.03573,"3.5":0.021438,"3.6":0.085752,"4":0.03573,"5":0.007146,"6":0.028584,"7":0.021438,"8":0.014292,"9":0.028584,"10":0.057168,"11":0.03573,"12":0.10719,"13":0.028584,"14":0.050022,"15":0.03573,"16":0.03573,"17":0.021438,"18":0.03573,"19":0.028584,"20":0.07146,"21":0.050022,"22":0.042876,"23":0.028584,"24":0.064314,"25":0.057168,"26":0.078606,"27":0.07146,"28":0.042876,"29":0.100044,"30":0.135774,"31":0.328716,"32":0.350154,"33":0.221526,"34":0.32157,"35":10.304532,"36":0.814644,"37":0.028584,"38":null,"39":null},"chrome":{"4":0.014292,"5":0.050022,"6":0.028584,"7":0.014292,"8":0.03573,"9":0.03573,"10":0.085752,"11":0.085752,"12":0.057168,"13":0.028584,"14":0.042876,"15":0.014292,"16":0.050022,"17":0.014292,"18":0.014292,"19":null,"20":null,"21":0.021438,"22":0.085752,"23":0.021438,"24":0.03573,"25":0.014292,"26":0.057168,"27":0.064314,"28":0.092898,"29":0.07146,"30":0.150066,"31":0.150066,"32":0.085752,"33":0.292986,"34":0.207234,"35":0.292986,"36":0.650286,"37":0.521658,"38":0.364446,"39":1.700748,"40":44.791128,"41":0.235818,"42":0.25011,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.078606,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007146,"21":0.007146,"22":null,"23":null,"24":null,"25":0.007146,"26":0.03573,"27":0.743184,"28":0.014292,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.021438,"5":0.03573,"5.1":0.10719,"6":0.028584,"6.1":0.064314,"7":0.100044,"7.1":0.10719,"8":0.364446},"android":{"2.1":0,"2.2":0,"2.3":0.127066643102,"3":0,"4":0.256808373428,"4.1":0.827270723776,"4.2-4.3":1.40040816135,"4.4":2.61623530429,"4.4.3-4.4.4":1.20512679405,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0430257909429,"6.0-6.1":0.132096726579,"7.0-7.1":1.67196713927,"8":0.359303096295,"8.1":5.31104324691},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00293716560057,"12.1":0.0176229936034,"0":null},"ie":{"5.5":null,"6":0.0290099205298,"7":0.0580198410596,"8":0.913812496689,"9":0.623713291391,"10":0.369876486755,"11":2.38606596358,"0":null},"ie_mob":{"10":0.34906422807,"11":0.74116377193},"bb":{"7":0.092755,"10":null},"and_uc":{"0":0.325356},"op_mini":{"5.0-8.0":2.0457358408},"and_chr":{"0":9.805566},"and_ff":{"0":0.125576}},"total":98.122923}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AM.json
new file mode 100644
index 0000000..57e6ef0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AM.json
@@ -0,0 +1 @@
+{"id":"AM","name":"Armenia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.027429,"3.5":0.009143,"3.6":0.109716,"4":0.009143,"5":null,"6":null,"7":null,"8":null,"9":0.018286,"10":0.009143,"11":0.018286,"12":0.054858,"13":0.009143,"14":0.018286,"15":0.018286,"16":0.027429,"17":0.009143,"18":0.009143,"19":0.018286,"20":0.018286,"21":0.009143,"22":null,"23":null,"24":0.018286,"25":0.018286,"26":0.036572,"27":0.009143,"28":0.036572,"29":0.027429,"30":0.073144,"31":0.201146,"32":0.146288,"33":0.082287,"34":0.128002,"35":15.168237,"36":0.758869,"37":0.009143,"38":null,"39":null},"chrome":{"4":0.073144,"5":0.100573,"6":0.027429,"7":0.018286,"8":0.045715,"9":0.027429,"10":0.073144,"11":0.064001,"12":0.265147,"13":0.036572,"14":0.045715,"15":0.064001,"16":0.100573,"17":0.146288,"18":0.164574,"19":0.027429,"20":0.036572,"21":0.045715,"22":0.082287,"23":0.027429,"24":0.128002,"25":0.045715,"26":0.118859,"27":0.219432,"28":0.466293,"29":0.064001,"30":0.109716,"31":0.073144,"32":0.064001,"33":0.164574,"34":0.137145,"35":0.310862,"36":0.530294,"37":0.475436,"38":0.502865,"39":2.37718,"40":53.349405,"41":0.27429,"42":1.444594,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.009143,"11.5":0.018286,"11.6":0.009143,"12":0.045715,"12.1":0.557723,"15":0.018286,"16":0.036572,"17":null,"18":0.064001,"19":0.018286,"20":0.027429,"21":0.018286,"22":0.036572,"23":null,"24":0.018286,"25":0.018286,"26":0.045715,"27":2.10289,"28":0.027429,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.009143,"5":0.036572,"5.1":0.064001,"6":0.027429,"6.1":0.027429,"7":0.073144,"7.1":0.054858,"8":0.356577},"android":{"2.1":0,"2.2":0,"2.3":0.0382063946356,"3":0,"4":0.0772171344215,"4.1":0.248743737707,"4.2-4.3":0.421074686142,"4.4":0.786649556919,"4.4.3-4.4.4":0.362357490176,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0115512998293,"6.0-6.1":0.0354645170198,"7.0-7.1":0.448879458279,"8":0.0964634862938,"8.1":1.42587623858},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00129615920398,"12.1":0.00777695522388,"0":null},"ie":{"5.5":null,"6":0.0856823373786,"7":0.123763376214,"8":1.39947817718,"9":0.333209089806,"10":0.342729349515,"11":1.6374846699,"0":null},"ie_mob":{"10":0.0771036885965,"11":0.163713311404},"bb":{"7":0.00878425,"10":null},"and_uc":{"0":0.286238},"op_mini":{"5.0-8.0":0.902774885572},"and_chr":{"0":3.165255},"and_ff":{"0":0.040279}},"total":95.68363725}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AN.json
new file mode 100644
index 0000000..e8d71b4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AN.json
@@ -0,0 +1 @@
+{"id":"AN","name":"Netherlands Antilles","month":"2014-08","access_date":"2014-09-01","data":{"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.080201,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.051037,"22":0.080201,"23":null,"24":0.029164,"25":null,"26":0.131238,"27":null,"28":0.102074,"29":null,"30":null,"31":0.51037,"32":0.306222,"33":2.223755,"34":0.204148,"35":1.407163,"36":28.87236,"37":null,"38":0.080201,"39":null,"40":null},"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.029164,"11":null,"12":0.051037,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.029164,"22":null,"23":null,"24":null,"25":null,"26":0.051037,"27":0.029164,"28":null,"29":0.029164,"30":4.031923,"31":10.827135,"32":0.051037,"33":null,"34":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.539534,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.051037,"22":null,"23":0.051037,"24":0.051037,"25":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.233312,"5.1":0.765555,"6":0.102074,"6.1":0.561407,"7":6.05153,"8":0.029164},"android":{"2.1":0.00612163636364,"2.2":0.0428514545455,"2.3":0.832542545455,"3":0,"4":0.648893454545,"4.1":1.62223363636,"4.2-4.3":1.69569327273,"4.4":1.279422,"4.4.3":null},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":6.48307692308e-5,"12.1":0.000356569230769,"0":null},"ie":{"5.5":null,"6":null,"7":null,"8":1.4582,"9":2.47894,"10":1.633184,"11":9.471009},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0939043474576,"6.0-6.1":0.473354567797,"7.0-7.1":8.93049508475,"8":0},"bb":{"7":0.40838175,"10":null},"and_ff":{"0":0.051471},"ie_mob":{"10":0.09419193},"op_mini":{"5.0-7.0":0.0239596},"and_chr":{"0":8.88552}},"total":97.77343668}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AO.json
new file mode 100644
index 0000000..b78dc11
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AO.json
@@ -0,0 +1 @@
+{"id":"AO","name":"Angola","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.026045,"3.5":0.010418,"3.6":0.062508,"4":0.036463,"5":0.020836,"6":0.020836,"7":0.020836,"8":0.020836,"9":0.041672,"10":0.036463,"11":0.10418,"12":0.072926,"13":0.046881,"14":0.046881,"15":0.041672,"16":0.05209,"17":0.026045,"18":0.036463,"19":0.020836,"20":0.020836,"21":0.057299,"22":0.036463,"23":0.031254,"24":0.026045,"25":0.020836,"26":0.072926,"27":0.026045,"28":0.015627,"29":0.062508,"30":0.15627,"31":0.130225,"32":0.140643,"33":0.250032,"34":0.281286,"35":4.995431,"36":0.36463,"37":0.015627,"38":0.015627,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.036463,"11":0.098971,"12":0.015627,"13":0.020836,"14":0.010418,"15":0.010418,"16":0.005209,"17":null,"18":0.015627,"19":0.010418,"20":0.010418,"21":0.062508,"22":0.020836,"23":0.020836,"24":null,"25":0.031254,"26":0.026045,"27":0.057299,"28":0.010418,"29":0.057299,"30":0.072926,"31":0.276077,"32":0.083344,"33":0.338585,"34":0.255241,"35":0.213569,"36":1.265787,"37":0.187524,"38":0.265659,"39":0.979292,"40":17.872079,"41":0.114598,"42":0.140643,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.010418,"11":0.005209,"11.1":null,"11.5":0.015627,"11.6":0.020836,"12":0.026045,"12.1":0.171897,"15":0.015627,"16":0.015627,"17":null,"18":0.015627,"19":0.41672,"20":0.015627,"21":0.010418,"22":0.015627,"23":0.005209,"24":0.005209,"25":0.010418,"26":0.067717,"27":1.052218,"28":0.026045,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.031254,"5":0.072926,"5.1":0.239614,"6":0.10418,"6.1":0.177106,"7":0.223987,"7.1":0.531318,"8":1.067845},"android":{"2.1":0,"2.2":0,"2.3":0.157661205947,"3":0,"4":0.318641595176,"4.1":1.02645743029,"4.2-4.3":1.7375924487,"4.4":3.24616125086,"4.4.3-4.4.4":1.49529206903,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0295599744954,"6.0-6.1":0.0907543076614,"7.0-7.1":1.14869023697,"8":0.246851716839,"8.1":3.64884176403},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0306120042644,"12.1":0.183672025586,"0":null},"ie":{"5.5":null,"6":0.0322995585438,"7":0.118431714661,"8":2.31480169564,"9":1.59344488816,"10":2.57319816399,"11":9.66295126435,"0":null},"ie_mob":{"10":0.409567460526,"11":0.869629539474},"bb":{"7":0.057492,"10":null},"and_uc":{"0":1.4373},"op_mini":{"5.0-8.0":21.3212609701},"and_chr":{"0":9.414282},"and_ff":{"0":0.162894}},"total":97.7494132853}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AR.json
new file mode 100644
index 0000000..b53411d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AR.json
@@ -0,0 +1 @@
+{"id":"AR","name":"Argentina","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007586,"3":0.022758,"3.5":0.030344,"3.6":0.068274,"4":0.022758,"5":0.015172,"6":0.015172,"7":0.015172,"8":null,"9":0.007586,"10":0.022758,"11":0.022758,"12":0.098618,"13":0.015172,"14":0.015172,"15":0.053102,"16":0.030344,"17":0.015172,"18":0.022758,"19":0.022758,"20":0.030344,"21":0.022758,"22":0.022758,"23":0.022758,"24":0.030344,"25":0.022758,"26":0.03793,"27":0.030344,"28":0.030344,"29":0.060688,"30":0.068274,"31":0.11379,"32":0.091032,"33":0.121376,"34":0.235166,"35":8.299084,"36":0.477918,"37":0.007586,"38":null,"39":null},"chrome":{"4":0.007586,"5":null,"6":null,"7":0.007586,"8":0.007586,"9":0.007586,"10":0.007586,"11":0.060688,"12":0.045516,"13":0.030344,"14":0.007586,"15":null,"16":null,"17":null,"18":0.068274,"19":null,"20":null,"21":0.022758,"22":0.068274,"23":0.030344,"24":0.022758,"25":0.030344,"26":0.07586,"27":0.128962,"28":0.045516,"29":0.045516,"30":0.060688,"31":0.219994,"32":0.106204,"33":0.219994,"34":0.402058,"35":0.553778,"36":0.546192,"37":0.599294,"38":1.008938,"39":2.799234,"40":46.873894,"41":0.34137,"42":0.091032,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.07586,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.015172,"21":null,"22":null,"23":null,"24":null,"25":0.007586,"26":0.022758,"27":0.553778,"28":0.015172,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.022758,"5":0.03793,"5.1":0.091032,"6":0.015172,"6.1":0.045516,"7":0.053102,"7.1":0.098618,"8":0.295854},"android":{"2.1":0,"2.2":0,"2.3":0.133654639775,"3":0,"4":0.270123061441,"4.1":0.870162049485,"4.2-4.3":1.47301481942,"4.4":2.75187868843,"4.4.3-4.4.4":1.26760874145,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00606542042374,"6.0-6.1":0.0186219048097,"7.0-7.1":0.235700109449,"8":0.0506515810824,"8.1":0.748706984235},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00184610092395,"12.1":0.0110766055437,"0":null},"ie":{"5.5":null,"6":0.107829571429,"7":0.169446469388,"8":2.08727241837,"9":1.37097597959,"10":0.939657693878,"11":4.3747997551,"0":null},"ie_mob":{"10":0.537940842105,"11":1.14220315789},"bb":{"7":0.080869,"10":null},"and_uc":{"0":0.161738},"op_mini":{"5.0-8.0":1.28580929353},"and_chr":{"0":11.580966},"and_ff":{"0":0.106216}},"total":97.9271688878}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AS.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AS.json
new file mode 100644
index 0000000..9693058
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AS.json
@@ -0,0 +1 @@
+{"id":"AS","name":"American Samoa","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.01754,"3":0.01754,"3.5":null,"3.6":0.12278,"4":0.02631,"5":null,"6":0.05262,"7":0.19294,"8":0.22802,"9":null,"10":0.01754,"11":0.00877,"12":3.29752,"13":null,"14":null,"15":0.05262,"16":0.06139,"17":0.01754,"18":0.02631,"19":0.02631,"20":0.00877,"21":0.0877,"22":0.07893,"23":0.00877,"24":0.01754,"25":0.02631,"26":0.01754,"27":0.15786,"28":0.32449,"29":1.85047,"30":0.42973,"31":5.86713,"32":0.1754,"33":0.13155,"34":0.15786,"35":6.58627,"36":0.35957,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.00877,"22":null,"23":null,"24":0.02631,"25":0.01754,"26":null,"27":0.02631,"28":0.02631,"29":0.09647,"30":0.01754,"31":2.06972,"32":0.05262,"33":0.02631,"34":0.04385,"35":0.15786,"36":0.4385,"37":0.35957,"38":0.34203,"39":0.67529,"40":33.29092,"41":0.21925,"42":0.09647,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.04385,"11.6":null,"12":0.03508,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.01754,"27":0.04385,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.22802,"5":1.62245,"5.1":4.61302,"6":4.51655,"6.1":0.64021,"7":0.5262,"7.1":0.42973,"8":0.51743},"android":{"2.1":0,"2.2":0,"2.3":0.084621800603,"3":0,"4":0.171025112798,"4.1":0.550932459715,"4.2-4.3":0.932621318224,"4.4":1.74231833663,"4.4.3-4.4.4":0.802570972035,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0244564855909,"6.0-6.1":0.0750857013756,"7.0-7.1":0.95037044884,"8":0.204233107742,"8.1":3.01887425645},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000167846481876,"12.1":0.00100707889126,"0":null},"ie":{"5.5":null,"6":null,"7":0.01754,"8":5.68296,"9":1.27165,"10":1.73646,"11":6.62135,"0":null},"ie_mob":{"10":0.133109736842,"11":0.282630263158},"bb":{"7":0.0003075,"10":null},"and_uc":{"0":0.18081},"op_mini":{"5.0-8.0":0.116905074627},"and_chr":{"0":2.94467},"and_ff":{"0":0.04059}},"total":99.2644775}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AT.json
new file mode 100644
index 0000000..9ecc4e2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AT.json
@@ -0,0 +1 @@
+{"id":"AT","name":"Austria","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.01619,"3.5":0.008095,"3.6":0.072855,"4":0.01619,"5":0.008095,"6":0.008095,"7":null,"8":0.01619,"9":0.01619,"10":0.072855,"11":0.03238,"12":0.06476,"13":0.01619,"14":0.024285,"15":0.024285,"16":0.08095,"17":0.04857,"18":0.024285,"19":0.024285,"20":0.040475,"21":0.06476,"22":0.024285,"23":0.03238,"24":0.09714,"25":0.040475,"26":0.06476,"27":0.040475,"28":0.089045,"29":0.089045,"30":0.14571,"31":0.50189,"32":0.22666,"33":0.315705,"34":0.607125,"35":22.5041,"36":1.189965,"37":0.024285,"38":0.01619,"39":null},"chrome":{"4":0.01619,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.072855,"12":0.008095,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.024285,"19":null,"20":0.01619,"21":0.01619,"22":0.089045,"23":0.008095,"24":0.024285,"25":0.01619,"26":0.03238,"27":0.08095,"28":0.03238,"29":0.024285,"30":0.024285,"31":0.22666,"32":0.056665,"33":0.12952,"34":0.11333,"35":0.218565,"36":0.27523,"37":0.29142,"38":0.380465,"39":1.34377,"40":23.953105,"41":0.19428,"42":0.089045,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.008095,"11.5":0.008095,"11.6":0.01619,"12":0.01619,"12.1":0.46951,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.008095,"21":null,"22":0.008095,"23":null,"24":0.01619,"25":0.024285,"26":0.03238,"27":1.238535,"28":0.01619,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.056665,"5":0.218565,"5.1":0.769025,"6":0.137615,"6.1":0.45332,"7":0.445225,"7.1":1.05235,"8":2.695635},"android":{"2.1":0,"2.2":0,"2.3":0.0841000363863,"3":0,"4":0.169970599854,"4.1":0.547535500052,"4.2-4.3":0.926870927331,"4.4":1.73157548602,"4.4.3-4.4.4":0.797622450359,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0331457375238,"6.0-6.1":0.10176322924,"7.0-7.1":1.28803173009,"8":0.276795983532,"8.1":4.09146331961},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000165181236674,"12.1":0.000991087420043,"0":null},"ie":{"5.5":null,"6":0.0324399907365,"7":0.0973199722094,"8":1.23271964799,"9":1.99505943029,"10":1.55711955535,"11":12.5786064081,"0":null},"ie_mob":{"10":0.128086184211,"11":0.271963815789},"bb":{"7":0.01666875,"10":null},"and_uc":{"0":0.032385},"op_mini":{"5.0-8.0":0.115048731343},"and_chr":{"0":8.223865},"and_ff":{"0":0.19431}},"total":98.6628437546}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AU.json
new file mode 100644
index 0000000..3d04084
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AU.json
@@ -0,0 +1 @@
+{"id":"AU","name":"Australia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007308,"3.5":null,"3.6":0.03654,"4":0.007308,"5":null,"6":0.087696,"7":null,"8":null,"9":null,"10":0.014616,"11":0.021924,"12":0.029232,"13":0.007308,"14":0.007308,"15":0.007308,"16":0.029232,"17":0.021924,"18":0.014616,"19":0.007308,"20":0.014616,"21":0.021924,"22":0.014616,"23":0.014616,"24":0.07308,"25":0.014616,"26":0.043848,"27":0.03654,"28":0.03654,"29":0.07308,"30":0.095004,"31":0.21924,"32":0.131544,"33":0.168084,"34":0.25578,"35":9.018072,"36":0.489636,"37":0.014616,"38":0.014616,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.065772,"12":0.007308,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.043848,"19":null,"20":null,"21":0.029232,"22":0.03654,"23":0.021924,"24":0.014616,"25":0.021924,"26":0.058464,"27":0.241164,"28":0.043848,"29":0.043848,"30":0.080388,"31":0.51156,"32":0.175392,"33":0.343476,"34":0.270396,"35":0.526176,"36":0.445788,"37":0.701568,"38":0.774648,"39":2.199708,"40":26.45496,"41":0.175392,"42":0.080388,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.095004,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.014616,"25":0.058464,"26":0.007308,"27":0.241164,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.043848,"5":0.204624,"5.1":0.9135,"6":0.270396,"6.1":0.679644,"7":0.971964,"7.1":1.578528,"8":3.463992},"android":{"2.1":0,"2.2":0,"2.3":0.0600865370621,"3":0,"4":0.121438053852,"4.1":0.391194980767,"4.2-4.3":0.66221688741,"4.4":1.23715017361,"4.4.3-4.4.4":0.569873367294,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0872530748067,"6.0-6.1":0.267882247214,"7.0-7.1":3.39062387187,"8":0.728639712421,"8.1":10.7703970937},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000133930348259,"12.1":0.000803582089552,"0":null},"ie":{"5.5":null,"6":0.029471139852,"7":0.0957812045189,"8":1.84931402571,"9":2.16612877912,"10":1.70195832645,"11":13.0704505243,"0":null},"ie_mob":{"10":0.150834649123,"11":0.320265350877},"bb":{"7":0.008749,"10":null},"and_uc":{"0":0.158828},"op_mini":{"5.0-8.0":0.0932824875622},"and_chr":{"0":7.789524},"and_ff":{"0":0.113064}},"total":98.796421}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AW.json
new file mode 100644
index 0000000..b24b947
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AW.json
@@ -0,0 +1 @@
+{"id":"AW","name":"Aruba","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.025496,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.012748,"12":0.025496,"13":0.006374,"14":0.012748,"15":0.006374,"16":0.019122,"17":null,"18":null,"19":null,"20":0.03187,"21":0.006374,"22":0.012748,"23":0.006374,"24":null,"25":null,"26":0.006374,"27":0.006374,"28":0.006374,"29":0.012748,"30":0.070114,"31":0.025496,"32":0.038244,"33":0.12748,"34":0.146602,"35":6.934912,"36":0.356944,"37":null,"38":0.012748,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.06374,"12":0.019122,"13":null,"14":null,"15":null,"16":0.006374,"17":null,"18":0.025496,"19":null,"20":null,"21":0.019122,"22":0.038244,"23":null,"24":0.057366,"25":0.012748,"26":0.076488,"27":0.025496,"28":0.025496,"29":0.044618,"30":0.025496,"31":0.19122,"32":0.06374,"33":0.210342,"34":0.108358,"35":0.216716,"36":0.50992,"37":0.146602,"38":0.274082,"39":1.096328,"40":28.281438,"41":0.235838,"42":0.082862,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.03187,"15":null,"16":0.006374,"17":null,"18":0.006374,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.012748,"27":0.376066,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.012748,"5":0.121106,"5.1":0.624652,"6":0.146602,"6.1":0.369692,"7":0.41431,"7.1":0.898734,"8":2.307388},"android":{"2.1":0,"2.2":0,"2.3":0.15198364487,"3":0,"4":0.307166945421,"4.1":0.989493519493,"4.2-4.3":1.67501974925,"4.4":3.12926325647,"4.4.3-4.4.4":1.4414448845,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0744835523647,"6.0-6.1":0.22867757305,"7.0-7.1":2.89440471031,"8":0.622002998695,"8.1":9.19414516558},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000159781094527,"12.1":0.000958686567164,"0":null},"ie":{"5.5":null,"6":0.019122,"7":0.133854,"8":2.307388,"9":1.389532,"10":2.179908,"11":11.447704,"0":null},"ie_mob":{"10":0.0684964122807,"11":0.145437587719},"bb":{"7":0.2873605,"10":null},"and_uc":{"0":0.094276},"op_mini":{"5.0-8.0":0.111287532338},"and_chr":{"0":14.213566},"and_ff":{"0":0.105154}},"total":98.3083405}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AX.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AX.json
new file mode 100644
index 0000000..0756b6c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AX.json
@@ -0,0 +1 @@
+{"id":"AX","name":"Aland Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.023979,"4":null,"5":null,"6":0.055951,"7":null,"8":null,"9":null,"10":null,"11":null,"12":0.071937,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.039965,"22":null,"23":null,"24":null,"25":0.071937,"26":0.015986,"27":null,"28":0.119895,"29":0.007993,"30":0.383664,"31":0.055951,"32":0.111902,"33":0.111902,"34":0.415636,"35":12.740842,"36":0.927188,"37":0.407643,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.007993,"28":null,"29":null,"30":null,"31":0.183839,"32":0.103909,"33":0.023979,"34":0.047958,"35":0.07993,"36":0.255776,"37":0.023979,"38":0.095916,"39":1.238915,"40":39.789154,"41":0.255776,"42":0.175846,"43":0.063944},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.071937,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007993,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.647433,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.023979,"5":0.279755,"5.1":0.495566,"6":0.055951,"6.1":0.287748,"7":0.255776,"7.1":0.87923,"8":2.805543},"android":{"2.1":0,"2.2":0,"2.3":0.0251735679385,"3":0,"4":0.0508771057282,"4.1":0.163893176526,"4.2-4.3":0.277439217174,"4.4":0.518310514607,"4.4.3-4.4.4":0.238751418027,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0652346541821,"6.0-6.1":0.200281833015,"7.0-7.1":2.53499577217,"8":0.544766585802,"8.1":8.05247415483},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000105556503198,"12.1":0.00063333901919,"0":null},"ie":{"5.5":null,"6":null,"7":0.255776,"8":0.655426,"9":1.606593,"10":1.894341,"11":11.078298,"0":null},"ie_mob":{"10":0.294949776316,"11":0.626263223684},"bb":{"7":0.00050175,"10":null},"and_uc":{"0":0.002007},"op_mini":{"5.0-8.0":0.0735201044776},"and_chr":{"0":6.205504},"and_ff":{"0":0.190665}},"total":99.27697775}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AZ.json
new file mode 100644
index 0000000..b3ddd06
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/AZ.json
@@ -0,0 +1 @@
+{"id":"AZ","name":"Azerbaijan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.012572,"3.5":0.012572,"3.6":0.050288,"4":0.018858,"5":null,"6":0.006286,"7":null,"8":null,"9":0.018858,"10":null,"11":0.006286,"12":0.018858,"13":0.006286,"14":0.006286,"15":0.006286,"16":0.006286,"17":0.006286,"18":0.006286,"19":0.006286,"20":null,"21":0.006286,"22":null,"23":null,"24":0.006286,"25":0.006286,"26":null,"27":null,"28":0.012572,"29":0.018858,"30":0.025144,"31":0.081718,"32":0.081718,"33":0.069146,"34":0.06286,"35":1.929802,"36":0.12572,"37":0.012572,"38":null,"39":null},"chrome":{"4":0.044002,"5":0.113148,"6":0.056574,"7":0.03143,"8":0.213724,"9":0.144578,"10":0.106862,"11":0.09429,"12":0.12572,"13":0.119434,"14":0.138292,"15":0.069146,"16":0.069146,"17":0.119434,"18":0.018858,"19":null,"20":0.006286,"21":0.012572,"22":0.270298,"23":0.012572,"24":0.044002,"25":0.018858,"26":0.113148,"27":0.088004,"28":0.201152,"29":0.03143,"30":0.226296,"31":0.100576,"32":0.06286,"33":0.150864,"34":0.09429,"35":0.226296,"36":0.521738,"37":0.458878,"38":0.528024,"39":1.848084,"40":34.547856,"41":0.081718,"42":0.34573,"43":null},"opera":{"9":null,"9.5-9.6":0.012572,"10.0-10.1":0,"10.5":0.006286,"10.6":0.018858,"11":0.06286,"11.1":0.018858,"11.5":0.044002,"11.6":0.113148,"12":0.207438,"12.1":2.740696,"15":0.106862,"16":0.100576,"17":0.06286,"18":0.163436,"19":0.075432,"20":0.163436,"21":0.09429,"22":0.03143,"23":0.03143,"24":0.037716,"25":0.069146,"26":0.144578,"27":5.506536,"28":0.119434,"29":0.012572},"safari":{"3.1":null,"3.2":null,"4":0.012572,"5":0.012572,"5.1":0.081718,"6":0.018858,"6.1":0.03143,"7":0.069146,"7.1":0.088004,"8":0.182294},"android":{"2.1":0,"2.2":0,"2.3":0.171151344215,"3":0,"4":0.345905874623,"4.1":1.11428533049,"4.2-4.3":1.88626797255,"4.4":3.52391609772,"4.4.3-4.4.4":1.62323538039,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.025997254142,"6.0-6.1":0.0798161311377,"7.0-7.1":1.01024417411,"8":0.217099876694,"8.1":3.20906456391},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00710596162047,"12.1":0.0426357697228,"0":null},"ie":{"5.5":null,"6":0.0323356101695,"7":0.0388027322034,"8":1.04120664746,"9":0.459165664407,"10":0.53030400678,"11":1.71378733898,"0":null},"ie_mob":{"10":0.210476289474,"11":0.446901710526},"bb":{"7":0.0714945,"10":null},"and_uc":{"0":0.3714},"op_mini":{"5.0-8.0":4.94930226866},"and_chr":{"0":16.360528},"and_ff":{"0":0.059424}},"total":94.0666185}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BA.json
new file mode 100644
index 0000000..61f8803
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BA.json
@@ -0,0 +1 @@
+{"id":"BA","name":"Bosnia and Herzegovina","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.0355,"3.5":0.01775,"3.6":0.062125,"4":0.008875,"5":0.01775,"6":null,"7":null,"8":0.026625,"9":0.01775,"10":0.026625,"11":0.026625,"12":0.062125,"13":0.044375,"14":0.026625,"15":0.044375,"16":0.1065,"17":0.062125,"18":0.0355,"19":0.044375,"20":0.044375,"21":0.0355,"22":0.01775,"23":0.026625,"24":0.044375,"25":0.01775,"26":0.05325,"27":0.0355,"28":0.05325,"29":0.044375,"30":0.097625,"31":0.1775,"32":0.150875,"33":0.1775,"34":0.292875,"35":20.652125,"36":1.819375,"37":0.062125,"38":0.008875,"39":null},"chrome":{"4":0.008875,"5":0.008875,"6":0.026625,"7":null,"8":0.05325,"9":null,"10":0.008875,"11":0.079875,"12":0.026625,"13":null,"14":0.01775,"15":0.008875,"16":0.026625,"17":0.01775,"18":0.026625,"19":null,"20":null,"21":null,"22":0.08875,"23":0.026625,"24":0.026625,"25":0.01775,"26":0.071,"27":0.213,"28":0.044375,"29":0.026625,"30":0.142,"31":0.213,"32":0.1065,"33":0.19525,"34":0.310625,"35":0.257375,"36":0.7455,"37":0.559125,"38":0.79875,"39":2.7335,"40":46.496125,"41":0.213,"42":0.213,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.008875,"11.1":null,"11.5":null,"11.6":0.01775,"12":0.008875,"12.1":0.44375,"15":0.008875,"16":0.01775,"17":0.01775,"18":0.026625,"19":0.026625,"20":0.071,"21":0.01775,"22":0.008875,"23":0.008875,"24":0.008875,"25":0.01775,"26":0.12425,"27":2.831125,"28":0.044375,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.0355,"5.1":0.097625,"6":0.01775,"6.1":0.05325,"7":0.05325,"7.1":0.115375,"8":0.3195},"android":{"2.1":0,"2.2":0,"2.3":0.0773979883564,"3":0,"4":0.156425408047,"4.1":0.503901639983,"4.2-4.3":0.853007303254,"4.4":1.59358384447,"4.4.3-4.4.4":0.734058815885,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00490000251029,"6.0-6.1":0.0150438673562,"7.0-7.1":0.190412378251,"8":0.0409193192088,"8.1":0.604849432674},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000609275053305,"12.1":0.00365565031983,"0":null},"ie":{"5.5":null,"6":0.0355607876712,"7":0.0622313784247,"8":0.960141267123,"9":0.631203981164,"10":0.542302011986,"11":2.96043557363,"0":null},"ie_mob":{"10":0.158486842105,"11":0.336513157895},"bb":{"7":0.010125,"10":null},"and_uc":{"0":0.06525},"op_mini":{"5.0-8.0":0.424360074627},"and_chr":{"0":5.44825},"and_ff":{"0":0.063}},"total":99.165}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BB.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BB.json
new file mode 100644
index 0000000..f2be7cb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BB.json
@@ -0,0 +1 @@
+{"id":"BB","name":"Barbados","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.016252,"3.5":null,"3.6":0.048756,"4":0.008126,"5":null,"6":0.008126,"7":0.008126,"8":null,"9":0.024378,"10":null,"11":0.032504,"12":0.016252,"13":0.008126,"14":null,"15":null,"16":0.024378,"17":null,"18":0.032504,"19":0.008126,"20":0.008126,"21":0.016252,"22":null,"23":0.008126,"24":0.04063,"25":null,"26":0.065008,"27":0.016252,"28":0.056882,"29":0.016252,"30":0.024378,"31":0.130016,"32":0.113764,"33":0.113764,"34":0.178772,"35":11.075738,"36":1.17827,"37":0.04063,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.105638,"12":0.048756,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.016252,"19":null,"20":0.016252,"21":0.016252,"22":0.32504,"23":null,"24":null,"25":0.032504,"26":0.065008,"27":0.065008,"28":0.032504,"29":0.04063,"30":0.032504,"31":1.064506,"32":0.113764,"33":0.24378,"34":0.195024,"35":0.36567,"36":1.162018,"37":0.390048,"38":0.780096,"39":2.210272,"40":39.037304,"41":0.292536,"42":0.357544,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.146268,"15":null,"16":null,"17":null,"18":null,"19":0.008126,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.024378,"27":1.007624,"28":0.008126,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.073134,"5":0.12189,"5.1":0.268158,"6":0.065008,"6.1":0.276284,"7":0.260032,"7.1":0.641954,"8":1.46268},"android":{"2.1":0,"2.2":0,"2.3":0.124411857781,"3":0,"4":0.251442912569,"4.1":0.809986674083,"4.2-4.3":1.3711496326,"4.4":2.5615746718,"4.4.3-4.4.4":1.17994825117,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0179764000402,"6.0-6.1":0.0551907018777,"7.0-7.1":0.698556598052,"8":0.150118709107,"8.1":2.21898159092},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000218433546553,"12.1":0.00131060127932,"0":null},"ie":{"5.5":null,"6":0.00824932140921,"7":0.123739821138,"8":1.08066110461,"9":0.915674676423,"10":1.17140364011,"11":11.9202694363,"0":null},"ie_mob":{"10":0.27060395614,"11":0.57457004386},"bb":{"7":0.203329,"10":null},"and_uc":{"0":0.226754},"op_mini":{"5.0-8.0":0.152138965174},"and_chr":{"0":7.45396},"and_ff":{"0":0.157416}},"total":98.390723}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BD.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BD.json
new file mode 100644
index 0000000..e85264f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BD.json
@@ -0,0 +1 @@
+{"id":"BD","name":"Bangladesh","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.005836,"3":0.049606,"3.5":0.026262,"3.6":0.107966,"4":0.081704,"5":0.023344,"6":0.020426,"7":0.020426,"8":0.037934,"9":0.055442,"10":0.055442,"11":0.48147,"12":0.13131,"13":0.07295,"14":0.090458,"15":0.061278,"16":0.075868,"17":0.052524,"18":0.05836,"19":0.07295,"20":0.064196,"21":0.055442,"22":0.035016,"23":0.037934,"24":0.049606,"25":0.055442,"26":0.090458,"27":0.070032,"28":0.067114,"29":0.230522,"30":0.177998,"31":0.213014,"32":0.227604,"33":0.361832,"34":0.344324,"35":7.98073,"36":4.219428,"37":0.125474,"38":0.011672,"39":null},"chrome":{"4":0.032098,"5":0.008754,"6":0.020426,"7":0.002918,"8":0.01459,"9":0.005836,"10":0.026262,"11":0.026262,"12":0.046688,"13":0.008754,"14":0.017508,"15":0.008754,"16":0.017508,"17":0.011672,"18":0.01459,"19":0.005836,"20":0.005836,"21":0.008754,"22":0.011672,"23":0.008754,"24":0.01459,"25":0.011672,"26":0.040852,"27":0.023344,"28":0.017508,"29":0.020426,"30":0.035016,"31":0.10213,"32":0.017508,"33":0.142982,"34":0.02918,"35":0.049606,"36":0.30639,"37":0.17508,"38":0.13131,"39":0.522322,"40":7.169526,"41":0.201342,"42":0.361832,"43":null},"opera":{"9":null,"9.5-9.6":0.005836,"10.0-10.1":0.128392,"10.5":null,"10.6":0.04377,"11":0.008754,"11.1":0.008754,"11.5":0.011672,"11.6":0.032098,"12":0.01459,"12.1":0.113802,"15":0.005836,"16":0.005836,"17":0.011672,"18":0.01459,"19":0.005836,"20":0.01459,"21":0.005836,"22":0.01459,"23":null,"24":0.011672,"25":0.011672,"26":0.055442,"27":0.738254,"28":0.008754,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.011672,"5":0.011672,"5.1":0.023344,"6":0.01459,"6.1":0.011672,"7":0.037934,"7.1":0.017508,"8":0.07295},"android":{"2.1":0,"2.2":0,"2.3":0.112469728662,"3":0,"4":0.227307241085,"4.1":0.732237128184,"4.2-4.3":1.23953479904,"4.4":2.31569251856,"4.4.3-4.4.4":1.06668658447,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00433709388493,"6.0-6.1":0.0133156391204,"7.0-7.1":0.168537946581,"8":0.0362185384075,"8.1":0.535364782006},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0609041933191,"12.1":0.365425159915,"0":null},"ie":{"5.5":null,"6":0.0355887639257,"7":0.0097060265252,"8":0.449712562334,"9":0.116472318302,"10":0.152061082228,"11":0.449712562334,"0":null},"ie_mob":{"10":0.206340903509,"11":0.438121096491},"bb":{"7":0.010623,"10":null},"and_uc":{"0":13.13711},"op_mini":{"5.0-8.0":42.4197706468},"and_chr":{"0":3.586698},"and_ff":{"0":0.28328}},"total":95.3223003156}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BE.json
new file mode 100644
index 0000000..7b146eb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BE.json
@@ -0,0 +1 @@
+{"id":"BE","name":"Belgium","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.016976,"3.5":null,"3.6":0.04244,"4":null,"5":null,"6":null,"7":null,"8":null,"9":0.008488,"10":0.008488,"11":0.016976,"12":0.033952,"13":0.016976,"14":0.04244,"15":0.008488,"16":0.076392,"17":0.025464,"18":0.016976,"19":0.008488,"20":0.025464,"21":0.016976,"22":0.016976,"23":0.025464,"24":0.08488,"25":0.016976,"26":0.025464,"27":0.08488,"28":0.04244,"29":0.059416,"30":0.076392,"31":0.29708,"32":0.135808,"33":0.135808,"34":0.305568,"35":13.164888,"36":0.696016,"37":0.016976,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.04244,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.025464,"19":null,"20":null,"21":0.016976,"22":0.04244,"23":0.025464,"24":0.008488,"25":0.008488,"26":0.016976,"27":0.016976,"28":0.025464,"29":0.025464,"30":0.033952,"31":0.271616,"32":0.118832,"33":0.2122,"34":0.203712,"35":0.373472,"36":0.449864,"37":0.475328,"38":0.662064,"39":2.011656,"40":32.661824,"41":0.195224,"42":0.08488,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.016976,"12.1":0.16976,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.008488,"26":0.008488,"27":0.585672,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.076392,"5":0.246152,"5.1":0.857288,"6":0.161272,"6.1":0.568696,"7":0.585672,"7.1":1.35808,"8":3.250904},"android":{"2.1":0,"2.2":0,"2.3":0.0480840835846,"3":0,"4":0.0971804636657,"4.1":0.313052691548,"4.2-4.3":0.529937215927,"4.4":0.990025973594,"4.4.3-4.4.4":0.456039571681,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0362511071393,"6.0-6.1":0.111297258761,"7.0-7.1":1.40870530375,"8":0.30272854383,"8.1":4.47478578652},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":8.1671641791e-5,"12.1":0.000490029850746,"0":null},"ie":{"5.5":null,"6":0.0255421703761,"7":0.102168681504,"8":1.8134940967,"9":2.71598411665,"10":1.66875513124,"11":15.8616878035,"0":null},"ie_mob":{"10":0.222688421053,"11":0.472831578947},"bb":{"7":0.01134,"10":null},"and_uc":{"0":0.024192},"op_mini":{"5.0-8.0":0.0568842985075},"and_chr":{"0":5.598048},"and_ff":{"0":0.066528}},"total":98.861924}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BF.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BF.json
new file mode 100644
index 0000000..5e9f9fd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BF.json
@@ -0,0 +1 @@
+{"id":"BF","name":"Burkina Faso","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.069056,"3.5":0.047476,"3.6":0.112216,"4":0.051792,"5":0.069056,"6":0.06474,"7":0.034528,"8":0.077688,"9":0.038844,"10":0.073372,"11":0.211484,"12":0.254644,"13":0.142428,"14":0.060424,"15":0.125164,"16":0.2158,"17":0.047476,"18":0.082004,"19":0.038844,"20":0.099268,"21":0.099268,"22":0.056108,"23":0.073372,"24":0.146744,"25":0.073372,"26":0.077688,"27":0.099268,"28":0.094952,"29":0.207168,"30":0.47476,"31":0.267592,"32":0.271908,"33":0.548132,"34":0.725088,"35":14.93336,"36":0.932256,"37":0.069056,"38":0.030212,"39":null},"chrome":{"4":0.051792,"5":0.008632,"6":0.008632,"7":0.004316,"8":0.017264,"9":null,"10":0.017264,"11":0.094952,"12":0.038844,"13":0.038844,"14":0.017264,"15":0.034528,"16":0.02158,"17":0.004316,"18":0.051792,"19":0.025896,"20":0.004316,"21":0.02158,"22":0.012948,"23":null,"24":0.012948,"25":0.047476,"26":0.025896,"27":0.030212,"28":0.025896,"29":0.02158,"30":0.073372,"31":0.073372,"32":0.056108,"33":0.06474,"34":0.04316,"35":0.06474,"36":0.358228,"37":0.224432,"38":0.142428,"39":0.353912,"40":9.305296,"41":0.051792,"42":0.103584,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":0.008632,"10.6":null,"11":0.008632,"11.1":0.012948,"11.5":0.025896,"11.6":0.012948,"12":0.02158,"12.1":0.06474,"15":0.012948,"16":null,"17":0.008632,"18":0.02158,"19":0.008632,"20":0.008632,"21":0.004316,"22":0.008632,"23":null,"24":null,"25":null,"26":0.077688,"27":0.6474,"28":0.004316,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.012948,"5":0.069056,"5.1":0.155376,"6":0.025896,"6.1":0.02158,"7":0.099268,"7.1":0.116532,"8":0.142428},"android":{"2.1":0,"2.2":0,"2.3":0.232518677617,"3":0,"4":0.46993248529,"4.1":1.51381896954,"4.2-4.3":2.56260058384,"4.4":4.78743719389,"4.4.3-4.4.4":2.20525608982,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0060835180239,"6.0-6.1":0.0186774676172,"7.0-7.1":0.236403375841,"8":0.0508027119189,"8.1":0.750940926599},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0383457910448,"12.1":0.230074746269,"0":null},"ie":{"5.5":null,"6":0.107956999472,"7":0.0388645198098,"8":1.03206891495,"9":0.652060276809,"10":1.62367327205,"11":4.68533377707,"0":null},"ie_mob":{"10":0.172888333333,"11":0.367091666667},"bb":{"7":0.073892,"10":null},"and_uc":{"0":7.508564},"op_mini":{"5.0-8.0":26.7078434627},"and_chr":{"0":5.1593},"and_ff":{"0":0.278516}},"total":95.7627217602}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BG.json
new file mode 100644
index 0000000..4466a64
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BG.json
@@ -0,0 +1 @@
+{"id":"BG","name":"Bulgaria","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.017322,"3":0.060627,"3.5":0.025983,"3.6":0.138576,"4":0.025983,"5":0.017322,"6":0.008661,"7":0.008661,"8":0.017322,"9":0.017322,"10":0.043305,"11":0.060627,"12":0.077949,"13":0.034644,"14":0.034644,"15":0.025983,"16":0.034644,"17":0.043305,"18":0.043305,"19":0.147237,"20":0.069288,"21":0.034644,"22":0.034644,"23":0.060627,"24":0.043305,"25":0.051966,"26":0.060627,"27":0.08661,"28":0.069288,"29":0.069288,"30":0.121254,"31":0.571626,"32":0.424389,"33":0.190542,"34":0.467694,"35":21.124179,"36":1.229862,"37":0.034644,"38":0.017322,"39":null},"chrome":{"4":0.008661,"5":null,"6":null,"7":0.017322,"8":null,"9":null,"10":0.017322,"11":0.103932,"12":0.017322,"13":0.017322,"14":0.017322,"15":0.017322,"16":0.034644,"17":null,"18":0.043305,"19":null,"20":null,"21":0.017322,"22":0.051966,"23":0.069288,"24":0.008661,"25":0.034644,"26":0.103932,"27":0.034644,"28":0.034644,"29":0.051966,"30":0.103932,"31":0.103932,"32":0.08661,"33":0.112593,"34":0.285813,"35":0.303135,"36":0.632253,"37":0.770829,"38":0.450372,"39":1.489692,"40":38.697348,"41":0.103932,"42":0.112593,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.025983,"12":0.034644,"12.1":0.736185,"15":null,"16":null,"17":null,"18":0.025983,"19":0.008661,"20":0.034644,"21":0.008661,"22":0.008661,"23":null,"24":0.025983,"25":0.017322,"26":0.069288,"27":2.503029,"28":0.043305,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.034644,"5":0.025983,"5.1":0.103932,"6":0.008661,"6.1":0.034644,"7":0.155898,"7.1":0.08661,"8":0.424389},"android":{"2.1":0,"2.2":0,"2.3":0.0758284093981,"3":0,"4":0.153253206362,"4.1":0.493682854871,"4.2-4.3":0.835708890945,"4.4":1.56126703982,"4.4.3-4.4.4":0.719172598607,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0089972087559,"6.0-6.1":0.0276230093383,"7.0-7.1":0.349628375339,"8":0.0751345854001,"8.1":1.11060282117},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000614778962331,"12.1":0.00368867377399,"0":null},"ie":{"5.5":null,"6":0.062199870283,"7":0.142171132075,"8":2.44356633255,"9":1.35062575472,"10":0.950769445755,"11":6.33550107311,"0":null},"ie_mob":{"10":0.160339377193,"11":0.340446622807},"bb":{"7":0.00435175,"10":null},"and_uc":{"0":0.048204},"op_mini":{"5.0-8.0":0.428193547264},"and_chr":{"0":7.064915},"and_ff":{"0":0.092391}},"total":98.8557833585}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BH.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BH.json
new file mode 100644
index 0000000..17087bb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BH.json
@@ -0,0 +1 @@
+{"id":"BH","name":"Bahrain","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.014124,"3":0.04708,"3.5":0.042372,"3.6":0.07062,"4":0.051788,"5":0.056496,"6":0.04708,"7":0.018832,"8":0.009416,"9":0.014124,"10":0.032956,"11":0.02354,"12":0.032956,"13":0.009416,"14":0.037664,"15":0.018832,"16":0.108284,"17":0.028248,"18":0.056496,"19":0.051788,"20":0.061204,"21":0.4708,"22":0.056496,"23":0.056496,"24":0.056496,"25":0.004708,"26":0.009416,"27":0.032956,"28":0.02354,"29":0.028248,"30":0.042372,"31":0.056496,"32":0.04708,"33":0.042372,"34":0.155364,"35":3.865268,"36":0.49434,"37":0.009416,"38":null,"39":null},"chrome":{"4":0.037664,"5":0.018832,"6":0.014124,"7":0.014124,"8":null,"9":0.02354,"10":0.02354,"11":0.080036,"12":0.02354,"13":0.028248,"14":0.04708,"15":0.018832,"16":0.032956,"17":null,"18":0.014124,"19":0.014124,"20":0.02354,"21":0.009416,"22":0.04708,"23":0.009416,"24":0.221276,"25":0.014124,"26":0.028248,"27":0.207152,"28":0.108284,"29":0.084744,"30":0.056496,"31":0.089452,"32":0.056496,"33":0.230692,"34":0.1177,"35":0.193028,"36":0.54142,"37":0.221276,"38":0.249524,"39":0.998096,"40":18.05518,"41":0.381348,"42":0.244816,"43":null},"opera":{"9":0.004708,"9.5-9.6":0.014124,"10.0-10.1":0.014124,"10.5":null,"10.6":0.004708,"11":0.028248,"11.1":0.07062,"11.5":0.169488,"11.6":0.051788,"12":0.09416,"12.1":0.183612,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.014124,"27":0.44726,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.02354,"5":0.127116,"5.1":0.277772,"6":0.183612,"6.1":0.16478,"7":0.287188,"7.1":0.334268,"8":0.861564},"android":{"2.1":0,"2.2":0,"2.3":0.292476664934,"3":0,"4":0.59111073334,"4.1":1.90417702381,"4.2-4.3":3.22340071775,"4.4":6.0219405959,"4.4.3-4.4.4":2.77391026427,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0454631633698,"6.0-6.1":0.139579887539,"7.0-7.1":1.76668257656,"8":0.379657294106,"8.1":5.61190907842},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00441564179104,"12.1":0.0264938507463,"0":null},"ie":{"5.5":0.0141872926577,"6":0.0756655608411,"7":0.113498341262,"8":3.34820106722,"9":1.93892999655,"10":2.10444841089,"11":6.11945223302,"0":null},"ie_mob":{"10":0.188074894737,"11":0.399337105263},"bb":{"7":0.117747,"10":null},"and_uc":{"0":8.054424},"op_mini":{"5.0-8.0":3.07549450746},"and_chr":{"0":17.20688},"and_ff":{"0":0.153468}},"total":97.9125779024}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BI.json
new file mode 100644
index 0000000..80acaeb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BI.json
@@ -0,0 +1 @@
+{"id":"BI","name":"Burundi","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.045108,"3":0.142842,"3.5":0.011277,"3.6":0.18795,"4":0.026313,"5":0.026313,"6":0.026313,"7":0.03759,"8":0.030072,"9":0.060144,"10":0.060144,"11":0.07518,"12":0.285684,"13":0.060144,"14":0.026313,"15":0.052626,"16":0.139083,"17":0.067662,"18":0.026313,"19":0.060144,"20":0.063903,"21":0.022554,"22":0.033831,"23":0.022554,"24":0.18795,"25":0.07518,"26":0.109011,"27":0.018795,"28":0.071421,"29":0.251853,"30":0.293202,"31":0.218022,"32":0.146601,"33":0.293202,"34":0.398454,"35":11.047701,"36":1.011171,"37":0.026313,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":0.131565,"9":0.011277,"10":0.018795,"11":0.063903,"12":0.026313,"13":0.078939,"14":null,"15":null,"16":0.026313,"17":null,"18":0.033831,"19":null,"20":null,"21":0.003759,"22":null,"23":null,"24":0.071421,"25":0.022554,"26":0.003759,"27":0.018795,"28":0.011277,"29":0.015036,"30":0.015036,"31":0.11277,"32":0.003759,"33":0.184191,"34":0.007518,"35":0.07518,"36":0.330792,"37":0.018795,"38":0.172914,"39":0.308238,"40":10.653006,"41":0.101493,"42":0.11277,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.018795,"10.5":null,"10.6":null,"11":0.007518,"11.1":0.007518,"11.5":0.022554,"11.6":0.011277,"12":null,"12.1":0.045108,"15":0.007518,"16":null,"17":null,"18":0.007518,"19":null,"20":0.015036,"21":0.026313,"22":null,"23":0.003759,"24":null,"25":null,"26":0.018795,"27":0.52626,"28":null,"29":null},"safari":{"3.1":null,"3.2":0.007518,"4":0,"5":0.011277,"5.1":0.154119,"6":0.015036,"6.1":0.048867,"7":0.161637,"7.1":0.116529,"8":0.33831},"android":{"2.1":0,"2.2":0,"2.3":0.0928266836469,"3":0,"4":0.187607613265,"4.1":0.604350566691,"4.2-4.3":1.02304776609,"4.4":1.91125256014,"4.4.3-4.4.4":0.880387810167,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00639390732001,"6.0-6.1":0.0196304172106,"7.0-7.1":0.248464994979,"8":0.0533947348127,"8.1":0.789254945677},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0657633731343,"12.1":0.394580238806,"0":null},"ie":{"5.5":null,"6":0.0903114161819,"7":0.139230099947,"8":1.32456743733,"9":0.42521625119,"10":0.835380599683,"11":4.28979226864,"0":null},"ie_mob":{"10":0.265762583333,"11":0.564290416667},"bb":{"7":0.081133,"10":null},"and_uc":{"0":4.025445},"op_mini":{"5.0-8.0":45.8041893881},"and_chr":{"0":3.671921},"and_ff":{"0":0.106097}},"total":97.844486073}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BJ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BJ.json
new file mode 100644
index 0000000..e6274b2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BJ.json
@@ -0,0 +1 @@
+{"id":"BJ","name":"Benin","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.024905,"3":0.24905,"3.5":0.034867,"3.6":0.094639,"4":0.039848,"5":0.04981,"6":0.044829,"7":0.069734,"8":0.044829,"9":0.054791,"10":0.139468,"11":0.254031,"12":0.204221,"13":0.084677,"14":0.094639,"15":0.124525,"16":0.104601,"17":0.074715,"18":0.089658,"19":0.114563,"20":0.134487,"21":0.084677,"22":0.039848,"23":0.089658,"24":0.119544,"25":0.159392,"26":0.09962,"27":0.089658,"28":0.059772,"29":0.24905,"30":0.358632,"31":0.363613,"32":0.29886,"33":0.363613,"34":0.557872,"35":10.943257,"36":0.921485,"37":0.04981,"38":null,"39":null},"chrome":{"4":0.079696,"5":0.029886,"6":0.089658,"7":0.054791,"8":0.184297,"9":0.054791,"10":0.273955,"11":0.084677,"12":0.886618,"13":0.503081,"14":0.204221,"15":0.154411,"16":0.224145,"17":0.029886,"18":0.079696,"19":0.039848,"20":0.014943,"21":0.014943,"22":0.024905,"23":0.019924,"24":0.059772,"25":0.044829,"26":0.224145,"27":0.283917,"28":0.189278,"29":0.39848,"30":0.174335,"31":0.403461,"32":0.029886,"33":0.234107,"34":0.313803,"35":0.179316,"36":0.722245,"37":0.283917,"38":0.463233,"39":0.657492,"40":18.439662,"41":0.159392,"42":0.184297,"43":null},"opera":{"9":null,"9.5-9.6":0.04981,"10.0-10.1":0,"10.5":null,"10.6":0.009962,"11":0.014943,"11.1":null,"11.5":0.044829,"11.6":0.034867,"12":0.019924,"12.1":0.089658,"15":0.019924,"16":0.004981,"17":null,"18":0.019924,"19":0.014943,"20":0.014943,"21":0.009962,"22":0.009962,"23":null,"24":null,"25":0.024905,"26":0.034867,"27":0.757112,"28":0.004981,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.004981,"5":0.024905,"5.1":0.059772,"6":0.019924,"6.1":0.024905,"7":0.179316,"7.1":0.079696,"8":0.104601},"android":{"2.1":0,"2.2":0,"2.3":0.140875331116,"3":0,"4":0.284716458676,"4.1":0.917172550473,"4.2-4.3":1.55259443872,"4.4":2.90054892276,"4.4.3-4.4.4":1.33609129826,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0069229845366,"6.0-6.1":0.0212547770861,"7.0-7.1":0.269024749975,"8":0.0578129936741,"8.1":0.854563494728},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0377049253731,"12.1":0.226229552239,"0":null},"ie":{"5.5":null,"6":0.172273896552,"7":0.0405350344828,"8":0.714429982759,"9":0.359748431034,"10":0.825901327586,"11":1.95074853448,"0":null},"ie_mob":{"10":0.286038973684,"11":0.607343026316},"bb":{"7":0.1129275,"10":null},"and_uc":{"0":6.615042},"op_mini":{"5.0-8.0":26.2614805224},"and_chr":{"0":4.315276},"and_ff":{"0":0.180684}},"total":96.1957257069}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BM.json
new file mode 100644
index 0000000..ab2f1ac
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BM.json
@@ -0,0 +1 @@
+{"id":"BM","name":"Bermuda","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.009173,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.018346,"11":null,"12":0.009173,"13":0.009173,"14":0.036692,"15":0.018346,"16":0.073384,"17":null,"18":null,"19":null,"20":null,"21":null,"22":0.009173,"23":0.009173,"24":0.036692,"25":0.018346,"26":0.055038,"27":0.018346,"28":0.027519,"29":0.009173,"30":0.018346,"31":0.155941,"32":0.027519,"33":0.055038,"34":0.128422,"35":6.292678,"36":0.357747,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.210979,"12":0.027519,"13":null,"14":null,"15":null,"16":0.036692,"17":null,"18":0.027519,"19":null,"20":null,"21":0.009173,"22":0.036692,"23":null,"24":0.009173,"25":0.055038,"26":0.045865,"27":0.110076,"28":0.018346,"29":0.036692,"30":0.018346,"31":0.064211,"32":0.110076,"33":0.09173,"34":0.100903,"35":0.082557,"36":0.18346,"37":0.082557,"38":0.238498,"39":0.843916,"40":24.501083,"41":0.073384,"42":0.082557,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.018346,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.09173,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.174287,"5":0.513688,"5.1":1.458507,"6":0.321055,"6.1":0.953992,"7":0.559553,"7.1":2.137309,"8":3.146339},"android":{"2.1":0,"2.2":0,"2.3":0.0314619378314,"3":0,"4":0.0635862322487,"4.1":0.204833774197,"4.2-4.3":0.346743672731,"4.4":0.647784741033,"4.4.3-4.4.4":0.298391641959,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0175132342605,"6.0-6.1":0.0537687016769,"7.0-7.1":0.680558138367,"8":0.146250868561,"8.1":2.16180905713},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":1.29310589908e-5,"12.1":7.75863539446e-5,"0":null},"ie":{"5.5":null,"6":0.009173,"7":0.155941,"8":6.503657,"9":10.218722,"10":5.329513,"11":24.730408,"0":null},"ie_mob":{"10":0.0357459868421,"11":0.0758990131579},"bb":{"7":0.2022015,"10":null},"and_uc":{"0":0.001654},"op_mini":{"5.0-8.0":0.00900648258706},"and_chr":{"0":2.682417},"and_ff":{"0":0.020675}},"total":98.4930915}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BN.json
new file mode 100644
index 0000000..5d70be0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BN.json
@@ -0,0 +1 @@
+{"id":"BN","name":"Brunei Darussalam","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.010016,"3.5":0.145232,"3.6":0.065104,"4":0.020032,"5":null,"6":0.015024,"7":0.015024,"8":0.005008,"9":0.060096,"10":0.030048,"11":0.080128,"12":0.035056,"13":0.030048,"14":0.015024,"15":0.010016,"16":0.055088,"17":0.010016,"18":0.005008,"19":0.010016,"20":0.020032,"21":0.030048,"22":0.02504,"23":0.010016,"24":0.015024,"25":0.030048,"26":0.015024,"27":0.030048,"28":0.020032,"29":0.07512,"30":0.090144,"31":0.145232,"32":0.170272,"33":0.155248,"34":0.27544,"35":7.567088,"36":1.357168,"37":0.045072,"38":null,"39":null},"chrome":{"4":null,"5":0.005008,"6":0.02504,"7":null,"8":0.030048,"9":0.010016,"10":0.010016,"11":0.060096,"12":0.015024,"13":0.015024,"14":0.070112,"15":0.005008,"16":0.020032,"17":null,"18":0.010016,"19":0.005008,"20":0.005008,"21":0.010016,"22":0.060096,"23":0.015024,"24":0.005008,"25":0.045072,"26":0.020032,"27":0.02504,"28":0.020032,"29":0.020032,"30":0.020032,"31":0.295472,"32":0.07512,"33":0.495792,"34":0.090144,"35":0.180288,"36":0.671072,"37":0.27544,"38":0.52584,"39":1.682688,"40":23.667808,"41":0.110176,"42":0.265424,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.005008,"12.1":0.145232,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":0.010016,"23":null,"24":0.010016,"25":null,"26":0.030048,"27":0.485776,"28":0.005008,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.065104,"5":0.245392,"5.1":0.520832,"6":0.115184,"6.1":0.415664,"7":0.335536,"7.1":0.535856,"8":1.287056},"android":{"2.1":0,"2.2":0,"2.3":0.216930658073,"3":0,"4":0.438428277368,"4.1":1.41233275808,"4.2-4.3":2.39080420002,"4.4":4.46648807568,"4.4.3-4.4.4":2.05741603077,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0477144773572,"6.0-6.1":0.146491816447,"7.0-7.1":1.85416784818,"8":0.398457740737,"8.1":5.88980811728},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0218342345416,"12.1":0.131005407249,"0":null},"ie":{"5.5":null,"6":0.0100548217054,"7":0.0452466976744,"8":1.1160852093,"9":0.774221271318,"10":0.40722027907,"11":2.82037748837,"0":null},"ie_mob":{"10":0.0687275789474,"11":0.145928421053},"bb":{"7":0.011232,"10":null},"and_uc":{"0":3.040128},"op_mini":{"5.0-8.0":15.2075443582},"and_chr":{"0":10.804896},"and_ff":{"0":0.159744}},"total":97.8481977674}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BO.json
new file mode 100644
index 0000000..6b97d35
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BO.json
@@ -0,0 +1 @@
+{"id":"BO","name":"Bolivia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.011114,"3":0.022228,"3.5":0.044456,"3.6":0.144482,"4":0.061127,"5":0.044456,"6":0.022228,"7":0.016671,"8":0.100026,"9":0.033342,"10":0.027785,"11":0.038899,"12":0.133368,"13":0.050013,"14":0.050013,"15":0.050013,"16":0.066684,"17":0.116697,"18":0.061127,"19":0.05557,"20":0.094469,"21":0.072241,"22":0.077798,"23":0.077798,"24":0.083355,"25":0.088912,"26":0.105583,"27":0.11114,"28":0.116697,"29":0.183381,"30":0.355648,"31":0.311192,"32":0.33342,"33":0.511244,"34":0.622384,"35":10.825036,"36":0.572371,"37":0.022228,"38":null,"39":null},"chrome":{"4":0.016671,"5":null,"6":0.005557,"7":null,"8":0.050013,"9":null,"10":0.011114,"11":0.250065,"12":0.027785,"13":0.044456,"14":0.022228,"15":0.011114,"16":0.011114,"17":null,"18":0.094469,"19":null,"20":null,"21":0.011114,"22":0.033342,"23":0.044456,"24":0.016671,"25":0.066684,"26":0.066684,"27":0.044456,"28":0.050013,"29":0.044456,"30":0.066684,"31":0.138925,"32":0.077798,"33":0.288964,"34":0.161153,"35":0.27785,"36":0.439003,"37":0.383433,"38":0.594599,"39":1.678214,"40":23.367185,"41":0.094469,"42":0.050013,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.005557,"12.1":0.05557,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.005557,"21":null,"22":0.005557,"23":null,"24":0.005557,"25":null,"26":0.027785,"27":0.38899,"28":0.005557,"29":null},"safari":{"3.1":0.011114,"3.2":null,"4":0.011114,"5":0.038899,"5.1":0.116697,"6":0.05557,"6.1":0.05557,"7":0.100026,"7.1":0.105583,"8":0.355648},"android":{"2.1":0,"2.2":0,"2.3":0.243623653186,"3":0,"4":0.492376225387,"4.1":1.58611820522,"4.2-4.3":2.68498910406,"4.4":5.01608279613,"4.4.3-4.4.4":2.31057801601,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0213606627171,"6.0-6.1":0.0655809820263,"7.0-7.1":0.830067858219,"8":0.178380271112,"8.1":2.63673022593},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0073450021322,"12.1":0.0440700127932,"0":null},"ie":{"5.5":null,"6":0.0836713377609,"7":0.0613589810247,"8":2.39857834915,"9":0.937118982922,"10":1.33874140417,"11":3.98275567742,"0":null},"ie_mob":{"10":0.288775513158,"11":0.613153486842},"bb":{"7":0.05220525,"10":null},"and_uc":{"0":1.137408},"op_mini":{"5.0-8.0":5.11579398507},"and_chr":{"0":20.76705},"and_ff":{"0":0.373212}},"total":98.8734249824}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BR.json
new file mode 100644
index 0000000..54ddb8a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BR.json
@@ -0,0 +1 @@
+{"id":"BR","name":"Brazil","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.023532,"3.5":null,"3.6":0.031376,"4":0.007844,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.015688,"11":0.015688,"12":0.023532,"13":0.015688,"14":0.023532,"15":0.031376,"16":0.023532,"17":0.023532,"18":0.007844,"19":0.015688,"20":0.031376,"21":0.023532,"22":0.015688,"23":0.015688,"24":0.03922,"25":0.015688,"26":0.031376,"27":0.023532,"28":0.031376,"29":0.047064,"30":0.07844,"31":0.227476,"32":0.133348,"33":0.133348,"34":0.188256,"35":6.62818,"36":0.47064,"37":0.015688,"38":null,"39":null},"chrome":{"4":null,"5":0.007844,"6":null,"7":null,"8":null,"9":null,"10":0.007844,"11":0.023532,"12":0.015688,"13":0.007844,"14":0.007844,"15":null,"16":null,"17":null,"18":0.031376,"19":null,"20":null,"21":0.007844,"22":0.101972,"23":0.007844,"24":0.015688,"25":0.047064,"26":0.03922,"27":0.023532,"28":0.031376,"29":0.062752,"30":0.023532,"31":0.203944,"32":0.101972,"33":0.776556,"34":0.227476,"35":0.486328,"36":1.184444,"37":0.698116,"38":0.933436,"39":2.39242,"40":44.255848,"41":0.35298,"42":0.258852,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.03922,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007844,"21":null,"22":null,"23":0.007844,"24":0.015688,"25":0.015688,"26":0.015688,"27":0.541236,"28":0.007844,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.031376,"5":0.023532,"5.1":0.094128,"6":0.023532,"6.1":0.062752,"7":0.094128,"7.1":0.141192,"8":0.415732},"android":{"2.1":0,"2.2":0,"2.3":0.102463233184,"3":0,"4":0.207083587067,"4.1":0.667089576047,"4.2-4.3":1.12925268573,"4.4":2.10966404325,"4.4.3-4.4.4":0.971782874727,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.012993802189,"6.0-6.1":0.0398932523346,"7.0-7.1":0.504934593835,"8":0.10850964635,"8.1":1.60393670529},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000974567164179,"12.1":0.00584740298507,"0":null},"ie":{"5.5":null,"6":0.0240339833507,"7":0.0320453111342,"8":3.02828190219,"9":1.46607298439,"10":1.40999368991,"11":9.42132147347,"0":null},"ie_mob":{"10":0.300279736842,"11":0.637580263158},"bb":{"7":0.003773,"10":null},"and_uc":{"0":0.562716},"op_mini":{"5.0-8.0":0.678786029851},"and_chr":{"0":11.552392},"and_ff":{"0":0.099176}},"total":98.9622383444}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BS.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BS.json
new file mode 100644
index 0000000..6604ba0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BS.json
@@ -0,0 +1 @@
+{"id":"BS","name":"Bahamas","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.030228,"3.5":0.007557,"3.6":0.022671,"4":0.015114,"5":0.007557,"6":0.007557,"7":null,"8":null,"9":null,"10":0.007557,"11":0.015114,"12":0.030228,"13":0.007557,"14":null,"15":null,"16":0.045342,"17":0.015114,"18":0.007557,"19":null,"20":0.015114,"21":0.015114,"22":null,"23":0.030228,"24":null,"25":0.007557,"26":0.007557,"27":0.015114,"28":0.015114,"29":0.015114,"30":0.030228,"31":0.113355,"32":0.083127,"33":0.083127,"34":0.090684,"35":6.393222,"36":0.816156,"37":0.007557,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.068013,"12":0.007557,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.037785,"19":null,"20":0.015114,"21":0.136026,"22":0.022671,"23":null,"24":0.015114,"25":0.022671,"26":0.052899,"27":0.022671,"28":0.173811,"29":0.090684,"30":0.022671,"31":0.204039,"32":0.120912,"33":0.204039,"34":0.204039,"35":0.241824,"36":0.967296,"37":0.513876,"38":0.521433,"39":1.760781,"40":32.321289,"41":0.113355,"42":0.098241,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.068013,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.015114,"27":0.498762,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.07557,"5":0.287166,"5.1":0.687687,"6":0.113355,"6.1":0.491205,"7":0.597003,"7.1":0.770814,"8":1.896807},"android":{"2.1":0,"2.2":0,"2.3":0.147034617944,"3":0,"4":0.297164701528,"4.1":0.957272749454,"4.2-4.3":1.62047626302,"4.4":3.02736539682,"4.4.3-4.4.4":1.39450727123,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0331243718245,"6.0-6.1":0.101697632794,"7.0-7.1":1.28720146651,"8":0.276617561201,"8.1":4.08882596767},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00018752238806,"12.1":0.00112513432836,"0":null},"ie":{"5.5":null,"6":0.0385540298507,"7":0.285299820896,"8":2.49830113433,"9":1.76577456716,"10":2.25926614925,"11":15.8688386866,"0":null},"ie_mob":{"10":0.223705938596,"11":0.474992061404},"bb":{"7":0.11543175,"10":null},"and_uc":{"0":0.190554},"op_mini":{"5.0-8.0":0.130609343284},"and_chr":{"0":10.302618},"and_ff":{"0":0.095277}},"total":98.8996511381}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BT.json
new file mode 100644
index 0000000..985a750
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BT.json
@@ -0,0 +1 @@
+{"id":"BT","name":"Bhutan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.032664,"3.5":0.016332,"3.6":0.152432,"4":null,"5":0.016332,"6":0.010888,"7":0.016332,"8":0.005444,"9":null,"10":0.19054,"11":0.016332,"12":0.097992,"13":0.021776,"14":0.02722,"15":0.114324,"16":0.076216,"17":0.038108,"18":0.103436,"19":0.010888,"20":null,"21":0.032664,"22":0.021776,"23":0.092548,"24":0.010888,"25":0.005444,"26":0.016332,"27":0.038108,"28":0.048996,"29":0.103436,"30":0.223204,"31":0.114324,"32":0.141544,"33":0.168764,"34":0.440964,"35":6.636236,"36":1.404552,"37":0.048996,"38":0.032664,"39":null},"chrome":{"4":0.02722,"5":0.195984,"6":null,"7":0.005444,"8":0.021776,"9":0.010888,"10":0.4083,"11":0.05444,"12":0.059884,"13":0.097992,"14":0.201428,"15":0.059884,"16":0.010888,"17":null,"18":0.02722,"19":null,"20":null,"21":null,"22":0.010888,"23":0.02722,"24":0.005444,"25":0.005444,"26":0.005444,"27":0.02722,"28":0.070772,"29":0.038108,"30":0.174208,"31":0.070772,"32":0.048996,"33":0.51718,"34":0.130656,"35":0.261312,"36":3.881572,"37":0.179652,"38":0.174208,"39":1.480768,"40":25.50514,"41":0.337528,"42":0.849264,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.005444,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.010888,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.005444,"21":null,"22":null,"23":null,"24":0.005444,"25":0.005444,"26":0.021776,"27":0.430076,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.016332,"5":0.059884,"5.1":0.2722,"6":0.021776,"6.1":0.092548,"7":0.10888,"7.1":0.168764,"8":0.24498},"android":{"2.1":0,"2.2":0,"2.3":0.116270597775,"3":0,"4":0.234988997609,"4.1":0.756982786568,"4.2-4.3":1.28142437759,"4.4":2.39395041314,"4.4.3-4.4.4":1.10273482732,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0178099845366,"6.0-6.1":0.0546797770861,"7.0-7.1":0.692089749975,"8":0.148728993674,"8.1":2.19843949473},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0107051428571,"12.1":0.0642308571429,"0":null},"ie":{"5.5":null,"6":0.016332,"7":0.005444,"8":0.969032,"9":0.195984,"10":1.322892,"11":3.821688,"0":null},"ie_mob":{"10":0.857726947368,"11":1.82120105263},"bb":{"7":0.004556,"10":null},"and_uc":{"0":10.219108},"op_mini":{"5.0-8.0":7.456132},"and_chr":{"0":8.709368},"and_ff":{"0":0.082008}},"total":91.536228}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BW.json
new file mode 100644
index 0000000..52fcc56
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BW.json
@@ -0,0 +1 @@
+{"id":"BW","name":"Botswana","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.03187,"3.5":0.019122,"3.6":0.09561,"4":0.76488,"5":0.025496,"6":0.012748,"7":0.038244,"8":0.025496,"9":0.025496,"10":0.057366,"11":0.133854,"12":0.184846,"13":0.03187,"14":0.044618,"15":0.09561,"16":0.133854,"17":0.070114,"18":0.331448,"19":0.044618,"20":0.057366,"21":0.140228,"22":0.057366,"23":0.146602,"24":0.03187,"25":0.038244,"26":0.535416,"27":0.267708,"28":0.070114,"29":0.643774,"30":0.325074,"31":0.197594,"32":0.235838,"33":0.560912,"34":0.873238,"35":10.523474,"36":1.606248,"37":0.070114,"38":0.019122,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":0.006374,"8":null,"9":null,"10":null,"11":0.114732,"12":0.03187,"13":null,"14":null,"15":null,"16":0.044618,"17":0.006374,"18":0.070114,"19":0.025496,"20":null,"21":0.044618,"22":0.044618,"23":0.012748,"24":0.025496,"25":0.044618,"26":0.044618,"27":0.03187,"28":0.019122,"29":0.076488,"30":0.06374,"31":0.178472,"32":0.101984,"33":0.165724,"34":0.178472,"35":0.229464,"36":0.89236,"37":0.471676,"38":0.618278,"39":1.453272,"40":20.17371,"41":0.229464,"42":0.299578,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.006374,"11.1":null,"11.5":0.012748,"11.6":0.019122,"12":0.012748,"12.1":0.133854,"15":null,"16":null,"17":0.012748,"18":0.025496,"19":0.012748,"20":0.012748,"21":0.012748,"22":null,"23":null,"24":0.012748,"25":0.012748,"26":0.101984,"27":0.92423,"28":0.019122,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.019122,"5":0.121106,"5.1":0.242212,"6":0.114732,"6.1":0.108358,"7":0.12748,"7.1":0.178472,"8":0.376066},"android":{"2.1":0,"2.2":0,"2.3":0.0844433163531,"3":0,"4":0.170664386735,"4.1":0.549770433309,"4.2-4.3":0.930654233912,"4.4":1.73864343986,"4.4.3-4.4.4":0.800878189833,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00718063781504,"6.0-6.1":0.0220458178532,"7.0-7.1":0.27903706597,"8":0.0599646245607,"8.1":0.886367853801},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0113547661692,"12.1":0.0681285970149,"0":null},"ie":{"5.5":null,"6":0.115147027331,"7":0.652499821543,"8":2.94904331109,"9":2.69955808521,"10":2.49485225884,"11":6.95999809646,"0":null},"ie_mob":{"10":0.513142614035,"11":1.08954938596},"bb":{"7":0.281015,"10":null},"and_uc":{"0":11.164454},"op_mini":{"5.0-8.0":7.90859463682},"and_chr":{"0":4.071382},"and_ff":{"0":0.083398}},"total":93.4789116005}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BY.json
new file mode 100644
index 0000000..2adfe2a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BY.json
@@ -0,0 +1 @@
+{"id":"BY","name":"Belarus","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008802,"3":0.052812,"3.5":0.105624,"3.6":0.17604,"4":0.017604,"5":0.008802,"6":0.026406,"7":0.008802,"8":0.008802,"9":0.026406,"10":0.026406,"11":0.052812,"12":0.061614,"13":0.017604,"14":0.017604,"15":0.017604,"16":0.017604,"17":0.026406,"18":0.026406,"19":0.070416,"20":0.017604,"21":0.026406,"22":0.017604,"23":0.035208,"24":0.070416,"25":0.04401,"26":0.052812,"27":0.052812,"28":0.035208,"29":0.052812,"30":0.08802,"31":0.246456,"32":0.17604,"33":0.246456,"34":0.360882,"35":10.21032,"36":0.580932,"37":0.017604,"38":0.017604,"39":null},"chrome":{"4":0.017604,"5":0.017604,"6":0.026406,"7":0.017604,"8":0.052812,"9":0.017604,"10":0.035208,"11":0.070416,"12":0.061614,"13":0.04401,"14":0.035208,"15":0.04401,"16":0.04401,"17":0.096822,"18":0.052812,"19":0.017604,"20":0.026406,"21":0.026406,"22":0.140832,"23":0.017604,"24":0.061614,"25":0.026406,"26":0.114426,"27":0.08802,"28":0.290466,"29":0.035208,"30":0.04401,"31":0.167238,"32":0.061614,"33":0.105624,"34":0.140832,"35":0.369684,"36":0.202446,"37":0.22005,"38":0.299268,"39":1.399518,"40":32.426568,"41":0.096822,"42":0.651348,"43":null},"opera":{"9":null,"9.5-9.6":0.04401,"10.0-10.1":0.052812,"10.5":0.017604,"10.6":0.061614,"11":0.079218,"11.1":0.035208,"11.5":0.105624,"11.6":0.26406,"12":0.536922,"12.1":8.62596,"15":0.052812,"16":0.123228,"17":0.061614,"18":0.13203,"19":0.070416,"20":0.202446,"21":0.079218,"22":0.149634,"23":0.079218,"24":0.105624,"25":0.140832,"26":0.431298,"27":11.873898,"28":0.105624,"29":0.017604},"safari":{"3.1":null,"3.2":null,"4":0.008802,"5":0.035208,"5.1":0.070416,"6":0.026406,"6.1":0.052812,"7":0.079218,"7.1":0.140832,"8":0.563328},"android":{"2.1":0,"2.2":0,"2.3":0.0563429899158,"3":0,"4":0.11387214804,"4.1":0.366822518557,"4.2-4.3":0.620959057282,"4.4":1.16007250816,"4.4.3-4.4.4":0.534368778043,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00751495692339,"6.0-6.1":0.0230722361683,"7.0-7.1":0.292028589216,"8":0.0627564823777,"8.1":0.927635735315},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00339731343284,"12.1":0.020383880597,"0":null},"ie":{"5.5":null,"6":0.13327409894,"7":0.204353618375,"8":2.7276765583,"9":0.852954233216,"10":0.728565074205,"11":2.89649041696,"0":null},"ie_mob":{"10":0.202908622807,"11":0.430833377193},"bb":{"7":0.0026955,"10":null},"and_uc":{"0":0.324658},"op_mini":{"5.0-8.0":2.36622880597},"and_chr":{"0":4.655596},"and_ff":{"0":0.062296}},"total":94.9908475}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BZ.json
new file mode 100644
index 0000000..4301496
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/BZ.json
@@ -0,0 +1 @@
+{"id":"BZ","name":"Belize","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.022485,"3.5":null,"3.6":0.05996,"4":0.01499,"5":0.052465,"6":0.01499,"7":0.022485,"8":0.01499,"9":0.037475,"10":0.037475,"11":0.05996,"12":0.067455,"13":0.02998,"14":0.01499,"15":0.04497,"16":0.01499,"17":0.01499,"18":0.02998,"19":0.022485,"20":0.02998,"21":0.07495,"22":0.04497,"23":0.112425,"24":0.097435,"25":0.052465,"26":0.05996,"27":0.082445,"28":0.022485,"29":0.05996,"30":0.127415,"31":0.4497,"32":0.20986,"33":0.457195,"34":0.4497,"35":14.682705,"36":1.31912,"37":0.04497,"38":0.01499,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.127415,"12":0.01499,"13":null,"14":null,"15":null,"16":0.007495,"17":null,"18":0.067455,"19":0.04497,"20":0.022485,"21":0.02998,"22":0.037475,"23":0.01499,"24":0.037475,"25":0.01499,"26":0.02998,"27":0.02998,"28":0.052465,"29":0.007495,"30":0.037475,"31":0.11992,"32":0.08994,"33":0.1499,"34":0.07495,"35":0.25483,"36":0.94437,"37":0.382245,"38":0.32978,"39":1.341605,"40":33.8774,"41":0.277315,"42":0.352265,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.01499,"11.5":0.02998,"11.6":null,"12":0.01499,"12.1":0.02998,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.01499,"27":0.37475,"28":0.04497,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.022485,"5":0.11992,"5.1":0.46469,"6":0.05996,"6.1":0.25483,"7":0.20986,"7.1":0.876915,"8":1.296635},"android":{"2.1":0,"2.2":0,"2.3":0.167985263541,"3":0,"4":0.339507058946,"4.1":1.09367247895,"4.2-4.3":1.85137443081,"4.4":3.45872816301,"4.4.3-4.4.4":1.59320760474,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0373916336982,"6.0-6.1":0.114798875389,"7.0-7.1":1.45302576564,"8":0.312252941058,"8.1":4.61557078422},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00117149253731,"12.1":0.00702895522388,"0":null},"ie":{"5.5":null,"6":0.240129487025,"7":0.0900485576343,"8":1.02805436632,"9":1.15562315631,"10":1.6508902233,"11":8.26945920941,"0":null},"ie_mob":{"10":0.254246513158,"11":0.539838486842},"bb":{"7":0.0764025,"10":null},"and_uc":{"0":0.34068},"op_mini":{"5.0-8.0":0.815944552239},"and_chr":{"0":7.72436},"and_ff":{"0":0.10521}},"total":98.9080275}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CA.json
new file mode 100644
index 0000000..12e9f7d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CA.json
@@ -0,0 +1 @@
+{"id":"CA","name":"Canada","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.056294,"3.5":null,"3.6":0.064336,"4":0.008042,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.016084,"11":0.016084,"12":0.024126,"13":0.008042,"14":0.008042,"15":0.008042,"16":0.056294,"17":0.016084,"18":0.008042,"19":0.016084,"20":0.024126,"21":0.024126,"22":0.016084,"23":0.016084,"24":0.048252,"25":0.024126,"26":0.048252,"27":0.168882,"28":0.04021,"29":0.048252,"30":0.064336,"31":1.32693,"32":0.836368,"33":0.136714,"34":0.28147,"35":10.149004,"36":0.611192,"37":0.016084,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.056294,"12":null,"13":null,"14":null,"15":null,"16":null,"17":0.008042,"18":0.016084,"19":null,"20":0.016084,"21":0.024126,"22":0.04021,"23":0.016084,"24":0.016084,"25":0.016084,"26":0.032168,"27":0.032168,"28":0.032168,"29":0.144756,"30":0.048252,"31":0.377974,"32":0.128672,"33":0.176924,"34":0.184966,"35":0.386016,"36":1.44756,"37":2.275886,"38":0.587066,"39":1.938122,"40":26.21692,"41":0.168882,"42":0.104546,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.088462,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.016084,"26":0.008042,"27":0.233218,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.144756,"5":0.265386,"5.1":1.029376,"6":0.184966,"6.1":0.868536,"7":1.214342,"7.1":1.841618,"8":3.128338},"android":{"2.1":0,"2.2":0,"2.3":0.0401452084416,"3":0,"4":0.0811355791662,"4.1":0.261366436012,"4.2-4.3":0.442442455141,"4.4":0.826568712756,"4.4.3-4.4.4":0.380745608483,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0598205470429,"6.0-6.1":0.183659574254,"7.0-7.1":2.32460546842,"8":0.499554041972,"8.1":7.38416436831},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":8.07135749822e-5,"12.1":0.000484281449893,"0":null},"ie":{"5.5":null,"6":0.0588819756385,"7":0.117763951277,"8":3.28897892495,"9":2.4393961336,"10":1.74122413674,"11":13.7615588778,"0":null},"ie_mob":{"10":0.0539137017544,"11":0.114474298246},"bb":{"7":0.11748,"10":null},"and_uc":{"0":0.050908},"op_mini":{"5.0-8.0":0.0562170049751},"and_chr":{"0":6.393086},"and_ff":{"0":0.0979}},"total":98.477906}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CD.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CD.json
new file mode 100644
index 0000000..13f713b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CD.json
@@ -0,0 +1 @@
+{"id":"CD","name":"Congo, Democratic Republic of the","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.01349,"3":0.203699,"3.5":0.012141,"3.6":0.058007,"4":0.016188,"5":0.006745,"6":0.005396,"7":0.010792,"8":0.010792,"9":0.016188,"10":0.009443,"11":0.020235,"12":0.047215,"13":0.021584,"14":0.024282,"15":0.025631,"16":0.035074,"17":0.01349,"18":0.032376,"19":0.022933,"20":0.024282,"21":0.020235,"22":0.020235,"23":0.022933,"24":0.014839,"25":0.029678,"26":0.016188,"27":0.025631,"28":0.017537,"29":0.055309,"30":0.114665,"31":0.08094,"32":0.102524,"33":0.172672,"34":0.292733,"35":3.109445,"36":0.299478,"37":0.012141,"38":0.004047,"39":null},"chrome":{"4":0.006745,"5":0.014839,"6":0.006745,"7":0.010792,"8":0.002698,"9":0.002698,"10":0.014839,"11":0.047215,"12":0.032376,"13":0.004047,"14":0.031027,"15":0.005396,"16":0.001349,"17":null,"18":0.004047,"19":0.001349,"20":0.005396,"21":0.004047,"22":0.002698,"23":0.004047,"24":null,"25":0.008094,"26":0.018886,"27":0.004047,"28":0.005396,"29":0.01349,"30":0.009443,"31":0.098477,"32":0.008094,"33":0.024282,"34":0.012141,"35":0.044517,"36":0.145692,"37":0.041819,"38":0.029678,"39":0.199652,"40":3.670629,"41":0.02698,"42":0.018886,"43":null},"opera":{"9":null,"9.5-9.6":0.006745,"10.0-10.1":0.002698,"10.5":0.002698,"10.6":0.008094,"11":0.006745,"11.1":0.004047,"11.5":0.009443,"11.6":0.024282,"12":0.016188,"12.1":0.062054,"15":0.010792,"16":0.004047,"17":0.005396,"18":0.006745,"19":0.004047,"20":0.008094,"21":0.006745,"22":0.018886,"23":0.006745,"24":0.008094,"25":0.012141,"26":0.064752,"27":0.435727,"28":0.004047,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.001349,"5":0.016188,"5.1":0.084987,"6":0.052611,"6.1":0.022933,"7":0.043168,"7.1":0.060705,"8":0.095779},"android":{"2.1":0,"2.2":0,"2.3":0.240427469591,"3":0,"4":0.485916570122,"4.1":1.56530936781,"4.2-4.3":2.64976379644,"4.4":4.95027505811,"4.4.3-4.4.4":2.28026473791,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00465428838237,"6.0-6.1":0.0142894818757,"7.0-7.1":0.180864013455,"8":0.0388673907019,"8.1":0.574518825585},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0785291911869,"12.1":0.471175147122,"0":null},"ie":{"5.5":null,"6":0.0351729672686,"7":0.0243505158014,"8":0.373374575621,"9":0.215096222912,"10":0.566825895598,"11":1.17288317777,"0":null},"ie_mob":{"10":0.911276609649,"11":1.93490239035},"bb":{"7":0.1254395,"10":null},"and_uc":{"0":5.398224},"op_mini":{"5.0-8.0":54.6955816617},"and_chr":{"0":2.975831},"and_ff":{"0":0.129765}},"total":92.834316855}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CF.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CF.json
new file mode 100644
index 0000000..4e0d9a8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CF.json
@@ -0,0 +1 @@
+{"id":"CF","name":"Central African Republic","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.029106,"3":0.135828,"3.5":0.006468,"3.6":0.029106,"4":0.01617,"5":0.042042,"6":0.029106,"7":0.009702,"8":null,"9":0.04851,"10":0.038808,"11":0.01617,"12":0.203742,"13":0.038808,"14":0.051744,"15":0.042042,"16":0.042042,"17":0.074382,"18":0.025872,"19":0.022638,"20":0.058212,"21":0.03234,"22":0.019404,"23":0.006468,"24":0.029106,"25":0.045276,"26":0.100254,"27":0.042042,"28":0.019404,"29":0.132594,"30":0.698544,"31":0.168168,"32":0.122892,"33":0.401016,"34":0.297528,"35":10.539606,"36":0.4851,"37":0.029106,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":0.042042,"9":null,"10":null,"11":0.006468,"12":0.019404,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.006468,"26":0.022638,"27":null,"28":0.006468,"29":null,"30":0.006468,"31":1.173942,"32":null,"33":0.025872,"34":0.01617,"35":0.009702,"36":0.01617,"37":0.054978,"38":0.029106,"39":0.219912,"40":8.272572,"41":null,"42":0.042042,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.022638,"11.5":null,"11.6":0.006468,"12":0.006468,"12.1":0.122892,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.025872,"21":0.006468,"22":0.012936,"23":null,"24":null,"25":null,"26":0.067914,"27":1.27743,"28":0.116424,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.181104,"5.1":0.087318,"6":null,"6.1":0.01617,"7":0.04851,"7.1":0.252252,"8":0.297528},"android":{"2.1":0,"2.2":0,"2.3":0.155964775964,"3":0,"4":0.315213020896,"4.1":1.01541277825,"4.2-4.3":1.71889600457,"4.4":3.21123265038,"4.4.3-4.4.4":1.47920276993,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00546022110654,"6.0-6.1":0.0167638367306,"7.0-7.1":0.212182276333,"8":0.0455976359072,"8.1":0.674002029923},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0764793631841,"12.1":0.458876179104,"0":null},"ie":{"5.5":null,"6":0.029106,"7":0.109956,"8":0.966966,"9":0.249018,"10":0.966966,"11":2.968812,"0":null},"ie_mob":{"10":0.047658754386,"11":0.101193245614},"bb":{"7":0.020298,"10":null},"and_uc":{"0":1.745628},"op_mini":{"5.0-8.0":53.2678764577},"and_chr":{"0":2.789844},"and_ff":{"0":0.087958}},"total":99.384724}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CG.json
new file mode 100644
index 0000000..b5e2984
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CG.json
@@ -0,0 +1 @@
+{"id":"CG","name":"Congo, Republic of the","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.019842,"3":0.152122,"3.5":0.059526,"3.6":0.145508,"4":0.171964,"5":0.119052,"6":0.026456,"7":0.052912,"8":0.079368,"9":0.03307,"10":0.06614,"11":0.476208,"12":0.3307,"13":0.16535,"14":0.13228,"15":0.119052,"16":0.205034,"17":0.06614,"18":0.085982,"19":0.125666,"20":0.072754,"21":0.059526,"22":0.085982,"23":0.059526,"24":0.092596,"25":0.191806,"26":0.178578,"27":0.06614,"28":0.079368,"29":0.26456,"30":0.324086,"31":0.515892,"32":0.436524,"33":0.515892,"34":0.720926,"35":17.818116,"36":1.408782,"37":0.079368,"38":null,"39":null},"chrome":{"4":0.09921,"5":0.013228,"6":null,"7":null,"8":0.006614,"9":0.145508,"10":0.039684,"11":0.105824,"12":0.085982,"13":null,"14":0.026456,"15":0.019842,"16":0.006614,"17":null,"18":null,"19":0.013228,"20":null,"21":0.03307,"22":0.03307,"23":0.03307,"24":0.013228,"25":0.03307,"26":0.218262,"27":0.019842,"28":0.013228,"29":0.039684,"30":0.152122,"31":0.813522,"32":0.079368,"33":0.178578,"34":0.019842,"35":0.205034,"36":0.6614,"37":0.085982,"38":0.191806,"39":1.130994,"40":16.343194,"41":0.191806,"42":0.125666,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":0.006614,"10.6":0.026456,"11":0.039684,"11.1":0.019842,"11.5":0.019842,"11.6":0.052912,"12":0.059526,"12.1":0.324086,"15":0.03307,"16":0.019842,"17":0.026456,"18":0.019842,"19":null,"20":0.059526,"21":0.03307,"22":0.026456,"23":0.013228,"24":null,"25":0.006614,"26":0.119052,"27":1.038398,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.244718,"5.1":0.185192,"6":0.145508,"6.1":0.105824,"7":0.46298,"7.1":0.171964,"8":0.317472},"android":{"2.1":0,"2.2":0,"2.3":0.13035343175,"3":0,"4":0.263451146273,"4.1":0.84866944776,"4.2-4.3":1.43663203202,"4.4":2.68390855266,"4.4.3-4.4.4":1.23629938954,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0143797051913,"6.0-6.1":0.0441482176925,"7.0-7.1":0.558790298223,"8":0.120083152124,"8.1":1.77501062677},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0185736659559,"12.1":0.111441995736,"0":null},"ie":{"5.5":null,"6":0.0466058324468,"7":0.0599217845745,"8":1.7310737766,"9":1.58459830319,"10":3.22911839096,"11":8.36907591223,"0":null},"ie_mob":{"10":0.192972298246,"11":0.409735701754},"bb":{"7":0.318284,"10":null},"and_uc":{"0":3.494352},"op_mini":{"5.0-8.0":12.9365583383},"and_chr":{"0":5.508616},"and_ff":{"0":0.281038}},"total":97.762688}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CH.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CH.json
new file mode 100644
index 0000000..7c46406
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CH.json
@@ -0,0 +1 @@
+{"id":"CH","name":"Switzerland","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.015666,"3.5":null,"3.6":0.046998,"4":0.007833,"5":0.007833,"6":null,"7":null,"8":null,"9":0.007833,"10":0.023499,"11":0.015666,"12":0.046998,"13":0.015666,"14":0.015666,"15":0.015666,"16":0.070497,"17":0.054831,"18":0.015666,"19":0.031332,"20":0.023499,"21":0.023499,"22":0.015666,"23":0.015666,"24":0.07833,"25":0.023499,"26":0.046998,"27":0.117495,"28":0.046998,"29":0.062664,"30":0.07833,"31":0.407316,"32":0.140994,"33":0.195825,"34":0.375984,"35":15.478008,"36":0.86163,"37":0.015666,"38":0.015666,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.046998,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.007833,"19":null,"20":null,"21":0.039165,"22":0.07833,"23":0.007833,"24":0.015666,"25":0.015666,"26":0.031332,"27":0.015666,"28":0.023499,"29":0.023499,"30":0.023499,"31":0.195825,"32":0.093996,"33":0.148827,"34":0.219324,"35":0.250656,"36":0.281988,"37":0.297654,"38":0.368151,"39":1.378608,"40":23.624328,"41":0.164493,"42":0.086163,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.015666,"12":null,"12.1":0.328986,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.007833,"25":0.015666,"26":0.015666,"27":0.681471,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.101829,"5":0.352485,"5.1":1.511769,"6":0.297654,"6.1":1.080954,"7":0.853797,"7.1":2.091411,"8":4.574472},"android":{"2.1":0,"2.2":0,"2.3":0.0428038257615,"3":0,"4":0.086508784697,"4.1":0.278675434037,"4.2-4.3":0.471743216551,"4.4":0.8813082441,"4.4.3-4.4.4":0.405960494854,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0711173758409,"6.0-6.1":0.218342820564,"7.0-7.1":2.76359627171,"8":0.593892471935,"8.1":8.77862905995},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":6.77668798863e-5,"12.1":0.000406601279318,"0":null},"ie":{"5.5":null,"6":0.0235763948127,"7":0.070729184438,"8":1.08451416138,"9":2.31048669164,"10":1.65820643516,"11":13.9336493343,"0":null},"ie_mob":{"10":0.163047741228,"11":0.346197258772},"bb":{"7":0.015169,"10":null},"and_uc":{"0":0.041173},"op_mini":{"5.0-8.0":0.0471996318408},"and_chr":{"0":6.238117},"and_ff":{"0":0.143022}},"total":98.4521812017}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CI.json
new file mode 100644
index 0000000..153a887
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CI.json
@@ -0,0 +1 @@
+{"id":"CI","name":"Cote d'Ivoire","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.01199,"3":0.05995,"3.5":0.017985,"3.6":0.04796,"4":0.053955,"5":0.02398,"6":0.029975,"7":0.02398,"8":0.02398,"9":0.029975,"10":0.065945,"11":0.077935,"12":0.14388,"13":0.07194,"14":0.077935,"15":0.1199,"16":0.125895,"17":0.09592,"18":0.05995,"19":0.065945,"20":0.149875,"21":0.07194,"22":0.07194,"23":0.07194,"24":0.089925,"25":0.08393,"26":0.125895,"27":0.125895,"28":0.08393,"29":0.221815,"30":0.497585,"31":0.62348,"32":0.449625,"33":0.68343,"34":0.737385,"35":14.16019,"36":0.977185,"37":0.09592,"38":0.005995,"39":null},"chrome":{"4":0.065945,"5":0.065945,"6":0.053955,"7":0.07194,"8":0.053955,"9":0.20383,"10":0.05995,"11":0.257785,"12":0.365695,"13":0.149875,"14":0.13189,"15":0.1199,"16":0.125895,"17":0.02398,"18":0.017985,"19":0.017985,"20":0.01199,"21":0.017985,"22":0.041965,"23":0.053955,"24":0.005995,"25":0.04796,"26":0.101915,"27":0.10791,"28":0.113905,"29":0.07194,"30":0.329725,"31":0.257785,"32":0.065945,"33":0.221815,"34":0.089925,"35":0.22781,"36":1.04313,"37":0.281765,"38":0.34771,"39":1.564695,"40":23.434455,"41":0.257785,"42":0.09592,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.01199,"11.6":0.017985,"12":0.017985,"12.1":0.053955,"15":0.017985,"16":0.01199,"17":0.01199,"18":0.01199,"19":0.03597,"20":0.01199,"21":null,"22":0.01199,"23":null,"24":null,"25":0.029975,"26":0.077935,"27":1.33089,"28":0.017985,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.017985,"5":0.089925,"5.1":0.137885,"6":0.065945,"6.1":0.07194,"7":0.14388,"7.1":0.16786,"8":0.33572},"android":{"2.1":0,"2.2":0,"2.3":0.257579083065,"3":0,"4":0.520580883668,"4.1":1.67697539869,"4.2-4.3":2.83879263125,"4.4":5.30341775237,"4.4.3-4.4.4":2.44293425096,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00767903152927,"6.0-6.1":0.0235759739934,"7.0-7.1":0.29840447083,"8":0.064126649262,"8.1":0.947888874385},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0141185501066,"12.1":0.0847113006397,"0":null},"ie":{"5.5":null,"6":0.0786566203704,"7":0.0423535648148,"8":0.629252962963,"9":0.502192268519,"10":0.707909583333,"11":2.60171898148,"0":null},"ie_mob":{"10":0.233379078947,"11":0.495530921053},"bb":{"7":0.11714625,"10":null},"and_uc":{"0":2.81952},"op_mini":{"5.0-8.0":9.83357014925},"and_chr":{"0":6.782745},"and_ff":{"0":0.2403}},"total":93.4061552315}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CK.json
new file mode 100644
index 0000000..ee9bb92
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CK.json
@@ -0,0 +1 @@
+{"id":"CK","name":"Cook Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.027531,"4":0.009177,"5":0.09177,"6":0.009177,"7":null,"8":null,"9":null,"10":0.009177,"11":null,"12":0.036708,"13":0.018354,"14":null,"15":0.027531,"16":0.036708,"17":0.009177,"18":null,"19":null,"20":0.027531,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":0.137655,"30":0.027531,"31":4.120473,"32":null,"33":0.174363,"34":0.192717,"35":4.414137,"36":0.211071,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":0.036708,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.027531,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":0.055062,"29":null,"30":null,"31":null,"32":0.027531,"33":0.009177,"34":0.009177,"35":0.009177,"36":0.165186,"37":0.156009,"38":0.073416,"39":0.330372,"40":7.011228,"41":0.018354,"42":null,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.018354,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.027531,"5":null,"5.1":0.073416,"6":0.027531,"6.1":0.110124,"7":0.174363,"7.1":0.220248,"8":0.871815},"android":{"2.1":0,"2.2":0,"2.3":0.0356502141595,"3":0,"4":0.0720509591434,"4.1":0.232101657449,"4.2-4.3":0.392902886579,"4.4":0.734019146273,"4.4.3-4.4.4":0.338114136397,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0122988875389,"6.0-6.1":0.037759742444,"7.0-7.1":0.477930454363,"8":0.102706499448,"8.1":1.51815741621},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000147402985075,"12.1":0.000884417910448,"0":null},"ie":{"5.5":null,"6":null,"7":0.045885,"8":5.221713,"9":3.331251,"10":1.339842,"11":3.248658,"0":null},"ie_mob":{"10":0.0972331184211,"11":0.206453881579},"bb":{"7":0.00061725,"10":null},"and_uc":{"0":0.046911},"op_mini":{"5.0-8.0":0.102666179104},"and_chr":{"0":3.797119},"and_ff":{"0":0.031274}},"total":40.45744525}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CL.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CL.json
new file mode 100644
index 0000000..a0956ab
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CL.json
@@ -0,0 +1 @@
+{"id":"CL","name":"Chile","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.014596,"3.5":null,"3.6":0.03649,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.007298,"11":0.007298,"12":0.021894,"13":null,"14":null,"15":null,"16":0.021894,"17":0.007298,"18":0.014596,"19":null,"20":0.014596,"21":0.007298,"22":0.007298,"23":0.014596,"24":0.014596,"25":0.007298,"26":0.021894,"27":0.014596,"28":0.021894,"29":0.029192,"30":0.102172,"31":0.131364,"32":0.080278,"33":0.087576,"34":0.21894,"35":7.210424,"36":0.394092,"37":0.014596,"38":null,"39":null},"chrome":{"4":0.007298,"5":0.007298,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.03649,"12":0.014596,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.014596,"19":null,"20":null,"21":0.021894,"22":0.131364,"23":0.007298,"24":0.014596,"25":0.014596,"26":0.065682,"27":0.043788,"28":0.021894,"29":0.03649,"30":0.029192,"31":0.233536,"32":0.10947,"33":0.18245,"34":0.25543,"35":0.591138,"36":0.737098,"37":0.788184,"38":1.029018,"39":3.17463,"40":43.20416,"41":0.29192,"42":0.094874,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.03649,"11.6":null,"12":null,"12.1":0.226238,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007298,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.021894,"27":0.810078,"28":0.029192,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.03649,"5":0.07298,"5.1":0.197046,"6":0.065682,"6.1":0.153258,"7":0.233536,"7.1":0.40139,"8":0.883058},"android":{"2.1":0,"2.2":0,"2.3":0.127931371244,"3":0,"4":0.258556034515,"4.1":0.832900559102,"4.2-4.3":1.40993837571,"4.4":2.63403960162,"4.4.3-4.4.4":1.2133280578,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0237539415604,"6.0-6.1":0.0729287679486,"7.0-7.1":0.923069834321,"8":0.19836624882,"8.1":2.93215320735},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0016400199005,"12.1":0.00984011940299,"0":null},"ie":{"5.5":null,"6":0.0599415765921,"7":0.11239045611,"8":1.58845177969,"9":0.846674769363,"10":1.10891916695,"11":4.99013625129,"0":null},"ie_mob":{"10":0.276836491228,"11":0.587803508772},"bb":{"7":0.0182385,"10":null},"and_uc":{"0":0.091868},"op_mini":{"5.0-8.0":1.1422738607},"and_chr":{"0":14.553762},"and_ff":{"0":0.16212}},"total":99.0355365}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CM.json
new file mode 100644
index 0000000..5c95269
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CM.json
@@ -0,0 +1 @@
+{"id":"CM","name":"Cameroon","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.053334,"3":0.248892,"3.5":0.171854,"3.6":0.32593,"4":0.106668,"5":0.05926,"6":0.047408,"7":0.053334,"8":0.11852,"9":0.071112,"10":0.183706,"11":0.225188,"12":0.337782,"13":0.26667,"14":0.160002,"15":0.242966,"16":0.361486,"17":0.248892,"18":0.154076,"19":0.302226,"20":0.314078,"21":0.260744,"22":0.219262,"23":0.290374,"24":0.320004,"25":0.438524,"26":0.450376,"27":0.308152,"28":0.308152,"29":0.693342,"30":1.078532,"31":1.031124,"32":0.930382,"33":1.528908,"34":1.522982,"35":20.047658,"36":2.737812,"37":0.14815,"38":0.02963,"39":0.005926},"chrome":{"4":0.047408,"5":0.011852,"6":0.023704,"7":0.02963,"8":0.023704,"9":0.005926,"10":0.041482,"11":0.100742,"12":0.071112,"13":0.041482,"14":0.017778,"15":0.041482,"16":0.02963,"17":0.017778,"18":0.017778,"19":0.023704,"20":0.005926,"21":0.023704,"22":0.02963,"23":0.017778,"24":0.017778,"25":0.071112,"26":0.023704,"27":0.041482,"28":0.065186,"29":0.077038,"30":0.094816,"31":0.189632,"32":0.05926,"33":0.231114,"34":0.071112,"35":0.124446,"36":0.426672,"37":0.082964,"38":0.136298,"39":0.657786,"40":11.419402,"41":0.171854,"42":0.160002,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.011852,"11.1":0.005926,"11.5":0.023704,"11.6":0.035556,"12":0.035556,"12.1":0.136298,"15":0.011852,"16":0.011852,"17":null,"18":0.011852,"19":0.017778,"20":0.035556,"21":0.017778,"22":0.023704,"23":0.011852,"24":0.005926,"25":0.011852,"26":0.136298,"27":0.924456,"28":0.005926,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.041482,"5":0.047408,"5.1":0.08889,"6":0.023704,"6.1":0.100742,"7":0.065186,"7.1":0.154076,"8":0.160002},"android":{"2.1":0,"2.2":0,"2.3":0.0993828984302,"3":0,"4":0.200858068406,"4.1":0.647034975569,"4.2-4.3":1.09530415428,"4.4":2.04624157189,"4.4.3-4.4.4":0.942568331427,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00468679767045,"6.0-6.1":0.0143892910935,"7.0-7.1":0.182127312983,"8":0.0391388717743,"8.1":0.578531726479},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0342424477612,"12.1":0.205454686567,"0":null},"ie":{"5.5":null,"6":0.0936919807923,"7":0.0874458487395,"8":0.986888864346,"9":0.424736979592,"10":0.874458487395,"11":2.69832904682,"0":null},"ie_mob":{"10":0.251748184211,"11":0.534533815789},"bb":{"7":0.0947205,"10":null},"and_uc":{"0":3.4629},"op_mini":{"5.0-8.0":23.8498648657},"and_chr":{"0":2.447368},"and_ff":{"0":0.301476}},"total":95.5024937077}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CN.json
new file mode 100644
index 0000000..d474d86
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CN.json
@@ -0,0 +1 @@
+{"id":"CN","name":"China","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.030352,"3.5":null,"3.6":0.015176,"4":null,"5":null,"6":null,"7":null,"8":1.358252,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":0.015176,"17":null,"18":null,"19":null,"20":null,"21":0.007588,"22":0.007588,"23":null,"24":0.015176,"25":0.007588,"26":0.007588,"27":0.015176,"28":0.015176,"29":0.015176,"30":0.022764,"31":0.068292,"32":0.053116,"33":0.068292,"34":0.136584,"35":1.851472,"36":0.098644,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.07588,"12":0.015176,"13":null,"14":0.015176,"15":null,"16":null,"17":0.083468,"18":0.015176,"19":null,"20":0.11382,"21":0.751212,"22":0.030352,"23":0.022764,"24":0.03794,"25":0.053116,"26":0.106232,"27":0.121408,"28":0.07588,"29":0.121408,"30":1.768004,"31":22.771588,"32":0.235228,"33":0.902972,"34":0.91056,"35":0.30352,"36":0.295932,"37":0.349048,"38":4.734912,"39":3.710532,"40":2.572332,"41":0.121408,"42":0.053116,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.045528,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":0.007588,"24":0.007588,"25":0.007588,"26":0.007588,"27":0.182112,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.030352,"5":0.022764,"5.1":0.022764,"6":0.015176,"6.1":0.015176,"7":0.060704,"7.1":0.07588,"8":0.280756},"android":{"2.1":0,"2.2":0,"2.3":0.165083709325,"3":0,"4":0.333642865163,"4.1":1.07478183387,"4.2-4.3":1.81939624909,"4.4":3.39898668884,"4.4.3-4.4.4":1.56568865371,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0184434806708,"6.0-6.1":0.0566247213576,"7.0-7.1":0.716707187469,"8":0.154019242093,"8.1":2.27663736841},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":9.6e-5,"12.1":0.000576,"0":null},"ie":{"5.5":null,"6":1.91718621201,"7":0.127106268199,"8":11.4289719489,"9":4.27924436271,"10":2.11843780332,"11":4.98892102682,"0":null},"ie_mob":{"10":0.0370686315789,"11":0.0787073684211},"bb":{"7":0.002412,"10":null},"and_uc":{"0":8.263512},"op_mini":{"5.0-8.0":0.066864},"and_chr":{"0":1.352128},"and_ff":{"0":0.02412}},"total":91.224263622}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CO.json
new file mode 100644
index 0000000..d9e0d68
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CO.json
@@ -0,0 +1 @@
+{"id":"CO","name":"Colombia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.023076,"3.5":0.007692,"3.6":0.046152,"4":0.007692,"5":null,"6":0.007692,"7":null,"8":0.007692,"9":null,"10":0.015384,"11":0.015384,"12":0.030768,"13":0.015384,"14":0.023076,"15":0.007692,"16":0.023076,"17":0.015384,"18":0.015384,"19":0.015384,"20":0.015384,"21":0.023076,"22":0.015384,"23":0.023076,"24":0.015384,"25":0.015384,"26":0.023076,"27":0.015384,"28":0.023076,"29":0.030768,"30":0.053844,"31":0.130764,"32":0.099996,"33":0.107688,"34":0.138456,"35":5.476704,"36":0.284604,"37":0.015384,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":0.015384,"9":null,"10":null,"11":0.07692,"12":0.023076,"13":0.023076,"14":null,"15":0.007692,"16":null,"17":null,"18":0.061536,"19":null,"20":0.015384,"21":0.030768,"22":0.199992,"23":0.030768,"24":0.023076,"25":0.023076,"26":0.099996,"27":0.053844,"28":0.084612,"29":0.061536,"30":0.07692,"31":0.276912,"32":0.11538,"33":0.184608,"34":0.253836,"35":0.453828,"36":0.553824,"37":0.73074,"38":1.030728,"39":2.61528,"40":50.528748,"41":0.26922,"42":0.084612,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.030768,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007692,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.015384,"27":0.569208,"28":0.007692,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.030768,"5":0.046152,"5.1":0.1923,"6":0.107688,"6.1":0.184608,"7":0.292296,"7.1":0.492288,"8":1.084572},"android":{"2.1":0,"2.2":0,"2.3":0.121722465953,"3":0,"4":0.246007510136,"4.1":0.792477317809,"4.2-4.3":1.34150970371,"4.4":2.50620150951,"4.4.3-4.4.4":1.15444149288,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0121265596947,"6.0-6.1":0.0372306657295,"7.0-7.1":0.471233854805,"8":0.101267410784,"8.1":1.49688550899},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0028509623312,"12.1":0.0171057739872,"0":null},"ie":{"5.5":null,"6":0.0402041162791,"7":0.0643265860465,"8":1.5277564186,"9":0.812123148837,"10":1.02922537674,"11":3.44147235349,"0":null},"ie_mob":{"10":0.292630105263,"11":0.621337894737},"bb":{"7":0.147712,"10":null},"and_uc":{"0":0.306964},"op_mini":{"5.0-8.0":1.98569526368},"and_chr":{"0":12.102124},"and_ff":{"0":0.106168}},"total":98.629932}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CR.json
new file mode 100644
index 0000000..f96ce2d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CR.json
@@ -0,0 +1 @@
+{"id":"CR","name":"Costa Rica","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.019749,"3.5":null,"3.6":0.046081,"4":0.013166,"5":0.006583,"6":0.006583,"7":0.013166,"8":0.013166,"9":0.006583,"10":0.032915,"11":0.019749,"12":0.059247,"13":0.006583,"14":0.032915,"15":0.006583,"16":0.06583,"17":0.013166,"18":0.019749,"19":0.013166,"20":0.026332,"21":0.052664,"22":0.013166,"23":0.026332,"24":0.026332,"25":0.026332,"26":0.026332,"27":0.019749,"28":0.039498,"29":0.046081,"30":0.078996,"31":0.230405,"32":0.125077,"33":0.151409,"34":0.250154,"35":9.953496,"36":0.533223,"37":0.026332,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.052664,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.032915,"19":0.006583,"20":null,"21":0.026332,"22":0.032915,"23":null,"24":0.019749,"25":0.019749,"26":0.039498,"27":0.039498,"28":0.039498,"29":0.032915,"30":0.032915,"31":0.151409,"32":0.118494,"33":0.111911,"34":0.151409,"35":0.296235,"36":0.546389,"37":0.520057,"38":0.763628,"39":2.396212,"40":33.619381,"41":0.144826,"42":0.078996,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.019749,"11.5":0.013166,"11.6":null,"12":0.006583,"12.1":0.059247,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.013166,"22":null,"23":null,"24":null,"25":null,"26":0.013166,"27":0.533223,"28":0.013166,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.052664,"5":0.13166,"5.1":0.388397,"6":0.171158,"6.1":0.342316,"7":0.375231,"7.1":0.849207,"8":2.080228},"android":{"2.1":0,"2.2":0,"2.3":0.235285973594,"3":0,"4":0.475525336106,"4.1":1.53183552282,"4.2-4.3":2.59309909845,"4.4":4.84441436158,"4.4.3-4.4.4":2.23150170745,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.03070462195,"6.0-6.1":0.0942685761623,"7.0-7.1":1.19317083543,"8":0.256410527161,"8.1":3.7901354393},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.004182,"12.1":0.025092,"0":null},"ie":{"5.5":null,"6":0.0134483526608,"7":0.100862644956,"8":1.01535062589,"9":0.880867099285,"10":1.05569568388,"11":5.39951359333,"0":null},"ie_mob":{"10":0.377443618421,"11":0.801421381579},"bb":{"7":0.013668,"10":null},"and_uc":{"0":0.427125},"op_mini":{"5.0-8.0":2.912763},"and_chr":{"0":10.909939},"and_ff":{"0":0.13668}},"total":97.733799}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CU.json
new file mode 100644
index 0000000..e1b45fd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CU.json
@@ -0,0 +1 @@
+{"id":"CU","name":"Cuba","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.049165,"3":0.226159,"3.5":0.934135,"3.6":0.993133,"4":0.717809,"5":0.157328,"6":0.304823,"7":0.344155,"8":0.176994,"9":0.265491,"10":0.501483,"11":0.403153,"12":0.599813,"13":0.226159,"14":0.216326,"15":0.766974,"16":0.334322,"17":0.924302,"18":0.639145,"19":0.530982,"20":1.032465,"21":0.580147,"22":0.806306,"23":0.816139,"24":1.681443,"25":5.417983,"26":3.274389,"27":1.27829,"28":1.101296,"29":3.520214,"30":2.802405,"31":3.14656,"32":2.910568,"33":4.985331,"34":4.454349,"35":24.592333,"36":1.76994,"37":0.09833,"38":0.127829,"39":0.019666},"chrome":{"4":0.039332,"5":0.009833,"6":0.088497,"7":null,"8":0.029499,"9":0.019666,"10":0.127829,"11":0.029499,"12":0.039332,"13":0.009833,"14":0.049165,"15":0.029499,"16":0.019666,"17":0.039332,"18":0.117996,"19":0.039332,"20":0.019666,"21":0.108163,"22":0.127829,"23":0.216326,"24":0.09833,"25":0.245825,"26":0.117996,"27":0.285157,"28":0.255658,"29":0.226159,"30":0.19666,"31":0.432652,"32":0.19666,"33":0.855471,"34":1.012799,"35":0.176994,"36":0.275324,"37":0.383487,"38":1.642111,"39":0.668644,"40":4.061029,"41":0.019666,"42":0.127829,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.019666,"10.5":null,"10.6":0.009833,"11":0.009833,"11.1":null,"11.5":0.049165,"11.6":0.039332,"12":0.019666,"12.1":0.137662,"15":null,"16":null,"17":0.009833,"18":null,"19":null,"20":0.049165,"21":null,"22":0.009833,"23":null,"24":0.019666,"25":0.049165,"26":0.019666,"27":0.137662,"28":0.009833,"29":0.019666},"safari":{"3.1":null,"3.2":null,"4":0.019666,"5":0.049165,"5.1":0.068831,"6":0.029499,"6.1":0.019666,"7":0.029499,"7.1":0.039332,"8":0.147495},"android":{"2.1":0,"2.2":0,"2.3":0.00846441210105,"3":0,"4":0.0171070223516,"4.1":0.0551077777316,"4.2-4.3":0.093286731261,"4.4":0.174277790207,"4.4.3-4.4.4":0.0802782663479,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00307964835827,"6.0-6.1":0.00945506074907,"7.0-7.1":0.119674054624,"8":0.0257177652375,"8.1":0.380147471031},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":9.30547263682e-5,"12.1":0.000558328358209,"0":null},"ie":{"5.5":0.0404557714286,"6":0.445013485714,"7":0.121367314286,"8":3.80284251429,"9":0.758545714286,"10":1.5575472,"11":3.185892,"0":null},"ie_mob":{"10":0.00748570175439,"11":0.0158942982456},"bb":{"7":0.006012,"10":null},"and_uc":{"0":0.031062},"op_mini":{"5.0-8.0":0.0648126169154},"and_chr":{"0":0.473178},"and_ff":{"0":0.084168}},"total":98.740902}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CV.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CV.json
new file mode 100644
index 0000000..54da215
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CV.json
@@ -0,0 +1 @@
+{"id":"CV","name":"Cape Verde","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.015928,"3":0.007964,"3.5":0.03982,"3.6":0.047784,"4":0.023892,"5":0.007964,"6":0.023892,"7":0.015928,"8":0.007964,"9":0.055748,"10":0.023892,"11":0.031856,"12":0.374308,"13":0.111496,"14":0.055748,"15":0.023892,"16":0.023892,"17":0.023892,"18":0.023892,"19":0.055748,"20":0.031856,"21":0.023892,"22":0.063712,"23":0.031856,"24":0.023892,"25":0.015928,"26":0.07964,"27":0.11946,"28":0.047784,"29":0.103532,"30":0.390236,"31":0.111496,"32":0.183172,"33":0.230956,"34":0.493768,"35":8.210884,"36":0.581372,"37":0.03982,"38":null,"39":null},"chrome":{"4":0.015928,"5":null,"6":0.015928,"7":null,"8":null,"9":null,"10":0.007964,"11":0.063712,"12":0.11946,"13":null,"14":null,"15":0.015928,"16":null,"17":0.007964,"18":0.031856,"19":0.047784,"20":0.031856,"21":0.015928,"22":0.031856,"23":0.007964,"24":0.007964,"25":0.03982,"26":0.03982,"27":0.023892,"28":0.055748,"29":0.023892,"30":0.103532,"31":0.342452,"32":0.175208,"33":1.584836,"34":0.31856,"35":0.461912,"36":1.887468,"37":0.270776,"38":0.493768,"39":1.775972,"40":40.791608,"41":0.191136,"42":0.27874,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.007964,"12":null,"12.1":0.063712,"15":0.007964,"16":null,"17":null,"18":0.031856,"19":null,"20":0.015928,"21":0.031856,"22":null,"23":null,"24":null,"25":null,"26":0.015928,"27":0.95568,"28":null,"29":null},"safari":{"3.1":null,"3.2":0.007964,"4":0.007964,"5":0.07964,"5.1":0.11946,"6":0.047784,"6.1":0.15928,"7":0.095568,"7.1":0.191136,"8":0.95568},"android":{"2.1":0,"2.2":0,"2.3":0.163036631666,"3":0,"4":0.329505613473,"4.1":1.0614542809,"4.2-4.3":1.79683529847,"4.4":3.35683843726,"4.4.3-4.4.4":1.54627373823,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0153702769354,"6.0-6.1":0.0471894467316,"7.0-7.1":0.597283568631,"8":0.12835529511,"8.1":1.89728541259},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00375654299929,"12.1":0.0225392579957,"0":null},"ie":{"5.5":null,"6":0.0240020379965,"7":0.0240020379965,"8":1.60813654577,"9":1.02408695452,"10":1.96016643638,"11":9.20878191134,"0":null},"ie_mob":{"10":0.228808894737,"11":0.485827105263},"bb":{"7":0.005599,"10":null},"and_uc":{"0":0.934524},"op_mini":{"5.0-8.0":2.616432199},"and_chr":{"0":5.389536},"and_ff":{"0":0.067188}},"total":98.398166924}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CY.json
new file mode 100644
index 0000000..c02fd5f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CY.json
@@ -0,0 +1 @@
+{"id":"CY","name":"Cyprus","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.058926,"3.5":null,"3.6":0.033672,"4":0.016836,"5":0.008418,"6":0.016836,"7":null,"8":null,"9":0.008418,"10":0.008418,"11":0.008418,"12":0.025254,"13":null,"14":0.008418,"15":0.016836,"16":0.04209,"17":null,"18":null,"19":0.058926,"20":0.008418,"21":0.033672,"22":0.008418,"23":0.008418,"24":0.016836,"25":0.025254,"26":0.025254,"27":0.016836,"28":0.025254,"29":0.025254,"30":0.04209,"31":0.109434,"32":0.075762,"33":0.092598,"34":0.16836,"35":11.103342,"36":0.791292,"37":0.033672,"38":null,"39":null},"chrome":{"4":0.008418,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.075762,"12":0.008418,"13":null,"14":0.151524,"15":0.008418,"16":null,"17":null,"18":0.050508,"19":null,"20":0.033672,"21":0.008418,"22":0.075762,"23":0.016836,"24":null,"25":0.033672,"26":0.04209,"27":0.033672,"28":0.050508,"29":0.016836,"30":0.33672,"31":0.202032,"32":0.134688,"33":0.134688,"34":0.134688,"35":0.328302,"36":0.67344,"37":0.404064,"38":0.690276,"39":3.53556,"40":43.933542,"41":0.134688,"42":0.202032,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.143106,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.008418,"21":null,"22":null,"23":null,"24":null,"25":0.025254,"26":0.008418,"27":0.816546,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.058926,"5":0.109434,"5.1":0.328302,"6":0.04209,"6.1":0.151524,"7":0.16836,"7.1":0.564006,"8":0.976488},"android":{"2.1":0,"2.2":0,"2.3":0.0834649319056,"3":0,"4":0.168687020272,"4.1":0.543400635617,"4.2-4.3":0.919871407423,"4.4":1.71849901902,"4.4.3-4.4.4":0.791598985757,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0199652244201,"6.0-6.1":0.0612967416407,"7.0-7.1":0.775841615624,"8":0.166727137263,"8.1":2.46447928105},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000209134328358,"12.1":0.00125480597015,"0":null},"ie":{"5.5":null,"6":0.0255485072886,"7":0.110710198251,"8":2.70814177259,"9":1.09006964431,"10":0.834584571429,"11":9.83617530612,"0":null},"ie_mob":{"10":0.0876275350877,"11":0.186058464912},"bb":{"7":0.0122605,"10":null},"and_uc":{"0":0.22939},"op_mini":{"5.0-8.0":0.145662059701},"and_chr":{"0":7.581206},"and_ff":{"0":0.07119}},"total":98.4156565}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CZ.json
new file mode 100644
index 0000000..3fc3002
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/CZ.json
@@ -0,0 +1 @@
+{"id":"CZ","name":"Czech Republic","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.018664,"3.5":null,"3.6":0.04666,"4":0.009332,"5":null,"6":null,"7":null,"8":null,"9":0.018664,"10":0.018664,"11":0.009332,"12":0.065324,"13":0.009332,"14":0.009332,"15":0.009332,"16":0.027996,"17":0.027996,"18":0.027996,"19":0.018664,"20":0.037328,"21":0.055992,"22":0.018664,"23":0.037328,"24":0.055992,"25":0.065324,"26":0.065324,"27":0.027996,"28":0.065324,"29":0.055992,"30":0.074656,"31":3.275532,"32":2.0997,"33":0.167976,"34":0.335952,"35":17.982764,"36":1.11984,"37":0.018664,"38":0.009332,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.102652,"12":0.018664,"13":0.009332,"14":null,"15":0.027996,"16":null,"17":null,"18":0.018664,"19":null,"20":0.055992,"21":null,"22":0.102652,"23":null,"24":0.027996,"25":0.018664,"26":0.04666,"27":0.04666,"28":0.018664,"29":0.037328,"30":0.037328,"31":0.149312,"32":0.04666,"33":0.102652,"34":0.177308,"35":0.195972,"36":3.144884,"37":4.666,"38":0.354616,"39":1.3998,"40":30.42232,"41":0.167976,"42":0.055992,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.009332,"11.5":0.018664,"11.6":0.027996,"12":0.027996,"12.1":1.101176,"15":0.018664,"16":0.009332,"17":0.018664,"18":0.018664,"19":0.009332,"20":0.083988,"21":0.04666,"22":null,"23":null,"24":null,"25":0.009332,"26":0.065324,"27":2.780936,"28":0.037328,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.018664,"5":0.055992,"5.1":0.111984,"6":0.027996,"6.1":0.111984,"7":1.110508,"7.1":0.251964,"8":1.427796},"android":{"2.1":0,"2.2":0,"2.3":0.0388848362616,"3":0,"4":0.078588300655,"4.1":0.253160749766,"4.2-4.3":0.428551827009,"4.4":0.800618312922,"4.4.3-4.4.4":0.368791973386,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00613253378853,"6.0-6.1":0.0188279546139,"7.0-7.1":0.238308111256,"8":0.0512120365499,"8.1":0.756991363792},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0003693702914,"12.1":0.0022162217484,"0":null},"ie":{"5.5":null,"6":0.0846365559846,"7":0.0846365559846,"8":2.15353014672,"9":1.36358895753,"10":1.07206304247,"11":12.2723006178,"0":null},"ie_mob":{"10":0.112927157895,"11":0.239776842105},"bb":{"7":0.012859,"10":null},"and_uc":{"0":0.0501},"op_mini":{"5.0-8.0":0.25726640796},"and_chr":{"0":2.956028},"and_ff":{"0":0.067468}},"total":98.5098228764}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DE.json
new file mode 100644
index 0000000..0fe24c8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DE.json
@@ -0,0 +1 @@
+{"id":"DE","name":"Germany","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.016258,"3":0.024387,"3.5":0.016258,"3.6":0.130064,"4":0.016258,"5":0.016258,"6":0.016258,"7":0.016258,"8":0.016258,"9":0.024387,"10":0.056903,"11":0.024387,"12":0.089419,"13":0.024387,"14":0.024387,"15":0.032516,"16":0.073161,"17":0.056903,"18":0.032516,"19":0.032516,"20":0.048774,"21":0.040645,"22":0.040645,"23":0.048774,"24":0.154451,"25":0.040645,"26":0.097548,"27":0.195096,"28":0.113806,"29":0.121935,"30":0.195096,"31":0.747868,"32":0.349547,"33":0.422708,"34":0.780384,"35":29.435109,"36":1.560768,"37":0.032516,"38":0.032516,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.097548,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.024387,"19":null,"20":null,"21":0.024387,"22":0.073161,"23":0.008129,"24":0.016258,"25":0.008129,"26":0.040645,"27":0.024387,"28":0.032516,"29":0.024387,"30":0.032516,"31":0.211354,"32":0.056903,"33":0.130064,"34":0.105677,"35":0.260128,"36":0.333289,"37":0.463353,"38":0.32516,"39":1.040512,"40":19.314504,"41":0.170709,"42":0.113806,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.008129,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.008129,"11.6":0.040645,"12":0.016258,"12.1":0.707223,"15":null,"16":null,"17":null,"18":0.008129,"19":null,"20":0.016258,"21":null,"22":0.016258,"23":0.016258,"24":0.024387,"25":0.040645,"26":0.048774,"27":1.503865,"28":0.016258,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.065032,"5":0.154451,"5.1":0.56903,"6":0.08129,"6.1":0.333289,"7":0.333289,"7.1":0.788513,"8":2.089153},"android":{"2.1":0,"2.2":0,"2.3":0.0847795051461,"3":0,"4":0.171343841979,"4.1":0.551959199293,"4.2-4.3":0.934359388294,"4.4":1.74556539017,"4.4.3-4.4.4":0.804066675122,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0291381149714,"6.0-6.1":0.0894591249121,"7.0-7.1":1.13229692389,"8":0.243328819761,"8.1":3.59676801647},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000257977256574,"12.1":0.00154786353945,"0":null},"ie":{"5.5":null,"6":0.0491487727772,"7":0.0982975455543,"8":1.28605955434,"9":1.41712294841,"10":0.974783993414,"11":11.0912397234,"0":null},"ie_mob":{"10":0.140776337719,"11":0.298908662281},"bb":{"7":0.00982275,"10":null},"and_uc":{"0":0.188971},"op_mini":{"5.0-8.0":0.179681159204},"and_chr":{"0":8.237171},"and_ff":{"0":0.278779}},"total":98.6513752879}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DJ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DJ.json
new file mode 100644
index 0000000..736263d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DJ.json
@@ -0,0 +1 @@
+{"id":"DJ","name":"Djibouti","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.00539,"3":0.03773,"3.5":0.01078,"3.6":0.09702,"4":0.10241,"5":0.02695,"6":0.04312,"7":0.01078,"8":0.03234,"9":0.07546,"10":0.08624,"11":0.18865,"12":0.15631,"13":0.07007,"14":0.0539,"15":0.07546,"16":0.18865,"17":0.18326,"18":0.11319,"19":0.1617,"20":0.04851,"21":0.11319,"22":0.14014,"23":0.12397,"24":0.11858,"25":0.08085,"26":0.17787,"27":0.14014,"28":0.15092,"29":0.2695,"30":0.30184,"31":0.35574,"32":0.32879,"33":0.4312,"34":0.81928,"35":9.71817,"36":1.11573,"37":0.03234,"38":null,"39":null},"chrome":{"4":0.03773,"5":0.02156,"6":0.04312,"7":null,"8":0.07546,"9":0.11319,"10":0.05929,"11":0.15631,"12":0.19943,"13":0.06468,"14":0.04312,"15":0.08085,"16":0.03773,"17":0.06468,"18":0.14014,"19":0.06468,"20":0.09163,"21":0.03773,"22":0.07546,"23":0.03773,"24":0.15631,"25":0.04851,"26":0.15092,"27":0.19404,"28":0.09163,"29":0.11319,"30":0.20482,"31":0.22638,"32":0.15092,"33":0.43659,"34":0.23716,"35":0.24794,"36":0.9702,"37":0.27489,"38":0.38269,"39":1.5631,"40":22.33616,"41":0.25333,"42":0.42581,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.01078,"11.5":0.03773,"11.6":0.01078,"12":0.04312,"12.1":0.08624,"15":0.01078,"16":null,"17":null,"18":0.02156,"19":0.01078,"20":null,"21":0.05929,"22":0.01078,"23":null,"24":null,"25":null,"26":0.03773,"27":0.65758,"28":0.02156,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.07007,"5.1":0.15631,"6":0.01617,"6.1":0.0539,"7":0.0539,"7.1":0.14553,"8":0.14553},"android":{"2.1":0,"2.2":0,"2.3":0.168095581661,"3":0,"4":0.339730017673,"4.1":1.09439070797,"4.2-4.3":1.85259025263,"4.4":3.46099955505,"4.4.3-4.4.4":1.59425388502,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0164379666633,"6.0-6.1":0.0504674415102,"7.0-7.1":0.638773616829,"8":0.137271440908,"8.1":2.02907953409},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0144623596304,"12.1":0.0867741577825,"0":null},"ie":{"5.5":null,"6":0.125869438202,"7":0.0547258426966,"8":1.04526359551,"9":0.426861573034,"10":0.913921573034,"11":2.78554539326,"0":null},"ie_mob":{"10":0.159408947368,"11":0.338471052632},"bb":{"7":0.05532,"10":null},"and_uc":{"0":10.01753},"op_mini":{"5.0-8.0":10.0730334826},"and_chr":{"0":5.49483},"and_ff":{"0":0.22589}},"total":90.9553974157}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DK.json
new file mode 100644
index 0000000..75270cf
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DK.json
@@ -0,0 +1 @@
+{"id":"DK","name":"Denmark","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007914,"3.5":0.007914,"3.6":0.015828,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.015828,"11":null,"12":0.023742,"13":null,"14":null,"15":0.063312,"16":0.031656,"17":0.031656,"18":0.031656,"19":0.007914,"20":0.015828,"21":0.031656,"22":0.007914,"23":0.015828,"24":0.055398,"25":0.007914,"26":0.023742,"27":0.490668,"28":0.015828,"29":0.023742,"30":0.03957,"31":0.387786,"32":0.087054,"33":0.07914,"34":0.174108,"35":8.657916,"36":0.482754,"37":0.007914,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.023742,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.047484,"19":null,"20":null,"21":0.031656,"22":0.023742,"23":null,"24":0.023742,"25":0.015828,"26":0.015828,"27":0.023742,"28":0.015828,"29":0.023742,"30":0.015828,"31":0.221592,"32":0.11871,"33":0.166194,"34":0.150366,"35":0.340302,"36":0.411528,"37":0.419442,"38":0.696432,"39":2.010156,"40":33.75321,"41":0.205764,"42":0.087054,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.007914,"11.6":null,"12":0.007914,"12.1":0.102882,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.015828,"26":0.015828,"27":0.482754,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.031656,"5":0.102882,"5.1":0.466926,"6":0.150366,"6.1":0.546066,"7":0.775572,"7.1":1.82022,"8":4.938336},"android":{"2.1":0,"2.2":0,"2.3":0.0386080237031,"3":0,"4":0.0780288479052,"4.1":0.25135855432,"4.2-4.3":0.425501061233,"4.4":0.794918888034,"4.4.3-4.4.4":0.366166624805,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0725780959936,"6.0-6.1":0.2228274877,"7.0-7.1":2.82035934431,"8":0.606090766543,"8.1":8.95893830545},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":6.81990049751e-5,"12.1":0.000409194029851,"0":null},"ie":{"5.5":null,"6":0.0158675205993,"7":0.0396688014981,"8":0.888581153558,"9":1.88823495131,"10":1.43601061423,"11":14.7885291985,"0":null},"ie_mob":{"10":0.163632061404,"11":0.347437938596},"bb":{"7":0.002086,"10":null},"and_uc":{"0":0.014602},"op_mini":{"5.0-8.0":0.0475006069652},"and_chr":{"0":5.564954},"and_ff":{"0":0.077182}},"total":99.0593762397}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DM.json
new file mode 100644
index 0000000..c8fe4df
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DM.json
@@ -0,0 +1 @@
+{"id":"DM","name":"Dominica","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":null,"5":null,"6":0.021789,"7":null,"8":null,"9":null,"10":null,"11":0.029052,"12":null,"13":0.065367,"14":0.021789,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.014526,"21":0.014526,"22":0.065367,"23":0.014526,"24":0.021789,"25":null,"26":0.014526,"27":null,"28":0.014526,"29":0.014526,"30":0.079893,"31":0.043578,"32":0.029052,"33":0.043578,"34":0.108945,"35":7.415523,"36":0.704511,"37":0.029052,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.029052,"12":0.036315,"13":null,"14":null,"15":0.007263,"16":0.007263,"17":null,"18":0.203364,"19":null,"20":0.021789,"21":0.014526,"22":0.094419,"23":null,"24":null,"25":0.014526,"26":0.116208,"27":0.036315,"28":0.087156,"29":0.043578,"30":0.203364,"31":0.980505,"32":0.704511,"33":0.225153,"34":0.413991,"35":0.174312,"36":1.30734,"37":0.167049,"38":0.522936,"39":1.4526,"40":40.447647,"41":0.14526,"42":0.297783,"43":0.007263},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.174312,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.029052,"21":null,"22":0.007263,"23":0.014526,"24":null,"25":null,"26":0.007263,"27":1.626912,"28":0.050841,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.065367,"5.1":0.167049,"6":0.043578,"6.1":0.137997,"7":0.457569,"7.1":0.530199,"8":1.198395},"android":{"2.1":0,"2.2":0,"2.3":0.141428264892,"3":0,"4":0.28583396694,"4.1":0.920772440378,"4.2-4.3":1.55868835097,"4.4":2.91193353821,"4.4.3-4.4.4":1.34133543861,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0127514133949,"6.0-6.1":0.0391490762125,"7.0-7.1":0.495515450346,"8":0.106485487298,"8.1":1.57401657275},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000206199004975,"12.1":0.00123719402985,"0":null},"ie":{"5.5":null,"6":0.0799495014144,"7":0.0436088189533,"8":0.661400420792,"9":0.741349922207,"10":1.10475674682,"11":7.64607958982,"0":null},"ie_mob":{"10":3.21609504386,"11":6.82869495614},"bb":{"7":0.20869625,"10":null},"and_uc":{"0":0.227171},"op_mini":{"5.0-8.0":0.143617606965},"and_chr":{"0":7.377822},"and_ff":{"0":0.114954}},"total":98.82180125}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DO.json
new file mode 100644
index 0000000..1cfb3af
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DO.json
@@ -0,0 +1 @@
+{"id":"DO","name":"Dominican Republic","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.014452,"3":0.079486,"3.5":0.014452,"3.6":0.050582,"4":0.014452,"5":0.007226,"6":null,"7":0.014452,"8":0.007226,"9":null,"10":0.014452,"11":0.021678,"12":0.043356,"13":0.014452,"14":0.014452,"15":0.014452,"16":0.014452,"17":0.014452,"18":0.007226,"19":0.028904,"20":0.021678,"21":0.014452,"22":0.014452,"23":0.021678,"24":0.057808,"25":0.021678,"26":0.028904,"27":0.014452,"28":0.028904,"29":0.043356,"30":0.057808,"31":0.195102,"32":0.130068,"33":0.101164,"34":0.18065,"35":6.821344,"36":0.411882,"37":0.021678,"38":null,"39":null},"chrome":{"4":null,"5":0.007226,"6":null,"7":null,"8":null,"9":0.021678,"10":0.007226,"11":0.130068,"12":0.014452,"13":0.014452,"14":0.007226,"15":null,"16":null,"17":0.014452,"18":0.057808,"19":null,"20":0.014452,"21":0.028904,"22":0.07226,"23":0.021678,"24":0.021678,"25":0.050582,"26":0.057808,"27":0.043356,"28":0.050582,"29":0.115616,"30":0.10839,"31":0.14452,"32":0.115616,"33":0.195102,"34":0.260136,"35":0.455238,"36":0.751504,"37":0.729826,"38":0.982736,"39":3.302282,"40":41.76628,"41":0.202328,"42":0.101164,"43":null},"opera":{"9":null,"9.5-9.6":0.007226,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.050582,"15":null,"16":null,"17":null,"18":0.007226,"19":null,"20":0.014452,"21":null,"22":null,"23":null,"24":0.014452,"25":0.014452,"26":0.043356,"27":0.97551,"28":0.014452,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.115616,"5":0.115616,"5.1":0.21678,"6":0.079486,"6.1":0.151746,"7":0.224006,"7.1":0.274588,"8":0.968284},"android":{"2.1":0,"2.2":0,"2.3":0.190901033371,"3":0,"4":0.385821035867,"4.1":1.24286620148,"4.2-4.3":2.10393033621,"4.4":3.93055180289,"4.4.3-4.4.4":1.81054559019,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0218307309971,"6.0-6.1":0.0670241741139,"7.0-7.1":0.848334546641,"8":0.18230575359,"8.1":2.69475479466},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0010607050462,"12.1":0.00636423027719,"0":null},"ie":{"5.5":null,"6":0.129294512676,"7":0.0727281633803,"8":2.15760218028,"9":0.921223402817,"10":1.23637877746,"11":4.08893896338,"0":null},"ie_mob":{"10":0.238916833333,"11":0.507289166667},"bb":{"7":0.3210905,"10":null},"and_uc":{"0":0.18031},"op_mini":{"5.0-8.0":0.738781064677},"and_chr":{"0":12.024246},"and_ff":{"0":0.116508}},"total":97.9513165}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DZ.json
new file mode 100644
index 0000000..7a33121
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/DZ.json
@@ -0,0 +1 @@
+{"id":"DZ","name":"Algeria","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.03436,"3":0.36078,"3.5":0.09449,"3.6":0.50681,"4":0.10308,"5":0.04295,"6":0.05154,"7":0.04295,"8":0.09449,"9":0.0859,"10":0.12026,"11":0.14603,"12":0.35219,"13":0.12026,"14":0.13744,"15":0.18039,"16":0.18898,"17":0.13744,"18":0.12026,"19":0.16321,"20":0.13744,"21":0.13744,"22":0.12026,"23":0.1718,"24":0.12026,"25":0.1718,"26":0.22334,"27":0.18898,"28":0.15462,"29":0.4295,"30":0.6013,"31":0.6872,"32":0.72156,"33":0.87618,"34":0.95349,"35":17.76412,"36":1.86403,"37":0.07731,"38":0.01718,"39":null},"chrome":{"4":0.1718,"5":0.13744,"6":0.0859,"7":0.06872,"8":0.06872,"9":0.03436,"10":0.09449,"11":0.22334,"12":0.12885,"13":0.07731,"14":0.13744,"15":0.24052,"16":0.10308,"17":0.02577,"18":0.1718,"19":0.01718,"20":0.03436,"21":0.04295,"22":0.10308,"23":0.04295,"24":0.03436,"25":0.09449,"26":0.11167,"27":0.09449,"28":0.0859,"29":0.13744,"30":0.40373,"31":0.32642,"32":0.10308,"33":1.1167,"34":0.19757,"35":0.30065,"36":1.30568,"37":0.67861,"38":0.74733,"39":2.41379,"40":34.09371,"41":0.55835,"42":0.22334,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.00859,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.04295,"12":0.03436,"12.1":0.18898,"15":0.02577,"16":0.00859,"17":0.01718,"18":0.02577,"19":0.02577,"20":0.03436,"21":0.01718,"22":0.00859,"23":null,"24":0.01718,"25":0.03436,"26":0.0859,"27":1.8039,"28":0.02577,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.06872,"5":0.02577,"5.1":0.06872,"6":0.02577,"6.1":0.01718,"7":0.10308,"7.1":0.04295,"8":0.12885},"android":{"2.1":0,"2.2":0,"2.3":0.109649890841,"3":0,"4":0.221608200437,"4.1":0.713878499844,"4.2-4.3":1.20845721801,"4.4":2.25763354195,"4.4.3-4.4.4":1.03994264892,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00685957425444,"6.0-6.1":0.0210600963952,"7.0-7.1":0.26656064866,"8":0.057283462195,"8.1":0.846736218496},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00111236673774,"12.1":0.00667420042644,"0":null},"ie":{"5.5":null,"6":0.181298242038,"7":0.295802394904,"8":2.68130557962,"9":0.801529070064,"10":0.687024917197,"11":2.84351979618,"0":null},"ie_mob":{"10":0.085775,"11":0.182125},"bb":{"7":0.011985,"10":null},"and_uc":{"0":0.66552},"op_mini":{"5.0-8.0":0.774763432836},"and_chr":{"0":4.32125},"and_ff":{"0":0.18189}},"total":96.896475}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EC.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EC.json
new file mode 100644
index 0000000..86e3694
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EC.json
@@ -0,0 +1 @@
+{"id":"EC","name":"Ecuador","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.032864,"3.5":null,"3.6":0.065728,"4":0.032864,"5":0.016432,"6":0.016432,"7":0.016432,"8":0.016432,"9":0.032864,"10":0.032864,"11":0.049296,"12":0.08216,"13":0.057512,"14":0.08216,"15":0.049296,"16":0.08216,"17":0.04108,"18":0.04108,"19":0.04108,"20":0.08216,"21":0.098592,"22":0.057512,"23":0.073944,"24":0.057512,"25":0.08216,"26":0.073944,"27":0.065728,"28":0.106808,"29":0.188968,"30":0.221832,"31":0.295776,"32":0.295776,"33":0.402584,"34":0.517608,"35":16.407352,"36":0.961272,"37":0.016432,"38":null,"39":null},"chrome":{"4":0.008216,"5":null,"6":null,"7":0.016432,"8":0.008216,"9":0.024648,"10":0.024648,"11":0.08216,"12":0.016432,"13":0.032864,"14":0.008216,"15":null,"16":null,"17":null,"18":0.049296,"19":null,"20":0.008216,"21":0.032864,"22":0.213616,"23":0.016432,"24":0.016432,"25":0.024648,"26":0.098592,"27":0.049296,"28":0.024648,"29":0.073944,"30":0.106808,"31":0.131456,"32":0.098592,"33":0.172536,"34":0.230048,"35":0.525824,"36":0.755872,"37":0.723008,"38":0.86268,"39":2.6702,"40":42.509584,"41":0.312208,"42":0.106808,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.032864,"15":null,"16":null,"17":null,"18":null,"19":0.016432,"20":0.008216,"21":null,"22":null,"23":null,"24":null,"25":0.016432,"26":0.016432,"27":0.911976,"28":0.016432,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.057512,"5":0.090376,"5.1":0.262912,"6":0.131456,"6.1":0.197184,"7":0.28756,"7.1":0.460096,"8":0.953056},"android":{"2.1":0,"2.2":0,"2.3":0.100606175278,"3":0,"4":0.203330375299,"4.1":0.654999151679,"4.2-4.3":1.1087859528,"4.4":2.07142819836,"4.4.3-4.4.4":0.954170146585,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0123038497841,"6.0-6.1":0.0377749774074,"7.0-7.1":0.47812328547,"8":0.102747938548,"8.1":1.51876994879},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0011031130064,"12.1":0.00661867803838,"0":null},"ie":{"5.5":null,"6":0.0530057755102,"7":0.0530057755102,"8":1.31631009184,"9":0.680240785714,"10":1.17496135714,"11":3.64856421429,"0":null},"ie_mob":{"10":0.317012105263,"11":0.673107894737},"bb":{"7":0.19178,"10":null},"and_uc":{"0":0.228352},"op_mini":{"5.0-8.0":0.768318208955},"and_chr":{"0":6.54968},"and_ff":{"0":0.15164}},"total":97.345812}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EE.json
new file mode 100644
index 0000000..0c40693
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EE.json
@@ -0,0 +1 @@
+{"id":"EE","name":"Estonia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.009057,"3.5":null,"3.6":0.063399,"4":null,"5":null,"6":null,"7":null,"8":null,"9":0.009057,"10":0.027171,"11":0.054342,"12":0.045285,"13":0.018114,"14":0.009057,"15":0.018114,"16":0.036228,"17":0.099627,"18":0.018114,"19":0.018114,"20":0.525306,"21":0.018114,"22":0.018114,"23":0.036228,"24":0.072456,"25":0.027171,"26":0.036228,"27":0.045285,"28":0.045285,"29":0.099627,"30":0.081513,"31":0.606819,"32":0.226425,"33":0.244539,"34":0.371337,"35":18.766104,"36":1.286094,"37":0.027171,"38":0.018114,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.036228,"12":0.009057,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.054342,"19":0.009057,"20":null,"21":0.018114,"22":0.018114,"23":null,"24":null,"25":0.018114,"26":0.045285,"27":0.018114,"28":0.036228,"29":0.018114,"30":0.018114,"31":0.253596,"32":0.072456,"33":0.163026,"34":0.226425,"35":0.307938,"36":0.54342,"37":0.652104,"38":0.806073,"39":2.617473,"40":40.12251,"41":0.389451,"42":0.262653,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.009057,"11.6":0.009057,"12":0.018114,"12.1":0.570591,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.009057,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.027171,"27":1.729887,"28":0.027171,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.018114,"5":0.135855,"5.1":0.335109,"6":0.072456,"6.1":0.280767,"7":0.326052,"7.1":0.760788,"8":2.055939},"android":{"2.1":0,"2.2":0,"2.3":0.0396375673147,"3":0,"4":0.0801096097307,"4.1":0.258061425096,"4.2-4.3":0.436847715563,"4.4":0.816116649132,"4.4.3-4.4.4":0.375931033164,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0107458822171,"6.0-6.1":0.032991743649,"7.0-7.1":0.417581212471,"8":0.0897375427252,"8.1":1.32645661894},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000154150675195,"12.1":0.000924904051173,"0":null},"ie":{"5.5":null,"6":0.0181386281441,"7":0.0634851985044,"8":1.17901082937,"9":1.16087220122,"10":1.11552563086,"11":9.79485919782,"0":null},"ie_mob":{"10":0.136168372807,"11":0.289124627193},"bb":{"7":0.00212175,"10":null},"and_uc":{"0":0.031119},"op_mini":{"5.0-8.0":0.107365945274},"and_chr":{"0":4.752016},"and_ff":{"0":0.068839}},"total":98.6827424359}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EG.json
new file mode 100644
index 0000000..9fcc26d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/EG.json
@@ -0,0 +1 @@
+{"id":"EG","name":"Egypt","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":1.015936,"3":0.031748,"3.5":0.063496,"3.6":0.182551,"4":0.071433,"5":0.039685,"6":0.039685,"7":0.031748,"8":0.055559,"9":0.039685,"10":0.103181,"11":0.095244,"12":0.230173,"13":0.174614,"14":0.095244,"15":1.119117,"16":0.111118,"17":0.063496,"18":1.063558,"19":0.063496,"20":0.063496,"21":1.079432,"22":0.071433,"23":1.087369,"24":0.07937,"25":2.087431,"26":0.111118,"27":0.087307,"28":0.063496,"29":0.253984,"30":0.333354,"31":0.325417,"32":0.357165,"33":0.452409,"34":0.579401,"35":12.556334,"36":1.881069,"37":0.063496,"38":null,"39":null},"chrome":{"4":0.007937,"5":0.047622,"6":0.015874,"7":0.015874,"8":0.015874,"9":0.039685,"10":0.07937,"11":0.063496,"12":0.047622,"13":0.023811,"14":0.039685,"15":0.031748,"16":0.047622,"17":0.031748,"18":0.023811,"19":1.015936,"20":0.015874,"21":0.015874,"22":0.071433,"23":0.023811,"24":3.103367,"25":0.039685,"26":0.071433,"27":0.063496,"28":0.055559,"29":0.063496,"30":1.103243,"31":0.103181,"32":0.063496,"33":1.635022,"34":0.095244,"35":2.174738,"36":0.563527,"37":0.365102,"38":0.769889,"39":3.976437,"40":21.064798,"41":0.111118,"42":0.182551,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":1.007999,"10.5":null,"10.6":null,"11":0.007937,"11.1":null,"11.5":0.007937,"11.6":0.023811,"12":0.031748,"12.1":0.126992,"15":0.015874,"16":null,"17":null,"18":0.007937,"19":0.007937,"20":0.015874,"21":0.007937,"22":null,"23":null,"24":null,"25":0.007937,"26":0.031748,"27":0.730204,"28":0.015874,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.015874,"5":1.023873,"5.1":0.039685,"6":0.015874,"6.1":0.023811,"7":0.063496,"7.1":0.039685,"8":0.142866},"android":{"2.1":0,"2.2":0,"2.3":0.127179371036,"3":0,"4":0.257036202516,"4.1":0.828004641959,"4.2-4.3":1.40165054184,"4.4":2.61855631313,"4.4.3-4.4.4":1.20619592951,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00794645476453,"6.0-6.1":0.024397010242,"7.0-7.1":0.30879644392,"8":0.0663598678582,"8.1":0.980899223215},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00179467803838,"12.1":0.0107680682303,"0":null},"ie":{"5.5":null,"6":0.064174264585,"7":0.0320871322925,"8":3.29695284306,"9":2.41455670501,"10":2.43060027116,"11":1.52413878389,"0":null},"ie_mob":{"10":0.064070627193,"11":0.136040372807},"bb":{"7":0.018567,"10":null},"and_uc":{"0":0.439419},"op_mini":{"5.0-8.0":1.24999325373},"and_chr":{"0":9.064711},"and_ff":{"0":0.142347}},"total":95.63409}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ER.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ER.json
new file mode 100644
index 0000000..9e02ba6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ER.json
@@ -0,0 +1 @@
+{"id":"ER","name":"Eritrea","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.083718,"3":0.18604,"3.5":0.297664,"3.6":1.655756,"4":3.934746,"5":0.83718,"6":0.613932,"7":0.474402,"8":0.902294,"9":0.623234,"10":0.334872,"11":0.762764,"12":0.427892,"13":0.04651,"14":0.632536,"15":0.269758,"16":0.892992,"17":0.297664,"18":3.06966,"19":2.027836,"20":1.283676,"21":1.265072,"22":2.316198,"23":0.688348,"24":5.060288,"25":1.181354,"26":0.353476,"27":0.37208,"28":0.437194,"29":6.446286,"30":5.785844,"31":1.218562,"32":2.027836,"33":5.702126,"34":1.3953,"35":15.385508,"36":1.879004,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":0.018604,"8":null,"9":0.027906,"10":null,"11":null,"12":null,"13":null,"14":0.018604,"15":null,"16":null,"17":null,"18":null,"19":0.018604,"20":0.037208,"21":null,"22":0.018604,"23":null,"24":0.102322,"25":0.130228,"26":0.018604,"27":0.04651,"28":null,"29":null,"30":0.474402,"31":null,"32":null,"33":0.18604,"34":0.027906,"35":0.055812,"36":0.111624,"37":null,"38":0.297664,"39":0.902294,"40":10.660092,"41":0.065114,"42":null,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.04651,"11":0.018604,"11.1":null,"11.5":0.37208,"11.6":0.176738,"12":0.04651,"12.1":0.018604,"15":0.04651,"16":0.195342,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.018604,"27":0.083718,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":null,"5.1":0.065114,"6":null,"6.1":null,"7":null,"7.1":null,"8":null},"android":{"2.1":0,"2.2":0,"2.3":0.0250653040857,"3":0,"4":0.0506582987837,"4.1":0.163188321863,"4.2-4.3":0.276246035555,"4.4":0.516081418859,"4.4.3-4.4.4":0.237724620855,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00404691414801,"6.0-6.1":0.0124247364193,"7.0-7.1":0.157261663822,"8":0.0337952830605,"8.1":0.49954540255},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000992181947406,"12.1":0.00595309168443,"0":null},"ie":{"5.5":null,"6":0.995314,"7":0.586026,"8":2.985942,"9":0.176738,"10":1.237166,"11":1.190656,"0":null},"ie_mob":{"10":0.00290527192982,"11":0.00616872807018},"bb":{"7":0.0113425,"10":null},"and_uc":{"0":2.664964},"op_mini":{"5.0-8.0":0.691054726368},"and_chr":{"0":1.368778},"and_ff":{"0":0.09074}},"total":99.4668565}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ES.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ES.json
new file mode 100644
index 0000000..9402fdd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ES.json
@@ -0,0 +1 @@
+{"id":"ES","name":"Spain","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007263,"3":0.036315,"3.5":0.007263,"3.6":0.108945,"4":0.014526,"5":0.007263,"6":0.007263,"7":0.007263,"8":0.007263,"9":0.007263,"10":0.065367,"11":0.021789,"12":0.050841,"13":0.007263,"14":0.014526,"15":0.029052,"16":0.058104,"17":0.021789,"18":0.021789,"19":0.021789,"20":0.043578,"21":0.043578,"22":0.021789,"23":0.021789,"24":0.050841,"25":0.036315,"26":0.043578,"27":0.123471,"28":0.043578,"29":0.065367,"30":0.101682,"31":0.268731,"32":0.21789,"33":0.225153,"34":0.305046,"35":12.063843,"36":0.588303,"37":0.014526,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.21789,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.014526,"19":null,"20":null,"21":0.029052,"22":0.065367,"23":0.021789,"24":0.021789,"25":0.014526,"26":0.036315,"27":0.029052,"28":0.021789,"29":0.043578,"30":0.036315,"31":0.225153,"32":0.094419,"33":0.167049,"34":0.210627,"35":0.479358,"36":0.479358,"37":0.573777,"38":0.806193,"39":2.25153,"40":34.172415,"41":0.152523,"42":0.058104,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.116208,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.007263,"25":0.014526,"26":0.021789,"27":0.479358,"28":0.007263,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.07263,"5":0.159786,"5.1":0.486621,"6":0.07263,"6.1":0.261468,"7":0.305046,"7.1":0.631881,"8":1.554282},"android":{"2.1":0,"2.2":0,"2.3":0.141320139308,"3":0,"4":0.285615439443,"4.1":0.920068485913,"4.2-4.3":1.55749669321,"4.4":2.90970728932,"4.4.3-4.4.4":1.3403099528,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0288864942263,"6.0-6.1":0.0886866050808,"7.0-7.1":1.12251903002,"8":0.24122756582,"8.1":3.56570830485},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000182855721393,"12.1":0.00109713432836,"0":null},"ie":{"5.5":null,"6":0.0449142465582,"7":0.127257031915,"8":2.3954264831,"9":1.38485593554,"10":0.890799223404,"11":7.11890807947,"0":null},"ie_mob":{"10":0.187532517544,"11":0.398185482456},"bb":{"7":0.01436925,"10":null},"and_uc":{"0":0.046529},"op_mini":{"5.0-8.0":0.12735900995},"and_chr":{"0":14.712798},"and_ff":{"0":0.180642}},"total":99.04764125}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ET.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ET.json
new file mode 100644
index 0000000..1efdba4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ET.json
@@ -0,0 +1 @@
+{"id":"ET","name":"Ethiopia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008192,"3":0.036864,"3.5":0.032768,"3.6":0.147456,"4":0.172032,"5":0.110592,"6":0.045056,"7":0.053248,"8":0.065536,"9":0.045056,"10":0.159744,"11":0.344064,"12":0.303104,"13":0.106496,"14":0.118784,"15":0.135168,"16":0.188416,"17":0.14336,"18":0.131072,"19":0.22528,"20":0.200704,"21":0.221184,"22":0.094208,"23":0.434176,"24":0.135168,"25":0.180224,"26":0.3072,"27":0.18432,"28":0.311296,"29":0.745472,"30":0.753664,"31":0.638976,"32":0.700416,"33":0.86016,"34":1.060864,"35":9.35936,"36":2.412544,"37":0.073728,"38":0.012288,"39":null},"chrome":{"4":0.032768,"5":0.016384,"6":0.012288,"7":0.028672,"8":0.02048,"9":0.053248,"10":0.114688,"11":0.04096,"12":0.028672,"13":0.016384,"14":0.032768,"15":0.016384,"16":0.032768,"17":0.004096,"18":null,"19":0.012288,"20":0.012288,"21":0.008192,"22":0.004096,"23":0.02048,"24":0.012288,"25":0.057344,"26":0.04096,"27":0.06144,"28":0.028672,"29":0.053248,"30":0.14336,"31":0.135168,"32":0.049152,"33":0.290816,"34":0.06144,"35":0.118784,"36":0.462848,"37":0.14336,"38":0.176128,"39":0.96256,"40":9.1136,"41":0.196608,"42":0.299008,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.008192,"10.5":null,"10.6":0.004096,"11":0.012288,"11.1":null,"11.5":0.016384,"11.6":0.045056,"12":0.04096,"12.1":0.118784,"15":0.02048,"16":0.012288,"17":0.032768,"18":0.024576,"19":0.016384,"20":0.057344,"21":0.02048,"22":0.024576,"23":0.016384,"24":0.016384,"25":0.02048,"26":0.114688,"27":0.925696,"28":0.004096,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.004096,"5":0.016384,"5.1":0.069632,"6":0.04096,"6.1":0.024576,"7":0.06144,"7.1":0.057344,"8":0.106496},"android":{"2.1":0,"2.2":0,"2.3":0.0623912672835,"3":0,"4":0.126096034931,"4.1":0.406199987525,"4.2-4.3":0.687617440482,"4.4":1.28460335586,"4.4.3-4.4.4":0.59173191392,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00885333226228,"6.0-6.1":0.0271812832614,"7.0-7.1":0.34403738528,"8":0.0739330904709,"8.1":1.09284290873},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0498755820896,"12.1":0.299253492537,"0":null},"ie":{"5.5":null,"6":0.0616845373134,"7":0.0986952597015,"8":1.50510271045,"9":0.345433408955,"10":0.555160835821,"11":1.52977652537,"0":null},"ie_mob":{"10":0.102077052632,"11":0.216738947368},"bb":{"7":0.010332,"10":null},"and_uc":{"0":9.517248},"op_mini":{"5.0-8.0":34.7383429254},"and_chr":{"0":2.158208},"and_ff":{"0":0.159408}},"total":92.1590652776}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FI.json
new file mode 100644
index 0000000..7ab4b4b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FI.json
@@ -0,0 +1 @@
+{"id":"FI","name":"Finland","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007025,"3.5":0.007025,"3.6":0.0281,"4":0.01405,"5":0.007025,"6":null,"7":0.01405,"8":null,"9":null,"10":0.0281,"11":0.01405,"12":0.021075,"13":null,"14":0.007025,"15":0.01405,"16":0.04215,"17":0.0281,"18":0.01405,"19":0.01405,"20":0.035125,"21":0.0281,"22":0.01405,"23":0.0281,"24":0.0562,"25":0.0281,"26":0.035125,"27":0.0281,"28":0.049175,"29":0.049175,"30":0.07025,"31":0.709525,"32":0.133475,"33":0.231825,"34":0.372325,"35":18.342275,"36":1.201275,"37":0.0281,"38":0.01405,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.035125,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.021075,"19":null,"20":null,"21":0.01405,"22":0.021075,"23":0.007025,"24":0.358275,"25":null,"26":0.01405,"27":0.021075,"28":0.0281,"29":0.01405,"30":0.01405,"31":0.1124,"32":0.0281,"33":0.1124,"34":0.091325,"35":0.161575,"36":0.161575,"37":0.259925,"38":0.3372,"39":1.159125,"40":27.980575,"41":0.175625,"42":0.077275,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.007025,"11.6":null,"12":0.007025,"12.1":0.344225,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007025,"21":null,"22":null,"23":null,"24":null,"25":0.007025,"26":0.021075,"27":0.82895,"28":0.021075,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.04215,"5":0.147525,"5.1":0.569025,"6":0.0843,"6.1":0.372325,"7":0.330175,"7.1":0.934325,"8":1.875675},"android":{"2.1":0,"2.2":0,"2.3":0.0765106040129,"3":0,"4":0.154631957584,"4.1":0.498124300863,"4.2-4.3":0.8432273937,"4.4":1.57531306789,"4.4.3-4.4.4":0.725642675954,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0572287955618,"6.0-6.1":0.175702442514,"7.0-7.1":2.22389091525,"8":0.477910643639,"8.1":7.06424220303},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000283333333333,"12.1":0.0017,"0":null},"ie":{"5.5":null,"6":null,"7":0.0211159488342,"8":0.563091968912,"9":1.59777346179,"10":1.28103422927,"11":7.40465939119,"0":null},"ie_mob":{"10":1.46402620614,"11":3.10854879386},"bb":{"7":0.00223125,"10":null},"and_uc":{"0":0.01785},"op_mini":{"5.0-8.0":0.197341666667},"and_chr":{"0":10.734225},"and_ff":{"0":0.25585}},"total":99.04040625}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FJ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FJ.json
new file mode 100644
index 0000000..b4b2e1c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FJ.json
@@ -0,0 +1 @@
+{"id":"FJ","name":"Fiji","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.020733,"3.5":null,"3.6":0.663456,"4":0.06911,"5":0.172775,"6":0.027644,"7":null,"8":0.020733,"9":0.06911,"10":0.048377,"11":0.034555,"12":0.255707,"13":0.117487,"14":0.041466,"15":0.117487,"16":0.165864,"17":0.076021,"18":0.096754,"19":0.055288,"20":0.103665,"21":0.06911,"22":0.041466,"23":0.027644,"24":0.027644,"25":0.41466,"26":0.034555,"27":1.216336,"28":0.165864,"29":0.103665,"30":0.228063,"31":0.262618,"32":0.387016,"33":0.366283,"34":0.566702,"35":18.327972,"36":1.755394,"37":0.041466,"38":0.013822,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.013822,"11":0.055288,"12":0.027644,"13":null,"14":null,"15":null,"16":0.020733,"17":null,"18":null,"19":null,"20":0.020733,"21":0.006911,"22":0.020733,"23":0.027644,"24":null,"25":0.020733,"26":0.013822,"27":0.006911,"28":0.013822,"29":0.034555,"30":0.034555,"31":0.200419,"32":0.062199,"33":0.145131,"34":0.193508,"35":0.152042,"36":0.946807,"37":0.089843,"38":0.172775,"39":0.926074,"40":20.0419,"41":0.124398,"42":0.200419,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.020733,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.027644,"27":0.304084,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.006911,"5":0.110576,"5.1":0.172775,"6":0.089843,"6.1":0.096754,"7":0.145131,"7.1":0.20733,"8":0.497592},"android":{"2.1":0,"2.2":0,"2.3":0.221547999792,"3":0,"4":0.447760168001,"4.1":1.44239408286,"4.2-4.3":2.44169216613,"4.4":4.56155671151,"4.4.3-4.4.4":2.10120787171,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0135603967266,"6.0-6.1":0.0416327969676,"7.0-7.1":0.526952258761,"8":0.113241207752,"8.1":1.67387633979},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00403963041933,"12.1":0.024237782516,"0":null},"ie":{"5.5":null,"6":0.0484858591359,"7":0.741140989649,"8":4.27368215527,"9":2.50741157246,"10":1.45457577408,"11":6.36550064941,"0":null},"ie_mob":{"10":0.407477035088,"11":0.865190964912},"bb":{"7":0.03475125,"10":null},"and_uc":{"0":2.786278},"op_mini":{"5.0-8.0":2.81360258706},"and_chr":{"0":10.982656},"and_ff":{"0":0.188429}},"total":98.54218725}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FK.json
new file mode 100644
index 0000000..8e7e1e3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FK.json
@@ -0,0 +1 @@
+{"id":"FK","name":"Falkland Islands (Malvinas)","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.01794,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.1794,"12":null,"13":null,"14":0.10764,"15":null,"16":null,"17":null,"18":0.19734,"19":null,"20":null,"21":null,"22":1.27374,"23":null,"24":null,"25":null,"26":0.30498,"27":null,"28":0.01794,"29":0.14352,"30":0.04485,"31":null,"32":0.13455,"33":1.6146,"34":0.09867,"35":10.3155,"36":0.11661,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.07176,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.05382,"28":null,"29":0.01794,"30":null,"31":null,"32":0.07176,"33":0.04485,"34":0.01794,"35":0.06279,"36":0.34983,"37":1.00464,"38":null,"39":0.82524,"40":21.45624,"41":null,"42":null,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.21528,"15":null,"16":null,"17":null,"18":0.0897,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.01794,"27":0.93288,"28":null,"29":null},"safari":{"3.1":null,"3.2":0.04485,"4":0.06279,"5":0.08073,"5.1":0.69966,"6":0.06279,"6.1":0.06279,"7":1.04052,"7.1":0.55614,"8":1.35447},"android":{"2.1":0,"2.2":0,"2.3":0.016113358977,"3":0,"4":0.0325659465641,"4.1":0.104906447656,"4.2-4.3":0.177586177357,"4.4":0.331765580622,"4.4.3-4.4.4":0.152822488824,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0299592549453,"6.0-6.1":0.0919801686916,"7.0-7.1":1.16420613515,"8":0.250186058841,"8.1":3.69812838237},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000530007107321,"12.1":0.00318004264392,"0":null},"ie":{"5.5":null,"6":null,"7":2.88834,"8":1.83885,"9":13.23075,"10":4.55676,"11":23.20539,"0":null},"ie_mob":{"10":0.0369354385965,"11":0.0784245614035},"bb":{"7":0.0023175,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0.369149950249},"and_chr":{"0":3.19399},"and_ff":{"0":0.33681}},"total":99.5562775}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FM.json
new file mode 100644
index 0000000..0673c13
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FM.json
@@ -0,0 +1 @@
+{"id":"FM","name":"Micronesia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":0.025482,"3.6":0.050964,"4":0.220844,"5":null,"6":0.016988,"7":null,"8":0.008494,"9":null,"10":0.101928,"11":0.008494,"12":0.016988,"13":0.220844,"14":null,"15":null,"16":0.067952,"17":0.04247,"18":0.067952,"19":0.025482,"20":1.65633,"21":0.025482,"22":0.050964,"23":0.008494,"24":0.280302,"25":0.093434,"26":0.110422,"27":0.033976,"28":0.025482,"29":0.110422,"30":0.118916,"31":0.093434,"32":0.08494,"33":0.450182,"34":0.25482,"35":14.210462,"36":2.726574,"37":0.186868,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.016988,"12":null,"13":null,"14":null,"15":null,"16":0.067952,"17":null,"18":0.04247,"19":0.016988,"20":null,"21":0.050964,"22":0.008494,"23":null,"24":0.518134,"25":0.025482,"26":0.033976,"27":0.025482,"28":0.203856,"29":0.067952,"30":0.067952,"31":0.16988,"32":0.29729,"33":0.4247,"34":0.203856,"35":0.12741,"36":2.08103,"37":0.067952,"38":0.152892,"39":0.76446,"40":34.18835,"41":0.21235,"42":0.900364,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.093434,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.04247,"5":0.407712,"5.1":0.416206,"6":0.093434,"6.1":0.21235,"7":0.271808,"7.1":1.053256,"8":0.654038},"android":{"2.1":0,"2.2":0,"2.3":0.0650872564716,"3":0,"4":0.131544770974,"4.1":0.423752296081,"4.2-4.3":0.717330079218,"4.4":1.3401123543,"4.4.3-4.4.4":0.617301242957,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0250914812732,"6.0-6.1":0.077035249523,"7.0-7.1":0.975046158249,"8":0.209535878703,"8.1":3.09725723225},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0038832750533,"12.1":0.0232996503198,"0":null},"ie":{"5.5":null,"6":0.033976,"7":0.033976,"8":0.883376,"9":1.44398,"10":3.10031,"11":13.649858,"0":null},"ie_mob":{"10":0.0270023157895,"11":0.0573336842105},"bb":{"7":0.004518,"10":null},"and_uc":{"0":0.42168},"op_mini":{"5.0-8.0":2.70470107463},"and_chr":{"0":2.789898},"and_ff":{"0":0.201804}},"total":98.437008}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FO.json
new file mode 100644
index 0000000..26c044c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FO.json
@@ -0,0 +1 @@
+{"id":"FO","name":"Faroe Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.06272,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.07056,"12":null,"13":0.01568,"14":null,"15":null,"16":0.22736,"17":null,"18":null,"19":0.01568,"20":0.00784,"21":null,"22":null,"23":null,"24":0.02352,"25":null,"26":0.00784,"27":null,"28":0.02352,"29":0.02352,"30":0.00784,"31":0.5488,"32":0.01568,"33":0.14896,"34":0.07056,"35":6.47584,"36":0.34496,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.01568,"12":0.01568,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":0.0392,"23":null,"24":0.00784,"25":null,"26":0.01568,"27":null,"28":0.00784,"29":null,"30":0.00784,"31":0.03136,"32":0.03136,"33":0.1176,"34":0.06272,"35":0.0392,"36":0.1568,"37":0.06272,"38":0.21952,"39":0.65072,"40":30.74064,"41":0.12544,"42":0.08624,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.05488,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.196,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.09408,"5":0.1176,"5.1":0.4704,"6":0.21168,"6.1":0.94864,"7":0.98784,"7.1":1.59152,"8":2.06192},"android":{"2.1":0,"2.2":0,"2.3":0.0423242332883,"3":0,"4":0.0855395030668,"4.1":0.275553034619,"4.2-4.3":0.466457602661,"4.4":0.871433687494,"4.4.3-4.4.4":0.401411938871,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0757090952907,"6.0-6.1":0.23244020484,"7.0-7.1":2.9420288784,"8":0.632237357164,"8.1":9.3454244643},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":6.75479744136e-5,"12.1":0.000405287846482,"0":null},"ie":{"5.5":null,"6":null,"7":0.1176,"8":1.52096,"9":2.2736,"10":2.64992,"11":23.70032,"0":null},"ie_mob":{"10":0.318817894737,"11":0.676942105263},"bb":{"7":0.0216,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0.0470471641791},"and_chr":{"0":5.07704},"and_ff":{"0":0.0648}},"total":99.0992}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FR.json
new file mode 100644
index 0000000..b16c28a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/FR.json
@@ -0,0 +1 @@
+{"id":"FR","name":"France","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.042125,"3.5":0.01685,"3.6":0.08425,"4":0.01685,"5":0.008425,"6":null,"7":0.008425,"8":null,"9":0.008425,"10":0.058975,"11":0.01685,"12":0.05055,"13":0.01685,"14":0.01685,"15":0.0337,"16":0.092675,"17":0.1011,"18":0.025275,"19":0.01685,"20":0.042125,"21":0.0337,"22":0.025275,"23":0.0337,"24":0.2022,"25":0.042125,"26":0.092675,"27":0.337,"28":0.058975,"29":0.1011,"30":0.126375,"31":1.137375,"32":0.581325,"33":0.227475,"34":0.395975,"35":18.728775,"36":1.09525,"37":0.0337,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.058975,"12":0.008425,"13":null,"14":null,"15":null,"16":0.0337,"17":null,"18":0.025275,"19":null,"20":0.0674,"21":0.025275,"22":0.05055,"23":0.193775,"24":0.075825,"25":0.058975,"26":0.058975,"27":0.042125,"28":0.0674,"29":0.126375,"30":0.0674,"31":0.412825,"32":0.1348,"33":0.210625,"34":0.25275,"35":0.52235,"36":1.086825,"37":1.36485,"38":0.665575,"39":1.83665,"40":28.872475,"41":0.176925,"42":0.08425,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.0337,"12.1":0.1348,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.008425,"25":0.025275,"26":0.01685,"27":0.513925,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.11795,"5":0.261175,"5.1":0.918325,"6":0.143225,"6.1":0.497075,"7":0.65715,"7.1":1.103675,"8":2.502225},"android":{"2.1":0,"2.2":0,"2.3":0.0544119191184,"3":0,"4":0.109969352324,"4.1":0.354250231313,"4.2-4.3":0.599676624389,"4.4":1.1203127768,"4.4.3-4.4.4":0.51605409606,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0327044582789,"6.0-6.1":0.100408424541,"7.0-7.1":1.27088377347,"8":0.27311091475,"8.1":4.03699242896},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000125373134328,"12.1":0.00075223880597,"0":null},"ie":{"5.5":null,"6":0.0697529279279,"7":0.183101435811,"8":1.98795844595,"9":1.5520026464,"10":1.13348507883,"11":10.5588494651,"0":null},"ie_mob":{"10":0.222890131579,"11":0.473259868421},"bb":{"7":0.02205,"10":null},"and_uc":{"0":0.171675},"op_mini":{"5.0-8.0":0.0873223880597},"and_chr":{"0":6.3946},"and_ff":{"0":0.099225}},"total":98.8511}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GA.json
new file mode 100644
index 0000000..981314f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GA.json
@@ -0,0 +1 @@
+{"id":"GA","name":"Gabon","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.02778,"3":0.05556,"3.5":0.077784,"3.6":0.100008,"4":0.072228,"5":0.033336,"6":0.033336,"7":0.011112,"8":0.061116,"9":0.02778,"10":0.061116,"11":0.100008,"12":0.177792,"13":0.066672,"14":0.05556,"15":0.066672,"16":0.116676,"17":0.05556,"18":0.094452,"19":0.044448,"20":0.05556,"21":0.044448,"22":0.02778,"23":0.066672,"24":0.066672,"25":0.077784,"26":0.038892,"27":0.077784,"28":0.05556,"29":0.100008,"30":0.2778,"31":0.244464,"32":0.36114,"33":0.505596,"34":0.683388,"35":12.75102,"36":0.394476,"37":0.038892,"38":0.011112,"39":null},"chrome":{"4":0.011112,"5":0.011112,"6":0.016668,"7":0.016668,"8":null,"9":null,"10":0.02778,"11":0.183348,"12":0.044448,"13":0.016668,"14":null,"15":0.011112,"16":0.011112,"17":0.011112,"18":0.044448,"19":0.022224,"20":0.016668,"21":0.038892,"22":0.02778,"23":null,"24":0.022224,"25":0.08334,"26":0.088896,"27":0.050004,"28":0.022224,"29":0.016668,"30":0.044448,"31":0.38892,"32":0.038892,"33":0.127788,"34":0.072228,"35":0.116676,"36":0.511152,"37":0.211128,"38":0.244464,"39":0.6945,"40":14.773404,"41":0.1389,"42":0.122232,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.016668,"11.6":null,"12":0.011112,"12.1":0.127788,"15":0.005556,"16":null,"17":0.011112,"18":0.016668,"19":null,"20":0.005556,"21":0.016668,"22":0.016668,"23":0.005556,"24":0.011112,"25":0.011112,"26":0.038892,"27":0.733392,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.016668,"5":0.05556,"5.1":0.205572,"6":0.144456,"6.1":0.094452,"7":0.216684,"7.1":0.372252,"8":0.511152},"android":{"2.1":0,"2.2":0,"2.3":0.176702014762,"3":0,"4":0.357124071941,"4.1":1.15042311716,"4.2-4.3":1.9474422048,"4.4":3.6382014829,"4.4.3-4.4.4":1.67587910843,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0143962574556,"6.0-6.1":0.0441990360478,"7.0-7.1":0.559433513405,"8":0.12022137805,"8.1":1.77705381504},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0237645031983,"12.1":0.14258701919,"0":null},"ie":{"5.5":null,"6":0.213148363636,"7":0.117792516746,"8":3.33184547368,"9":1.3910735311,"10":2.33902283254,"11":8.72786457416,"0":null},"ie_mob":{"10":0.589063894737,"11":1.25075210526},"bb":{"7":0.979902,"10":null},"and_uc":{"0":1.519848},"op_mini":{"5.0-8.0":16.5519764776},"and_chr":{"0":6.237232},"and_ff":{"0":0.217756}},"total":93.2366452919}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GB.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GB.json
new file mode 100644
index 0000000..e387d0b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GB.json
@@ -0,0 +1 @@
+{"id":"GB","name":"United Kingdom","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.013772,"3.5":null,"3.6":0.061974,"4":0.006886,"5":null,"6":0.006886,"7":0.006886,"8":null,"9":null,"10":0.013772,"11":0.013772,"12":0.020658,"13":0.006886,"14":0.006886,"15":0.006886,"16":0.03443,"17":0.020658,"18":0.013772,"19":0.013772,"20":0.020658,"21":0.03443,"22":0.013772,"23":0.020658,"24":0.048202,"25":0.020658,"26":0.03443,"27":0.158378,"28":0.03443,"29":0.03443,"30":0.055088,"31":0.247896,"32":0.123948,"33":0.110176,"34":0.20658,"35":8.566184,"36":0.509564,"37":0.013772,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.082632,"12":0.006886,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.013772,"19":null,"20":null,"21":0.089518,"22":0.055088,"23":0.013772,"24":0.006886,"25":0.03443,"26":0.027544,"27":0.027544,"28":0.03443,"29":0.03443,"30":0.03443,"31":0.282326,"32":0.096404,"33":0.227238,"34":0.151492,"35":0.358072,"36":0.399388,"37":0.523336,"38":0.475134,"39":1.597552,"40":28.046678,"41":0.192808,"42":0.10329,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.117062,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.006886,"25":0.020658,"26":0.013772,"27":0.433818,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.061974,"5":0.179036,"5.1":0.681714,"6":0.17215,"6.1":0.509564,"7":0.65417,"7.1":1.23948,"8":3.215762},"android":{"2.1":0,"2.2":0,"2.3":0.0607098887618,"3":0,"4":0.122697880445,"4.1":0.395253328413,"4.2-4.3":0.669086879301,"4.4":1.24998465703,"4.4.3-4.4.4":0.575785366046,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0913778738829,"6.0-6.1":0.280546104027,"7.0-7.1":3.55091211668,"8":0.763085402952,"8.1":11.2795565025},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00104463965885,"12.1":0.00626783795309,"0":null},"ie":{"5.5":null,"6":0.0277097280385,"7":0.124693776173,"8":1.76649516245,"9":2.16828621901,"10":1.45476072202,"11":11.7212149603,"0":null},"ie_mob":{"10":0.270194131579,"11":0.573699868421},"bb":{"7":0.26469,"10":null},"and_uc":{"0":0.199296},"op_mini":{"5.0-8.0":0.727591522388},"and_chr":{"0":8.998014},"and_ff":{"0":0.096534}},"total":98.161764568}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GD.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GD.json
new file mode 100644
index 0000000..2584959
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GD.json
@@ -0,0 +1 @@
+{"id":"GD","name":"Grenada","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.069057,"4":0.007673,"5":0.007673,"6":null,"7":0.015346,"8":null,"9":null,"10":null,"11":0.023019,"12":0.07673,"13":null,"14":null,"15":null,"16":0.023019,"17":0.030692,"18":null,"19":0.007673,"20":null,"21":0.030692,"22":null,"23":0.092076,"24":null,"25":0.023019,"26":0.023019,"27":0.007673,"28":0.015346,"29":null,"30":0.030692,"31":0.199498,"32":0.130441,"33":0.084403,"34":0.199498,"35":8.156399,"36":0.583148,"37":0.030692,"38":0.007673,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.161133,"12":0.007673,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.061384,"19":null,"20":0.030692,"21":0.007673,"22":0.130441,"23":null,"24":0.015346,"25":0.015346,"26":0.007673,"27":0.007673,"28":0.046038,"29":0.015346,"30":0.092076,"31":0.337612,"32":0.107422,"33":0.245536,"34":0.214844,"35":0.253209,"36":1.22768,"37":0.521764,"38":0.468053,"39":1.480889,"40":40.122117,"41":0.299247,"42":0.560129,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.115095,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.007673,"27":1.112585,"28":0.030692,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.015346,"5":0.199498,"5.1":0.322266,"6":0.099749,"6.1":0.245536,"7":0.299247,"7.1":0.391323,"8":1.5346},"android":{"2.1":0,"2.2":0,"2.3":0.198289720345,"3":0,"4":0.400753961119,"4.1":1.29097044246,"4.2-4.3":2.18536144422,"4.4":4.0826809789,"4.4.3-4.4.4":1.88062145296,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0159022960137,"6.0-6.1":0.0488228386384,"7.0-7.1":0.617957643338,"8":0.132798121096,"8.1":1.96295710091},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000251388770434,"12.1":0.0015083326226,"0":null},"ie":{"5.5":null,"6":0.0537993889194,"7":0.0384281349424,"8":1.36804160395,"9":0.876161476687,"10":0.968389000549,"11":10.683021514,"0":null},"ie_mob":{"10":0.325586083333,"11":0.691312916667},"bb":{"7":0.2920385,"10":null},"and_uc":{"0":0.351377},"op_mini":{"5.0-8.0":0.175092278607},"and_chr":{"0":8.782825},"and_ff":{"0":0.20943}},"total":98.320135619}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GE.json
new file mode 100644
index 0000000..aa36f3f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GE.json
@@ -0,0 +1 @@
+{"id":"GE","name":"Georgia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.009187,"3.5":0.009187,"3.6":0.073496,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.009187,"11":0.018374,"12":0.018374,"13":null,"14":0.009187,"15":null,"16":0.018374,"17":0.027561,"18":0.009187,"19":0.018374,"20":null,"21":0.018374,"22":0.009187,"23":null,"24":0.009187,"25":0.018374,"26":0.018374,"27":0.018374,"28":0.009187,"29":0.018374,"30":0.018374,"31":0.119431,"32":0.082683,"33":0.064309,"34":0.101057,"35":3.481873,"36":0.27561,"37":0.009187,"38":null,"39":null},"chrome":{"4":0.055122,"5":0.073496,"6":0.018374,"7":0.009187,"8":0.055122,"9":0.045935,"10":0.027561,"11":0.036748,"12":0.156179,"13":0.009187,"14":0.027561,"15":0.119431,"16":0.045935,"17":0.064309,"18":0.055122,"19":0.027561,"20":null,"21":0.009187,"22":0.055122,"23":0.018374,"24":0.064309,"25":0.036748,"26":0.036748,"27":0.073496,"28":0.110244,"29":0.027561,"30":0.330732,"31":0.137805,"32":0.055122,"33":0.799269,"34":0.165366,"35":0.413415,"36":0.909513,"37":0.413415,"38":0.523659,"39":3.279759,"40":57.988344,"41":0.312358,"42":0.597155,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.009187,"11":0.018374,"11.1":0.018374,"11.5":0.027561,"11.6":0.064309,"12":0.101057,"12.1":2.333498,"15":0.266423,"16":0.165366,"17":0.128618,"18":0.27561,"19":0.146992,"20":0.385854,"21":0.137805,"22":0.045935,"23":0.018374,"24":0.055122,"25":0.064309,"26":0.238862,"27":9.747407,"28":0.128618,"29":0.027561},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.018374,"5.1":0.064309,"6":0.009187,"6.1":0.027561,"7":0.055122,"7.1":0.073496,"8":0.220488},"android":{"2.1":0,"2.2":0,"2.3":0.0312826239734,"3":0,"4":0.0632238295041,"4.1":0.203666346606,"4.2-4.3":0.344767445265,"4.4":0.644092763073,"4.4.3-4.4.4":0.296690991579,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00723569183653,"6.0-6.1":0.0222148433578,"7.0-7.1":0.281176445928,"8":0.0604243739331,"8.1":0.893163644944},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00165026865672,"12.1":0.0099016119403,"0":null},"ie":{"5.5":null,"6":0.0279558567335,"7":0.0372744756447,"8":0.764126750716,"9":0.279558567335,"10":0.177053759312,"11":1.96622859026,"0":null},"ie_mob":{"10":0.0885028947368,"11":0.187917105263},"bb":{"7":0.0060975,"10":null},"and_uc":{"0":0.167478},"op_mini":{"5.0-8.0":1.1494121194},"and_chr":{"0":3.304928},"and_ff":{"0":0.033333}},"total":97.6000845}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GF.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GF.json
new file mode 100644
index 0000000..965ccdd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GF.json
@@ -0,0 +1 @@
+{"id":"GF","name":"French Guiana","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.054012,"3.5":null,"3.6":0.015432,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.015432,"11":0.03858,"12":0.054012,"13":0.015432,"14":null,"15":0.046296,"16":0.015432,"17":0.07716,"18":0.015432,"19":0.046296,"20":0.023148,"21":0.007716,"22":0.046296,"23":0.023148,"24":0.061728,"25":null,"26":0.069444,"27":0.015432,"28":0.023148,"29":0.023148,"30":0.03858,"31":0.285492,"32":0.15432,"33":0.23148,"34":0.416664,"35":14.575524,"36":0.825612,"37":0.030864,"38":null,"39":null},"chrome":{"4":0.007716,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.07716,"12":0.084876,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.015432,"19":null,"20":null,"21":null,"22":0.061728,"23":0.131172,"24":0.07716,"25":0.015432,"26":0.015432,"27":0.007716,"28":0.061728,"29":0.185184,"30":0.03858,"31":0.54012,"32":0.208332,"33":0.108024,"34":0.262344,"35":0.23148,"36":0.895056,"37":0.378084,"38":0.378084,"39":1.103388,"40":29.235924,"41":0.123456,"42":0.108024,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.084876,"15":null,"16":null,"17":null,"18":0.084876,"19":0.007716,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.956784,"28":0.007716,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.100308,"5":0.100308,"5.1":0.779316,"6":0.084876,"6.1":0.42438,"7":0.27006,"7.1":0.779316,"8":1.62036},"android":{"2.1":0,"2.2":0,"2.3":0.121088329348,"3":0,"4":0.244725886683,"4.1":0.788348754756,"4.2-4.3":1.33452085082,"4.4":2.49314497058,"4.4.3-4.4.4":1.14842720782,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0195955228437,"6.0-6.1":0.0601616929411,"7.0-7.1":0.761475142083,"8":0.1636398048,"8.1":2.41884383733},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000435047619048,"12.1":0.00261028571429,"0":null},"ie":{"5.5":null,"6":0.0336848225571,"7":0.0757908507535,"8":2.50109807487,"9":1.36423531356,"10":1.54950183763,"11":11.7981091006,"0":null},"ie_mob":{"10":0.0555773333333,"11":0.118006666667},"bb":{"7":0.010849,"10":null},"and_uc":{"0":0.036544},"op_mini":{"5.0-8.0":0.303010666667},"and_chr":{"0":14.214388},"and_ff":{"0":0.280932}},"total":98.796529}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GG.json
new file mode 100644
index 0000000..b2edaec
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GG.json
@@ -0,0 +1 @@
+{"id":"GG","name":"Guernsey","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008298,"3":null,"3.5":0.016596,"3.6":0.016596,"4":0.016596,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.024894,"11":0.008298,"12":null,"13":null,"14":null,"15":null,"16":0.016596,"17":null,"18":0.008298,"19":null,"20":0.016596,"21":0.016596,"22":0.016596,"23":null,"24":0.016596,"25":0.016596,"26":0.008298,"27":0.016596,"28":0.033192,"29":0.016596,"30":0.099576,"31":0.12447,"32":0.107874,"33":0.033192,"34":0.141066,"35":7.59267,"36":0.489582,"37":0.008298,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.16596,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.058086,"22":0.04149,"23":null,"24":0.016596,"25":0.016596,"26":0.008298,"27":null,"28":0.008298,"29":0.008298,"30":null,"31":0.33192,"32":0.116172,"33":0.107874,"34":0.091278,"35":0.174258,"36":0.472986,"37":0.157662,"38":0.099576,"39":1.136826,"40":29.58237,"41":0.091278,"42":0.074682,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":1.095336,"12.1":0.024894,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.33192,"28":null,"29":null},"safari":{"3.1":null,"3.2":0.066384,"4":0.107874,"5":0.846396,"5.1":1.651302,"6":0.24894,"6.1":1.028952,"7":1.028952,"7.1":2.124288,"8":4.422834},"android":{"2.1":0,"2.2":0,"2.3":0.0289122361992,"3":0,"4":0.0584331510552,"4.1":0.188233874623,"4.2-4.3":0.318643276848,"4.4":0.595287726375,"4.4.3-4.4.4":0.2742097349,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0598800138568,"6.0-6.1":0.183842147806,"7.0-7.1":2.32691632794,"8":0.500050642032,"8.1":7.39150486836},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":2.41933191187e-5,"12.1":0.000145159914712,"0":null},"ie":{"5.5":null,"6":0.024894,"7":0.348516,"8":2.754936,"9":3.327498,"10":1.477044,"11":19.633068,"0":null},"ie_mob":{"10":0.257211017544,"11":0.546132982456},"bb":{"7":0.045103,"10":null},"and_uc":{"0":0.001702},"op_mini":{"5.0-8.0":0.0168506467662},"and_chr":{"0":4.064388},"and_ff":{"0":0.091908}},"total":99.124473}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GH.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GH.json
new file mode 100644
index 0000000..2feb15c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GH.json
@@ -0,0 +1 @@
+{"id":"GH","name":"Ghana","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.01004,"3":0.03514,"3.5":0.01506,"3.6":0.1004,"4":0.09538,"5":0.03514,"6":0.03012,"7":0.04518,"8":0.03514,"9":0.0502,"10":0.09538,"11":0.1757,"12":0.14558,"13":0.12048,"14":0.13052,"15":0.18072,"16":0.29116,"17":0.08534,"18":0.11546,"19":0.13554,"20":0.1255,"21":0.18072,"22":0.09538,"23":0.18072,"24":0.12048,"25":0.09538,"26":0.15562,"27":0.23594,"28":0.16566,"29":0.68774,"30":0.64256,"31":0.64256,"32":0.57228,"33":0.89356,"34":1.30018,"35":12.38434,"36":4.07122,"37":0.13554,"38":0.04518,"39":null},"chrome":{"4":null,"5":0.00502,"6":0.01004,"7":0.01004,"8":0.01506,"9":0.00502,"10":0.01004,"11":0.06024,"12":0.01506,"13":0.02008,"14":0.02008,"15":0.00502,"16":0.03514,"17":0.01004,"18":0.01506,"19":0.01004,"20":0.01004,"21":0.01004,"22":0.0251,"23":0.01004,"24":0.01004,"25":0.05522,"26":0.03514,"27":0.0251,"28":0.03514,"29":0.04518,"30":0.06024,"31":0.14056,"32":0.04518,"33":0.29116,"34":0.06526,"35":0.16566,"36":0.77308,"37":0.14056,"38":0.29618,"39":1.01404,"40":12.1986,"41":0.26606,"42":0.47188,"43":null},"opera":{"9":null,"9.5-9.6":0.00502,"10.0-10.1":0,"10.5":null,"10.6":0.00502,"11":0.01004,"11.1":0.00502,"11.5":0.01506,"11.6":0.06526,"12":0.0251,"12.1":0.2008,"15":0.02008,"16":0.01004,"17":0.01004,"18":0.02008,"19":0.01004,"20":0.03012,"21":0.01004,"22":0.01506,"23":null,"24":0.02008,"25":0.02008,"26":0.14056,"27":1.5813,"28":0.01506,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.01004,"5":0.0251,"5.1":0.16566,"6":0.03514,"6.1":0.08534,"7":0.1004,"7.1":0.19076,"8":0.502},"android":{"2.1":0,"2.2":0,"2.3":0.119910364903,"3":0,"4":0.24234515854,"4.1":0.780679586236,"4.2-4.3":1.32153844267,"4.4":2.46889130263,"4.4.3-4.4.4":1.13725514503,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00926343006326,"6.0-6.1":0.0284403554574,"7.0-7.1":0.359973641932,"8":0.0773577668441,"8.1":1.1434648057},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0402010234542,"12.1":0.241206140725,"0":null},"ie":{"5.5":null,"6":0.030643257329,"7":0.0204288382193,"8":0.863118414767,"9":0.413683973941,"10":0.90908330076,"11":2.45146058632,"0":null},"ie_mob":{"10":0.492692368421,"11":1.04612763158},"bb":{"7":0.09462,"10":null},"and_uc":{"0":4.7559},"op_mini":{"5.0-8.0":28.0000128358},"and_chr":{"0":3.83584},"and_ff":{"0":0.32868}},"total":95.6548783713}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GI.json
new file mode 100644
index 0000000..95820ec
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GI.json
@@ -0,0 +1 @@
+{"id":"GI","name":"Gibraltar","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.021696,"4":null,"5":null,"6":null,"7":null,"8":0.014464,"9":null,"10":0.028928,"11":null,"12":0.028928,"13":null,"14":null,"15":0.007232,"16":0.014464,"17":null,"18":null,"19":null,"20":null,"21":0.03616,"22":0.014464,"23":0.007232,"24":0.303744,"25":0.021696,"26":0.043392,"27":0.014464,"28":0.07232,"29":0.028928,"30":0.303744,"31":0.159104,"32":0.188032,"33":0.10848,"34":0.426688,"35":9.04,"36":0.499008,"37":0.007232,"38":0.014464,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.03616,"12":null,"13":null,"14":null,"15":null,"16":0.014464,"17":null,"18":null,"19":null,"20":null,"21":0.065088,"22":0.03616,"23":null,"24":null,"25":null,"26":0.028928,"27":0.014464,"28":null,"29":0.014464,"30":0.014464,"31":0.896768,"32":0.014464,"33":0.166336,"34":0.101248,"35":0.296512,"36":0.347136,"37":0.151872,"38":0.159104,"39":1.135424,"40":31.791872,"41":0.173568,"42":0.14464,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.021696,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.115712,"28":0.007232,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.130176,"5.1":1.583808,"6":0.043392,"6.1":0.383296,"7":0.636416,"7.1":1.497024,"8":2.849408},"android":{"2.1":0,"2.2":0,"2.3":0.0739207651523,"3":0,"4":0.149397756939,"4.1":0.481263086807,"4.2-4.3":0.81468464331,"4.4":1.52198964882,"4.4.3-4.4.4":0.701080098971,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0868964112863,"6.0-6.1":0.266787227633,"7.0-7.1":3.37676405262,"8":0.725661259163,"8.1":10.7263710493},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":3.14769012082e-5,"12.1":0.000188861407249,"0":null},"ie":{"5.5":null,"6":null,"7":0.043392,"8":1.460864,"9":0.68704,"10":1.48256,"11":13.516608,"0":null},"ie_mob":{"10":0.0966007719298,"11":0.20511122807},"bb":{"7":0.01384,"10":null},"and_uc":{"0":0.080272},"op_mini":{"5.0-8.0":0.0219236616915},"and_chr":{"0":8.181664},"and_ff":{"0":0.038752}},"total":99.029824}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GL.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GL.json
new file mode 100644
index 0000000..0bcd554
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GL.json
@@ -0,0 +1 @@
+{"id":"GL","name":"Greenland","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.010858,"3.5":null,"3.6":0.103151,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.016287,"11":null,"12":null,"13":null,"14":0.016287,"15":null,"16":null,"17":null,"18":null,"19":0.032574,"20":null,"21":null,"22":null,"23":null,"24":0.038003,"25":null,"26":null,"27":null,"28":0.016287,"29":0.10858,"30":0.092293,"31":0.038003,"32":0.010858,"33":0.092293,"34":0.076006,"35":5.982758,"36":0.200873,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":0.005429,"13":null,"14":null,"15":null,"16":null,"17":0.005429,"18":null,"19":null,"20":0.05429,"21":null,"22":0.092293,"23":null,"24":0.016287,"25":0.016287,"26":null,"27":null,"28":0.016287,"29":0.010858,"30":null,"31":0.152012,"32":0.059719,"33":0.021716,"34":0.086864,"35":0.086864,"36":0.575474,"37":0.146583,"38":0.249734,"39":0.580903,"40":15.711526,"41":0.059719,"42":0.048861,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.260592,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.005429,"27":0.27145,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.021716,"5":0.038003,"5.1":0.700341,"6":0.048861,"6.1":0.439749,"7":0.553758,"7.1":1.509262,"8":2.736216},"android":{"2.1":0,"2.2":0,"2.3":0.0976927102609,"3":0,"4":0.197442109159,"4.1":0.636030961015,"4.2-4.3":1.07667650151,"4.4":2.01144148706,"4.4.3-4.4.4":0.926538231001,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0882966286776,"6.0-6.1":0.271086140677,"7.0-7.1":3.43117600914,"8":0.737354302641,"8.1":10.8992119189},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0151651940299,"12.1":0.0909911641791,"0":null},"ie":{"5.5":null,"6":0.010858,"7":0.086864,"8":1.058655,"9":2.980521,"10":4.218333,"11":13.762515,"0":null},"ie_mob":{"10":0.140498105263,"11":0.298317894737},"bb":{"7":0,"10":null},"and_uc":{"0":1.517572},"op_mini":{"5.0-8.0":10.5625576418},"and_chr":{"0":12.321138},"and_ff":{"0":0.086849}},"total":98.941405}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GM.json
new file mode 100644
index 0000000..6d68b63
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GM.json
@@ -0,0 +1 @@
+{"id":"GM","name":"Gambia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.005517,"3":0.027585,"3.5":0.016551,"3.6":0.209646,"4":0.05517,"5":0.033102,"6":0.033102,"7":0.022068,"8":0.016551,"9":0.038619,"10":0.027585,"11":0.126891,"12":0.215163,"13":0.060687,"14":0.121374,"15":0.077238,"16":0.071721,"17":0.05517,"18":0.077238,"19":0.099306,"20":0.088272,"21":0.121374,"22":0.022068,"23":0.033102,"24":0.044136,"25":0.077238,"26":0.099306,"27":0.071721,"28":0.259299,"29":0.303435,"30":0.430326,"31":0.259299,"32":0.176544,"33":0.347571,"34":0.755829,"35":13.577337,"36":7.790004,"37":0.308952,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":0.011034,"8":null,"9":0.011034,"10":0.011034,"11":0.159993,"12":0.005517,"13":null,"14":0.005517,"15":0.005517,"16":0.011034,"17":null,"18":null,"19":0.005517,"20":null,"21":0.016551,"22":0.005517,"23":null,"24":0.011034,"25":0.016551,"26":0.011034,"27":0.016551,"28":0.022068,"29":0.077238,"30":0.077238,"31":0.143442,"32":0.093789,"33":2.526786,"34":0.038619,"35":0.137925,"36":1.964052,"37":0.182061,"38":0.060687,"39":0.766863,"40":13.279419,"41":0.126891,"42":0.93789,"43":0.005517},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.005517,"11.1":0.104823,"11.5":0.011034,"11.6":0.033102,"12":0.011034,"12.1":0.380673,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.011034,"21":0.033102,"22":null,"23":null,"24":null,"25":null,"26":0.066204,"27":0.893754,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.033102,"5":0.022068,"5.1":0.104823,"6":0.044136,"6.1":0.115857,"7":0.11034,"7.1":0.259299,"8":0.38619},"android":{"2.1":0,"2.2":0,"2.3":0.171168667221,"3":0,"4":0.345940885331,"4.1":1.11439811238,"4.2-4.3":1.88645889032,"4.4":3.52427276931,"4.4.3-4.4.4":1.62339967543,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0205522975198,"6.0-6.1":0.0630991590521,"7.0-7.1":0.798655070288,"8":0.171629712622,"8.1":2.53694676052},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0263117370291,"12.1":0.157870422175,"0":null},"ie":{"5.5":null,"6":0.0166757115178,"7":0.0222342820237,"8":1.07836267815,"9":0.872695569429,"10":0.561415621098,"11":2.60696956728,"0":null},"ie_mob":{"10":0.475099688596,"11":1.0087733114},"bb":{"7":0.0246565,"10":null},"and_uc":{"0":5.630648},"op_mini":{"5.0-8.0":18.3261248408},"and_chr":{"0":4.798871},"and_ff":{"0":0.197252}},"total":97.5865919295}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GN.json
new file mode 100644
index 0000000..95e8a17
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GN.json
@@ -0,0 +1 @@
+{"id":"GN","name":"Guinea","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.002445,"3":0.13203,"3.5":0.031785,"3.6":0.05379,"4":0.026895,"5":0.02445,"6":0.012225,"7":0.017115,"8":0.01467,"9":0.041565,"10":0.051345,"11":0.18093,"12":0.07824,"13":0.036675,"14":0.026895,"15":0.05379,"16":0.03912,"17":0.03423,"18":0.03423,"19":0.041565,"20":0.031785,"21":0.031785,"22":0.06846,"23":0.03912,"24":0.036675,"25":0.026895,"26":0.036675,"27":0.01956,"28":0.026895,"29":0.168705,"30":0.22983,"31":0.17604,"32":0.20049,"33":0.330075,"34":0.349635,"35":6.15162,"36":0.383865,"37":0.00978,"38":null,"39":null},"chrome":{"4":0.002445,"5":0.022005,"6":0.012225,"7":null,"8":0.00489,"9":null,"10":null,"11":0.05868,"12":0.00978,"13":0.007335,"14":0.007335,"15":0.002445,"16":null,"17":0.00489,"18":null,"19":null,"20":0.002445,"21":null,"22":0.007335,"23":null,"24":0.002445,"25":0.031785,"26":0.017115,"27":0.017115,"28":0.007335,"29":0.031785,"30":0.026895,"31":0.080685,"32":0.012225,"33":0.178485,"34":0.01956,"35":0.041565,"36":1.00245,"37":0.02445,"38":0.095355,"39":0.63081,"40":6.55749,"41":0.05379,"42":0.041565,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.007335,"11.1":0.012225,"11.5":0.002445,"11.6":0.01956,"12":0.002445,"12.1":0.075795,"15":0.03423,"16":0.007335,"17":0.01467,"18":0.01467,"19":0.00489,"20":0.01467,"21":0.00489,"22":0.00978,"23":null,"24":0.007335,"25":0.012225,"26":0.095355,"27":0.90465,"28":0.00978,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.007335,"5":0.012225,"5.1":0.0489,"6":0.00978,"6.1":0.00978,"7":0.03423,"7.1":0.02934,"8":0.11736},"android":{"2.1":0,"2.2":0,"2.3":0.316518291922,"3":0,"4":0.639700126832,"4.1":2.06070066899,"4.2-4.3":3.48836475413,"4.4":6.5169450421,"4.4.3-4.4.4":3.00192611602,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0117614941259,"6.0-6.1":0.0361098503866,"7.0-7.1":0.457047534893,"8":0.0982187930515,"8.1":1.45182232754},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0654337100213,"12.1":0.392602260128,"0":null},"ie":{"5.5":null,"6":0.00736797687861,"7":0.0245599229287,"8":0.83012539499,"9":0.255423198459,"10":0.987308901734,"11":1.67007475915,"0":null},"ie_mob":{"10":0.174162631579,"11":0.369797368421},"bb":{"7":0.01699875,"10":null},"and_uc":{"0":3.39975},"op_mini":{"5.0-8.0":45.5745790299},"and_chr":{"0":5.631265},"and_ff":{"0":0.22665}},"total":97.4950439041}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GP.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GP.json
new file mode 100644
index 0000000..ac74a65
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GP.json
@@ -0,0 +1 @@
+{"id":"GP","name":"Guadeloupe","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.08097,"3.5":0.008097,"3.6":0.072873,"4":0.008097,"5":0.024291,"6":null,"7":null,"8":null,"9":null,"10":0.008097,"11":0.008097,"12":0.024291,"13":0.072873,"14":null,"15":0.016194,"16":0.072873,"17":0.016194,"18":0.008097,"19":0.008097,"20":0.113358,"21":0.008097,"22":0.016194,"23":0.032388,"24":0.056679,"25":0.016194,"26":0.032388,"27":0.008097,"28":0.024291,"29":0.024291,"30":0.064776,"31":0.234813,"32":0.129552,"33":0.105261,"34":0.315783,"35":12.696096,"36":0.842088,"37":0.008097,"38":null,"39":null},"chrome":{"4":0.040485,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.008097,"11":0.072873,"12":null,"13":null,"14":null,"15":null,"16":null,"17":0.024291,"18":null,"19":null,"20":null,"21":0.024291,"22":0.477723,"23":0.097164,"24":0.056679,"25":0.024291,"26":0.113358,"27":0.016194,"28":0.089067,"29":0.048582,"30":0.040485,"31":0.178134,"32":0.072873,"33":0.129552,"34":0.210522,"35":0.388656,"36":0.461529,"37":0.348171,"38":0.582984,"39":1.910892,"40":30.298974,"41":0.210522,"42":0.24291,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.08097,"10.5":0.008097,"10.6":0.008097,"11":0.040485,"11.1":null,"11.5":null,"11.6":null,"12":0.016194,"12.1":0.129552,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.024291,"21":null,"22":null,"23":0.008097,"24":null,"25":null,"26":0.008097,"27":0.429141,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.137649,"5":0.502014,"5.1":1.028319,"6":0.178134,"6.1":0.704439,"7":0.502014,"7.1":1.392684,"8":3.084957},"android":{"2.1":0,"2.2":0,"2.3":0.0922061763177,"3":0,"4":0.186353535295,"4.1":0.600310737395,"4.2-4.3":1.01620912215,"4.4":1.89847664082,"4.4.3-4.4.4":0.874502788024,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0247569618436,"6.0-6.1":0.0760082161864,"7.0-7.1":0.962046850587,"8":0.206742348027,"8.1":3.05596462336},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":7.30362473348e-5,"12.1":0.000438217484009,"0":null},"ie":{"5.5":null,"6":0.0335785243578,"7":1.47745507174,"8":3.23193296944,"9":1.24240540124,"10":1.67892621789,"11":11.2907788153,"0":null},"ie_mob":{"10":0.126123828947,"11":0.267797171053},"bb":{"7":0.05566275,"10":null},"and_uc":{"0":0.036157},"op_mini":{"5.0-8.0":0.0508697462687},"and_chr":{"0":10.410516},"and_ff":{"0":0.127501}},"total":98.63390775}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GQ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GQ.json
new file mode 100644
index 0000000..3660dd7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GQ.json
@@ -0,0 +1 @@
+{"id":"GQ","name":"Equatorial Guinea","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.01338,"3.5":0.02676,"3.6":0.09366,"4":0.02676,"5":0.03345,"6":0.10035,"7":0.02007,"8":0.12042,"9":0.02007,"10":0.05352,"11":0.02676,"12":0.06021,"13":0.11373,"14":0.04014,"15":0.22077,"16":0.02676,"17":0.11373,"18":0.01338,"19":0.10704,"20":0.04683,"21":0.0669,"22":0.02676,"23":0.24753,"24":0.2676,"25":0.0669,"26":0.02676,"27":0.02676,"28":0.17394,"29":0.65562,"30":1.1373,"31":0.38802,"32":0.30105,"33":0.55527,"34":0.69576,"35":10.37619,"36":0.72921,"37":0.05352,"38":0.01338,"39":null},"chrome":{"4":0.02007,"5":0.08697,"6":0.02007,"7":null,"8":null,"9":null,"10":0.01338,"11":0.12042,"12":0.04014,"13":0.01338,"14":null,"15":null,"16":null,"17":0.02676,"18":0.00669,"19":null,"20":null,"21":0.10035,"22":null,"23":null,"24":0.02007,"25":0.08697,"26":0.02007,"27":0.02676,"28":0.01338,"29":0.01338,"30":0.25422,"31":0.45492,"32":0.03345,"33":0.32112,"34":0.15387,"35":0.18063,"36":0.76266,"37":0.12711,"38":0.58203,"39":1.28448,"40":23.83647,"41":0.14049,"42":0.17394,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.02007,"11.6":0.00669,"12":0.00669,"12.1":0.19401,"15":0.03345,"16":0.00669,"17":0.03345,"18":null,"19":0.10035,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.01338,"26":0.02007,"27":2.12073,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.01338,"5":0.04014,"5.1":0.10704,"6":0.04683,"6.1":0.04683,"7":0.35457,"7.1":0.35457,"8":0.6021},"android":{"2.1":0,"2.2":0,"2.3":0.173848123506,"3":0,"4":0.351356207506,"4.1":1.13184278303,"4.2-4.3":1.91598931906,"4.4":3.57944136397,"4.4.3-4.4.4":1.64881220293,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0189636178331,"6.0-6.1":0.0582216336982,"7.0-7.1":0.736919535094,"8":0.158362843659,"8.1":2.34084236972},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0105298933902,"12.1":0.0631793603412,"0":null},"ie":{"5.5":null,"6":0.0336731859883,"7":0.0269385487907,"8":3.42119569641,"9":1.71059784821,"10":2.15508390325,"11":8.73482444537,"0":null},"ie_mob":{"10":0.313695087719,"11":0.666064912281},"bb":{"7":0.1150225,"10":null},"and_uc":{"0":4.70351},"op_mini":{"5.0-8.0":7.33407074627},"and_chr":{"0":6.41991},"and_ff":{"0":0.25487}},"total":98.219316128}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GR.json
new file mode 100644
index 0000000..806c3f5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GR.json
@@ -0,0 +1 @@
+{"id":"GR","name":"Greece","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.018246,"3.5":null,"3.6":0.09123,"4":0.018246,"5":0.018246,"6":0.018246,"7":null,"8":0.018246,"9":0.009123,"10":0.027369,"11":0.018246,"12":0.173337,"13":0.018246,"14":0.009123,"15":0.018246,"16":0.045615,"17":0.027369,"18":0.036492,"19":0.018246,"20":0.036492,"21":0.036492,"22":0.027369,"23":0.018246,"24":0.018246,"25":0.018246,"26":0.027369,"27":0.054738,"28":0.036492,"29":0.045615,"30":0.127722,"31":0.237198,"32":0.200706,"33":0.228075,"34":0.392289,"35":21.429927,"36":1.386696,"37":0.018246,"38":0.018246,"39":null},"chrome":{"4":null,"5":0.036492,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.118599,"12":null,"13":null,"14":null,"15":0.018246,"16":0.027369,"17":0.027369,"18":0.018246,"19":null,"20":null,"21":0.018246,"22":0.383166,"23":0.036492,"24":0.018246,"25":null,"26":0.164214,"27":0.027369,"28":0.027369,"29":0.027369,"30":0.100353,"31":0.200706,"32":0.09123,"33":0.191583,"34":0.282813,"35":0.374043,"36":0.410535,"37":0.501765,"38":0.520011,"39":1.879338,"40":45.405171,"41":0.118599,"42":0.18246,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.018246,"11.1":null,"11.5":null,"11.6":null,"12":0.164214,"12.1":0.291936,"15":null,"16":null,"17":null,"18":0.018246,"19":null,"20":0.009123,"21":null,"22":null,"23":null,"24":null,"25":0.009123,"26":0.036492,"27":1.049145,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.018246,"5":0.18246,"5.1":0.218952,"6":0.027369,"6.1":0.082107,"7":0.109476,"7.1":0.173337,"8":0.501765},"android":{"2.1":0,"2.2":0,"2.3":0.0572005676266,"3":0,"4":0.115605357729,"4.1":0.372405800811,"4.2-4.3":0.630410466369,"4.4":1.17772958187,"4.4.3-4.4.4":0.542502225595,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00935631047294,"6.0-6.1":0.0287255146099,"7.0-7.1":0.363582942062,"8":0.0781333997389,"8.1":1.15492983312},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000160814498934,"12.1":0.000964886993603,"0":null},"ie":{"5.5":null,"6":0.0274863627787,"7":0.183242418525,"8":2.28136811063,"9":0.897887850772,"10":0.742131795026,"11":6.55091646226,"0":null},"ie_mob":{"10":0.108386429825,"11":0.230135570175},"bb":{"7":0.00328875,"10":null},"and_uc":{"0":0.04385},"op_mini":{"5.0-8.0":0.112007298507},"and_chr":{"0":3.764321},"and_ff":{"0":0.066652}},"total":98.60329975}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GT.json
new file mode 100644
index 0000000..3476a4d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GT.json
@@ -0,0 +1 @@
+{"id":"GT","name":"Guatemala","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.044936,"3.5":0.016851,"3.6":0.061787,"4":0.016851,"5":0.028085,"6":0.011234,"7":0.016851,"8":0.011234,"9":0.011234,"10":0.016851,"11":0.022468,"12":0.050553,"13":0.022468,"14":0.022468,"15":0.028085,"16":0.033702,"17":0.011234,"18":0.028085,"19":0.016851,"20":0.028085,"21":0.039319,"22":0.044936,"23":0.022468,"24":0.016851,"25":0.028085,"26":0.033702,"27":0.028085,"28":0.033702,"29":0.050553,"30":0.101106,"31":0.123574,"32":0.134808,"33":0.162893,"34":0.213446,"35":7.116739,"36":0.370722,"37":0.011234,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":0.005617,"10":0.011234,"11":0.050553,"12":0.016851,"13":null,"14":0.005617,"15":null,"16":null,"17":null,"18":0.044936,"19":null,"20":null,"21":0.022468,"22":0.05617,"23":0.011234,"24":0.011234,"25":0.011234,"26":0.050553,"27":0.028085,"28":0.022468,"29":0.033702,"30":0.050553,"31":0.084255,"32":0.05617,"33":0.11234,"34":0.151659,"35":0.252765,"36":0.292084,"37":0.359488,"38":0.516764,"39":1.623313,"40":30.376736,"41":0.089872,"42":0.044936,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.039319,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.005617,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.022468,"27":0.426892,"28":0.005617,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.033702,"5":0.073021,"5.1":0.213446,"6":0.089872,"6.1":0.123574,"7":0.185361,"7.1":0.292084,"8":0.752678},"android":{"2.1":0,"2.2":0,"2.3":0.321368358457,"3":0,"4":0.649502366566,"4.1":2.0922771548,"4.2-4.3":3.54181759268,"4.4":6.61680535939,"4.4.3-4.4.4":3.0479251681,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0305546900291,"6.0-6.1":0.0938082588613,"7.0-7.1":1.18734453359,"8":0.255158464103,"8.1":3.77162805342},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00526458422175,"12.1":0.0315875053305,"0":null},"ie":{"5.5":null,"6":0.0567009073724,"7":0.0623709981096,"8":1.45154322873,"9":1.13401814745,"10":1.53659458979,"11":4.74019585633,"0":null},"ie_mob":{"10":0.442048618421,"11":0.938596381579},"bb":{"7":0.23558625,"10":null},"and_uc":{"0":0.696897},"op_mini":{"5.0-8.0":3.66678291045},"and_chr":{"0":16.086281},"and_ff":{"0":0.166554}},"total":98.5478899778}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GU.json
new file mode 100644
index 0000000..326bf45
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GU.json
@@ -0,0 +1 @@
+{"id":"GU","name":"Guam","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.006918,"3.5":null,"3.6":0.083016,"4":0.006918,"5":null,"6":0.020754,"7":null,"8":null,"9":null,"10":0.03459,"11":0.020754,"12":0.027672,"13":null,"14":null,"15":0.027672,"16":0.062262,"17":null,"18":null,"19":null,"20":null,"21":0.03459,"22":0.013836,"23":0.006918,"24":0.020754,"25":null,"26":0.013836,"27":0.006918,"28":null,"29":0.013836,"30":0.013836,"31":0.17295,"32":0.048426,"33":0.083016,"34":0.152196,"35":8.709762,"36":0.38049,"37":0.006918,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.048426,"12":0.006918,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.013836,"22":0.027672,"23":null,"24":0.020754,"25":0.013836,"26":0.020754,"27":0.03459,"28":0.041508,"29":0.020754,"30":0.013836,"31":0.131442,"32":0.027672,"33":0.083016,"34":0.131442,"35":0.152196,"36":0.352818,"37":0.31131,"38":0.96852,"39":1.528878,"40":32.777484,"41":0.20754,"42":0.152196,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.013836,"11.6":0.013836,"12":0.013836,"12.1":0.048426,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":0.013836,"24":null,"25":null,"26":null,"27":0.159114,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.048426,"5":0.41508,"5.1":0.975438,"6":0.17295,"6.1":0.774816,"7":0.62262,"7.1":1.252158,"8":2.822544},"android":{"2.1":0,"2.2":0,"2.3":0.133443326749,"3":0,"4":0.269695986693,"4.1":0.868786290467,"4.2-4.3":1.47068592744,"4.4":2.74752786443,"4.4.3-4.4.4":1.26560460422,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0770679491917,"6.0-6.1":0.236612124711,"7.0-7.1":2.9948334642,"8":0.643584979215,"8.1":9.51315948268},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000184,"12.1":0.001104,"0":null},"ie":{"5.5":null,"6":null,"7":0.0768262105263,"8":1.08953534928,"9":1.0057249378,"10":1.12445635407,"11":9.84073914833,"0":null},"ie_mob":{"10":0.0384844473684,"11":0.0817135526316},"bb":{"7":0.009246,"10":null},"and_uc":{"0":0.089378},"op_mini":{"5.0-8.0":0.128156},"and_chr":{"0":10.240694},"and_ff":{"0":0.098624}},"total":98.44902}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GW.json
new file mode 100644
index 0000000..cce2d48
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GW.json
@@ -0,0 +1 @@
+{"id":"GW","name":"Guinea-Bissau","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.01515,"3":0.128775,"3.5":0.01515,"3.6":0.416625,"4":0.2121,"5":0.0909,"6":0.174225,"7":0.083325,"8":0.068175,"9":0.310575,"10":0.2727,"11":0.9393,"12":0.249975,"13":0.098475,"14":0.10605,"15":0.053025,"16":0.128775,"17":0.19695,"18":0.113625,"19":0.037875,"20":0.04545,"21":0.1515,"22":null,"23":0.265125,"24":0.28785,"25":0.0606,"26":0.07575,"27":0.780225,"28":0.174225,"29":0.234825,"30":0.25755,"31":0.265125,"32":0.25755,"33":0.189375,"34":0.4545,"35":11.4534,"36":1.1514,"37":0.01515,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":0.0303,"7":null,"8":0.022725,"9":null,"10":0.01515,"11":0.04545,"12":0.037875,"13":null,"14":0.143925,"15":0.022725,"16":0.01515,"17":null,"18":1.01505,"19":0.598425,"20":0.128775,"21":0.1818,"22":0.16665,"23":0.28785,"24":0.0303,"25":0.083325,"26":1.0302,"27":null,"28":0.01515,"29":0.083325,"30":null,"31":1.386225,"32":0.07575,"33":0.416625,"34":0.0909,"35":0.16665,"36":0.931725,"37":0.340875,"38":0.310575,"39":0.56055,"40":18.036075,"41":0.0303,"42":1.7877,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.053025,"11.5":0.537825,"11.6":0.01515,"12":0.219675,"12.1":0.280275,"15":0.01515,"16":null,"17":null,"18":null,"19":null,"20":0.07575,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.007575,"27":1.9998,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.5757,"5.1":0.280275,"6":0.083325,"6.1":0.07575,"7":0.068175,"7.1":1.01505,"8":0.416625},"android":{"2.1":0,"2.2":0,"2.3":0.10154797796,"3":0,"4":0.205233808088,"4.1":0.661130782826,"4.2-4.3":1.11916560973,"4.4":2.0908194199,"4.4.3-4.4.4":0.963102401497,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00687030575359,"6.0-6.1":0.0210930439803,"7.0-7.1":0.266977670951,"8":0.0573730796265,"8.1":0.848060899689},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0135813788202,"12.1":0.0814882729211,"0":null},"ie":{"5.5":0.159373004871,"6":0.159373004871,"7":0.24285410266,"8":3.5441520607,"9":2.24640044961,"10":3.79459535407,"11":9.94183982765,"0":null},"ie_mob":{"10":0.152179385965,"11":0.323120614035},"bb":{"7":0.07820625,"10":null},"and_uc":{"0":1.98365},"op_mini":{"5.0-8.0":9.45943034826},"and_chr":{"0":2.549175},"and_ff":{"0":0.201275}},"total":94.9106440544}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GY.json
new file mode 100644
index 0000000..5ba1b47
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/GY.json
@@ -0,0 +1 @@
+{"id":"GY","name":"Guyana","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007705,"3.5":null,"3.6":0.038525,"4":0.007705,"5":null,"6":0.007705,"7":null,"8":0.023115,"9":null,"10":null,"11":0.177215,"12":0.023115,"13":0.01541,"14":0.01541,"15":0.04623,"16":null,"17":null,"18":0.023115,"19":0.023115,"20":0.007705,"21":0.100165,"22":0.03082,"23":0.03082,"24":0.023115,"25":0.01541,"26":0.023115,"27":0.03082,"28":0.01541,"29":0.069345,"30":0.13869,"31":0.161805,"32":0.24656,"33":0.192625,"34":0.300495,"35":11.57291,"36":1.541,"37":0.03082,"38":null,"39":null},"chrome":{"4":null,"5":0.007705,"6":0.007705,"7":null,"8":0.023115,"9":0.023115,"10":0.023115,"11":0.100165,"12":0.01541,"13":0.04623,"14":0.007705,"15":null,"16":0.023115,"17":0.01541,"18":0.09246,"19":null,"20":0.03082,"21":0.038525,"22":0.130985,"23":0.01541,"24":0.038525,"25":0.09246,"26":0.12328,"27":0.03082,"28":0.038525,"29":0.06164,"30":0.053935,"31":0.439185,"32":0.130985,"33":0.531645,"34":0.20033,"35":0.29279,"36":3.17446,"37":0.44689,"38":0.485415,"39":3.228395,"40":33.68626,"41":0.3082,"42":0.7705,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.04623,"11.5":0.007705,"11.6":null,"12":0.01541,"12.1":0.16951,"15":null,"16":0.01541,"17":null,"18":null,"19":null,"20":0.023115,"21":0.03082,"22":0.06164,"23":null,"24":null,"25":null,"26":0.01541,"27":2.03412,"28":0.069345,"29":0.007705},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.06164,"5.1":0.10787,"6":0.01541,"6.1":0.07705,"7":0.115575,"7.1":0.16951,"8":0.40066},"android":{"2.1":0,"2.2":0,"2.3":0.139351044807,"3":0,"4":0.281635795821,"4.1":0.90724864435,"4.2-4.3":1.53579519909,"4.4":2.86916466992,"4.4.3-4.4.4":1.32163464601,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.014409484386,"6.0-6.1":0.0442396450447,"7.0-7.1":0.55994750728,"8":0.120331834522,"8.1":1.77868652877},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000828614072495,"12.1":0.00497168443497,"0":null},"ie":{"5.5":null,"6":0.0154754154033,"7":0.0232131231049,"8":1.44695134021,"9":1.64039403275,"10":1.81836130988,"11":7.81508477865,"0":null},"ie_mob":{"10":0.170474210526,"11":0.361965789474},"bb":{"7":0.72464625,"10":null},"and_uc":{"0":1.273725},"op_mini":{"5.0-8.0":0.577129701493},"and_chr":{"0":8.414485},"and_ff":{"0":0.11475}},"total":97.09426125}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HK.json
new file mode 100644
index 0000000..f91cf04
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HK.json
@@ -0,0 +1 @@
+{"id":"HK","name":"Hong Kong","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.013796,"3.5":null,"3.6":0.03449,"4":0.006898,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.006898,"11":0.013796,"12":0.020694,"13":0.013796,"14":0.013796,"15":0.013796,"16":0.027592,"17":0.027592,"18":0.006898,"19":0.006898,"20":0.020694,"21":0.020694,"22":0.013796,"23":0.013796,"24":0.06898,"25":0.013796,"26":0.020694,"27":0.013796,"28":0.03449,"29":0.03449,"30":0.041388,"31":0.117266,"32":0.06898,"33":0.117266,"34":0.27592,"35":6.994572,"36":0.489758,"37":0.041388,"38":0.006898,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.096572,"12":0.013796,"13":null,"14":null,"15":null,"16":null,"17":0.006898,"18":0.020694,"19":null,"20":0.006898,"21":0.048286,"22":0.027592,"23":0.013796,"24":0.041388,"25":0.110368,"26":0.06898,"27":0.06898,"28":0.03449,"29":0.062082,"30":0.117266,"31":0.869148,"32":0.089674,"33":0.282818,"34":0.220736,"35":0.3449,"36":0.427676,"37":0.469064,"38":0.876046,"39":2.69022,"40":29.309602,"41":0.220736,"42":0.158654,"43":0.006898},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.055184,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.013796,"27":0.289716,"28":0.006898,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.041388,"5":0.13796,"5.1":0.427676,"6":0.151756,"6.1":0.27592,"7":0.538044,"7.1":0.696698,"8":2.028012},"android":{"2.1":0,"2.2":0,"2.3":0.162494621062,"3":0,"4":0.328410181516,"4.1":1.0579255066,"4.2-4.3":1.79086177108,"4.4":3.34567872419,"4.4.3-4.4.4":1.54113319555,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0436575585902,"6.0-6.1":0.134036364093,"7.0-7.1":1.69651740837,"8":0.364578910332,"8.1":5.38902775861},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000238106609808,"12.1":0.00142863965885,"0":null},"ie":{"5.5":null,"6":0.077348155002,"7":0.168759610913,"8":3.44550872282,"9":2.22200154369,"10":1.28679203321,"11":10.5756022839,"0":null},"ie_mob":{"10":0.0486660263158,"11":0.103331973684},"bb":{"7":0.0085305,"10":null},"and_uc":{"0":0.238854},"op_mini":{"5.0-8.0":0.165841253731},"and_chr":{"0":14.360756},"and_ff":{"0":0.27918}},"total":98.8200688495}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HN.json
new file mode 100644
index 0000000..41e69e0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HN.json
@@ -0,0 +1 @@
+{"id":"HN","name":"Honduras","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.019308,"3.5":0.012872,"3.6":0.03218,"4":0.025744,"5":0.006436,"6":null,"7":0.006436,"8":0.006436,"9":0.012872,"10":0.012872,"11":0.019308,"12":0.038616,"13":0.019308,"14":0.019308,"15":0.012872,"16":0.03218,"17":0.012872,"18":0.019308,"19":0.019308,"20":0.012872,"21":0.025744,"22":0.012872,"23":0.025744,"24":0.025744,"25":0.012872,"26":0.025744,"27":0.025744,"28":0.025744,"29":0.045052,"30":0.06436,"31":0.19308,"32":0.148028,"33":0.173772,"34":0.205952,"35":8.59206,"36":0.502008,"37":0.019308,"38":0.006436,"39":null},"chrome":{"4":null,"5":null,"6":0.006436,"7":0.006436,"8":null,"9":0.006436,"10":0.012872,"11":0.057924,"12":0.019308,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.090104,"19":null,"20":0.012872,"21":0.012872,"22":0.051488,"23":0.006436,"24":0.012872,"25":0.03218,"26":0.045052,"27":0.03218,"28":0.025744,"29":0.051488,"30":0.051488,"31":0.122284,"32":0.090104,"33":0.173772,"34":0.238132,"35":0.405468,"36":0.753012,"37":0.67578,"38":0.926784,"39":2.561528,"40":34.677168,"41":0.154464,"42":0.090104,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.06436,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.006436,"21":0.006436,"22":null,"23":null,"24":0.012872,"25":0.090104,"26":0.045052,"27":1.023324,"28":0.019308,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.038616,"5":0.083668,"5.1":0.154464,"6":0.051488,"6.1":0.218824,"7":0.244568,"7.1":0.444084,"8":1.100556},"android":{"2.1":0,"2.2":0,"2.3":0.333687327165,"3":0,"4":0.674399650691,"4.1":2.17248012475,"4.2-4.3":3.67758559518,"4.4":6.87044644142,"4.4.3-4.4.4":3.1647608608,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0199904649061,"6.0-6.1":0.0613742343609,"7.0-7.1":0.776822452053,"8":0.166937917462,"8.1":2.46759493122},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00308525373134,"12.1":0.0185115223881,"0":null},"ie":{"5.5":null,"6":0.146491377163,"7":0.0466108927336,"8":1.14529622145,"9":0.712480788927,"10":1.17858971626,"11":4.44135220761,"0":null},"ie_mob":{"10":0.212245578947,"11":0.450658421053},"bb":{"7":0.34749,"10":null},"and_uc":{"0":0.645084},"op_mini":{"5.0-8.0":2.14887922388},"and_chr":{"0":10.267784},"and_ff":{"0":0.135432}},"total":97.7643912042}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HR.json
new file mode 100644
index 0000000..5ae374a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HR.json
@@ -0,0 +1 @@
+{"id":"HR","name":"Croatia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008539,"3":0.025617,"3.5":0.017078,"3.6":0.059773,"4":0.017078,"5":null,"6":0.017078,"7":0.008539,"8":0.008539,"9":0.017078,"10":0.017078,"11":0.017078,"12":0.059773,"13":0.025617,"14":0.017078,"15":0.017078,"16":0.034156,"17":0.017078,"18":0.034156,"19":0.025617,"20":0.042695,"21":0.025617,"22":0.025617,"23":0.025617,"24":0.025617,"25":0.025617,"26":0.051234,"27":0.230553,"28":0.051234,"29":0.051234,"30":0.102468,"31":0.196397,"32":0.162241,"33":0.187858,"34":0.350099,"35":21.424351,"36":1.434552,"37":0.034156,"38":0.025617,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":0.008539,"9":null,"10":null,"11":0.068312,"12":0.017078,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.059773,"19":null,"20":null,"21":0.017078,"22":0.111007,"23":null,"24":0.008539,"25":0.008539,"26":0.076851,"27":0.042695,"28":0.025617,"29":0.025617,"30":0.042695,"31":0.222014,"32":0.111007,"33":0.196397,"34":0.25617,"35":0.350099,"36":0.563574,"37":0.51234,"38":0.648964,"39":2.399459,"40":39.083003,"41":0.128085,"42":0.119546,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.017078,"12.1":0.555035,"15":null,"16":0.008539,"17":0.051234,"18":0.025617,"19":0.017078,"20":0.034156,"21":0.008539,"22":0.017078,"23":null,"24":0.008539,"25":0.025617,"26":0.059773,"27":2.13475,"28":0.025617,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.034156,"5":0.093929,"5.1":0.17078,"6":0.017078,"6.1":0.076851,"7":0.08539,"7.1":0.196397,"8":0.486723},"android":{"2.1":0,"2.2":0,"2.3":0.0806595332155,"3":0,"4":0.163017161867,"4.1":0.525136013619,"4.2-4.3":0.888952960807,"4.4":1.66073733652,"4.4.3-4.4.4":0.76499199397,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0150766573953,"6.0-6.1":0.0462879832312,"7.0-7.1":0.585873616327,"8":0.125903314389,"8.1":1.86104142866},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000691560767591,"12.1":0.00414936460554,"0":null},"ie":{"5.5":null,"6":0.0428414665523,"7":0.0856829331046,"8":1.84218306175,"9":0.92537567753,"10":0.873965917667,"11":6.21201265009,"0":null},"ie_mob":{"10":0.250260328947,"11":0.531374671053},"bb":{"7":0.00474825,"10":null},"and_uc":{"0":0.042369},"op_mini":{"5.0-8.0":0.481672074627},"and_chr":{"0":6.715775},"and_ff":{"0":0.090582}},"total":98.9911159567}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HT.json
new file mode 100644
index 0000000..6db6120
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HT.json
@@ -0,0 +1 @@
+{"id":"HT","name":"Haiti","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.014763,"3":0.039368,"3.5":0.024605,"3.6":0.127946,"4":0.04921,"5":0.024605,"6":0.014763,"7":0.019684,"8":0.019684,"9":0.014763,"10":0.039368,"11":0.054131,"12":0.039368,"13":0.029526,"14":0.054131,"15":0.039368,"16":0.142709,"17":0.034447,"18":0.059052,"19":0.063973,"20":0.04921,"21":0.403522,"22":0.059052,"23":0.059052,"24":0.123025,"25":0.029526,"26":0.019684,"27":0.019684,"28":0.059052,"29":0.093499,"30":0.103341,"31":0.123025,"32":0.113183,"33":0.19684,"34":0.241129,"35":6.293959,"36":0.418285,"37":0.014763,"38":null,"39":null},"chrome":{"4":0.024605,"5":0.009842,"6":0.004921,"7":0.009842,"8":null,"9":0.009842,"10":0.019684,"11":0.068894,"12":0.039368,"13":0.019684,"14":0.009842,"15":0.009842,"16":0.009842,"17":0.009842,"18":0.009842,"19":0.004921,"20":0.014763,"21":0.019684,"22":0.009842,"23":null,"24":0.172235,"25":0.024605,"26":0.024605,"27":0.152551,"28":0.078736,"29":0.083657,"30":0.083657,"31":0.073815,"32":0.04921,"33":0.132867,"34":0.118104,"35":0.206682,"36":1.08262,"37":0.275576,"38":0.280497,"39":1.245013,"40":17.690995,"41":0.314944,"42":0.172235,"43":null},"opera":{"9":null,"9.5-9.6":0.009842,"10.0-10.1":0.019684,"10.5":null,"10.6":0.004921,"11":0.029526,"11.1":0.073815,"11.5":0.152551,"11.6":0.063973,"12":0.09842,"12.1":0.300181,"15":null,"16":null,"17":null,"18":0.009842,"19":null,"20":0.024605,"21":null,"22":0.004921,"23":null,"24":0.029526,"25":0.009842,"26":0.063973,"27":0.905464,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.024605,"5":0.177156,"5.1":0.310023,"6":0.127946,"6.1":0.433048,"7":0.280497,"7.1":0.472416,"8":0.757834},"android":{"2.1":0,"2.2":0,"2.3":0.34109928267,"3":0,"4":0.689379602869,"4.1":2.22073585612,"4.2-4.3":3.7592731469,"4.4":7.02305470423,"4.4.3-4.4.4":3.23505740721,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0234881437895,"6.0-6.1":0.0721127221609,"7.0-7.1":0.912741026207,"8":0.196146604278,"8.1":2.89934350356},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.018799880597,"12.1":0.112799283582,"0":null},"ie":{"5.5":0.00493180588494,"6":0.0591816706192,"7":0.0394544470795,"8":1.08499729469,"9":1.30199675362,"10":1.78038192446,"11":6.93411907422,"0":null},"ie_mob":{"10":0.385402539474,"11":0.818320460526},"bb":{"7":0.223476,"10":null},"and_uc":{"0":3.225165},"op_mini":{"5.0-8.0":13.0941168358},"and_chr":{"0":7.531324},"and_ff":{"0":0.142212}},"total":94.4067229706}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HU.json
new file mode 100644
index 0000000..ae5907d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/HU.json
@@ -0,0 +1 @@
+{"id":"HU","name":"Hungary","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.018186,"3.5":0.009093,"3.6":0.063651,"4":0.009093,"5":0.009093,"6":null,"7":0.009093,"8":null,"9":0.027279,"10":0.027279,"11":0.018186,"12":0.063651,"13":0.018186,"14":0.018186,"15":0.045465,"16":0.036372,"17":0.027279,"18":0.036372,"19":0.036372,"20":0.036372,"21":0.027279,"22":0.018186,"23":0.036372,"24":0.063651,"25":0.027279,"26":0.054558,"27":0.045465,"28":0.072744,"29":0.054558,"30":0.109116,"31":0.345534,"32":0.200046,"33":0.209139,"34":3.337131,"35":27.324465,"36":1.27302,"37":0.018186,"38":0.009093,"39":null},"chrome":{"4":0.309162,"5":null,"6":0.009093,"7":0.027279,"8":null,"9":0.009093,"10":0.009093,"11":0.054558,"12":0.036372,"13":null,"14":null,"15":null,"16":0.018186,"17":null,"18":0.054558,"19":null,"20":null,"21":null,"22":0.054558,"23":null,"24":0.009093,"25":0.018186,"26":0.045465,"27":0.054558,"28":0.027279,"29":0.027279,"30":0.063651,"31":0.100023,"32":0.054558,"33":0.145488,"34":0.236418,"35":0.245511,"36":0.354627,"37":0.436464,"38":0.527394,"39":1.700391,"40":36.672069,"41":0.163674,"42":0.063651,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.009093,"12":0.027279,"12.1":3.45534,"15":null,"16":null,"17":null,"18":0.009093,"19":null,"20":0.027279,"21":null,"22":0.009093,"23":null,"24":null,"25":0.018186,"26":0.081837,"27":2.155041,"28":0.054558,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.027279,"5.1":0.109116,"6":0.018186,"6.1":0.072744,"7":0.081837,"7.1":0.145488,"8":0.563766},"android":{"2.1":0,"2.2":0,"2.3":0.04487853727,"3":0,"4":0.0907018858509,"4.1":0.29218289791,"4.2-4.3":0.494608721281,"4.4":0.924025462106,"4.4.3-4.4.4":0.425637495582,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00786983472236,"6.0-6.1":0.0241617732704,"7.0-7.1":0.305819015965,"8":0.0657200232955,"8.1":0.971441352746},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000868966595593,"12.1":0.00521379957356,"0":null},"ie":{"5.5":null,"6":0.0366339831933,"7":0.0732679663866,"8":1.38293286555,"9":0.576985235294,"10":0.512875764706,"11":5.04633118487,"0":null},"ie_mob":{"10":0.213443355263,"11":0.453201644737},"bb":{"7":0.01201775,"10":null},"and_uc":{"0":0.059862},"op_mini":{"5.0-8.0":0.605235233831},"and_chr":{"0":4.139377},"and_ff":{"0":0.075281}},"total":98.96855075}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ID.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ID.json
new file mode 100644
index 0000000..33bcb95
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ID.json
@@ -0,0 +1 @@
+{"id":"ID","name":"Indonesia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.009692,"3":0.053306,"3.5":0.038768,"3.6":0.256838,"4":0.12115,"5":0.067844,"6":0.04846,"7":0.067844,"8":0.082382,"9":0.092074,"10":0.116304,"11":0.140534,"12":0.300452,"13":0.14538,"14":0.140534,"15":0.150226,"16":0.237454,"17":0.159918,"18":0.14538,"19":0.150226,"20":0.174456,"21":0.174456,"22":0.135688,"23":0.164764,"24":0.184148,"25":0.222916,"26":0.237454,"27":0.271376,"28":0.232608,"29":0.55729,"30":0.673594,"31":0.634826,"32":0.697824,"33":0.940124,"34":1.250268,"35":12.774056,"36":2.234006,"37":0.087228,"38":0.014538,"39":null},"chrome":{"4":0.07269,"5":0.067844,"6":0.111458,"7":0.058152,"8":0.029076,"9":0.029076,"10":0.067844,"11":0.111458,"12":0.077536,"13":0.029076,"14":0.053306,"15":0.038768,"16":0.02423,"17":0.019384,"18":0.029076,"19":0.009692,"20":0.014538,"21":0.02423,"22":0.033922,"23":0.038768,"24":0.029076,"25":0.043614,"26":0.07269,"27":0.053306,"28":0.058152,"29":0.067844,"30":0.077536,"31":0.184148,"32":0.077536,"33":0.731746,"34":0.140534,"35":0.276222,"36":0.416756,"37":0.397372,"38":0.518522,"39":1.64764,"40":12.76921,"41":0.140534,"42":0.222916,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.009692,"10.5":null,"10.6":0.014538,"11":0.009692,"11.1":null,"11.5":0.009692,"11.6":0.019384,"12":0.02423,"12.1":0.135688,"15":0.014538,"16":0.009692,"17":0.009692,"18":0.019384,"19":0.014538,"20":0.02423,"21":0.014538,"22":0.009692,"23":0.004846,"24":0.019384,"25":0.029076,"26":0.067844,"27":0.620288,"28":0.004846,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.019384,"5":0.04846,"5.1":0.125996,"6":0.053306,"6.1":0.062998,"7":0.125996,"7.1":0.12115,"8":0.358604},"android":{"2.1":0,"2.2":0,"2.3":0.142119446928,"3":0,"4":0.287230882212,"4.1":0.92527239921,"4.2-4.3":1.56630590456,"4.4":2.92616461254,"4.4.3-4.4.4":1.34789075455,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0103835581886,"6.0-6.1":0.0318793453158,"7.0-7.1":0.403501427854,"8":0.086711819259,"8.1":1.28173184938},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0186672238806,"12.1":0.112003343284,"0":null},"ie":{"5.5":null,"6":0.0733720296296,"7":0.0366860148148,"8":0.660348266667,"9":0.220116088889,"10":0.220116088889,"11":0.592217096296,"0":null},"ie_mob":{"10":0.112212526316,"11":0.238259473684},"bb":{"7":1.1093985,"10":null},"and_uc":{"0":12.54999},"op_mini":{"5.0-8.0":13.0017214328},"and_chr":{"0":9.489706},"and_ff":{"0":0.376242}},"total":92.8735100852}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IE.json
new file mode 100644
index 0000000..64e6403
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IE.json
@@ -0,0 +1 @@
+{"id":"IE","name":"Ireland","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.01358,"3.5":0.01358,"3.6":0.06111,"4":0.01358,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.04074,"11":0.01358,"12":0.02716,"13":null,"14":0.01358,"15":0.00679,"16":0.04753,"17":0.00679,"18":0.00679,"19":0.00679,"20":0.01358,"21":0.00679,"22":0.01358,"23":0.02037,"24":0.03395,"25":0.10185,"26":0.02716,"27":0.01358,"28":0.0679,"29":0.02716,"30":0.05432,"31":0.19691,"32":0.10185,"33":0.10185,"34":0.19012,"35":8.63009,"36":0.50925,"37":0.01358,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.14259,"12":0.00679,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.03395,"19":null,"20":0.00679,"21":0.03395,"22":0.08827,"23":0.01358,"24":0.00679,"25":0.12222,"26":0.02716,"27":0.01358,"28":0.04074,"29":0.02037,"30":0.06111,"31":0.50246,"32":0.12901,"33":0.25802,"34":0.17654,"35":0.29876,"36":0.39382,"37":0.37345,"38":0.50246,"39":1.97589,"40":34.02469,"41":0.19691,"42":0.08148,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.00679,"12.1":0.10864,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.01358,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.01358,"27":0.46851,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.0679,"5":0.2037,"5.1":0.54999,"6":0.12222,"6.1":0.3395,"7":0.46851,"7.1":0.75369,"8":1.73145},"android":{"2.1":0,"2.2":0,"2.3":0.101068780539,"3":0,"4":0.204265324878,"4.1":0.658010955401,"4.2-4.3":1.11388434972,"4.4":2.08095299719,"4.4.3-4.4.4":0.958557592265,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0756204960337,"6.0-6.1":0.232168189577,"7.0-7.1":2.93858594236,"8":0.63149747565,"8.1":9.33448789638},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000196204690832,"12.1":0.00117722814499,"0":null},"ie":{"5.5":null,"6":0.0205683333333,"7":0.0754172222222,"8":1.28894888889,"9":1.59061777778,"10":0.994136111111,"11":8.00108166667,"0":null},"ie_mob":{"10":0.363828157895,"11":0.772511842105},"bb":{"7":0.014445,"10":null},"and_uc":{"0":0.03531},"op_mini":{"5.0-8.0":0.136656567164},"and_chr":{"0":12.32367},"and_ff":{"0":0.12198}},"total":98.844575}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IL.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IL.json
new file mode 100644
index 0000000..b99f76b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IL.json
@@ -0,0 +1 @@
+{"id":"IL","name":"Israel","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.0402,"3.5":null,"3.6":0.14472,"4":null,"5":null,"6":null,"7":0.02412,"8":null,"9":null,"10":0.00804,"11":0.01608,"12":0.01608,"13":null,"14":null,"15":null,"16":0.02412,"17":null,"18":null,"19":null,"20":null,"21":0.00804,"22":null,"23":null,"24":0.01608,"25":0.01608,"26":0.02412,"27":0.01608,"28":0.02412,"29":0.02412,"30":0.02412,"31":0.15276,"32":0.10452,"33":0.07236,"34":0.15276,"35":5.7888,"36":0.33768,"37":0.00804,"38":0.00804,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.05628,"12":0.00804,"13":null,"14":null,"15":0.01608,"16":null,"17":null,"18":0.03216,"19":null,"20":null,"21":0.02412,"22":0.05628,"23":0.00804,"24":0.00804,"25":0.00804,"26":0.0402,"27":0.06432,"28":0.0402,"29":0.08844,"30":0.04824,"31":0.08844,"32":0.04824,"33":0.10452,"34":0.05628,"35":0.402,"36":0.58692,"37":0.45024,"38":0.73164,"39":2.7738,"40":43.32756,"41":0.23316,"42":0.19296,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.10452,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.00804,"27":0.37788,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.03216,"5":0.06432,"5.1":0.1608,"6":0.04824,"6.1":0.10452,"7":0.1608,"7.1":0.201,"8":0.61908},"android":{"2.1":0,"2.2":0,"2.3":0.0553625116956,"3":0,"4":0.111890549953,"4.1":0.360439089302,"4.2-4.3":0.610153155214,"4.4":1.13988497765,"4.4.3-4.4.4":0.525069716187,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0288751159755,"6.0-6.1":0.0886516718546,"7.0-7.1":1.12207687519,"8":0.241132547445,"8.1":3.56430378954},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00214248756219,"12.1":0.0128549253731,"0":null},"ie":{"5.5":null,"6":0.048794058193,"7":0.11385280245,"8":3.58636327718,"9":2.22826199081,"10":1.65899797856,"11":13.5972775498,"0":null},"ie_mob":{"10":0.0345149122807,"11":0.0732850877193},"bb":{"7":0.72422,"10":null},"and_uc":{"0":0.18424},"op_mini":{"5.0-8.0":1.49224258706},"and_chr":{"0":7.07352},"and_ff":{"0":0.06664}},"total":97.171727657}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IM.json
new file mode 100644
index 0000000..cea4fd1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IM.json
@@ -0,0 +1 @@
+{"id":"IM","name":"Isle of Man","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.059619,"11":0.008517,"12":null,"13":null,"14":null,"15":null,"16":0.017034,"17":null,"18":0.042585,"19":0.017034,"20":null,"21":null,"22":0.110721,"23":null,"24":0.008517,"25":null,"26":0.008517,"27":null,"28":null,"29":null,"30":0.051102,"31":0.110721,"32":0.076653,"33":0.059619,"34":0.212925,"35":7.443858,"36":0.34068,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.051102,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.008517,"22":0.017034,"23":0.051102,"24":null,"25":null,"26":0.008517,"27":0.017034,"28":0.017034,"29":null,"30":0.025551,"31":0.068136,"32":0.034068,"33":0.110721,"34":0.034068,"35":0.076653,"36":0.127755,"37":0.051102,"38":0.102204,"39":0.979455,"40":24.469341,"41":0.051102,"42":0.025551,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.08517,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.195891,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.051102,"5":0.298095,"5.1":0.638775,"6":1.166829,"6.1":0.604707,"7":0.792081,"7.1":1.371237,"8":2.333658},"android":{"2.1":0,"2.2":0,"2.3":0.0235223318432,"3":0,"4":0.0475398706726,"4.1":0.153142760474,"4.2-4.3":0.259240857262,"4.4":0.484312432477,"4.4.3-4.4.4":0.223090747271,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0489751852596,"6.0-6.1":0.150362410885,"7.0-7.1":1.90315851491,"8":0.408985757606,"8.1":6.04542813134},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":4.0052594172e-5,"12.1":0.000240315565032,"0":null},"ie":{"5.5":null,"6":null,"7":0.0340889864476,"8":2.8634748616,"9":2.32657332505,"10":1.40617069097,"11":34.8730331359,"0":null},"ie_mob":{"10":0.451079166667,"11":0.957770833333},"bb":{"7":0.008898,"10":null},"and_uc":{"0":0.001483},"op_mini":{"5.0-8.0":0.0278966318408},"and_chr":{"0":3.547295},"and_ff":{"0":0.050422}},"total":98.727919}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IN.json
new file mode 100644
index 0000000..945a8e6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IN.json
@@ -0,0 +1 @@
+{"id":"IN","name":"India","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.006216,"3":0.074592,"3.5":0.021756,"3.6":0.083916,"4":0.040404,"5":0.024864,"6":0.021756,"7":0.018648,"8":0.024864,"9":0.024864,"10":0.040404,"11":0.06216,"12":0.090132,"13":0.043512,"14":0.052836,"15":0.04662,"16":0.052836,"17":0.043512,"18":0.040404,"19":0.037296,"20":0.043512,"21":0.037296,"22":0.027972,"23":0.037296,"24":0.04662,"25":0.03108,"26":0.040404,"27":0.049728,"28":0.04662,"29":0.099456,"30":0.10878,"31":0.189588,"32":0.102564,"33":0.164724,"34":0.214452,"35":4.167828,"36":1.04118,"37":0.04662,"38":0.003108,"39":null},"chrome":{"4":0.024864,"5":0.027972,"6":0.040404,"7":0.024864,"8":0.03108,"9":0.018648,"10":0.037296,"11":0.055944,"12":0.04662,"13":0.018648,"14":0.027972,"15":0.021756,"16":0.024864,"17":0.012432,"18":0.03108,"19":0.012432,"20":0.012432,"21":0.012432,"22":0.024864,"23":0.021756,"24":0.01554,"25":0.024864,"26":0.027972,"27":0.037296,"28":0.040404,"29":0.034188,"30":0.068376,"31":0.180264,"32":0.037296,"33":0.239316,"34":0.068376,"35":0.152292,"36":0.236208,"37":0.242424,"38":0.422688,"39":1.21212,"40":15.201228,"41":0.220668,"42":0.35742,"43":null},"opera":{"9":null,"9.5-9.6":0.006216,"10.0-10.1":0.006216,"10.5":null,"10.6":0.006216,"11":0.003108,"11.1":0.003108,"11.5":0.006216,"11.6":0.009324,"12":0.012432,"12.1":0.071484,"15":0.006216,"16":0.006216,"17":0.006216,"18":0.009324,"19":0.006216,"20":0.012432,"21":0.006216,"22":0.006216,"23":0.003108,"24":0.009324,"25":0.01554,"26":0.049728,"27":0.391608,"28":0.003108,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.003108,"5":0.009324,"5.1":0.037296,"6":0.009324,"6.1":0.012432,"7":0.027972,"7.1":0.03108,"8":0.102564},"android":{"2.1":0,"2.2":0,"2.3":0.152470901341,"3":0,"4":0.308151716395,"4.1":0.992665815573,"4.2-4.3":1.68038982846,"4.4":3.13929561077,"4.4.3-4.4.4":1.44606612746,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00520688904508,"6.0-6.1":0.0159860628577,"7.0-7.1":0.202337881313,"8":0.043482090973,"8.1":0.642731075811},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0200343141436,"12.1":0.120205884861,"0":null},"ie":{"5.5":null,"6":0.0877807304348,"7":0.0627005217391,"8":1.05963881739,"9":0.382473182609,"10":0.373068104348,"11":0.909157565217,"0":null},"ie_mob":{"10":0.271417842105,"11":0.576298157895},"bb":{"7":0.048244,"10":null},"and_uc":{"0":29.08424},"op_mini":{"5.0-8.0":13.953899801},"and_chr":{"0":7.380096},"and_ff":{"0":0.110272}},"total":90.6549189217}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IQ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IQ.json
new file mode 100644
index 0000000..08452a3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IQ.json
@@ -0,0 +1 @@
+{"id":"IQ","name":"Iraq","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.013047,"3.5":0.013047,"3.6":0.04349,"4":0.017396,"5":0.034792,"6":0.082631,"7":0.008698,"8":0.017396,"9":0.030443,"10":0.047839,"11":0.060886,"12":0.113074,"13":0.069584,"14":0.021745,"15":0.060886,"16":0.030443,"17":0.021745,"18":0.021745,"19":0.026094,"20":0.026094,"21":0.030443,"22":0.021745,"23":0.034792,"24":0.034792,"25":0.039141,"26":0.039141,"27":0.052188,"28":0.021745,"29":0.104376,"30":0.108725,"31":0.113074,"32":0.108725,"33":0.169611,"34":0.243544,"35":5.536277,"36":0.8698,"37":0.034792,"38":0.004349,"39":null},"chrome":{"4":0.039141,"5":0.104376,"6":0.095678,"7":null,"8":0.034792,"9":null,"10":0.052188,"11":0.091329,"12":0.04349,"13":0.152215,"14":0.108725,"15":0.108725,"16":0.017396,"17":0.013047,"18":0.013047,"19":0.017396,"20":0.017396,"21":0.017396,"22":0.034792,"23":0.017396,"24":0.017396,"25":0.034792,"26":0.026094,"27":0.065235,"28":0.04349,"29":0.04349,"30":0.091329,"31":0.104376,"32":0.026094,"33":1.039411,"34":0.078282,"35":0.160913,"36":1.065505,"37":0.147866,"38":0.400108,"39":1.269908,"40":23.132331,"41":0.152215,"42":0.308779,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.004349,"11.6":0.008698,"12":0.004349,"12.1":0.078282,"15":0.008698,"16":null,"17":0.004349,"18":0.008698,"19":0.004349,"20":0.008698,"21":0.004349,"22":null,"23":null,"24":0.004349,"25":null,"26":0.017396,"27":0.534927,"28":0.013047,"29":0.008698},"safari":{"3.1":null,"3.2":null,"4":0.008698,"5":0.008698,"5.1":0.04349,"6":null,"6.1":0.008698,"7":0.021745,"7.1":0.034792,"8":0.126121},"android":{"2.1":0,"2.2":0,"2.3":0.31298749974,"3":0,"4":0.632564210001,"4.1":2.03771335357,"4.2-4.3":3.44945170766,"4.4":6.44424788939,"4.4.3-4.4.4":2.96843933964,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0589295063761,"6.0-6.1":0.180923923085,"7.0-7.1":2.28997994076,"8":0.49211307079,"8.1":7.27417555899},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000963923240938,"12.1":0.00578353944563,"0":null},"ie":{"5.5":null,"6":0.0177892357374,"7":0.013341926803,"8":1.28971959096,"9":0.418047039828,"10":0.409152421959,"11":1.98349978471,"0":null},"ie_mob":{"10":0.0832283245614,"11":0.176717675439},"bb":{"7":0.011302,"10":null},"and_uc":{"0":0.356013},"op_mini":{"5.0-8.0":0.671372537313},"and_chr":{"0":27.804303},"and_ff":{"0":0.389919}},"total":98.252631}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IR.json
new file mode 100644
index 0000000..417faf1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IR.json
@@ -0,0 +1 @@
+{"id":"IR","name":"Iran","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.019545,"3":0.14333,"3.5":0.07818,"3.6":0.228025,"4":0.306205,"5":0.10424,"6":0.10424,"7":0.09121,"8":0.110755,"9":0.097725,"10":0.09121,"11":0.123785,"12":0.2606,"13":0.123785,"14":0.162875,"15":0.14333,"16":0.14333,"17":0.10424,"18":0.110755,"19":0.071665,"20":0.123785,"21":0.136815,"22":0.10424,"23":0.1303,"24":0.214995,"25":1.1727,"26":0.42999,"27":0.15636,"28":0.14333,"29":0.332265,"30":0.61241,"31":0.46908,"32":0.7818,"33":0.918615,"34":0.95119,"35":14.12452,"36":1.94147,"37":0.05212,"38":0.01303,"39":null},"chrome":{"4":0.058635,"5":0.058635,"6":0.071665,"7":0.02606,"8":0.032575,"9":0.02606,"10":0.045605,"11":0.28666,"12":0.058635,"13":0.045605,"14":0.123785,"15":0.06515,"16":0.058635,"17":0.02606,"18":0.032575,"19":0.01303,"20":0.019545,"21":0.02606,"22":0.084695,"23":0.03909,"24":0.032575,"25":0.02606,"26":0.045605,"27":0.045605,"28":0.03909,"29":0.084695,"30":0.071665,"31":0.084695,"32":0.05212,"33":0.214995,"34":0.084695,"35":0.110755,"36":0.31272,"37":0.20848,"38":0.371355,"39":1.08149,"40":12.40456,"41":0.09121,"42":0.11727,"43":null},"opera":{"9":null,"9.5-9.6":0.01303,"10.0-10.1":0,"10.5":null,"10.6":0.006515,"11":0.019545,"11.1":null,"11.5":0.019545,"11.6":0.045605,"12":0.045605,"12.1":0.241055,"15":0.006515,"16":0.019545,"17":0.019545,"18":0.02606,"19":0.01303,"20":0.02606,"21":0.01303,"22":0.01303,"23":0.006515,"24":0.01303,"25":0.02606,"26":0.084695,"27":0.6515,"28":0.006515,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.032575,"5":0.019545,"5.1":0.110755,"6":0.02606,"6.1":0.01303,"7":0.06515,"7.1":0.045605,"8":0.18242},"android":{"2.1":0,"2.2":0,"2.3":0.232602645805,"3":0,"4":0.470102189417,"4.1":1.51436564664,"4.2-4.3":2.56352600166,"4.4":4.78916605468,"4.4.3-4.4.4":2.20605246179,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0137230404659,"6.0-6.1":0.0421321417813,"7.0-7.1":0.533272537403,"8":0.114599425645,"8.1":1.6939528547},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00851063255153,"12.1":0.0510637953092,"0":null},"ie":{"5.5":null,"6":0.874965130687,"7":1.29256212488,"8":7.60954522749,"9":2.73095177154,"10":2.23381249274,"11":5.79995825266,"0":null},"ie_mob":{"10":0.0569063815789,"11":0.120828618421},"bb":{"7":0.01306875,"10":null},"and_uc":{"0":1.000195},"op_mini":{"5.0-8.0":5.92765557214},"and_chr":{"0":10.487255},"and_ff":{"0":0.986255}},"total":97.28464375}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IS.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IS.json
new file mode 100644
index 0000000..fe7bf35
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IS.json
@@ -0,0 +1 @@
+{"id":"IS","name":"Iceland","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.034772,"3.5":0.017386,"3.6":0.060851,"4":0.026079,"5":0.017386,"6":0.008693,"7":0.008693,"8":0.008693,"9":0.026079,"10":0.008693,"11":null,"12":0.026079,"13":null,"14":0.017386,"15":0.008693,"16":0.069544,"17":null,"18":null,"19":0.008693,"20":0.034772,"21":0.017386,"22":null,"23":0.017386,"24":0.017386,"25":0.008693,"26":0.026079,"27":0.017386,"28":0.017386,"29":0.026079,"30":0.034772,"31":0.191246,"32":0.078237,"33":0.147781,"34":0.156474,"35":11.466067,"36":0.634589,"37":0.017386,"38":null,"39":null},"chrome":{"4":0.017386,"5":0.008693,"6":null,"7":null,"8":null,"9":0.017386,"10":null,"11":0.026079,"12":0.034772,"13":0.008693,"14":0.017386,"15":0.017386,"16":0.017386,"17":null,"18":0.017386,"19":null,"20":null,"21":0.034772,"22":0.008693,"23":0.008693,"24":0.017386,"25":0.008693,"26":0.078237,"27":0.034772,"28":0.026079,"29":0.026079,"30":0.026079,"31":0.26079,"32":0.104316,"33":0.199939,"34":0.339027,"35":0.199939,"36":0.565045,"37":0.408571,"38":0.399878,"39":2.103706,"40":48.915511,"41":0.199939,"42":0.599817,"43":null},"opera":{"9":0.008693,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.365106,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.017386,"26":0.034772,"27":0.669361,"28":0.008693,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.078237,"5":0.269483,"5.1":0.78237,"6":0.399878,"6.1":0.678054,"7":0.999695,"7.1":1.486503,"8":3.30334},"android":{"2.1":0,"2.2":0,"2.3":0.0253519139204,"3":0,"4":0.0512375523443,"4.1":0.165054302734,"4.2-4.3":0.279404777628,"4.4":0.521982564508,"4.4.3-4.4.4":0.240442888866,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0343657401346,"6.0-6.1":0.10550885129,"7.0-7.1":1.33544060347,"8":0.28698407551,"8.1":4.24205872959},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":7.61719971571e-5,"12.1":0.000457031982942,"0":null},"ie":{"5.5":0.00873637824351,"6":0.0436818912176,"7":0.017472756487,"8":0.489237181637,"9":0.690173881238,"10":0.655228368263,"11":6.84058416467,"0":null},"ie_mob":{"10":0.101269570175,"11":0.215024429825},"bb":{"7":0.01078275,"10":null},"and_uc":{"0":0.011763},"op_mini":{"5.0-8.0":0.0530537960199},"and_chr":{"0":5.322377},"and_ff":{"0":0.075806}},"total":98.9304663718}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IT.json
new file mode 100644
index 0000000..b6d29bf
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/IT.json
@@ -0,0 +1 @@
+{"id":"IT","name":"Italy","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007999,"3":0.023997,"3.5":0.007999,"3.6":0.111986,"4":0.015998,"5":0.007999,"6":null,"7":null,"8":null,"9":0.007999,"10":0.023997,"11":0.023997,"12":0.047994,"13":0.007999,"14":0.015998,"15":0.015998,"16":0.087989,"17":0.023997,"18":0.023997,"19":0.023997,"20":0.047994,"21":0.119985,"22":0.023997,"23":0.031996,"24":0.039995,"25":0.015998,"26":0.047994,"27":0.095988,"28":0.039995,"29":0.055993,"30":0.087989,"31":1.079865,"32":0.695913,"33":0.143982,"34":0.279965,"35":12.102487,"36":0.631921,"37":0.007999,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.087989,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.015998,"19":null,"20":null,"21":0.023997,"22":0.199975,"23":0.007999,"24":0.055993,"25":0.031996,"26":0.15998,"27":0.063992,"28":0.047994,"29":0.039995,"30":0.031996,"31":0.23997,"32":0.087989,"33":0.191976,"34":0.207974,"35":0.447944,"36":1.375828,"37":1.711786,"38":0.63992,"39":1.823772,"40":34.243719,"41":0.199975,"42":0.119985,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.015998,"11.5":0.039995,"11.6":0.015998,"12":0.023997,"12.1":0.167979,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.007999,"25":0.023997,"26":0.015998,"27":0.495938,"28":0.007999,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.071991,"5":0.263967,"5.1":0.7999,"6":0.087989,"6.1":0.39995,"7":0.655918,"7.1":0.951881,"8":2.807649},"android":{"2.1":0,"2.2":0,"2.3":0.0986936718994,"3":0,"4":0.199465105312,"4.1":0.642547748103,"4.2-4.3":1.08770815241,"4.4":2.03205076037,"4.4.3-4.4.4":0.936031561909,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0307045704388,"6.0-6.1":0.0942684180139,"7.0-7.1":1.19316883372,"8":0.256410096998,"8.1":3.79012908083},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000193415778252,"12.1":0.00116049466951,"0":null},"ie":{"5.5":null,"6":0.048459961165,"7":0.104996582524,"8":1.9464751068,"9":1.21149902913,"10":1.00150586408,"11":8.98932279612,"0":null},"ie_mob":{"10":0.418358197368,"11":0.888294802632},"bb":{"7":0.02151075,"10":null},"and_uc":{"0":0.096048},"op_mini":{"5.0-8.0":0.134714089552},"and_chr":{"0":8.019848},"and_ff":{"0":0.104052}},"total":98.2914980898}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JE.json
new file mode 100644
index 0000000..849bba5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JE.json
@@ -0,0 +1 @@
+{"id":"JE","name":"Jersey","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.023718,"4":null,"5":null,"6":0.007906,"7":null,"8":null,"9":null,"10":0.007906,"11":0.007906,"12":0.023718,"13":null,"14":null,"15":0.007906,"16":0.063248,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":0.015812,"24":0.007906,"25":null,"26":0.031624,"27":0.015812,"28":0.023718,"29":0.007906,"30":0.015812,"31":0.15812,"32":0.03953,"33":0.086966,"34":0.11859,"35":8.348736,"36":0.411112,"37":0.007906,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.055342,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.023718,"22":0.150214,"23":0.007906,"24":0.007906,"25":0.031624,"26":0.015812,"27":null,"28":null,"29":0.055342,"30":null,"31":0.063248,"32":0.055342,"33":0.11859,"34":0.071154,"35":1.051498,"36":0.19765,"37":0.11859,"38":0.173932,"39":1.059404,"40":27.536598,"41":0.102778,"42":0.126496,"43":0.015812},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.07906,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007906,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.150214,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.047436,"5":0.419018,"5.1":2.039748,"6":0.260898,"6.1":1.438892,"7":1.138464,"7.1":2.379706,"8":5.470952},"android":{"2.1":0,"2.2":0,"2.3":0.0292842166545,"3":0,"4":0.0591849431334,"4.1":0.190655663167,"4.2-4.3":0.322742893024,"4.4":0.602946608171,"4.4.3-4.4.4":0.27773767585,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0757807645346,"6.0-6.1":0.232660241992,"7.0-7.1":2.94481392007,"8":0.632835858219,"8.1":9.35427121518},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":6.54840085288e-5,"12.1":0.000392904051173,"0":null},"ie":{"5.5":null,"6":null,"7":0.07906,"8":2.601074,"9":2.419236,"10":2.751288,"11":16.254736,"0":null},"ie_mob":{"10":0.199793315789,"11":0.424218684211},"bb":{"7":0.0172755,"10":null},"and_uc":{"0":0.054444},"op_mini":{"5.0-8.0":0.0456096119403},"and_chr":{"0":5.259402},"and_ff":{"0":0.069102}},"total":98.8017195}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JM.json
new file mode 100644
index 0000000..4792546
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JM.json
@@ -0,0 +1 @@
+{"id":"JM","name":"Jamaica","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007633,"3.5":0.007633,"3.6":0.068697,"4":0.007633,"5":null,"6":0.007633,"7":0.015266,"8":null,"9":null,"10":0.015266,"11":0.083963,"12":0.038165,"13":0.015266,"14":0.022899,"15":0.038165,"16":0.045798,"17":0.022899,"18":null,"19":0.007633,"20":0.030532,"21":0.022899,"22":0.015266,"23":0.015266,"24":0.061064,"25":0.007633,"26":0.030532,"27":0.038165,"28":0.030532,"29":0.061064,"30":0.083963,"31":0.129761,"32":0.114495,"33":0.122128,"34":0.244256,"35":9.197765,"36":1.29761,"37":0.061064,"38":0.015266,"39":null},"chrome":{"4":null,"5":null,"6":0.030532,"7":null,"8":null,"9":0.007633,"10":0.022899,"11":0.091596,"12":0.022899,"13":null,"14":0.007633,"15":0.022899,"16":0.015266,"17":null,"18":0.053431,"19":null,"20":0.030532,"21":0.045798,"22":0.160293,"23":0.015266,"24":0.015266,"25":0.022899,"26":0.061064,"27":0.07633,"28":0.068697,"29":0.106862,"30":0.030532,"31":0.274788,"32":0.167926,"33":0.328219,"34":0.206091,"35":0.358751,"36":2.221203,"37":0.450347,"38":0.7633,"39":2.847109,"40":39.577105,"41":0.541943,"42":0.755667,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.137394,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.030532,"22":null,"23":null,"24":0.007633,"25":null,"26":0.061064,"27":1.137317,"28":0.015266,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.038165,"5":0.091596,"5.1":0.297687,"6":0.068697,"6.1":0.137394,"7":0.15266,"7.1":0.412182,"8":0.870162},"android":{"2.1":0,"2.2":0,"2.3":0.186643326749,"3":0,"4":0.377215986693,"4.1":1.21514629047,"4.2-4.3":2.05700592744,"4.4":3.84288786443,"4.4.3-4.4.4":1.77016460422,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0136422766342,"6.0-6.1":0.0418841826489,"7.0-7.1":0.530134083241,"8":0.113924976805,"8.1":1.68398348067},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00107667377399,"12.1":0.00646004264392,"0":null},"ie":{"5.5":null,"6":0.0309397729549,"7":0.0541446026711,"8":1.06742216694,"9":0.765759380634,"10":1.08289205342,"11":6.24983413689,"0":null},"ie_mob":{"10":0.197042368421,"11":0.418377631579},"bb":{"7":0.18995175,"10":null},"and_uc":{"0":0.755073},"op_mini":{"5.0-8.0":0.749903283582},"and_chr":{"0":9.58211},"and_ff":{"0":0.191727}},"total":98.0176818635}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JO.json
new file mode 100644
index 0000000..5d43ceb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JO.json
@@ -0,0 +1 @@
+{"id":"JO","name":"Jordan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.0288,"3.5":0.01728,"3.6":0.04608,"4":0.0288,"5":0.01152,"6":0.02304,"7":null,"8":0.01152,"9":0.01728,"10":0.03456,"11":0.0576,"12":0.06336,"13":0.04608,"14":0.0288,"15":0.02304,"16":0.03456,"17":0.01152,"18":0.01152,"19":0.0288,"20":0.01728,"21":0.01728,"22":0.01728,"23":0.0288,"24":0.02304,"25":0.01728,"26":0.09792,"27":0.03456,"28":0.02304,"29":0.06912,"30":0.07488,"31":0.2016,"32":0.15552,"33":0.13824,"34":0.21888,"35":5.8464,"36":0.55296,"37":0.02304,"38":null,"39":null},"chrome":{"4":0.03456,"5":0.03456,"6":0.05184,"7":0.0288,"8":0.08064,"9":0.03456,"10":0.05184,"11":0.0864,"12":0.04608,"13":0.05184,"14":0.09216,"15":0.06912,"16":0.03456,"17":0.01728,"18":0.0576,"19":0.0288,"20":0.01152,"21":0.01728,"22":0.0576,"23":0.04032,"24":0.01728,"25":0.04608,"26":0.04032,"27":0.0864,"28":0.0576,"29":0.06912,"30":0.10944,"31":0.144,"32":0.09216,"33":0.41472,"34":0.1152,"35":0.29376,"36":0.9504,"37":0.50112,"38":0.58176,"39":2.30976,"40":32.06016,"41":0.14976,"42":0.16704,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.01152,"11.6":0.01728,"12":0.01152,"12.1":0.13824,"15":0.00576,"16":null,"17":0.00576,"18":null,"19":0.00576,"20":0.00576,"21":null,"22":null,"23":null,"24":0.00576,"25":0.00576,"26":0.06912,"27":0.87552,"28":0.01152,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.02304,"5":0.04032,"5.1":0.12096,"6":0.07488,"6.1":0.06912,"7":0.15552,"7.1":0.1728,"8":0.47232},"android":{"2.1":0,"2.2":0,"2.3":0.271520449111,"3":0,"4":0.548757118204,"4.1":1.76774102921,"4.2-4.3":2.9924411602,"4.4":5.5904631417,"4.4.3-4.4.4":2.57515710157,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0255051390702,"6.0-6.1":0.0783052515313,"7.0-7.1":0.991120755096,"8":0.212990284165,"8.1":3.14831857014},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00424904051173,"12.1":0.0254942430704,"0":null},"ie":{"5.5":null,"6":0.130525714286,"7":0.0889948051948,"8":2.19520519481,"9":0.741623376623,"10":0.688226493506,"11":3.45299844156,"0":null},"ie_mob":{"10":0.507721403509,"11":1.07803859649},"bb":{"7":0.02544,"10":null},"and_uc":{"0":0.94976},"op_mini":{"5.0-8.0":2.95945671642},"and_chr":{"0":17.07168},"and_ff":{"0":0.1908}},"total":97.825494026}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JP.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JP.json
new file mode 100644
index 0000000..f9921c4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/JP.json
@@ -0,0 +1 @@
+{"id":"JP","name":"Japan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.01406,"3.5":0.00703,"3.6":0.04921,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.01406,"11":0.01406,"12":0.04218,"13":0.00703,"14":0.01406,"15":0.01406,"16":0.06327,"17":0.01406,"18":0.00703,"19":0.01406,"20":0.01406,"21":0.01406,"22":0.02812,"23":0.01406,"24":0.02812,"25":0.01406,"26":0.02812,"27":0.03515,"28":0.0703,"29":0.03515,"30":0.04218,"31":0.23199,"32":0.1406,"33":0.09842,"34":0.19684,"35":8.56254,"36":0.53428,"37":0.01406,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.05624,"12":0.00703,"13":null,"14":null,"15":null,"16":null,"17":0.02812,"18":null,"19":null,"20":null,"21":0.02109,"22":0.01406,"23":0.00703,"24":null,"25":0.01406,"26":0.01406,"27":0.04921,"28":0.01406,"29":0.02109,"30":0.02812,"31":0.28823,"32":0.02109,"33":0.09139,"34":0.08436,"35":0.12654,"36":0.23199,"37":0.28823,"38":0.26011,"39":0.8436,"40":19.58558,"41":0.09139,"42":0.09139,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.00703,"12":null,"12.1":0.31635,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.01406,"27":0.40774,"28":0.00703,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.14763,"5":0.28823,"5.1":0.89281,"6":0.17575,"6.1":0.47101,"7":0.40774,"7.1":0.88578,"8":1.22322},"android":{"2.1":0,"2.2":0,"2.3":0.119911550057,"3":0,"4":0.2423475538,"4.1":0.780687302214,"4.2-4.3":1.32155150431,"4.4":2.46891570434,"4.4.3-4.4.4":1.13726638528,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.109573585701,"6.0-6.1":0.336410131539,"7.0-7.1":4.25799109348,"8":0.915035557787,"8.1":13.5256096315},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000173091684435,"12.1":0.00103855010661,"0":null},"ie":{"5.5":null,"6":0.0777447831157,"7":0.247369764459,"8":2.26166641791,"9":2.76347365438,"10":1.49128629431,"11":23.4647890858,"0":null},"ie_mob":{"10":0.00855828947368,"11":0.0181717105263},"bb":{"7":0.0022275,"10":null},"and_uc":{"0":0.38016},"op_mini":{"5.0-8.0":0.120558358209},"and_chr":{"0":4.22989},"and_ff":{"0":0.06237}},"total":98.2435075}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KE.json
new file mode 100644
index 0000000..2269ba2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KE.json
@@ -0,0 +1 @@
+{"id":"KE","name":"Kenya","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.017958,"3.5":0.011972,"3.6":0.065846,"4":0.026937,"5":0.026937,"6":0.014965,"7":0.017958,"8":0.026937,"9":0.02993,"10":0.041902,"11":0.056867,"12":0.092783,"13":0.062853,"14":0.056867,"15":0.056867,"16":0.101762,"17":0.038909,"18":0.101762,"19":0.05986,"20":0.080811,"21":0.05986,"22":0.035916,"23":0.050881,"24":0.050881,"25":0.047888,"26":0.083804,"27":0.05986,"28":0.062853,"29":0.191552,"30":0.257398,"31":0.236447,"32":0.194545,"33":0.365146,"34":0.407048,"35":9.586579,"36":1.613227,"37":0.062853,"38":0.014965,"39":null},"chrome":{"4":null,"5":0.005986,"6":null,"7":null,"8":null,"9":null,"10":0.005986,"11":0.020951,"12":0.005986,"13":null,"14":0.002993,"15":0.002993,"16":0.002993,"17":null,"18":0.005986,"19":0.002993,"20":0.005986,"21":0.005986,"22":0.011972,"23":0.002993,"24":0.005986,"25":0.014965,"26":0.011972,"27":0.011972,"28":0.011972,"29":0.014965,"30":0.020951,"31":0.071832,"32":0.032923,"33":0.077818,"34":0.044895,"35":0.053874,"36":0.281342,"37":0.086797,"38":0.098769,"39":0.469901,"40":9.30823,"41":0.167608,"42":0.182573,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.005986,"11.6":0.017958,"12":0.008979,"12.1":0.053874,"15":0.002993,"16":0.002993,"17":null,"18":0.005986,"19":0.014965,"20":0.011972,"21":0.005986,"22":0.008979,"23":null,"24":0.008979,"25":0.008979,"26":0.05986,"27":0.472894,"28":0.005986,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.008979,"5":0.032923,"5.1":0.077818,"6":0.023944,"6.1":0.065846,"7":0.077818,"7.1":0.113734,"8":0.296307},"android":{"2.1":0,"2.2":0,"2.3":0.133146840628,"3":0,"4":0.269096772637,"4.1":0.866856009772,"4.2-4.3":1.46741833829,"4.4":2.74142337124,"4.4.3-4.4.4":1.26279266743,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00457189336279,"6.0-6.1":0.0140365147103,"7.0-7.1":0.177662171905,"8":0.038179320012,"8.1":0.56434810001},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0654484676617,"12.1":0.39269080597,"0":null},"ie":{"5.5":null,"6":0.0242590526316,"7":0.0121295263158,"8":0.494278197368,"9":0.233493381579,"10":0.40330675,"11":1.36760409211,"0":null},"ie_mob":{"10":0.518241407895,"11":1.10037559211},"bb":{"7":0.084084,"10":null},"and_uc":{"0":3.678675},"op_mini":{"5.0-8.0":45.5848577264},"and_chr":{"0":3.119107},"and_ff":{"0":0.168168}},"total":91.606524}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KG.json
new file mode 100644
index 0000000..faf3b12
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KG.json
@@ -0,0 +1 @@
+{"id":"KG","name":"Kyrgyzstan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.063684,"3.5":0.028304,"3.6":0.205204,"4":0.014152,"5":null,"6":null,"7":null,"8":null,"9":0.014152,"10":0.014152,"11":null,"12":0.042456,"13":0.014152,"14":0.014152,"15":null,"16":0.021228,"17":0.014152,"18":0.007076,"19":0.014152,"20":0.014152,"21":0.10614,"22":0.007076,"23":null,"24":0.021228,"25":0.014152,"26":0.028304,"27":null,"28":0.014152,"29":0.021228,"30":0.049532,"31":0.325496,"32":0.290116,"33":0.077836,"34":0.346724,"35":4.924896,"36":0.360876,"37":0.007076,"38":0.007076,"39":null},"chrome":{"4":0.028304,"5":0.014152,"6":0.03538,"7":0.007076,"8":0.21228,"9":0.007076,"10":0.099064,"11":0.084912,"12":0.1769,"13":0.07076,"14":null,"15":0.077836,"16":0.042456,"17":0.191052,"18":0.014152,"19":null,"20":0.021228,"21":0.021228,"22":0.042456,"23":0.03538,"24":0.03538,"25":null,"26":0.014152,"27":0.155672,"28":0.360876,"29":0.14152,"30":0.042456,"31":0.410408,"32":0.056608,"33":0.254736,"34":0.049532,"35":0.24766,"36":0.622688,"37":0.544852,"38":0.346724,"39":2.144028,"40":36.986252,"41":0.148596,"42":0.785436,"43":0.007076},"opera":{"9":null,"9.5-9.6":0.028304,"10.0-10.1":0.007076,"10.5":null,"10.6":0.007076,"11":0.028304,"11.1":0.014152,"11.5":0.03538,"11.6":0.148596,"12":0.127368,"12.1":2.200636,"15":0.028304,"16":0.014152,"17":0.014152,"18":0.03538,"19":0.014152,"20":0.042456,"21":0.014152,"22":0.028304,"23":0.021228,"24":0.014152,"25":0.10614,"26":0.063684,"27":4.160688,"28":0.021228,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.063684,"5":0.021228,"5.1":0.042456,"6":0.028304,"6.1":0.049532,"7":0.155672,"7.1":0.113216,"8":0.403332},"android":{"2.1":0,"2.2":0,"2.3":0.114415673147,"3":0,"4":0.231240097307,"4.1":0.744906250962,"4.2-4.3":1.26098115563,"4.4":2.35575849132,"4.4.3-4.4.4":1.08514233164,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0167019443719,"6.0-6.1":0.0512778993875,"7.0-7.1":0.649031697962,"8":0.139475886334,"8.1":2.06166457194},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00913568159204,"12.1":0.0548140895522,"0":null},"ie":{"5.5":null,"6":0.0318940883352,"7":0.0478411325028,"8":2.24853322763,"9":0.845193340883,"10":1.00466378256,"11":2.854520906,"0":null},"ie_mob":{"10":0.186302403509,"11":0.395573596491},"bb":{"7":0.009503,"10":null},"and_uc":{"0":3.315816},"op_mini":{"5.0-8.0":6.36300222886},"and_chr":{"0":8.145032},"and_ff":{"0":0.090644}},"total":93.9849734779}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KH.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KH.json
new file mode 100644
index 0000000..2cf6620
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KH.json
@@ -0,0 +1 @@
+{"id":"KH","name":"Cambodia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.043668,"3.5":0.004852,"3.6":0.09704,"4":0.038816,"5":0.009704,"6":0.019408,"7":0.014556,"8":0.029112,"9":0.014556,"10":0.038816,"11":0.063076,"12":0.106744,"13":0.07278,"14":0.111596,"15":0.082484,"16":0.111596,"17":0.038816,"18":0.038816,"19":0.063076,"20":0.063076,"21":0.09704,"22":0.063076,"23":0.077632,"24":0.126152,"25":0.082484,"26":0.077632,"27":0.1213,"28":0.067928,"29":0.305676,"30":0.38816,"31":0.402716,"32":0.718096,"33":0.402716,"34":0.684132,"35":11.1596,"36":3.20232,"37":0.131004,"38":0.009704,"39":null},"chrome":{"4":0.009704,"5":0.009704,"6":0.019408,"7":null,"8":0.009704,"9":0.004852,"10":0.014556,"11":0.106744,"12":0.02426,"13":0.02426,"14":0.004852,"15":0.019408,"16":0.04852,"17":null,"18":0.004852,"19":null,"20":0.029112,"21":0.014556,"22":0.029112,"23":0.038816,"24":0.029112,"25":0.033964,"26":0.019408,"27":0.014556,"28":0.07278,"29":0.07278,"30":0.131004,"31":0.184376,"32":0.033964,"33":0.441532,"34":0.106744,"35":0.184376,"36":0.766616,"37":0.305676,"38":0.407568,"39":1.305188,"40":16.001896,"41":0.310528,"42":0.616204,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.004852,"12":null,"12.1":0.053372,"15":0.009704,"16":0.004852,"17":null,"18":0.019408,"19":null,"20":0.009704,"21":0.092188,"22":0.004852,"23":null,"24":0.019408,"25":0.004852,"26":0.019408,"27":0.664724,"28":0.004852,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.058224,"5":0.029112,"5.1":0.126152,"6":0.077632,"6.1":0.082484,"7":0.19408,"7.1":0.232896,"8":0.722948},"android":{"2.1":0,"2.2":0,"2.3":0.298449131926,"3":0,"4":0.603181403472,"4.1":1.94306092733,"4.2-4.3":3.28922359081,"4.4":6.14491054787,"4.4.3-4.4.4":2.83055439859,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.122129954815,"6.0-6.1":0.374960387589,"7.0-7.1":4.74592719149,"8":1.01989225424,"8.1":15.0755502119},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0012732793177,"12.1":0.00763967590618,"0":null},"ie":{"5.5":null,"6":0.039173202454,"7":0.0279808588957,"8":1.72362090798,"9":0.358154993865,"10":0.772271705521,"11":1.63408215951,"0":null},"ie_mob":{"10":0.281853,"11":0.598455},"bb":{"7":0.024453,"10":null},"and_uc":{"0":1.137708},"op_mini":{"5.0-8.0":0.886839044776},"and_chr":{"0":9.688704},"and_ff":{"0":0.314028}},"total":97.0104288282}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KI.json
new file mode 100644
index 0000000..ef51483
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KI.json
@@ -0,0 +1 @@
+{"id":"KI","name":"Kiribati","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.307552,"3.5":null,"3.6":0.278719,"4":0.105721,"5":0.28833,"6":0.28833,"7":null,"8":null,"9":0.442106,"10":0.403662,"11":2.527693,"12":0.528605,"13":0.086499,"14":0.249886,"15":0.009611,"16":0.038444,"17":0.076888,"18":null,"19":0.134554,"20":0.038444,"21":0.028833,"22":0.163387,"23":0.509383,"24":0.682381,"25":0.586271,"26":0.076888,"27":1.758813,"28":0.153776,"29":0.249886,"30":0.28833,"31":0.490161,"32":0.307552,"33":0.826546,"34":0.518994,"35":7.189028,"36":1.82609,"37":null,"38":0.076888,"39":null},"chrome":{"4":null,"5":null,"6":0.009611,"7":null,"8":null,"9":0.105721,"10":null,"11":0.009611,"12":0.009611,"13":null,"14":0.365218,"15":null,"16":null,"17":null,"18":3.642569,"19":1.643481,"20":0.163387,"21":0.711214,"22":0.403662,"23":0.009611,"24":0.028833,"25":0.038444,"26":0.182609,"27":0.038444,"28":0.038444,"29":0.451717,"30":0.105721,"31":0.221053,"32":0.086499,"33":4.70939,"34":0.038444,"35":0.230664,"36":9.70711,"37":0.19222,"38":0.259497,"39":0.307552,"40":9.908941,"41":0.038444,"42":5.728156,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.019222,"11":null,"11.1":0.134554,"11.5":1.528149,"11.6":null,"12":0.663159,"12.1":0.932267,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.009611,"27":1.114876,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":1.72998,"5.1":0.490161,"6":0.009611,"6.1":0.019222,"7":null,"7.1":0.009611,"8":0.038444},"android":{"2.1":0,"2.2":0,"2.3":0.0282992546003,"3":0,"4":0.0571942829816,"4.1":0.184243041792,"4.2-4.3":0.311887574384,"4.4":0.582666757875,"4.4.3-4.4.4":0.268396088367,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00524769163571,"6.0-6.1":0.0161113339693,"7.0-7.1":0.203923455668,"8":0.0438228283964,"8.1":0.64776769033},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":6.8012793177e-5,"12.1":0.000408076759062,"0":null},"ie":{"5.5":null,"6":0.019323745114,"7":0.821259167345,"8":1.71981331515,"9":2.53141060993,"10":11.9034269902,"11":6.73432517223,"0":null},"ie_mob":{"10":0.161165429825,"11":0.342200570175},"bb":{"7":0,"10":null},"and_uc":{"0":0.047847},"op_mini":{"5.0-8.0":0.0473709104478},"and_chr":{"0":0.58403},"and_ff":{"0":0.239624}},"total":95.124829}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KM.json
new file mode 100644
index 0000000..573d9c7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KM.json
@@ -0,0 +1 @@
+{"id":"KM","name":"Comoros","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.059824,"3.5":0.007478,"3.6":0.07478,"4":0.022434,"5":null,"6":0.014956,"7":0.007478,"8":null,"9":0.029912,"10":0.134604,"11":0.276686,"12":0.291642,"13":0.029912,"14":2.572432,"15":null,"16":0.284164,"17":null,"18":0.007478,"19":0.044868,"20":0.052346,"21":0.029912,"22":0.171994,"23":0.052346,"24":0.014956,"25":null,"26":0.022434,"27":0.014956,"28":0.044868,"29":0.07478,"30":0.284164,"31":0.157038,"32":0.478592,"33":0.732844,"34":0.553372,"35":12.091926,"36":1.039442,"37":0.014956,"38":null,"39":null},"chrome":{"4":0.03739,"5":null,"6":0.014956,"7":null,"8":null,"9":0.142082,"10":0.044868,"11":0.11217,"12":0.014956,"13":0.07478,"14":0.029912,"15":null,"16":0.007478,"17":0.014956,"18":0.029912,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.014956,"25":0.254252,"26":0.014956,"27":0.029912,"28":0.044868,"29":0.014956,"30":0.03739,"31":0.874926,"32":null,"33":0.254252,"34":0.164516,"35":0.216862,"36":5.301902,"37":0.134604,"38":0.628152,"39":1.241348,"40":29.792352,"41":0.403812,"42":0.052346,"43":0.014956},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.014956,"11":0.014956,"11.1":0.022434,"11.5":0.014956,"11.6":0.029912,"12":null,"12.1":0.029912,"15":null,"16":null,"17":null,"18":0.044868,"19":0.014956,"20":0.007478,"21":null,"22":0.007478,"23":null,"24":null,"25":null,"26":0.052346,"27":1.862022,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.142082,"5":null,"5.1":0.18695,"6":0.179472,"6.1":0.029912,"7":0.082258,"7.1":0.269208,"8":0.216862},"android":{"2.1":0,"2.2":0,"2.3":0.082644726063,"3":0,"4":0.167029341096,"4.1":0.538060663894,"4.2-4.3":0.910831875663,"4.4":1.70161141241,"4.4.3-4.4.4":0.783819980871,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0102918568129,"6.0-6.1":0.0315978060046,"7.0-7.1":0.399937944573,"8":0.0859460323326,"8.1":1.27041236028},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0115327277896,"12.1":0.0691963667377,"0":null},"ie":{"5.5":null,"6":null,"7":0.0524919121951,"8":1.22231166969,"9":0.802376372125,"10":1.80722154843,"11":6.85394396376,"0":null},"ie_mob":{"10":0.14857677193,"11":0.31547122807},"bb":{"7":0.029003,"10":null},"and_uc":{"0":1.95455},"op_mini":{"5.0-8.0":8.03254490547},"and_chr":{"0":6.600014},"and_ff":{"0":0.08827}},"total":96.8970584662}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KN.json
new file mode 100644
index 0000000..f5080a7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KN.json
@@ -0,0 +1 @@
+{"id":"KN","name":"Saint Kitts and Nevis","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.034688,"3.5":null,"3.6":0.104064,"4":null,"5":null,"6":null,"7":0.008672,"8":null,"9":null,"10":null,"11":0.017344,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.026016,"22":null,"23":null,"24":null,"25":null,"26":0.017344,"27":0.017344,"28":null,"29":null,"30":null,"31":0.329536,"32":0.199456,"33":0.017344,"34":0.47696,"35":9.313728,"36":0.841184,"37":0.017344,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.026016,"12":0.04336,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.017344,"19":null,"20":null,"21":0.026016,"22":0.060704,"23":null,"24":0.017344,"25":null,"26":0.052032,"27":0.026016,"28":0.08672,"29":0.08672,"30":0.026016,"31":0.286176,"32":0.069376,"33":0.242816,"34":0.329536,"35":0.416256,"36":1.370176,"37":0.572352,"38":0.329536,"39":4.223264,"40":42.692256,"41":0.372896,"42":0.30352,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.026016,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.355552,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.034688,"5":0.034688,"5.1":0.546336,"6":0.078048,"6.1":0.56368,"7":0.73712,"7.1":1.196736,"8":2.8184},"android":{"2.1":0,"2.2":0,"2.3":0.0750743154174,"3":0,"4":0.151729142738,"4.1":0.488773306165,"4.2-4.3":0.827397981495,"4.4":1.54574064165,"4.4.3-4.4.4":0.712020612538,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0170333101717,"6.0-6.1":0.0522952505272,"7.0-7.1":0.661908456672,"8":0.142243081434,"8.1":2.10256790119},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000109486851457,"12.1":0.000656921108742,"0":null},"ie":{"5.5":null,"6":null,"7":0.0357620550459,"8":2.15466381651,"9":1.29637449541,"10":0.992397027523,"11":11.1130586055,"0":null},"ie_mob":{"10":0.10034554386,"11":0.21306245614},"bb":{"7":0.120848,"10":null},"and_uc":{"0":0.17928},"op_mini":{"5.0-8.0":0.0762575920398},"and_chr":{"0":6.233968},"and_ff":{"0":0.037184}},"total":98.819488}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KP.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KP.json
new file mode 100644
index 0000000..a6fe1c6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KP.json
@@ -0,0 +1 @@
+{"id":"KP","name":"North Korea","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":0.018782,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":0.018782,"13":null,"14":null,"15":null,"16":0.159647,"17":0.09391,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.18782,"25":0.046955,"26":0.234775,"27":null,"28":0.28173,"29":0.37564,"30":0.046955,"31":0.488332,"32":1.258394,"33":0.159647,"34":0.28173,"35":16.302776,"36":1.042401,"37":0.347467,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.535287,"12":null,"13":null,"14":null,"15":0.140865,"16":null,"17":null,"18":null,"19":null,"20":null,"21":1.887591,"22":1.718553,"23":0.065737,"24":null,"25":0.206602,"26":null,"27":0.206602,"28":0.863972,"29":0.929709,"30":null,"31":2.8173,"32":0.328685,"33":0.441377,"34":0.046955,"35":0.09391,"36":0.46955,"37":0.741889,"38":0.300512,"39":5.953894,"40":30.661615,"41":0.112692,"42":null,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":4.376206,"12":0.065737,"12.1":1.136311,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.046955,"21":null,"22":null,"23":0.422595,"24":null,"25":0.18782,"26":null,"27":0.09391,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":null,"5.1":null,"6":null,"6.1":null,"7":null,"7.1":0.234775,"8":0.741889},"android":{"2.1":0,"2.2":0,"2.3":0.0270900218318,"3":0,"4":0.0547503599127,"4.1":0.176370300031,"4.2-4.3":0.298560556399,"4.4":0.55776929161,"4.4.3-4.4.4":0.256927470215,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00744870780199,"6.0-6.1":0.0228688397429,"7.0-7.1":0.289454171604,"8":0.0622032441008,"8.1":0.919458036751},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0,"12.1":0,"0":null},"ie":{"5.5":null,"6":0.0676912308665,"7":null,"8":2.87204222391,"9":0.986357935484,"10":1.84700358507,"11":9.32204950791,"0":null},"ie_mob":{"10":0.0744849736842,"11":0.158153026316},"bb":{"7":0,"10":null},"and_uc":{"0":0.76734},"op_mini":{"5.0-8.0":0},"and_chr":{"0":2.577439},"and_ff":{"0":0.023142}},"total":98.5438424832}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KR.json
new file mode 100644
index 0000000..95b18dc
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KR.json
@@ -0,0 +1 @@
+{"id":"KR","name":"South Korea","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007367,"3.5":null,"3.6":null,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.014734,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":0.007367,"32":null,"33":0.007367,"34":0.022101,"35":0.95771,"36":0.088404,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.036835,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.088404,"19":0.022101,"20":0.007367,"21":null,"22":0.029468,"23":0.014734,"24":null,"25":0.007367,"26":0.029468,"27":0.191542,"28":0.029468,"29":0.058936,"30":0.066303,"31":0.744067,"32":0.051569,"33":0.07367,"34":0.081037,"35":0.088404,"36":0.132606,"37":0.103138,"38":0.198909,"39":0.876673,"40":15.212855,"41":0.029468,"42":0.14734,"43":0.007367},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.022101,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.110505,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.022101,"5":0.014734,"5.1":0.051569,"6":0.029468,"6.1":0.036835,"7":0.066303,"7.1":0.095771,"8":0.383084},"android":{"2.1":0,"2.2":0,"2.3":0.110882174862,"3":0,"4":0.224098711301,"4.1":0.721901317393,"4.2-4.3":1.22203828506,"4.4":2.28300562137,"4.4.3-4.4.4":1.05162989001,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0261613230244,"6.0-6.1":0.0803198513907,"7.0-7.1":1.01661983332,"8":0.218469995783,"8.1":3.22931699649},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000101053304904,"12.1":0.000606319829424,"0":null},"ie":{"5.5":null,"6":0.0665093468666,"7":0.1995280406,"8":13.176240607,"9":12.4889773561,"10":7.67074467195,"11":18.6373969775,"0":null},"ie_mob":{"10":0.0033720877193,"11":0.0071599122807},"bb":{"7":0.002633,"10":null},"and_uc":{"0":0.063192},"op_mini":{"5.0-8.0":0.0703836268657},"and_chr":{"0":15.760679},"and_ff":{"0":0.044761}},"total":98.643346}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KW.json
new file mode 100644
index 0000000..1e446ab
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KW.json
@@ -0,0 +1 @@
+{"id":"KW","name":"Kuwait","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.00722,"3.5":0.00722,"3.6":0.05054,"4":0.00361,"5":null,"6":0.03249,"7":0.00722,"8":null,"9":0.01083,"10":0.01444,"11":0.02527,"12":0.03971,"13":0.01083,"14":0.01444,"15":0.01083,"16":0.01805,"17":0.00722,"18":null,"19":0.01083,"20":0.00722,"21":0.01805,"22":0.00361,"23":0.01444,"24":0.01805,"25":0.00722,"26":0.01083,"27":0.01083,"28":0.02888,"29":0.02166,"30":0.0361,"31":0.05415,"32":0.05054,"33":0.05776,"34":0.10469,"35":3.64249,"36":0.34656,"37":0.01083,"38":null,"39":null},"chrome":{"4":null,"5":0.00361,"6":0.00361,"7":0.00361,"8":0.00722,"9":0.00361,"10":0.01444,"11":0.0361,"12":0.01444,"13":0.01083,"14":0.01083,"15":0.01805,"16":0.01805,"17":0.01444,"18":0.00722,"19":0.00361,"20":0.00722,"21":0.01083,"22":0.02888,"23":0.00361,"24":0.02888,"25":0.00722,"26":0.02166,"27":0.01805,"28":0.02527,"29":0.02166,"30":0.03971,"31":0.09025,"32":0.05054,"33":0.2527,"34":0.07942,"35":0.11191,"36":0.40071,"37":0.1444,"38":0.20216,"39":0.97109,"40":16.03562,"41":0.13718,"42":0.17689,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.00722,"12":null,"12.1":0.08303,"15":0.00361,"16":null,"17":0.00361,"18":0.00361,"19":0.00361,"20":0.01083,"21":0.00361,"22":null,"23":null,"24":null,"25":null,"26":0.02166,"27":0.42237,"28":0.01444,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.00722,"5":0.0722,"5.1":0.2166,"6":0.09386,"6.1":0.16245,"7":0.27436,"7.1":0.33573,"8":0.91694},"android":{"2.1":0,"2.2":0,"2.3":0.187940004158,"3":0,"4":0.379836639983,"4.1":1.22358834286,"4.2-4.3":2.07129667741,"4.4":3.86958576983,"4.4.3-4.4.4":1.78246256576,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.115643665027,"6.0-6.1":0.355046339994,"7.0-7.1":4.49387224621,"8":0.965726044784,"8.1":14.274891704},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0118807675906,"12.1":0.0712846055437,"0":null},"ie":{"5.5":null,"6":0.0252996596244,"7":0.0831274530516,"8":2.07095785211,"9":1.21438366197,"10":0.932473169014,"11":4.91174820423,"0":null},"ie_mob":{"10":0.108433815789,"11":0.230236184211},"bb":{"7":0.0591075,"10":null},"and_uc":{"0":7.87887},"op_mini":{"5.0-8.0":8.27495462687},"and_chr":{"0":16.48724},"and_ff":{"0":0.13419}},"total":98.6212275}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KY.json
new file mode 100644
index 0000000..85af046
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KY.json
@@ -0,0 +1 @@
+{"id":"KY","name":"Cayman Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.052346,"3.5":0.059824,"3.6":0.381378,"4":null,"5":null,"6":0.022434,"7":null,"8":null,"9":null,"10":0.029912,"11":0.029912,"12":0.022434,"13":0.022434,"14":null,"15":null,"16":0.029912,"17":null,"18":0.07478,"19":0.014956,"20":0.029912,"21":0.014956,"22":null,"23":0.014956,"24":0.171994,"25":null,"26":null,"27":null,"28":0.014956,"29":0.022434,"30":0.044868,"31":0.089736,"32":0.089736,"33":0.269208,"34":0.18695,"35":7.567736,"36":0.515982,"37":0.03739,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.067302,"12":0.03739,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.022434,"22":0.044868,"23":null,"24":null,"25":null,"26":0.029912,"27":0.029912,"28":0.029912,"29":0.007478,"30":0.03739,"31":0.119648,"32":0.059824,"33":0.029912,"34":0.171994,"35":0.134604,"36":0.620674,"37":0.284164,"38":0.216862,"39":1.503078,"40":30.427982,"41":0.104692,"42":0.11217,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.007478,"11.6":null,"12":null,"12.1":0.022434,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.157038,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.03739,"5":0.321554,"5.1":1.069354,"6":0.164516,"6.1":0.85997,"7":0.568328,"7.1":1.667594,"8":3.387534},"android":{"2.1":0,"2.2":0,"2.3":0.0683973531552,"3":0,"4":0.138234650587,"4.1":0.445302767647,"4.2-4.3":0.753810828984,"4.4":1.40826550286,"4.4.3-4.4.4":0.648694896767,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.061116019279,"6.0-6.1":0.187636901295,"7.0-7.1":2.37494706497,"8":0.510372371523,"8.1":7.54407564294},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000150567164179,"12.1":0.000903402985075,"0":null},"ie":{"5.5":null,"6":0.007478,"7":0.082258,"8":2.063928,"9":1.83211,"10":2.490174,"11":15.098082,"0":null},"ie_mob":{"10":0.123544815789,"11":0.262321184211},"bb":{"7":0.1986075,"10":null},"and_uc":{"0":0.15132},"op_mini":{"5.0-8.0":0.104870029851},"and_chr":{"0":9.750432},"and_ff":{"0":0.171496}},"total":98.6450575}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KZ.json
new file mode 100644
index 0000000..b250aa7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/KZ.json
@@ -0,0 +1 @@
+{"id":"KZ","name":"Kazakhstan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007296,"3":0.03648,"3.5":0.03648,"3.6":0.167808,"4":0.029184,"5":0.014592,"6":0.007296,"7":0.014592,"8":0.014592,"9":0.03648,"10":0.043776,"11":0.043776,"12":0.07296,"13":0.014592,"14":0.029184,"15":0.014592,"16":0.021888,"17":0.021888,"18":0.014592,"19":0.021888,"20":0.03648,"21":0.021888,"22":0.014592,"23":0.029184,"24":0.03648,"25":0.021888,"26":0.029184,"27":0.014592,"28":0.058368,"29":0.043776,"30":0.07296,"31":0.306432,"32":0.14592,"33":0.138624,"34":0.196992,"35":7.522176,"36":0.386688,"37":0.007296,"38":null,"39":null},"chrome":{"4":0.021888,"5":0.043776,"6":0.014592,"7":0.007296,"8":0.051072,"9":0.021888,"10":0.03648,"11":0.087552,"12":0.124032,"13":0.03648,"14":0.021888,"15":0.160512,"16":0.10944,"17":0.379392,"18":0.058368,"19":null,"20":0.029184,"21":0.014592,"22":0.10944,"23":0.021888,"24":0.058368,"25":0.03648,"26":0.116736,"27":0.124032,"28":1.16736,"29":0.058368,"30":0.043776,"31":0.175104,"32":0.051072,"33":0.080256,"34":0.058368,"35":0.335616,"36":0.415872,"37":0.299136,"38":0.299136,"39":1.38624,"40":31.679232,"41":0.094848,"42":0.700416,"43":null},"opera":{"9":null,"9.5-9.6":0.014592,"10.0-10.1":0,"10.5":0.014592,"10.6":0.014592,"11":0.014592,"11.1":0.021888,"11.5":0.03648,"11.6":0.094848,"12":0.196992,"12.1":2.283648,"15":0.021888,"16":0.029184,"17":0.014592,"18":0.051072,"19":0.021888,"20":0.102144,"21":0.03648,"22":0.051072,"23":0.014592,"24":0.029184,"25":0.043776,"26":0.342912,"27":3.815808,"28":0.03648,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.029184,"5":0.021888,"5.1":0.087552,"6":0.029184,"6.1":0.080256,"7":0.138624,"7.1":0.160512,"8":0.466944},"android":{"2.1":0,"2.2":0,"2.3":0.129948859549,"3":0,"4":0.262633484562,"4.1":0.846035469799,"4.2-4.3":1.4321732205,"4.4":2.67557862397,"4.4.3-4.4.4":1.23246234162,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0274858246812,"6.0-6.1":0.0843863038458,"7.0-7.1":1.06808950296,"8":0.22953074646,"8.1":3.39281162205},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00143367732765,"12.1":0.00860206396588,"0":null},"ie":{"5.5":null,"6":0.0758614161009,"7":0.166895115422,"8":1.99515524345,"9":0.751028019399,"10":0.933095418041,"11":3.89927678758,"0":null},"ie_mob":{"10":0.140252210526,"11":0.297795789474},"bb":{"7":0.00676,"10":null},"and_uc":{"0":1.598064},"op_mini":{"5.0-8.0":0.998556258706},"and_chr":{"0":11.639712},"and_ff":{"0":0.075712}},"total":90.564408}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LA.json
new file mode 100644
index 0000000..de4f4a8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LA.json
@@ -0,0 +1 @@
+{"id":"LA","name":"Lao","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008852,"3":0.039834,"3.5":0.013278,"3.6":0.079668,"4":0.039834,"5":0.026556,"6":0.048686,"7":0.026556,"8":0.075242,"9":0.035408,"10":0.039834,"11":0.057538,"12":0.115076,"13":0.11065,"14":0.084094,"15":0.048686,"16":0.08852,"17":0.030982,"18":0.048686,"19":0.017704,"20":0.04426,"21":0.04426,"22":0.035408,"23":0.030982,"24":0.04426,"25":0.061964,"26":0.070816,"27":0.039834,"28":0.048686,"29":0.123928,"30":0.252282,"31":0.239004,"32":0.159336,"33":0.225726,"34":0.39834,"35":7.710092,"36":1.90318,"37":0.057538,"38":0.02213,"39":null},"chrome":{"4":0.026556,"5":0.013278,"6":0.008852,"7":0.004426,"8":0.008852,"9":0.008852,"10":0.02213,"11":0.13278,"12":0.101798,"13":0.04426,"14":0.013278,"15":0.053112,"16":null,"17":0.004426,"18":0.013278,"19":0.004426,"20":0.097372,"21":0.017704,"22":0.013278,"23":0.026556,"24":null,"25":0.017704,"26":0.026556,"27":0.02213,"28":0.053112,"29":0.070816,"30":0.08852,"31":0.239004,"32":0.039834,"33":1.318948,"34":0.057538,"35":0.075242,"36":0.393914,"37":0.24343,"38":0.292116,"39":1.212724,"40":16.06638,"41":0.239004,"42":0.28769,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.013278,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.026556,"15":null,"16":null,"17":null,"18":0.008852,"19":null,"20":0.026556,"21":null,"22":null,"23":null,"24":null,"25":0.004426,"26":0.02213,"27":0.318672,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.02213,"5":0.04426,"5.1":0.11065,"6":0.13278,"6.1":0.159336,"7":0.163762,"7.1":0.239004,"8":0.513416},"android":{"2.1":0,"2.2":0,"2.3":0.332834845618,"3":0,"4":0.672676740618,"4.1":2.16693002121,"4.2-4.3":3.66819035118,"4.4":6.85289429504,"4.4.3-4.4.4":3.15667574634,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0606149412592,"6.0-6.1":0.186098503866,"7.0-7.1":2.35547534893,"8":0.506187930515,"8.1":7.48222327543},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00464301918977,"12.1":0.0278581151386,"0":null},"ie":{"5.5":null,"6":0.156616271669,"7":0.0875208576973,"8":1.99916064424,"9":1.19765384217,"10":0.838357689521,"11":2.8283056119,"0":null},"ie_mob":{"10":1.43664960526,"11":3.05042039474},"bb":{"7":0.002787,"10":null},"and_uc":{"0":1.332186},"op_mini":{"5.0-8.0":3.23386286567},"and_chr":{"0":14.959564},"and_ff":{"0":0.261978}},"total":94.5717599172}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LB.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LB.json
new file mode 100644
index 0000000..5a9f527
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LB.json
@@ -0,0 +1 @@
+{"id":"LB","name":"Lebanon","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.010558,"3":0.026395,"3.5":0.005279,"3.6":0.058069,"4":0.026395,"5":0.010558,"6":0.015837,"7":0.010558,"8":0.015837,"9":0.021116,"10":0.042232,"11":0.036953,"12":0.058069,"13":0.021116,"14":0.021116,"15":0.031674,"16":0.063348,"17":0.015837,"18":0.021116,"19":0.021116,"20":0.010558,"21":0.026395,"22":0.026395,"23":0.010558,"24":0.015837,"25":0.031674,"26":0.031674,"27":0.031674,"28":0.021116,"29":0.058069,"30":0.068627,"31":0.153091,"32":0.110859,"33":0.174207,"34":0.248113,"35":6.973559,"36":0.675712,"37":0.021116,"38":0.015837,"39":null},"chrome":{"4":0.036953,"5":0.036953,"6":0.026395,"7":0.015837,"8":0.068627,"9":0.015837,"10":0.047511,"11":0.110859,"12":0.10558,"13":0.036953,"14":0.042232,"15":0.079185,"16":0.031674,"17":0.010558,"18":0.021116,"19":0.010558,"20":0.010558,"21":0.026395,"22":0.036953,"23":0.015837,"24":0.010558,"25":0.015837,"26":0.036953,"27":0.253392,"28":0.031674,"29":0.031674,"30":0.026395,"31":0.084464,"32":0.058069,"33":0.306182,"34":0.089743,"35":0.131975,"36":0.506784,"37":0.337856,"38":0.427599,"39":1.435888,"40":23.993055,"41":0.168928,"42":0.205881,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.005279,"12.1":0.068627,"15":0.005279,"16":null,"17":null,"18":null,"19":null,"20":0.005279,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.021116,"27":0.348414,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.031674,"5":0.121417,"5.1":0.549016,"6":0.253392,"6.1":0.311461,"7":0.490947,"7.1":0.596527,"8":1.293355},"android":{"2.1":0,"2.2":0,"2.3":0.326381640503,"3":0,"4":0.659634473438,"4.1":2.12491625949,"4.2-4.3":3.59706923797,"4.4":6.72002619815,"4.4.3-4.4.4":3.09547219046,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0597963310573,"6.0-6.1":0.18358522693,"7.0-7.1":2.32366444372,"8":0.499351817251,"8.1":7.38117518104},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00226822743426,"12.1":0.0136093646055,"0":null},"ie":{"5.5":null,"6":0.0531350326797,"7":0.223167137255,"8":2.09352028758,"9":1.72688856209,"10":0.988311607843,"11":4.67056937255,"0":null},"ie_mob":{"10":0.0695312192982,"11":0.147634780702},"bb":{"7":0.108583,"10":null},"and_uc":{"0":1.869516},"op_mini":{"5.0-8.0":1.57982040796},"and_chr":{"0":15.378874},"and_ff":{"0":0.160514}},"total":98.336527}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LC.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LC.json
new file mode 100644
index 0000000..ae373f7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LC.json
@@ -0,0 +1 @@
+{"id":"LC","name":"Saint Lucia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.03658,"3.5":null,"3.6":0.07316,"4":null,"5":0.007316,"6":null,"7":null,"8":null,"9":null,"10":0.014632,"11":0.07316,"12":0.014632,"13":null,"14":0.014632,"15":null,"16":0.007316,"17":null,"18":0.058528,"19":0.007316,"20":null,"21":null,"22":null,"23":null,"24":0.03658,"25":0.007316,"26":0.007316,"27":0.007316,"28":0.029264,"29":0.058528,"30":0.051212,"31":0.058528,"32":0.051212,"33":0.051212,"34":0.175584,"35":8.362188,"36":0.84134,"37":0.029264,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.065844,"12":0.021948,"13":0.03658,"14":0.029264,"15":null,"16":null,"17":null,"18":0.007316,"19":null,"20":0.029264,"21":null,"22":0.131688,"23":null,"24":0.007316,"25":null,"26":0.021948,"27":0.058528,"28":0.07316,"29":0.043896,"30":0.204848,"31":0.358484,"32":0.07316,"33":0.358484,"34":0.190216,"35":0.570648,"36":1.382724,"37":0.373116,"38":0.417012,"39":1.814368,"40":37.955408,"41":0.453592,"42":0.526752,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.160952,"15":null,"16":null,"17":null,"18":null,"19":0.058528,"20":0.014632,"21":0.021948,"22":0.007316,"23":null,"24":null,"25":null,"26":0.007316,"27":1.082768,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.014632,"5":0.080476,"5.1":0.343852,"6":0.014632,"6.1":0.168268,"7":0.212164,"7.1":0.69502,"8":1.0974},"android":{"2.1":0,"2.2":0,"2.3":0.213707117164,"3":0,"4":0.431913331531,"4.1":1.39134581017,"4.2-4.3":2.35527738601,"4.4":4.40011706498,"4.4.3-4.4.4":2.02684329015,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.016959408776,"6.0-6.1":0.0520683602771,"7.0-7.1":0.659036674365,"8":0.141625939954,"8.1":2.09344561663},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000598987917555,"12.1":0.00359392750533,"0":null},"ie":{"5.5":null,"6":null,"7":0.0219895944409,"8":1.00419147947,"9":0.586389185092,"10":0.974872020215,"11":8.99374412634,"0":null},"ie_mob":{"10":0.460612070175,"11":0.978011929825},"bb":{"7":0.36234,"10":null},"and_uc":{"0":0.485804},"op_mini":{"5.0-8.0":0.417195084577},"and_chr":{"0":9.889748},"and_ff":{"0":0.314028}},"total":97.5350584056}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LI.json
new file mode 100644
index 0000000..eae4831
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LI.json
@@ -0,0 +1 @@
+{"id":"LI","name":"Liechtenstein","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":0.015834,"5":null,"6":null,"7":null,"8":0.023751,"9":null,"10":null,"11":null,"12":0.087087,"13":null,"14":null,"15":0.063336,"16":0.023751,"17":0.007917,"18":null,"19":0.015834,"20":0.015834,"21":0.055419,"22":null,"23":0.071253,"24":0.023751,"25":null,"26":0.023751,"27":0.015834,"28":0.007917,"29":0.047502,"30":0.118755,"31":0.490854,"32":0.071253,"33":0.641277,"34":0.435435,"35":15.960672,"36":0.546273,"37":0.031668,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.047502,"12":0.023751,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007917,"21":null,"22":0.047502,"23":null,"24":null,"25":null,"26":null,"27":0.031668,"28":null,"29":0.015834,"30":0.015834,"31":0.047502,"32":0.007917,"33":0.015834,"34":0.039585,"35":0.07917,"36":0.261261,"37":0.031668,"38":0.07917,"39":0.411684,"40":19.119555,"41":0.071253,"42":0.015834,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.229593,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007917,"21":0.015834,"22":null,"23":0.023751,"24":0.007917,"25":0.007917,"26":0.118755,"27":0.427518,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.190008,"5":0.427518,"5.1":1.535898,"6":0.15834,"6.1":1.488396,"7":0.965874,"7.1":1.995084,"8":4.742283},"android":{"2.1":0,"2.2":0,"2.3":0.0590013702048,"3":0,"4":0.119244874519,"4.1":0.384129973386,"4.2-4.3":0.650257206362,"4.4":1.21480715916,"4.4.3-4.4.4":0.559581416363,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0586680641631,"6.0-6.1":0.180121249623,"7.0-7.1":2.27982038809,"8":0.489929798976,"8.1":7.24190349915},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0,"12.1":0,"0":null},"ie":{"5.5":null,"6":0.0396086046512,"7":0.0396086046512,"8":1.51304869767,"9":2.043804,"10":3.12115804651,"11":19.7884588837,"0":null},"ie_mob":{"10":0.10937577193,"11":0.23223622807},"bb":{"7":0.00364525,"10":null},"and_uc":{"0":0.008332},"op_mini":{"5.0-8.0":0},"and_chr":{"0":7.077627},"and_ff":{"0":0.189553}},"total":98.9119230872}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LK.json
new file mode 100644
index 0000000..6477bfd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LK.json
@@ -0,0 +1 @@
+{"id":"LK","name":"Sri Lanka","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008378,"3":0.037701,"3.5":0.033512,"3.6":0.138237,"4":0.062835,"5":0.037701,"6":0.046079,"7":0.025134,"8":0.04189,"9":0.050268,"10":0.054457,"11":0.062835,"12":0.154993,"13":0.104725,"14":0.087969,"15":0.079591,"16":0.104725,"17":0.04189,"18":0.050268,"19":0.058646,"20":0.062835,"21":0.050268,"22":0.046079,"23":0.046079,"24":0.058646,"25":0.050268,"26":0.054457,"27":0.054457,"28":0.054457,"29":0.113103,"30":0.201072,"31":0.213639,"32":0.171749,"33":0.289041,"34":0.356065,"35":7.695193,"36":0.691185,"37":0.029323,"38":0.012567,"39":null},"chrome":{"4":0.020945,"5":0.062835,"6":0.046079,"7":0.062835,"8":0.025134,"9":0.029323,"10":0.04189,"11":0.092158,"12":0.087969,"13":0.037701,"14":0.033512,"15":0.029323,"16":0.050268,"17":0.008378,"18":0.020945,"19":0.008378,"20":0.025134,"21":0.012567,"22":0.025134,"23":0.016756,"24":0.012567,"25":0.029323,"26":0.025134,"27":0.054457,"28":0.04189,"29":0.054457,"30":0.071213,"31":0.104725,"32":0.050268,"33":0.205261,"34":0.08378,"35":0.150804,"36":0.636728,"37":0.25134,"38":0.343498,"39":1.344669,"40":19.843293,"41":0.121481,"42":0.146615,"43":null},"opera":{"9":null,"9.5-9.6":0.004189,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.004189,"11.1":null,"11.5":0.008378,"11.6":0.016756,"12":0.012567,"12.1":0.104725,"15":0.050268,"16":0.016756,"17":0.008378,"18":0.020945,"19":0.012567,"20":0.025134,"21":0.012567,"22":0.016756,"23":0.004189,"24":0.008378,"25":0.016756,"26":0.071213,"27":0.804288,"28":0.004189,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.012567,"5":0.020945,"5.1":0.050268,"6":0.029323,"6.1":0.020945,"7":0.058646,"7.1":0.058646,"8":0.188505},"android":{"2.1":0,"2.2":0,"2.3":0.336770980351,"3":0,"4":0.680631876079,"4.1":2.19255632997,"4.2-4.3":3.71157069924,"4.4":6.93393723755,"4.4.3-4.4.4":3.19400687681,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0115076355056,"6.0-6.1":0.0353304598855,"7.0-7.1":0.44718267798,"8":0.0960988508886,"8.1":1.42048637574},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0211459275053,"12.1":0.126875565032,"0":null},"ie":{"5.5":null,"6":0.0824733843458,"7":0.0607698621495,"8":1.02440624766,"9":0.368959877336,"10":0.646764961449,"11":1.53226866706,"0":null},"ie_mob":{"10":0.548859144737,"11":1.16538585526},"bb":{"7":0.04212975,"10":null},"and_uc":{"0":6.27588},"op_mini":{"5.0-8.0":14.7281385075},"and_chr":{"0":7.806853},"and_ff":{"0":0.191763}},"total":91.18687075}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LR.json
new file mode 100644
index 0000000..e0c222b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LR.json
@@ -0,0 +1 @@
+{"id":"LR","name":"Liberia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.005866,"3":0.061593,"3.5":0.014665,"3.6":0.11732,"4":0.067459,"5":0.032263,"6":0.032263,"7":0.038129,"8":0.002933,"9":0.023464,"10":0.108521,"11":0.032263,"12":0.108521,"13":0.014665,"14":0.041062,"15":0.026397,"16":0.073325,"17":0.079191,"18":0.041062,"19":0.049861,"20":0.070392,"21":0.061593,"22":0.049861,"23":0.014665,"24":0.064526,"25":0.011732,"26":0.032263,"27":0.023464,"28":0.011732,"29":0.08799,"30":0.164248,"31":0.152516,"32":0.134918,"33":0.187712,"34":0.222908,"35":5.552169,"36":0.800709,"37":0.014665,"38":null,"39":0.002933},"chrome":{"4":0.008799,"5":0.011732,"6":0.005866,"7":null,"8":null,"9":0.008799,"10":0.005866,"11":0.02933,"12":0.017598,"13":0.061593,"14":0.005866,"15":0.002933,"16":null,"17":null,"18":null,"19":0.008799,"20":0.020531,"21":0.011732,"22":0.005866,"23":null,"24":null,"25":0.002933,"26":0.020531,"27":null,"28":0.005866,"29":0.026397,"30":0.041062,"31":0.131985,"32":0.014665,"33":0.170114,"34":0.014665,"35":0.049861,"36":0.551404,"37":0.073325,"38":0.249305,"39":0.349027,"40":8.922186,"41":0.070392,"42":0.079191,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.005866,"11":0.005866,"11.1":null,"11.5":0.005866,"11.6":0.011732,"12":0.008799,"12.1":0.085057,"15":null,"16":null,"17":0.002933,"18":0.002933,"19":null,"20":0.005866,"21":0.002933,"22":0.005866,"23":null,"24":0.020531,"25":null,"26":0.046928,"27":0.519141,"28":0.090923,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.008799,"5":0.026397,"5.1":0.102655,"6":0.032263,"6.1":0.076258,"7":0.079191,"7.1":0.102655,"8":0.448749},"android":{"2.1":0,"2.2":0,"2.3":0.391553971307,"3":0,"4":0.791351184115,"4.1":2.54922243424,"4.2-4.3":4.31533692588,"4.4":8.06189018817,"4.4.3-4.4.4":3.71358029629,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0156532737223,"6.0-6.1":0.0480582965157,"7.0-7.1":0.60828072447,"8":0.130718566523,"8.1":1.93221813877},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0443307334755,"12.1":0.265984400853,"0":null},"ie":{"5.5":null,"6":0.0234922019231,"7":0.0587305048077,"8":1.02778383413,"9":0.669527754808,"10":1.43596084255,"11":4.10526228606,"0":null},"ie_mob":{"10":0.407282368421,"11":0.864777631579},"bb":{"7":0.02296775,"10":null},"and_uc":{"0":6.353233},"op_mini":{"5.0-8.0":30.8763558657},"and_chr":{"0":5.21886},"and_ff":{"0":0.098938}},"total":95.3395961743}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LS.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LS.json
new file mode 100644
index 0000000..23224c3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LS.json
@@ -0,0 +1 @@
+{"id":"LS","name":"Lesotho","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.019626,"3.5":null,"3.6":0.078504,"4":0.075233,"5":0.019626,"6":0.006542,"7":null,"8":0.062149,"9":0.013084,"10":0.042523,"11":0.045794,"12":0.029439,"13":0.03271,"14":0.006542,"15":0.016355,"16":0.042523,"17":0.009813,"18":0.016355,"19":0.013084,"20":0.06542,"21":0.029439,"22":0.317287,"23":0.013084,"24":0.006542,"25":0.016355,"26":0.035981,"27":0.003271,"28":0.03271,"29":0.052336,"30":0.143924,"31":0.091588,"32":0.121027,"33":0.199531,"34":0.13084,"35":4.190151,"36":0.834105,"37":0.016355,"38":null,"39":0.003271},"chrome":{"4":null,"5":0.003271,"6":null,"7":null,"8":0.013084,"9":0.013084,"10":null,"11":0.009813,"12":0.03271,"13":null,"14":null,"15":null,"16":0.013084,"17":null,"18":0.006542,"19":null,"20":0.013084,"21":null,"22":0.157008,"23":null,"24":0.013084,"25":null,"26":0.049065,"27":0.075233,"28":0.006542,"29":0.006542,"30":0.058878,"31":0.173363,"32":0.022897,"33":0.085046,"34":0.049065,"35":0.068691,"36":0.618219,"37":0.107943,"38":0.13084,"39":0.677097,"40":10.264398,"41":0.042523,"42":0.026168,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.006542,"11":0.006542,"11.1":0.006542,"11.5":0.003271,"11.6":0.03271,"12":0.006542,"12.1":0.078504,"15":0.157008,"16":0.006542,"17":0.006542,"18":null,"19":null,"20":null,"21":0.003271,"22":0.009813,"23":null,"24":0.009813,"25":0.009813,"26":0.035981,"27":0.549528,"28":0.013084,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.006542,"5":0.009813,"5.1":0.071962,"6":null,"6.1":0.026168,"7":0.016355,"7.1":0.058878,"8":0.075233},"android":{"2.1":0,"2.2":0,"2.3":0.0521027050629,"3":0,"4":0.10530230918,"4.1":0.339216032436,"4.2-4.3":0.574226654746,"4.4":1.07276727477,"4.4.3-4.4.4":0.494153023807,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00450604488402,"6.0-6.1":0.0138343483281,"7.0-7.1":0.175103323125,"8":0.0376294274526,"8.1":0.55621985621},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0540998208955,"12.1":0.324598925373,"0":null},"ie":{"5.5":null,"6":0.062167273743,"7":0.183229859453,"8":2.04170414819,"9":1.06338757718,"10":2.21511812232,"11":5.56233501911,"0":null},"ie_mob":{"10":0.616175710526,"11":1.30831828947},"bb":{"7":0.215328,"10":null},"and_uc":{"0":3.83553},"op_mini":{"5.0-8.0":37.6805252537},"and_chr":{"0":3.242529},"and_ff":{"0":0.114393}},"total":82.721893}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LT.json
new file mode 100644
index 0000000..fb64993
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LT.json
@@ -0,0 +1 @@
+{"id":"LT","name":"Lithuania","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.027267,"3.5":0.018178,"3.6":0.072712,"4":null,"5":null,"6":0.018178,"7":null,"8":null,"9":0.009089,"10":0.018178,"11":0.054534,"12":0.036356,"13":0.009089,"14":0.018178,"15":0.018178,"16":0.018178,"17":0.027267,"18":0.018178,"19":0.027267,"20":0.027267,"21":0.036356,"22":0.018178,"23":0.018178,"24":0.045445,"25":0.018178,"26":0.036356,"27":0.027267,"28":0.045445,"29":0.036356,"30":0.072712,"31":0.963434,"32":0.63623,"33":0.172691,"34":0.490806,"35":19.895821,"36":1.308816,"37":0.027267,"38":0.018178,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.054534,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.036356,"19":null,"20":null,"21":0.018178,"22":0.045445,"23":null,"24":0.018178,"25":0.009089,"26":0.054534,"27":0.027267,"28":0.036356,"29":0.054534,"30":0.036356,"31":0.190869,"32":0.109068,"33":0.145424,"34":0.227225,"35":0.372649,"36":1.172481,"37":1.526952,"38":0.81801,"39":2.235894,"40":37.101298,"41":0.290848,"42":0.236314,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.009089,"11.6":0.018178,"12":0.036356,"12.1":0.927078,"15":0.018178,"16":0.018178,"17":0.054534,"18":0.045445,"19":0.027267,"20":0.054534,"21":0.018178,"22":0.018178,"23":0.009089,"24":0.018178,"25":0.027267,"26":0.099979,"27":4.489966,"28":0.063623,"29":0.009089},"safari":{"3.1":null,"3.2":null,"4":0.036356,"5":0.072712,"5.1":0.172691,"6":0.054534,"6.1":0.099979,"7":0.354471,"7.1":0.263581,"8":1.008879},"android":{"2.1":0,"2.2":0,"2.3":0.0418374311259,"3":0,"4":0.0845556502755,"4.1":0.27238369633,"4.2-4.3":0.461092530409,"4.4":0.861410687182,"4.4.3-4.4.4":0.396795004678,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00762819570238,"6.0-6.1":0.0234198990863,"7.0-7.1":0.296429008435,"8":0.0637021255146,"8.1":0.941613771262},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000577549395878,"12.1":0.00346529637527,"0":null},"ie":{"5.5":null,"6":0.102366342258,"7":0.158202528944,"8":2.34511984081,"9":1.17255992041,"10":1.01435739146,"11":8.04971691389,"0":null},"ie_mob":{"10":0.146131592105,"11":0.310279407895},"bb":{"7":0.00614925,"10":null},"and_uc":{"0":0.140294},"op_mini":{"5.0-8.0":0.402263154229},"and_chr":{"0":4.459051},"and_ff":{"0":0.061037}},"total":98.9516931878}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LU.json
new file mode 100644
index 0000000..0352f9b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LU.json
@@ -0,0 +1 @@
+{"id":"LU","name":"Luxembourg","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.023967,"3.5":0.007989,"3.6":0.047934,"4":0.015978,"5":0.015978,"6":null,"7":null,"8":0.007989,"9":0.015978,"10":0.071901,"11":0.023967,"12":0.063912,"13":0.007989,"14":0.015978,"15":0.015978,"16":0.103857,"17":0.07989,"18":0.015978,"19":0.023967,"20":0.023967,"21":0.023967,"22":0.103857,"23":0.023967,"24":0.191736,"25":0.039945,"26":0.055923,"27":0.039945,"28":0.071901,"29":0.423417,"30":0.15978,"31":1.214328,"32":0.175758,"33":0.207714,"34":0.463362,"35":17.647701,"36":0.926724,"37":0.023967,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.007989,"11":0.071901,"12":0.015978,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.015978,"19":null,"20":null,"21":0.023967,"22":0.055923,"23":0.039945,"24":0.007989,"25":0.007989,"26":0.023967,"27":0.023967,"28":0.031956,"29":0.031956,"30":0.031956,"31":0.295593,"32":0.111846,"33":0.111846,"34":0.095868,"35":0.15978,"36":0.407439,"37":0.31956,"38":0.311571,"39":0.910746,"40":24.534219,"41":0.183747,"42":0.103857,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.007989,"12.1":0.231681,"15":null,"16":null,"17":null,"18":0.007989,"19":0.015978,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.015978,"27":0.591186,"28":0.015978,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.07989,"5":0.23967,"5.1":1.430031,"6":0.183747,"6.1":0.926724,"7":0.711021,"7.1":1.557855,"8":4.71351},"android":{"2.1":0,"2.2":0,"2.3":0.0469519056035,"3":0,"4":0.0948922723776,"4.1":0.305681617008,"4.2-4.3":0.517459422809,"4.4":0.966715024847,"4.4.3-4.4.4":0.445301757355,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0566171516216,"6.0-6.1":0.173824588312,"7.0-7.1":2.20012264635,"8":0.472802880209,"8.1":6.98874173351},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000100049751244,"12.1":0.000600298507463,"0":null},"ie":{"5.5":null,"6":0.561020763952,"7":0.0721312410796,"8":3.22186210156,"9":2.79708923742,"10":1.27431859241,"11":9.59345506359,"0":null},"ie_mob":{"10":0.111389995614,"11":0.236513004386},"bb":{"7":0.016088,"10":null},"and_uc":{"0":0.070385},"op_mini":{"5.0-8.0":0.0696846517413},"and_chr":{"0":7.120181},"and_ff":{"0":0.166913}},"total":98.624792}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LV.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LV.json
new file mode 100644
index 0000000..8a698d7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LV.json
@@ -0,0 +1 @@
+{"id":"LV","name":"Latvia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.027288,"3.5":0.009096,"3.6":0.09096,"4":0.018192,"5":null,"6":0.009096,"7":null,"8":0.009096,"9":0.018192,"10":0.027288,"11":0.054576,"12":0.04548,"13":0.009096,"14":0.018192,"15":0.027288,"16":0.036384,"17":0.036384,"18":0.018192,"19":0.072768,"20":0.04548,"21":0.036384,"22":0.018192,"23":0.027288,"24":0.063672,"25":0.027288,"26":0.072768,"27":0.027288,"28":0.04548,"29":0.072768,"30":0.145536,"31":0.472992,"32":0.27288,"33":0.254688,"34":0.509376,"35":20.866224,"36":1.382592,"37":0.063672,"38":0.027288,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":0.009096,"9":null,"10":null,"11":0.063672,"12":null,"13":null,"14":null,"15":0.009096,"16":null,"17":0.018192,"18":0.027288,"19":null,"20":null,"21":0.018192,"22":0.072768,"23":null,"24":0.018192,"25":0.018192,"26":0.054576,"27":0.036384,"28":0.063672,"29":0.036384,"30":0.027288,"31":0.154632,"32":0.100056,"33":0.154632,"34":0.191016,"35":0.618528,"36":0.809544,"37":0.609432,"38":0.400224,"39":1.655472,"40":42.66024,"41":0.191016,"42":0.418416,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.027288,"12":0.04548,"12.1":0.964176,"15":null,"16":0.009096,"17":0.009096,"18":0.018192,"19":null,"20":0.027288,"21":0.018192,"22":null,"23":0.009096,"24":null,"25":0.009096,"26":0.063672,"27":2.155752,"28":0.027288,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.036384,"5":0.072768,"5.1":0.336552,"6":0.072768,"6.1":0.163728,"7":0.263784,"7.1":0.491184,"8":1.573608},"android":{"2.1":0,"2.2":0,"2.3":0.0405517163946,"3":0,"4":0.0819571531344,"4.1":0.264013016738,"4.2-4.3":0.446922600686,"4.4":0.834938497557,"4.4.3-4.4.4":0.38460101549,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0101048482779,"6.0-6.1":0.0310236569937,"7.0-7.1":0.39267085852,"8":0.0843843470228,"8.1":1.24732828919},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000406061122957,"12.1":0.00243636673774,"0":null},"ie":{"5.5":null,"6":0.0462191586998,"7":0.0831944856597,"8":1.56220756405,"9":1.02606532314,"10":0.776481866157,"11":6.17487960229,"0":null},"ie_mob":{"10":0.163532807018,"11":0.347227192982},"bb":{"7":0.007006,"10":null},"and_uc":{"0":0.094016},"op_mini":{"5.0-8.0":0.282821572139},"and_chr":{"0":4.423872},"and_ff":{"0":0.0904}},"total":98.689374}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LY.json
new file mode 100644
index 0000000..6dd0a7f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/LY.json
@@ -0,0 +1 @@
+{"id":"LY","name":"Libya","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008908,"3":0.026724,"3.5":0.013362,"3.6":0.075718,"4":0.031178,"5":0.031178,"6":0.08908,"7":0.053448,"8":0.080172,"9":0.048994,"10":0.071264,"11":0.057902,"12":0.262786,"13":0.071264,"14":0.031178,"15":0.035632,"16":0.048994,"17":0.026724,"18":0.026724,"19":0.031178,"20":0.040086,"21":0.017816,"22":0.026724,"23":0.048994,"24":0.040086,"25":0.04454,"26":0.053448,"27":0.057902,"28":0.035632,"29":0.097988,"30":0.146982,"31":0.187068,"32":0.253878,"33":0.236062,"34":0.298418,"35":6.34695,"36":0.547842,"37":0.035632,"38":null,"39":null},"chrome":{"4":0.06681,"5":0.048994,"6":0.13362,"7":0.017816,"8":0.06681,"9":0.053448,"10":0.035632,"11":0.169252,"12":0.057902,"13":0.13362,"14":0.093534,"15":0.187068,"16":0.204884,"17":0.026724,"18":0.02227,"19":0.026724,"20":0.017816,"21":0.031178,"22":0.031178,"23":0.040086,"24":0.02227,"25":0.040086,"26":0.026724,"27":0.040086,"28":0.026724,"29":0.040086,"30":0.097988,"31":0.11135,"32":0.057902,"33":0.864076,"34":0.120258,"35":0.138074,"36":0.966518,"37":0.24497,"38":0.365228,"39":1.340654,"40":20.942708,"41":0.102442,"42":0.13362,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.026724,"11.6":0.031178,"12":0.02227,"12.1":0.213792,"15":0.013362,"16":null,"17":0.008908,"18":0.02227,"19":0.004454,"20":0.013362,"21":0.017816,"22":0.008908,"23":0.004454,"24":null,"25":0.004454,"26":0.026724,"27":0.819536,"28":0.004454,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.008908,"5":0.008908,"5.1":0.040086,"6":0.013362,"6.1":0.026724,"7":0.062356,"7.1":0.04454,"8":0.120258},"android":{"2.1":0,"2.2":0,"2.3":0.22895483938,"3":0,"4":0.462729780642,"4.1":1.49061650691,"4.2-4.3":2.52332333507,"4.4":4.7140596403,"4.4.3-4.4.4":2.1714558977,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0254256172306,"6.0-6.1":0.0780611055327,"7.0-7.1":0.988030564314,"8":0.212326207049,"8.1":3.13850250587},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0264016403696,"12.1":0.158409842217,"0":null},"ie":{"5.5":null,"6":0.0674123852459,"7":0.0269649540984,"8":1.21342293443,"9":0.669629693443,"10":0.840407736066,"11":2.65604797869,"0":null},"ie_mob":{"10":0.0479437105263,"11":0.101798289474},"bb":{"7":0.0041595,"10":null},"and_uc":{"0":1.902278},"op_mini":{"5.0-8.0":18.3887425174},"and_chr":{"0":13.092438},"and_ff":{"0":0.22184}},"total":93.804777182}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MA.json
new file mode 100644
index 0000000..09225b2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MA.json
@@ -0,0 +1 @@
+{"id":"MA","name":"Morocco","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.022803,"3":0.235631,"3.5":0.068409,"3.6":0.296439,"4":0.053207,"5":0.045606,"6":0.022803,"7":0.030404,"8":0.030404,"9":0.030404,"10":0.068409,"11":0.068409,"12":0.159621,"13":0.068409,"14":0.07601,"15":0.068409,"16":0.106414,"17":0.068409,"18":0.060808,"19":0.068409,"20":0.098813,"21":0.068409,"22":0.060808,"23":0.083611,"24":0.091212,"25":0.098813,"26":0.121616,"27":0.114015,"28":0.106414,"29":0.182424,"30":0.296439,"31":0.623282,"32":0.60808,"33":0.577676,"34":0.729696,"35":12.807685,"36":0.83611,"37":0.030404,"38":null,"39":null},"chrome":{"4":0.068409,"5":0.083611,"6":0.182424,"7":0.07601,"8":0.060808,"9":0.022803,"10":0.068409,"11":0.121616,"12":0.159621,"13":0.07601,"14":0.068409,"15":0.015202,"16":0.038005,"17":0.045606,"18":0.015202,"19":0.022803,"20":0.007601,"21":0.038005,"22":0.106414,"23":0.060808,"24":0.060808,"25":0.07601,"26":0.114015,"27":0.121616,"28":0.106414,"29":0.167222,"30":0.30404,"31":0.646085,"32":0.136818,"33":0.638484,"34":0.212828,"35":0.45606,"36":1.200958,"37":1.086943,"38":0.942524,"39":2.835173,"40":35.223034,"41":0.372449,"42":0.136818,"43":null},"opera":{"9":null,"9.5-9.6":0.007601,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.022803,"12":0.015202,"12.1":0.129217,"15":0.007601,"16":0.007601,"17":0.007601,"18":0.015202,"19":0.015202,"20":0.030404,"21":0.015202,"22":0.015202,"23":null,"24":0.015202,"25":0.030404,"26":0.114015,"27":1.67222,"28":0.015202,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.098813,"5":0.083611,"5.1":0.159621,"6":0.07601,"6.1":0.091212,"7":0.235631,"7.1":0.121616,"8":0.387651},"android":{"2.1":0,"2.2":0,"2.3":0.16642111654,"3":0,"4":0.336345835534,"4.1":1.08348905874,"4.2-4.3":1.8341358844,"4.4":3.4265231995,"4.4.3-4.4.4":1.57837290529,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0165453675068,"6.0-6.1":0.0507971809419,"7.0-7.1":0.642947175921,"8":0.138168332162,"8.1":2.04233694347},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00349193461265,"12.1":0.0209516076759,"0":null},"ie":{"5.5":null,"6":0.149757274566,"7":0.229040537572,"8":2.23754986705,"9":0.55498284104,"10":0.581410595376,"11":2.3256423815,"0":null},"ie_mob":{"10":0.212763942982,"11":0.451759057018},"bb":{"7":0.0443815,"10":null},"and_uc":{"0":0.448613},"op_mini":{"5.0-8.0":2.43213245771},"and_chr":{"0":7.469878},"and_ff":{"0":0.122349}},"total":97.3518319971}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MC.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MC.json
new file mode 100644
index 0000000..2745570
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MC.json
@@ -0,0 +1 @@
+{"id":"MC","name":"Monaco","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.026124,"3.5":0.078372,"3.6":0.034832,"4":0.034832,"5":null,"6":null,"7":0.026124,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":0.487648,"17":null,"18":0.017416,"19":0.182868,"20":0.008708,"21":0.017416,"22":null,"23":null,"24":0.017416,"25":0.008708,"26":0.165452,"27":0.200284,"28":0.026124,"29":0.008708,"30":0.017416,"31":0.139328,"32":0.052248,"33":0.095788,"34":0.34832,"35":14.67298,"36":0.574728,"37":0.008708,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.060956,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.052248,"19":null,"20":null,"21":0.165452,"22":null,"23":0.069664,"24":null,"25":0.026124,"26":0.08708,"27":0.017416,"28":0.008708,"29":null,"30":0.008708,"31":0.095788,"32":0.060956,"33":0.069664,"34":0.113204,"35":0.095788,"36":0.2177,"37":0.17416,"38":0.287364,"39":0.862092,"40":28.422912,"41":0.139328,"42":0.095788,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.008708,"12":null,"12.1":0.113204,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.26124,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.13062,"5":0.383152,"5.1":1.811264,"6":0.731472,"6.1":1.532608,"7":1.602272,"7.1":3.970848,"8":8.333556},"android":{"2.1":0,"2.2":0,"2.3":0.0147252271546,"3":0,"4":0.0297604590914,"4.1":0.0958689788959,"4.2-4.3":0.162287503483,"4.4":0.303184676993,"4.4.3-4.4.4":0.139657154382,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0473409868461,"6.0-6.1":0.145345135054,"7.0-7.1":1.83965413797,"8":0.395338767346,"8.1":5.84370497279},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":2.38749111585e-5,"12.1":0.000143249466951,"0":null},"ie":{"5.5":null,"6":null,"7":0.026124,"8":1.950592,"9":2.35116,"10":1.26266,"11":12.49598,"0":null},"ie_mob":{"10":0.127823,"11":0.271405},"bb":{"7":0.036822,"10":null},"and_uc":{"0":0.002584},"op_mini":{"5.0-8.0":0.0166288756219},"and_chr":{"0":3.093564},"and_ff":{"0":0.313956}},"total":98.226926}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MD.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MD.json
new file mode 100644
index 0000000..6542433
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MD.json
@@ -0,0 +1 @@
+{"id":"MD","name":"Moldova","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.027192,"3.5":0.018128,"3.6":0.099704,"4":0.018128,"5":null,"6":null,"7":null,"8":null,"9":0.018128,"10":0.009064,"11":0.027192,"12":0.036256,"13":0.009064,"14":0.018128,"15":0.018128,"16":0.036256,"17":0.027192,"18":0.009064,"19":0.009064,"20":0.04532,"21":0.018128,"22":0.081576,"23":0.018128,"24":0.027192,"25":0.018128,"26":0.04532,"27":0.027192,"28":0.027192,"29":0.036256,"30":0.072512,"31":0.217536,"32":0.154088,"33":0.172216,"34":0.190344,"35":8.828336,"36":0.616352,"37":0.018128,"38":null,"39":null},"chrome":{"4":0.027192,"5":0.063448,"6":0.027192,"7":0.018128,"8":0.072512,"9":0.027192,"10":0.036256,"11":0.054384,"12":0.117832,"13":0.054384,"14":0.027192,"15":0.054384,"16":0.09064,"17":0.09064,"18":0.108768,"19":null,"20":0.036256,"21":0.027192,"22":0.036256,"23":0.018128,"24":0.04532,"25":0.027192,"26":0.072512,"27":0.108768,"28":0.308176,"29":0.036256,"30":0.054384,"31":0.13596,"32":0.117832,"33":0.145024,"34":0.163152,"35":0.335368,"36":0.552904,"37":0.344432,"38":0.380688,"39":2.075656,"40":57.87364,"41":0.13596,"42":0.86108,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.009064,"11.5":0.018128,"11.6":0.036256,"12":0.04532,"12.1":0.933592,"15":0.009064,"16":0.018128,"17":null,"18":0.027192,"19":0.027192,"20":0.036256,"21":0.009064,"22":0.027192,"23":0.009064,"24":0.018128,"25":0.04532,"26":0.09064,"27":3.589344,"28":0.036256,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.018128,"5":0.018128,"5.1":0.04532,"6":0.018128,"6.1":0.036256,"7":0.072512,"7.1":0.117832,"8":0.489456},"android":{"2.1":0,"2.2":0,"2.3":0.0472378833559,"3":0,"4":0.0954702484666,"4.1":0.307543482691,"4.2-4.3":0.520611198669,"4.4":0.972603156253,"4.4.3-4.4.4":0.448014030565,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0086732491214,"6.0-6.1":0.0266283964253,"7.0-7.1":0.337039417612,"8":0.0724292382769,"8.1":1.07061369856},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00106173134328,"12.1":0.0063703880597,"0":null},"ie":{"5.5":null,"6":0.0458584554455,"7":0.10088860198,"8":1.07308785743,"9":0.41272609901,"10":0.431069481188,"11":2.56807350495,"0":null},"ie_mob":{"10":0.147744315789,"11":0.313703684211},"bb":{"7":0.010296,"10":null},"and_uc":{"0":0.174096},"op_mini":{"5.0-8.0":0.739495880597},"and_chr":{"0":4.129512},"and_ff":{"0":0.04212}},"total":95.66084}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ME.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ME.json
new file mode 100644
index 0000000..9fdc07c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ME.json
@@ -0,0 +1 @@
+{"id":"ME","name":"Montenegro","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.014778,"3":0.044334,"3.5":0.051723,"3.6":0.059112,"4":0.022167,"5":null,"6":0.022167,"7":null,"8":0.029556,"9":0.007389,"10":0.029556,"11":0.022167,"12":0.036945,"13":0.029556,"14":0.036945,"15":0.022167,"16":0.022167,"17":0.014778,"18":0.029556,"19":0.014778,"20":0.044334,"21":0.051723,"22":0.014778,"23":0.029556,"24":0.022167,"25":0.014778,"26":0.07389,"27":0.014778,"28":0.036945,"29":0.029556,"30":0.059112,"31":0.251226,"32":0.088668,"33":0.118224,"34":0.162558,"35":13.536648,"36":1.233963,"37":0.036945,"38":0.007389,"39":null},"chrome":{"4":0.007389,"5":null,"6":0.044334,"7":0.007389,"8":0.051723,"9":0.014778,"10":0.206892,"11":0.118224,"12":0.029556,"13":null,"14":0.036945,"15":0.014778,"16":0.051723,"17":null,"18":0.214281,"19":null,"20":null,"21":null,"22":0.118224,"23":null,"24":0.029556,"25":0.022167,"26":0.103446,"27":0.07389,"28":0.051723,"29":0.029556,"30":0.036945,"31":0.199503,"32":0.133002,"33":0.325116,"34":0.162558,"35":0.206892,"36":0.598509,"37":0.472896,"38":0.628065,"39":2.135421,"40":40.033602,"41":0.162558,"42":0.273393,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.007389,"11.6":null,"12":0.029556,"12.1":0.923625,"15":0.014778,"16":0.014778,"17":0.014778,"18":0.014778,"19":0.007389,"20":0.036945,"21":0.029556,"22":null,"23":null,"24":0.140391,"25":0.014778,"26":0.066501,"27":2.128032,"28":0.036945,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.007389,"5":0.044334,"5.1":0.110835,"6":0.014778,"6.1":0.022167,"7":0.044334,"7.1":0.110835,"8":0.354672},"android":{"2.1":0,"2.2":0,"2.3":0.204026618152,"3":0,"4":0.412348533527,"4.1":1.3283206666,"4.2-4.3":2.24858809689,"4.4":4.20080068531,"4.4.3-4.4.4":1.93503139952,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0161095999598,"6.0-6.1":0.0494592981223,"7.0-7.1":0.626013401948,"8":0.134529290893,"8.1":1.98854640908},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.002238,"12.1":0.013428,"0":null},"ie":{"5.5":null,"6":0.0888017375566,"7":0.059201158371,"8":1.31722577376,"9":0.636412452489,"10":0.399607819005,"11":2.40504705882,"0":null},"ie_mob":{"10":0.180571263158,"11":0.383404736842},"bb":{"7":0.01370775,"10":null},"and_uc":{"0":0.099218},"op_mini":{"5.0-8.0":1.558767},"and_chr":{"0":9.531012},"and_ff":{"0":0.07833}},"total":97.03242275}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MG.json
new file mode 100644
index 0000000..2a13453
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MG.json
@@ -0,0 +1 @@
+{"id":"MG","name":"Madagascar","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.032635,"3":0.293715,"3.5":0.019581,"3.6":0.646173,"4":0.117486,"5":0.026108,"6":0.052216,"7":0.032635,"8":0.032635,"9":0.071797,"10":0.06527,"11":0.039162,"12":0.182756,"13":0.150121,"14":0.124013,"15":0.084851,"16":0.215391,"17":0.104432,"18":0.110959,"19":0.117486,"20":0.215391,"21":0.802821,"22":0.182756,"23":0.104432,"24":0.137067,"25":0.117486,"26":0.19581,"27":0.365512,"28":0.535214,"29":0.574376,"30":0.691862,"31":0.815875,"32":0.744078,"33":1.416359,"34":1.3054,"35":20.644901,"36":1.605642,"37":0.06527,"38":0.026108,"39":null},"chrome":{"4":0.006527,"5":0.045689,"6":0.013054,"7":0.032635,"8":null,"9":null,"10":0.019581,"11":0.026108,"12":0.019581,"13":0.006527,"14":0.006527,"15":0.013054,"16":0.026108,"17":null,"18":0.013054,"19":null,"20":0.013054,"21":0.019581,"22":0.006527,"23":0.032635,"24":0.006527,"25":0.026108,"26":0.019581,"27":0.013054,"28":0.013054,"29":0.13054,"30":0.026108,"31":0.254553,"32":0.078324,"33":0.176229,"34":0.659227,"35":0.137067,"36":0.626592,"37":0.358985,"38":0.221918,"39":1.514264,"40":17.068105,"41":0.287188,"42":0.104432,"43":null},"opera":{"9":null,"9.5-9.6":0.006527,"10.0-10.1":0.013054,"10.5":null,"10.6":null,"11":0.006527,"11.1":null,"11.5":0.013054,"11.6":0.039162,"12":0.013054,"12.1":0.274134,"15":0.019581,"16":null,"17":null,"18":null,"19":0.026108,"20":0.078324,"21":0.013054,"22":0.019581,"23":0.019581,"24":0.032635,"25":0.019581,"26":0.104432,"27":1.338035,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.052216,"5":0.071797,"5.1":0.163175,"6":0.058743,"6.1":0.078324,"7":0.228445,"7.1":0.228445,"8":0.404674},"android":{"2.1":0,"2.2":0,"2.3":0.0869856700281,"3":0,"4":0.17580261732,"4.1":0.566322493814,"4.2-4.3":0.958673647573,"4.4":1.79098916395,"4.4.3-4.4.4":0.824990407319,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00620181062356,"6.0-6.1":0.0190406466513,"7.0-7.1":0.241000184758,"8":0.0517905588915,"8.1":0.765542799076},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0230545984364,"12.1":0.138327590618,"0":null},"ie":{"5.5":null,"6":0.110127374517,"7":0.0807600746461,"8":1.88684901673,"9":0.792917096525,"10":1.0278554955,"11":1.73267069241,"0":null},"ie_mob":{"10":0.115644807018,"11":0.245547192982},"bb":{"7":0.05122675,"10":null},"and_uc":{"0":7.852453},"op_mini":{"5.0-8.0":16.0575278109},"and_chr":{"0":2.148958},"and_ff":{"0":0.152812}},"total":96.3141945003}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MH.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MH.json
new file mode 100644
index 0000000..127751b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MH.json
@@ -0,0 +1 @@
+{"id":"MH","name":"Marshall Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.008848,"3.5":0.017696,"3.6":0.035392,"4":0.017696,"5":null,"6":0.017696,"7":null,"8":0.070784,"9":null,"10":0.008848,"11":0.194656,"12":0.194656,"13":null,"14":0.017696,"15":0.04424,"16":0.008848,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":0.035392,"24":null,"25":0.168112,"26":0.079632,"27":null,"28":null,"29":0.185808,"30":0.017696,"31":0.318528,"32":0.097328,"33":0.026544,"34":0.291984,"35":15.802528,"36":2.946384,"37":0.04424,"38":null,"39":0.017696},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.097328,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.017696,"19":null,"20":0.017696,"21":null,"22":0.123872,"23":null,"24":0.008848,"25":null,"26":null,"27":0.008848,"28":0.026544,"29":0.008848,"30":null,"31":0.291984,"32":0.247744,"33":0.017696,"34":0.04424,"35":0.238896,"36":2.663248,"37":0.53088,"38":0.583968,"39":2.043888,"40":40.267248,"41":0.291984,"42":0.212352,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.061936,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.008848,"5":0.230048,"5.1":1.088304,"6":0.115024,"6.1":0.185808,"7":0.238896,"7.1":0.336224,"8":1.521856},"android":{"2.1":0,"2.2":0,"2.3":0.0641462438923,"3":0,"4":0.129642935024,"4.1":0.41762580892,"4.2-4.3":0.706959130055,"4.4":1.32073740056,"4.4.3-4.4.4":0.608376481547,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0263935126017,"6.0-6.1":0.0810327141279,"7.0-7.1":1.02564263882,"8":0.220408982428,"8.1":3.25797815202},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":5.73134328358e-5,"12.1":0.000343880597015,"0":null},"ie":{"5.5":null,"6":null,"7":null,"8":0.292496252632,"9":0.265905684211,"10":2.49951343158,"11":12.0278004491,"0":null},"ie_mob":{"10":0.113234526316,"11":0.240429473684},"bb":{"7":0.00288,"10":null},"and_uc":{"0":0.081792},"op_mini":{"5.0-8.0":0.0399188059701},"and_chr":{"0":3.272256},"and_ff":{"0":0.029952}},"total":98.9252038175}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MK.json
new file mode 100644
index 0000000..6ca3243
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MK.json
@@ -0,0 +1 @@
+{"id":"MK","name":"Macedonia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.074646,"3":0.033176,"3.5":0.016588,"3.6":0.530816,"4":0.016588,"5":0.033176,"6":null,"7":0.024882,"8":0.008294,"9":0.008294,"10":0.049764,"11":0.024882,"12":0.033176,"13":0.033176,"14":0.016588,"15":0.008294,"16":0.033176,"17":0.099528,"18":0.033176,"19":0.016588,"20":0.058058,"21":0.016588,"22":0.04147,"23":0.024882,"24":0.04147,"25":0.016588,"26":0.066352,"27":0.016588,"28":0.04147,"29":0.08294,"30":0.058058,"31":0.24882,"32":0.190762,"33":0.356642,"34":0.340054,"35":14.315444,"36":1.459744,"37":0.033176,"38":0.008294,"39":null},"chrome":{"4":0.016588,"5":null,"6":null,"7":null,"8":null,"9":0.008294,"10":0.024882,"11":0.066352,"12":0.016588,"13":0.033176,"14":0.033176,"15":0.016588,"16":0.008294,"17":null,"18":0.033176,"19":0.008294,"20":null,"21":0.008294,"22":0.132704,"23":0.074646,"24":0.033176,"25":0.008294,"26":0.08294,"27":0.04147,"28":0.024882,"29":0.033176,"30":0.174174,"31":0.257114,"32":0.091234,"33":0.306878,"34":0.257114,"35":0.356642,"36":0.763048,"37":0.613756,"38":0.887458,"39":3.126838,"40":47.914438,"41":0.4147,"42":0.381524,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.024882,"12":0.016588,"12.1":0.398112,"15":0.008294,"16":null,"17":null,"18":0.008294,"19":0.049764,"20":0.016588,"21":0.016588,"22":0.008294,"23":null,"24":null,"25":0.016588,"26":0.049764,"27":2.040324,"28":0.016588,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.016588,"5":0.024882,"5.1":0.08294,"6":null,"6.1":0.024882,"7":0.058058,"7.1":0.058058,"8":0.281996},"android":{"2.1":0,"2.2":0,"2.3":0.10031861732,"3":0,"4":0.202749205531,"4.1":0.653126998025,"4.2-4.3":1.10561676141,"4.4":2.06550753134,"4.4.3-4.4.4":0.951442886371,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0150564478361,"6.0-6.1":0.046225936339,"7.0-7.1":0.585088279948,"8":0.125734546842,"8.1":1.85854678904},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000877856432125,"12.1":0.00526713859275,"0":null},"ie":{"5.5":null,"6":0.0677185171625,"7":0.0507888878719,"8":0.761833318078,"9":0.304733327231,"10":0.330127771167,"11":2.18392217849,"0":null},"ie_mob":{"10":0.0961345964912,"11":0.204121403509},"bb":{"7":0.00853,"10":null},"and_uc":{"0":0.075064},"op_mini":{"5.0-8.0":0.611427004975},"and_chr":{"0":8.715894},"and_ff":{"0":0.088712}},"total":99.194754}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ML.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ML.json
new file mode 100644
index 0000000..700eb1f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ML.json
@@ -0,0 +1 @@
+{"id":"ML","name":"Mali","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.01151,"3":0.094382,"3.5":0.029926,"3.6":0.050644,"4":0.032228,"5":0.01151,"6":0.009208,"7":0.020718,"8":0.02302,"9":0.01151,"10":0.020718,"11":0.043738,"12":0.048342,"13":0.04604,"14":0.048342,"15":0.025322,"16":0.064456,"17":0.052946,"18":0.025322,"19":0.036832,"20":0.027624,"21":0.041436,"22":0.09208,"23":0.02302,"24":0.032228,"25":0.027624,"26":0.043738,"27":0.043738,"28":0.04604,"29":0.066758,"30":0.151932,"31":0.117402,"32":0.117402,"33":0.227898,"34":0.324582,"35":6.873772,"36":0.423568,"37":0.055248,"38":0.002302,"39":null},"chrome":{"4":0.01151,"5":0.006906,"6":0.01151,"7":0.006906,"8":0.006906,"9":0.01151,"10":0.01151,"11":0.052946,"12":0.004604,"13":0.016114,"14":0.006906,"15":0.018416,"16":0.002302,"17":null,"18":0.006906,"19":null,"20":0.004604,"21":null,"22":null,"23":0.01151,"24":0.002302,"25":0.013812,"26":0.009208,"27":0.01151,"28":0.006906,"29":0.006906,"30":0.018416,"31":0.154234,"32":0.009208,"33":0.064456,"34":0.018416,"35":0.036832,"36":0.19567,"37":0.032228,"38":0.048342,"39":0.260126,"40":5.978294,"41":0.029926,"42":0.02302,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.016114,"10.5":null,"10.6":null,"11":null,"11.1":0.004604,"11.5":null,"11.6":0.004604,"12":0.004604,"12.1":0.03453,"15":null,"16":null,"17":0.004604,"18":0.002302,"19":0.002302,"20":0.004604,"21":null,"22":null,"23":0.002302,"24":null,"25":null,"26":0.018416,"27":0.29926,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.002302,"5":0.027624,"5.1":0.110496,"6":0.085174,"6.1":0.02302,"7":0.066758,"7.1":0.055248,"8":0.154234},"android":{"2.1":0,"2.2":0,"2.3":0.331632625013,"3":0,"4":0.6702469895,"4.1":2.15910293232,"4.2-4.3":3.65494061462,"4.4":6.82814120553,"4.4.3-4.4.4":3.14527363302,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0105301590521,"6.0-6.1":0.0323294356863,"7.0-7.1":0.409198285972,"8":0.0879360650668,"8.1":1.29982805422},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0180002985075,"12.1":0.108001791045,"0":null},"ie":{"5.5":null,"6":0.0253791860885,"7":0.0369151797651,"8":0.602178869919,"9":0.382994990063,"10":0.911343500452,"11":2.97628636856,"0":null},"ie_mob":{"10":0.224288657895,"11":0.476229342105},"bb":{"7":0.0789045,"10":null},"and_uc":{"0":25.349514},"op_mini":{"5.0-8.0":12.5372079104},"and_chr":{"0":4.859866},"and_ff":{"0":0.138564}},"total":84.8339205949}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MM.json
new file mode 100644
index 0000000..295a11b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MM.json
@@ -0,0 +1 @@
+{"id":"MM","name":"Myanmar","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.037785,"3":0.055418,"3.5":0.020152,"3.6":0.090684,"4":0.093203,"5":0.057937,"6":0.060456,"7":0.065494,"8":0.040304,"9":0.088165,"10":0.073051,"11":0.103279,"12":0.239305,"13":0.115874,"14":0.143583,"15":0.118393,"16":0.093203,"17":0.110836,"18":0.123431,"19":0.166254,"20":0.083127,"21":0.120912,"22":0.113355,"23":0.193963,"24":0.161216,"25":0.153659,"26":0.204039,"27":0.186406,"28":0.148621,"29":0.549142,"30":0.632269,"31":0.375331,"32":0.360217,"33":0.569294,"34":0.801042,"35":8.317738,"36":2.49381,"37":0.068013,"38":0.027709,"39":0.005038},"chrome":{"4":null,"5":0.002519,"6":0.005038,"7":null,"8":null,"9":null,"10":0.005038,"11":0.085646,"12":0.007557,"13":0.005038,"14":0.007557,"15":0.005038,"16":null,"17":0.002519,"18":0.035266,"19":0.017633,"20":0.005038,"21":0.007557,"22":0.012595,"23":0.002519,"24":0.007557,"25":0.017633,"26":0.007557,"27":0.022671,"28":0.012595,"29":0.017633,"30":0.02519,"31":0.093203,"32":0.017633,"33":0.078089,"34":0.027709,"35":0.052899,"36":0.108317,"37":0.05038,"38":0.083127,"39":0.259457,"40":3.655069,"41":0.07557,"42":0.10076,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.002519,"11.5":0.012595,"11.6":null,"12":0.007557,"12.1":0.017633,"15":null,"16":null,"17":null,"18":0.002519,"19":0.005038,"20":0.012595,"21":null,"22":null,"23":null,"24":null,"25":0.005038,"26":0.005038,"27":0.138545,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.005038,"5":0.037785,"5.1":0.040304,"6":0.020152,"6.1":0.020152,"7":0.120912,"7.1":0.078089,"8":0.216634},"android":{"2.1":0,"2.2":0,"2.3":1.02669900405,"3":0,"4":2.07501272398,"4.1":6.68435088429,"4.2-4.3":11.3153037605,"4.4":21.1391921256,"4.4.3-4.4.4":9.73742950161,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0146863169997,"6.0-6.1":0.0450895697359,"7.0-7.1":0.570705125515,"8":0.122643629682,"8.1":1.81285835807},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00211616062544,"12.1":0.0126969637527,"0":null},"ie":{"5.5":null,"6":0.00781878983834,"7":0.0130313163972,"8":0.278870170901,"9":0.218926115473,"10":0.200682272517,"11":0.403970808314,"0":null},"ie_mob":{"10":0.0191618596491,"11":0.0406861403509},"bb":{"7":0,"10":null},"and_uc":{"0":5.019751},"op_mini":{"5.0-8.0":1.47390587562},"and_chr":{"0":11.720273},"and_ff":{"0":1.339099}},"total":98.4244184734}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MN.json
new file mode 100644
index 0000000..88d6f6c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MN.json
@@ -0,0 +1 @@
+{"id":"MN","name":"Mongolia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.06999,"3.5":0.083988,"3.6":0.104985,"4":0.041994,"5":0.020997,"6":0.006999,"7":0.027996,"8":0.034995,"9":0.027996,"10":0.041994,"11":0.125982,"12":0.48993,"13":0.048993,"14":0.076989,"15":0.083988,"16":0.118983,"17":0.048993,"18":0.062991,"19":0.132981,"20":0.06999,"21":0.041994,"22":0.027996,"23":0.048993,"24":0.125982,"25":0.083988,"26":0.041994,"27":0.062991,"28":0.055992,"29":0.27996,"30":0.20997,"31":0.167976,"32":0.27996,"33":0.272961,"34":0.363948,"35":17.126553,"36":1.840737,"37":0.097986,"38":0.020997,"39":null},"chrome":{"4":0.034995,"5":null,"6":0.013998,"7":null,"8":null,"9":0.013998,"10":0.055992,"11":0.055992,"12":0.097986,"13":0.048993,"14":null,"15":null,"16":0.020997,"17":null,"18":0.020997,"19":null,"20":0.027996,"21":0.013998,"22":0.090987,"23":0.020997,"24":0.013998,"25":0.097986,"26":0.027996,"27":0.020997,"28":0.020997,"29":0.076989,"30":0.27996,"31":0.146979,"32":0.055992,"33":0.342951,"34":0.13998,"35":0.328953,"36":2.001714,"37":0.335952,"38":0.790887,"39":2.757606,"40":30.858591,"41":0.202971,"42":0.384945,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.006999,"11.6":0.027996,"12":null,"12.1":0.076989,"15":null,"16":null,"17":null,"18":0.006999,"19":0.034995,"20":0.013998,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.048993,"27":1.32981,"28":0.006999,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.027996,"5":0.083988,"5.1":0.153978,"6":0.041994,"6.1":0.202971,"7":0.132981,"7.1":0.286959,"8":0.706899},"android":{"2.1":0,"2.2":0,"2.3":0.258805441314,"3":0,"4":0.523059418235,"4.1":1.68495963634,"4.2-4.3":2.85230839006,"4.4":5.32866782327,"4.4.3-4.4.4":2.45456529078,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0408104661111,"6.0-6.1":0.125295290692,"7.0-7.1":1.58588039361,"8":0.340803190682,"8.1":5.0375866589},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000588682302772,"12.1":0.00353209381663,"0":null},"ie":{"5.5":null,"6":0.0306534569536,"7":0.0229900927152,"8":1.12651454305,"9":0.229900927152,"10":0.321861298013,"11":1.73958368212,"0":null},"ie_mob":{"10":0.0307470877193,"11":0.0652849122807},"bb":{"7":0.02025675,"10":null},"and_uc":{"0":0.336112},"op_mini":{"5.0-8.0":0.410017223881},"and_chr":{"0":8.180486},"and_ff":{"0":0.858286}},"total":99.07820275}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MO.json
new file mode 100644
index 0000000..fad258c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MO.json
@@ -0,0 +1 @@
+{"id":"MO","name":"Macao","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.012482,"3.5":0.006241,"3.6":0.037446,"4":0.012482,"5":0.018723,"6":null,"7":null,"8":null,"9":0.024964,"10":0.012482,"11":0.018723,"12":0.018723,"13":0.012482,"14":0.018723,"15":0.012482,"16":0.037446,"17":null,"18":null,"19":0.012482,"20":0.006241,"21":0.018723,"22":0.012482,"23":0.006241,"24":0.012482,"25":0.012482,"26":0.031205,"27":0.024964,"28":0.012482,"29":0.018723,"30":0.043687,"31":0.156025,"32":0.112338,"33":0.099856,"34":0.280845,"35":6.297169,"36":0.430629,"37":0.006241,"38":0.006241,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.056169,"12":0.031205,"13":null,"14":null,"15":0.006241,"16":0.006241,"17":0.031205,"18":0.087374,"19":0.006241,"20":0.049928,"21":0.068651,"22":0.18723,"23":0.012482,"24":0.024964,"25":0.031205,"26":0.068651,"27":0.12482,"28":0.093615,"29":0.06241,"30":0.349496,"31":2.527605,"32":0.112338,"33":0.324532,"34":0.330773,"35":0.386942,"36":0.542967,"37":0.480557,"38":1.216995,"39":3.170428,"40":24.489684,"41":0.156025,"42":0.156025,"43":0.012482},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.018723,"10.5":null,"10.6":null,"11":0.012482,"11.1":null,"11.5":null,"11.6":null,"12":0.143543,"12.1":0.06241,"15":null,"16":0.006241,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.006241,"26":0.024964,"27":0.205953,"28":0.012482,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.018723,"5":0.12482,"5.1":0.418147,"6":0.112338,"6.1":0.230917,"7":0.461834,"7.1":0.480557,"8":1.354297},"android":{"2.1":0,"2.2":0,"2.3":0.147014845618,"3":0,"4":0.297124740618,"4.1":0.957144021208,"4.2-4.3":1.62025835118,"4.4":3.02695829504,"4.4.3-4.4.4":1.39431974634,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0914796943468,"6.0-6.1":0.280858710714,"7.0-7.1":3.55486882418,"8":0.763935693142,"8.1":11.2921250776},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000224417910448,"12.1":0.00134650746269,"0":null},"ie":{"5.5":null,"6":0.0962625298277,"7":0.673837708794,"8":3.77349116924,"9":1.81615306275,"10":1.22574287981,"11":6.93090214759,"0":null},"ie_mob":{"10":0.0409203421053,"11":0.0868856578947},"bb":{"7":0.018795,"10":null},"and_uc":{"0":0.905919},"op_mini":{"5.0-8.0":0.156307074627},"and_chr":{"0":12.309933},"and_ff":{"0":0.248094}},"total":98.455992498}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MP.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MP.json
new file mode 100644
index 0000000..eb942b1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MP.json
@@ -0,0 +1 @@
+{"id":"MP","name":"Northern Mariana Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.032544,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.024408,"12":null,"13":0.008136,"14":0.016272,"15":null,"16":0.065088,"17":null,"18":0.056952,"19":0.024408,"20":0.024408,"21":0.04068,"22":null,"23":0.056952,"24":0.04068,"25":0.008136,"26":null,"27":null,"28":null,"29":0.04068,"30":0.073224,"31":0.048816,"32":0.032544,"33":0.08136,"34":0.048816,"35":8.640432,"36":0.618336,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.032544,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.008136,"19":null,"20":0.008136,"21":0.024408,"22":0.032544,"23":0.008136,"24":null,"25":null,"26":0.024408,"27":0.016272,"28":0.04068,"29":0.016272,"30":0.195264,"31":1.025136,"32":0.048816,"33":0.08136,"34":0.24408,"35":0.097632,"36":0.634608,"37":0.16272,"38":0.317304,"39":2.2374,"40":42.193296,"41":0.268488,"42":0.235944,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.032544,"15":null,"16":null,"17":null,"18":null,"19":0.008136,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.170856,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.016272,"5":0.12204,"5.1":0.292896,"6":0.056952,"6.1":0.105768,"7":0.235944,"7.1":4.360896,"8":0.838008},"android":{"2.1":0,"2.2":0,"2.3":0.122201584364,"3":0,"4":0.246975833663,"4.1":0.795596630835,"4.2-4.3":1.34679009294,"4.4":2.51606630544,"4.4.3-4.4.4":1.15898555276,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0261699311176,"6.0-6.1":0.080346279747,"7.0-7.1":1.0169543408,"8":0.218541880912,"8.1":3.23037956743},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":7.68386638237e-5,"12.1":0.000461031982942,"0":null},"ie":{"5.5":null,"6":0.195968560825,"7":0.0489921402062,"8":2.33529201649,"9":1.23296886186,"10":1.06149637113,"11":10.9415779794,"0":null},"ie_mob":{"10":0.0226786666667,"11":0.0481533333333},"bb":{"7":0.000466,"10":null},"and_uc":{"0":0.050328},"op_mini":{"5.0-8.0":0.0535181293532},"and_chr":{"0":8.353632},"and_ff":{"0":0.035416}},"total":99.3168019299}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MQ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MQ.json
new file mode 100644
index 0000000..9c26b29
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MQ.json
@@ -0,0 +1 @@
+{"id":"MQ","name":"Martinique","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.006921,"3":0.013842,"3.5":0.020763,"3.6":0.076131,"4":0.020763,"5":null,"6":null,"7":null,"8":0.006921,"9":null,"10":null,"11":0.041526,"12":0.020763,"13":0.013842,"14":null,"15":0.027684,"16":0.055368,"17":null,"18":null,"19":null,"20":0.013842,"21":0.020763,"22":null,"23":0.006921,"24":0.027684,"25":0.013842,"26":0.020763,"27":0.020763,"28":0.027684,"29":0.034605,"30":0.020763,"31":0.20763,"32":0.131499,"33":0.117657,"34":0.249156,"35":10.616814,"36":0.699021,"37":0.020763,"38":0.006921,"39":null},"chrome":{"4":0.006921,"5":null,"6":0.006921,"7":null,"8":null,"9":null,"10":null,"11":0.076131,"12":0.013842,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.013842,"19":null,"20":null,"21":0.020763,"22":0.027684,"23":0.103815,"24":0.041526,"25":0.027684,"26":0.062289,"27":0.020763,"28":0.083052,"29":0.06921,"30":0.020763,"31":0.159183,"32":0.096894,"33":0.214551,"34":0.152262,"35":0.394497,"36":0.595206,"37":0.491391,"38":0.408339,"39":1.411884,"40":27.497133,"41":0.249156,"42":0.103815,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.041526,"12.1":0.152262,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.006921,"27":0.560601,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.055368,"5":0.41526,"5.1":0.657495,"6":0.186867,"6.1":0.332208,"7":0.352971,"7.1":0.948177,"8":1.751013},"android":{"2.1":0,"2.2":0,"2.3":0.179656881173,"3":0,"4":0.363096012475,"4.1":1.16966085269,"4.2-4.3":1.98000794303,"4.4":3.69904062709,"4.4.3-4.4.4":1.70390368354,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0221691710011,"6.0-6.1":0.0680632443016,"7.0-7.1":0.861486206446,"8":0.1851320245,"8.1":2.73653135375},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000380771855011,"12.1":0.00228463113006,"0":null},"ie":{"5.5":null,"6":0.00704447323944,"7":0.0915781521127,"8":1.09893782535,"9":0.894648101408,"10":1.19051597746,"11":11.7149589972,"0":null},"ie_mob":{"10":0.128156622807,"11":0.272113377193},"bb":{"7":0.01462525,"10":null},"and_uc":{"0":0.040027},"op_mini":{"5.0-8.0":0.265207597015},"and_chr":{"0":19.673285},"and_ff":{"0":0.341769}},"total":99.0960817768}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MR.json
new file mode 100644
index 0000000..5d6c579
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MR.json
@@ -0,0 +1 @@
+{"id":"MR","name":"Mauritania","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.005912,"3":0.065032,"3.5":0.053208,"3.6":0.248304,"4":0.053208,"5":0.035472,"6":0.05912,"7":0.023648,"8":0.112328,"9":0.035472,"10":0.047296,"11":0.159624,"12":0.130064,"13":0.100504,"14":0.171448,"15":0.106416,"16":0.1478,"17":0.053208,"18":0.100504,"19":0.053208,"20":0.141888,"21":0.20692,"22":0.082768,"23":0.035472,"24":0.201008,"25":0.100504,"26":0.20692,"27":0.165536,"28":0.053208,"29":0.171448,"30":0.366544,"31":0.277864,"32":0.32516,"33":0.467048,"34":0.437488,"35":11.220976,"36":1.010952,"37":0.023648,"38":null,"39":null},"chrome":{"4":0.094592,"5":0.20692,"6":0.32516,"7":0.195096,"8":0.17736,"9":0.632584,"10":0.070944,"11":0.1478,"12":0.283776,"13":0.212832,"14":0.106416,"15":0.106416,"16":0.153712,"17":0.124152,"18":0.017736,"19":0.053208,"20":null,"21":0.02956,"22":0.070944,"23":0.053208,"24":0.035472,"25":0.035472,"26":0.076856,"27":0.053208,"28":0.053208,"29":0.124152,"30":0.112328,"31":0.242392,"32":0.11824,"33":0.372456,"34":0.135976,"35":0.283776,"36":0.833592,"37":0.271952,"38":0.478872,"39":1.06416,"40":24.511152,"41":0.20692,"42":0.224656,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.035472,"12":0.041384,"12.1":0.11824,"15":0.017736,"16":0.017736,"17":0.005912,"18":0.017736,"19":0.011824,"20":0.005912,"21":0.011824,"22":null,"23":0.011824,"24":null,"25":0.011824,"26":0.047296,"27":0.721264,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.02956,"5":0.011824,"5.1":0.065032,"6":0.005912,"6.1":0.065032,"7":0.159624,"7.1":0.11824,"8":0.1478},"android":{"2.1":0,"2.2":0,"2.3":0.177323746751,"3":0,"4":0.358380625013,"4.1":1.15447091964,"4.2-4.3":1.95429434577,"4.4":3.65100261732,"4.4.3-4.4.4":1.6817757455,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0149510215885,"6.0-6.1":0.045902259263,"7.0-7.1":0.580991452957,"8":0.124854145195,"8.1":1.845533121},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0163055124378,"12.1":0.0978330746269,"0":null},"ie":{"5.5":null,"6":0.128900983607,"7":0.0429669945355,"8":1.58977879781,"9":0.687471912568,"10":0.87775431694,"11":3.39439256831,"0":null},"ie_mob":{"10":0.179316175439,"11":0.380739824561},"bb":{"7":0.01533,"10":null},"and_uc":{"0":2.71852},"op_mini":{"5.0-8.0":11.3567894129},"and_chr":{"0":8.018216},"and_ff":{"0":0.2044}},"total":92.5315875738}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MS.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MS.json
new file mode 100644
index 0000000..68ed64f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MS.json
@@ -0,0 +1 @@
+{"id":"MS","name":"Montserrat","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.008111,"3.5":null,"3.6":null,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.016222,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":0.008111,"33":0.202775,"34":0.089221,"35":7.072792,"36":0.178442,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.032444,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.056777,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.008111,"27":null,"28":0.016222,"29":0.032444,"30":null,"31":0.016222,"32":0.154109,"33":0.259552,"34":0.389328,"35":0.656991,"36":1.662755,"37":0.056777,"38":0.202775,"39":1.524868,"40":51.188521,"41":0.056777,"42":0.519104,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.016222,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.064888,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.016222,"5.1":0.056777,"6":null,"6.1":0.308218,"7":0.446105,"7.1":0.316329,"8":0.957098},"android":{"2.1":0,"2.2":0,"2.3":0.0538420968916,"3":0,"4":0.108817711612,"4.1":0.35054038871,"4.2-4.3":0.593396583637,"4.4":1.10858043705,"4.4.3-4.4.4":0.510649782098,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00694106496636,"6.0-6.1":0.0213102871774,"7.0-7.1":0.269727349131,"8":0.0579639811226,"8.1":0.856795317602},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000467215351812,"12.1":0.00280329211087,"0":null},"ie":{"5.5":null,"6":0.008111,"7":null,"8":1.45998,"9":0.502882,"10":0.835433,"11":9.360094,"0":null},"ie_mob":{"10":0.139711434211,"11":0.296647565789},"bb":{"7":0.273905,"10":null},"and_uc":{"0":0.107673},"op_mini":{"5.0-8.0":0.325415492537},"and_chr":{"0":14.339854},"and_ff":{"0":0.005667}},"total":98.188519}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MT.json
new file mode 100644
index 0000000..e11b410
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MT.json
@@ -0,0 +1 @@
+{"id":"MT","name":"Malta","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.016636,"4":null,"5":0.016636,"6":null,"7":null,"8":0.008318,"9":null,"10":null,"11":0.016636,"12":0.04159,"13":0.008318,"14":0.049908,"15":null,"16":0.058226,"17":0.008318,"18":null,"19":null,"20":0.016636,"21":0.008318,"22":null,"23":0.008318,"24":0.024954,"25":0.008318,"26":0.016636,"27":0.016636,"28":0.024954,"29":0.024954,"30":0.016636,"31":0.174678,"32":0.16636,"33":0.058226,"34":0.191314,"35":8.708946,"36":0.640486,"37":0.04159,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.066544,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.049908,"19":null,"20":null,"21":0.016636,"22":0.049908,"23":0.016636,"24":0.016636,"25":0.016636,"26":0.074862,"27":0.016636,"28":0.024954,"29":0.024954,"30":0.024954,"31":0.349356,"32":0.108134,"33":0.12477,"34":0.182996,"35":0.274494,"36":0.79021,"37":0.557306,"38":3.601694,"39":2.270814,"40":44.925518,"41":0.299448,"42":0.20795,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.091498,"15":0.008318,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.008318,"27":0.657122,"28":0.016636,"29":null},"safari":{"3.1":0.016636,"3.2":null,"4":0.04159,"5":0.141406,"5.1":0.399264,"6":0.08318,"6.1":0.199632,"7":0.33272,"7.1":0.740302,"8":2.229224},"android":{"2.1":0,"2.2":0,"2.3":0.0768467137956,"3":0,"4":0.155311253145,"4.1":0.500312552448,"4.2-4.3":0.846931677305,"4.4":1.58223339141,"4.4.3-4.4.4":0.728830411893,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0235569513003,"6.0-6.1":0.0723239732905,"7.0-7.1":0.915414861934,"8":0.19672120735,"8.1":2.90783700613},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000181708599858,"12.1":0.00109025159915,"0":null},"ie":{"5.5":null,"6":0.0166689643329,"7":0.0500068929987,"8":1.07514819947,"9":1.2418378428,"10":1.02514130647,"11":9.20960279392,"0":null},"ie_mob":{"10":0.199257982456,"11":0.423082017544},"bb":{"7":0.0105125,"10":null},"and_uc":{"0":0.020184},"op_mini":{"5.0-8.0":0.126560039801},"and_chr":{"0":8.104204},"and_ff":{"0":0.079054}},"total":99.0191985}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MU.json
new file mode 100644
index 0000000..7e609f7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MU.json
@@ -0,0 +1 @@
+{"id":"MU","name":"Mauritius","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.022371,"3.5":0.052199,"3.6":0.059656,"4":0.014914,"5":0.022371,"6":0.014914,"7":0.007457,"8":0.007457,"9":0.007457,"10":0.014914,"11":0.059656,"12":0.052199,"13":0.029828,"14":0.022371,"15":0.022371,"16":0.029828,"17":0.014914,"18":0.022371,"19":0.029828,"20":0.014914,"21":0.022371,"22":0.037285,"23":0.014914,"24":0.029828,"25":0.022371,"26":0.029828,"27":0.029828,"28":0.044742,"29":0.052199,"30":0.961953,"31":0.126769,"32":0.141683,"33":0.178968,"34":0.335565,"35":13.191433,"36":1.155835,"37":0.037285,"38":0.014914,"39":null},"chrome":{"4":0.007457,"5":0.007457,"6":0.007457,"7":null,"8":null,"9":null,"10":0.007457,"11":0.052199,"12":0.014914,"13":0.007457,"14":0.007457,"15":0.014914,"16":0.014914,"17":0.007457,"18":0.141683,"19":null,"20":0.022371,"21":0.007457,"22":0.111855,"23":0.044742,"24":0.014914,"25":0.044742,"26":0.082027,"27":0.044742,"28":0.096941,"29":0.037285,"30":0.067113,"31":0.275909,"32":0.216253,"33":0.335565,"34":0.186425,"35":0.328108,"36":1.170749,"37":0.663673,"38":0.641302,"39":2.252014,"40":34.272372,"41":0.283366,"42":0.365393,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.014914,"12.1":0.178968,"15":0.007457,"16":0.014914,"17":null,"18":0.007457,"19":0.007457,"20":0.022371,"21":null,"22":0.007457,"23":null,"24":0.014914,"25":0.007457,"26":0.029828,"27":1.245319,"28":0.029828,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.007457,"5":0.104398,"5.1":0.305737,"6":0.067113,"6.1":0.111855,"7":0.238624,"7.1":0.290823,"8":0.768071},"android":{"2.1":0,"2.2":0,"2.3":0.134919910594,"3":0,"4":0.272680240358,"4.1":0.878399628444,"4.2-4.3":1.4869594357,"4.4":2.77792994864,"4.4.3-4.4.4":1.27960883626,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0128809754995,"6.0-6.1":0.0395468546039,"7.0-7.1":0.500550188272,"8":0.107567444523,"8.1":1.5900095371},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00590294100924,"12.1":0.0354176460554,"0":null},"ie":{"5.5":null,"6":0.037285,"7":0.082027,"8":2.102874,"9":1.185663,"10":1.603255,"11":6.226595,"0":null},"ie_mob":{"10":0.322425631579,"11":0.684602368421},"bb":{"7":0.02733725,"10":null},"and_uc":{"0":1.238441},"op_mini":{"5.0-8.0":4.11139841294},"and_chr":{"0":8.131162},"and_ff":{"0":0.15258}},"total":97.31634025}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MV.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MV.json
new file mode 100644
index 0000000..65f94b0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MV.json
@@ -0,0 +1 @@
+{"id":"MV","name":"Maldives","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.061854,"3.5":0.019032,"3.6":0.07137,"4":0.066612,"5":0.028548,"6":0.02379,"7":0.019032,"8":0.019032,"9":0.014274,"10":0.033306,"11":0.066612,"12":0.109434,"13":0.052338,"14":0.033306,"15":0.099918,"16":0.085644,"17":0.080886,"18":0.02379,"19":0.019032,"20":0.038064,"21":0.033306,"22":0.033306,"23":0.057096,"24":0.066612,"25":0.066612,"26":0.038064,"27":0.061854,"28":0.161772,"29":0.114192,"30":0.14274,"31":0.152256,"32":0.180804,"33":0.328302,"34":0.442494,"35":8.431176,"36":1.822314,"37":0.07137,"38":0.004758,"39":null},"chrome":{"4":0.009516,"5":0.009516,"6":0.009516,"7":0.004758,"8":0.004758,"9":0.033306,"10":0.061854,"11":0.085644,"12":0.152256,"13":0.02379,"14":0.014274,"15":0.004758,"16":0.052338,"17":0.019032,"18":0.033306,"19":0.02379,"20":0.038064,"21":0.014274,"22":0.004758,"23":0.009516,"24":0.014274,"25":0.02379,"26":0.038064,"27":0.061854,"28":0.057096,"29":0.038064,"30":0.099918,"31":0.11895,"32":0.109434,"33":0.290238,"34":0.109434,"35":0.157014,"36":0.57096,"37":0.366366,"38":0.375882,"39":1.608204,"40":23.485488,"41":0.233142,"42":0.390156,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.004758,"12.1":0.080886,"15":0.009516,"16":0.009516,"17":null,"18":null,"19":null,"20":0.009516,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.009516,"27":0.28548,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.033306,"5.1":0.099918,"6":0.033306,"6.1":0.114192,"7":0.133224,"7.1":0.323544,"8":0.59475},"android":{"2.1":0,"2.2":0,"2.3":0.219821763177,"3":0,"4":0.444271352947,"4.1":1.43115537395,"4.2-4.3":2.42266722154,"4.4":4.52601440815,"4.4.3-4.4.4":2.08483588024,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0410432967165,"6.0-6.1":0.126010121498,"7.0-7.1":1.59492810925,"8":0.342747530475,"8.1":5.06632694206},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00517866382374,"12.1":0.0310719829424,"0":null},"ie":{"5.5":null,"6":0.0047733483871,"7":0.00954669677419,"8":0.448694748387,"9":0.238667419355,"10":0.539388367742,"11":1.71840541935,"0":null},"ie_mob":{"10":0.241683789474,"11":0.513164210526},"bb":{"7":0.010484,"10":null},"and_uc":{"0":3.884322},"op_mini":{"5.0-8.0":3.60693935323},"and_chr":{"0":21.791782},"and_ff":{"0":0.68146}},"total":95.699066}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MW.json
new file mode 100644
index 0000000..f3d0c0f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MW.json
@@ -0,0 +1 @@
+{"id":"MW","name":"Malawi","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.055056,"3":0.020646,"3.5":0.009176,"3.6":0.043586,"4":0.02294,"5":0.016058,"6":0.016058,"7":0.020646,"8":0.059644,"9":0.020646,"10":0.038998,"11":0.038998,"12":0.082584,"13":0.073408,"14":0.041292,"15":0.050468,"16":0.048174,"17":0.146816,"18":0.027528,"19":0.041292,"20":0.038998,"21":0.04588,"22":0.036704,"23":0.036704,"24":0.032116,"25":0.020646,"26":0.084878,"27":0.073408,"28":0.038998,"29":0.14911,"30":0.268398,"31":0.146816,"32":0.167462,"33":0.220224,"34":0.3441,"35":3.828686,"36":0.63085,"37":0.05735,"38":0.009176,"39":null},"chrome":{"4":null,"5":0.004588,"6":null,"7":0.006882,"8":null,"9":null,"10":0.036704,"11":0.020646,"12":null,"13":null,"14":0.016058,"15":null,"16":0.004588,"17":0.002294,"18":0.009176,"19":0.002294,"20":0.009176,"21":0.032116,"22":0.01147,"23":0.01147,"24":0.009176,"25":0.020646,"26":0.016058,"27":0.006882,"28":0.02294,"29":0.016058,"30":0.006882,"31":0.08029,"32":0.013764,"33":0.107818,"34":0.03441,"35":0.094054,"36":0.155992,"37":0.052762,"38":0.09176,"39":0.399156,"40":6.235092,"41":0.036704,"42":0.084878,"43":null},"opera":{"9":null,"9.5-9.6":0.002294,"10.0-10.1":0,"10.5":0.009176,"10.6":0.013764,"11":0.009176,"11.1":0.004588,"11.5":0.009176,"11.6":0.029822,"12":0.038998,"12.1":0.066526,"15":0.009176,"16":0.004588,"17":null,"18":0.004588,"19":0.004588,"20":0.016058,"21":0.006882,"22":0.006882,"23":0.004588,"24":0.004588,"25":0.01147,"26":0.064232,"27":0.37851,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.004588,"5":0.064232,"5.1":0.087172,"6":0.02294,"6.1":0.043586,"7":0.199578,"7.1":0.09176,"8":0.116994},"android":{"2.1":0,"2.2":0,"2.3":0.059058771182,"3":0,"4":0.119360884915,"4.1":0.384503683959,"4.2-4.3":0.650889825554,"4.4":1.21598901507,"4.4.3-4.4.4":0.560125819316,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0055131288282,"6.0-6.1":0.0169262727181,"7.0-7.1":0.214238251833,"8":0.0460394617934,"8.1":0.680532884828},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0796341435679,"12.1":0.477804861407,"0":null},"ie":{"5.5":null,"6":0.06882,"7":0.029822,"8":1.670032,"9":0.855662,"10":0.885484,"11":3.087724,"0":null},"ie_mob":{"10":0.616817982456,"11":1.30968201754},"bb":{"7":0.3679615,"10":null},"and_uc":{"0":5.579144},"op_mini":{"5.0-8.0":55.465180995},"and_chr":{"0":2.529328},"and_ff":{"0":0.069354}},"total":93.1334515}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MX.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MX.json
new file mode 100644
index 0000000..dbfcab1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MX.json
@@ -0,0 +1 @@
+{"id":"MX","name":"Mexico","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.02022,"3.5":null,"3.6":0.05392,"4":null,"5":0.00674,"6":null,"7":null,"8":null,"9":null,"10":0.00674,"11":0.00674,"12":0.02696,"13":0.00674,"14":0.00674,"15":0.01348,"16":0.02696,"17":0.00674,"18":0.00674,"19":0.00674,"20":0.02022,"21":0.04044,"22":0.01348,"23":0.01348,"24":0.01348,"25":0.01348,"26":0.02022,"27":0.04718,"28":0.02696,"29":0.0337,"30":0.05392,"31":0.1011,"32":0.07414,"33":0.11458,"34":0.1685,"35":6.35582,"36":0.337,"37":0.01348,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.07414,"12":0.00674,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.02696,"19":null,"20":null,"21":0.02022,"22":0.11458,"23":0.01348,"24":0.01348,"25":0.01348,"26":0.04044,"27":0.05392,"28":0.04044,"29":0.04044,"30":0.02696,"31":0.15502,"32":0.08088,"33":0.14828,"34":0.19546,"35":0.4718,"36":0.41788,"37":0.45158,"38":0.66052,"39":1.96134,"40":37.09022,"41":0.18872,"42":0.05392,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.05392,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.01348,"21":null,"22":null,"23":null,"24":null,"25":0.00674,"26":0.02022,"27":0.62682,"28":0.02022,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.04718,"5":0.12806,"5.1":0.34374,"6":0.1011,"6.1":0.24264,"7":0.31004,"7.1":0.56616,"8":1.26038},"android":{"2.1":0,"2.2":0,"2.3":0.199361929515,"3":0,"4":0.402920952282,"4.1":1.29795108847,"4.2-4.3":2.19717831791,"4.4":4.10475720137,"4.4.3-4.4.4":1.89079051045,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0258420222914,"6.0-6.1":0.0793395421227,"7.0-7.1":1.00421191887,"8":0.215803554574,"8.1":3.18990296214},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00259502487562,"12.1":0.0155701492537,"0":null},"ie":{"5.5":null,"6":0.0618326889279,"7":0.089313884007,"8":1.7725370826,"9":1.39467065026,"10":1.66948260105,"11":6.73289279438,"0":null},"ie_mob":{"10":0.435252894737,"11":0.924167105263},"bb":{"7":0.059495,"10":null},"and_uc":{"0":0.24124},"op_mini":{"5.0-8.0":1.80743482587},"and_chr":{"0":14.6744},"and_ff":{"0":0.12388}},"total":98.3710647012}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MY.json
new file mode 100644
index 0000000..9fe6977
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MY.json
@@ -0,0 +1 @@
+{"id":"MY","name":"Malaysia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.005716,"3":0.040012,"3.5":0.011432,"3.6":0.080024,"4":0.02858,"5":0.022864,"6":0.011432,"7":0.017148,"8":0.017148,"9":0.022864,"10":0.022864,"11":0.080024,"12":0.074308,"13":0.02858,"14":0.02858,"15":0.02858,"16":0.05716,"17":0.02858,"18":0.02858,"19":0.02858,"20":0.02858,"21":0.05716,"22":0.034296,"23":0.034296,"24":0.051444,"25":0.02858,"26":0.040012,"27":0.045728,"28":0.045728,"29":0.080024,"30":0.102888,"31":0.17148,"32":0.148616,"33":0.211492,"34":0.34296,"35":7.756612,"36":1.046028,"37":0.02858,"38":0.005716,"39":null},"chrome":{"4":0.022864,"5":0.034296,"6":0.02858,"7":0.017148,"8":0.034296,"9":0.022864,"10":0.040012,"11":0.108604,"12":0.068592,"13":0.02858,"14":0.040012,"15":0.040012,"16":0.02858,"17":0.005716,"18":0.034296,"19":0.011432,"20":0.017148,"21":0.02858,"22":0.062876,"23":0.02858,"24":0.040012,"25":0.034296,"26":0.051444,"27":0.074308,"28":0.062876,"29":0.080024,"30":0.11432,"31":0.37154,"32":0.108604,"33":0.503008,"34":0.188628,"35":0.31438,"36":0.737364,"37":0.45728,"38":0.74308,"39":2.383572,"40":28.299916,"41":0.308664,"42":0.348676,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.011432,"11.6":0.005716,"12":0.011432,"12.1":0.062876,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.011432,"26":0.022864,"27":0.348676,"28":0.005716,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.02858,"5":0.062876,"5.1":0.17148,"6":0.051444,"6.1":0.102888,"7":0.17148,"7.1":0.222924,"8":0.634476},"android":{"2.1":0,"2.2":0,"2.3":0.246413506602,"3":0,"4":0.498014665974,"4.1":1.6042816193,"4.2-4.3":2.71573622539,"4.4":5.07352440961,"4.4.3-4.4.4":2.33703757314,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0281481899789,"6.0-6.1":0.0864198815142,"7.0-7.1":1.09382878602,"8":0.235062077719,"8.1":3.47457306477},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00462805970149,"12.1":0.027768358209,"0":null},"ie":{"5.5":null,"6":0.0893154795663,"7":0.136950402002,"8":1.82799014846,"9":1.00628773645,"10":0.780021854879,"11":3.26894655213,"0":null},"ie_mob":{"10":0.119331947368,"11":0.253376052632},"bb":{"7":0.049266,"10":null},"and_uc":{"0":3.264408},"op_mini":{"5.0-8.0":3.22344358209},"and_chr":{"0":18.000452},"and_ff":{"0":0.287028}},"total":98.5068821735}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MZ.json
new file mode 100644
index 0000000..b12dac0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/MZ.json
@@ -0,0 +1 @@
+{"id":"MZ","name":"Mozambique","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.006654,"3":0.03327,"3.5":0.013308,"3.6":0.06654,"4":0.043251,"5":0.016635,"6":0.019962,"7":0.013308,"8":0.029943,"9":0.013308,"10":0.043251,"11":0.073194,"12":0.083175,"13":0.043251,"14":0.03327,"15":0.043251,"16":0.039924,"17":0.03327,"18":0.023289,"19":0.036597,"20":0.036597,"21":0.026616,"22":0.019962,"23":0.023289,"24":0.029943,"25":0.016635,"26":0.019962,"27":0.023289,"28":0.019962,"29":0.06654,"30":0.116445,"31":0.119772,"32":0.103137,"33":0.216255,"34":0.23289,"35":4.72434,"36":0.445818,"37":0.036597,"38":0.003327,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.019962,"11":0.029943,"12":0.006654,"13":null,"14":0.009981,"15":0.006654,"16":0.009981,"17":null,"18":0.013308,"19":null,"20":0.009981,"21":0.016635,"22":0.003327,"23":null,"24":null,"25":0.016635,"26":0.026616,"27":0.006654,"28":0.016635,"29":0.016635,"30":0.019962,"31":0.146388,"32":0.026616,"33":0.26616,"34":0.03327,"35":0.089829,"36":0.645438,"37":0.096483,"38":0.143061,"39":0.625476,"40":9.91446,"41":0.053232,"42":0.046578,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.006654,"11":0.016635,"11.1":0.009981,"11.5":0.013308,"11.6":0.036597,"12":0.026616,"12.1":0.136407,"15":0.016635,"16":0.013308,"17":0.016635,"18":0.009981,"19":0.006654,"20":0.026616,"21":0.009981,"22":0.016635,"23":0.006654,"24":0.006654,"25":0.009981,"26":0.076521,"27":1.057986,"28":0.013308,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.003327,"5":0.026616,"5.1":0.116445,"6":0.039924,"6.1":0.076521,"7":0.076521,"7.1":0.129753,"8":0.282795},"android":{"2.1":0,"2.2":0,"2.3":0.177414806113,"3":0,"4":0.358564660776,"4.1":1.15506376401,"4.2-4.3":1.95529791579,"4.4":3.65287748165,"4.4.3-4.4.4":1.68263937166,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00656914268501,"6.0-6.1":0.0201684205241,"7.0-7.1":0.255274579777,"8":0.0548581038257,"8.1":0.810885753188},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0513636034115,"12.1":0.308181620469,"0":null},"ie":{"5.5":null,"6":0.0632511490646,"7":0.0665801569101,"8":2.61992917441,"9":0.838909977067,"10":1.5146985697,"11":5.87236983947,"0":null},"ie_mob":{"10":0.487129,"11":1.034315},"bb":{"7":0.166825,"10":null},"and_uc":{"0":3.930397},"op_mini":{"5.0-8.0":35.7747497761},"and_chr":{"0":6.688419},"and_ff":{"0":0.100095}},"total":91.2390578666}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NA.json
new file mode 100644
index 0000000..23381fa
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NA.json
@@ -0,0 +1 @@
+{"id":"NA","name":"Namibia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.013269,"3":0.013269,"3.5":0.008846,"3.6":0.061922,"4":0.035384,"5":0.008846,"6":0.013269,"7":0.008846,"8":0.008846,"9":0.022115,"10":0.013269,"11":0.084037,"12":0.08846,"13":0.066345,"14":0.035384,"15":0.026538,"16":0.022115,"17":0.013269,"18":0.026538,"19":0.008846,"20":0.017692,"21":0.101729,"22":0.022115,"23":0.048653,"24":0.030961,"25":0.017692,"26":0.017692,"27":0.048653,"28":0.026538,"29":0.075191,"30":0.084037,"31":0.106152,"32":0.137113,"33":0.194612,"34":0.163651,"35":6.28066,"36":0.667873,"37":0.04423,"38":0.022115,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.039807,"12":0.008846,"13":null,"14":0.017692,"15":null,"16":0.008846,"17":null,"18":0.039807,"19":0.017692,"20":0.008846,"21":0.026538,"22":0.013269,"23":0.008846,"24":null,"25":0.022115,"26":0.022115,"27":0.022115,"28":0.022115,"29":0.030961,"30":0.035384,"31":0.154805,"32":0.04423,"33":0.614797,"34":0.066345,"35":0.247688,"36":0.601528,"37":0.137113,"38":0.123844,"39":0.614797,"40":15.254927,"41":0.084037,"42":0.274226,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":0.004423,"10.6":0.017692,"11":null,"11.1":null,"11.5":0.017692,"11.6":0.008846,"12":0.013269,"12.1":0.084037,"15":0.013269,"16":null,"17":null,"18":0.004423,"19":0.004423,"20":null,"21":null,"22":0.004423,"23":null,"24":null,"25":0.004423,"26":0.039807,"27":0.822678,"28":0.013269,"29":0.008846},"safari":{"3.1":0.004423,"3.2":0.008846,"4":0.008846,"5":0.035384,"5.1":0.13269,"6":0.061922,"6.1":0.070768,"7":0.141536,"7.1":0.238842,"8":0.676719},"android":{"2.1":0,"2.2":0,"2.3":0.186721369165,"3":0,"4":0.377373714523,"4.1":1.21565438767,"4.2-4.3":2.05786603701,"4.4":3.84449471671,"4.4.3-4.4.4":1.77090477492,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0173962752284,"6.0-6.1":0.0534096169294,"7.0-7.1":0.676013151421,"8":0.145274158048,"8.1":2.14737179837},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0301007377399,"12.1":0.180604426439,"0":null},"ie":{"5.5":null,"6":0.0399220860906,"7":0.0532294481208,"8":1.65011289174,"9":1.49042454738,"10":1.78318651205,"11":8.79173051462,"0":null},"ie_mob":{"10":0.796385815789,"11":1.69095618421},"bb":{"7":0.22168575,"10":null},"and_uc":{"0":2.00772},"op_mini":{"5.0-8.0":20.9651638358},"and_chr":{"0":9.908588},"and_ff":{"0":0.16731}},"total":91.96119975}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NC.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NC.json
new file mode 100644
index 0000000..30b5882
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NC.json
@@ -0,0 +1 @@
+{"id":"NC","name":"New Caledonia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.008328,"3.5":null,"3.6":0.04164,"4":null,"5":null,"6":null,"7":null,"8":0.008328,"9":0.016656,"10":0.033312,"11":0.016656,"12":0.049968,"13":0.016656,"14":0.033312,"15":0.016656,"16":0.16656,"17":0.04164,"18":0.008328,"19":0.008328,"20":0.008328,"21":0.049968,"22":0.008328,"23":0.274824,"24":0.16656,"25":0.033312,"26":0.033312,"27":0.024984,"28":0.04164,"29":0.33312,"30":0.058296,"31":0.158232,"32":0.233184,"33":0.349776,"34":0.33312,"35":19.1544,"36":1.007688,"37":null,"38":null,"39":null},"chrome":{"4":0.04164,"5":null,"6":null,"7":null,"8":0.024984,"9":null,"10":null,"11":0.066624,"12":0.024984,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.008328,"19":null,"20":null,"21":null,"22":null,"23":0.049968,"24":0.024984,"25":0.058296,"26":0.016656,"27":0.033312,"28":0.049968,"29":0.04164,"30":0.016656,"31":0.149904,"32":0.108264,"33":0.066624,"34":0.08328,"35":0.174888,"36":0.424728,"37":0.216528,"38":0.308136,"39":1.382448,"40":29.281248,"41":0.266496,"42":0.241512,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.016656,"11.6":null,"12":0.008328,"12.1":0.133248,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.66624,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.199872,"5":0.699552,"5.1":1.632288,"6":0.283152,"6.1":0.882768,"7":0.949392,"7.1":1.91544,"8":2.62332},"android":{"2.1":0,"2.2":0,"2.3":0.0940258821083,"3":0,"4":0.190031256472,"4.1":0.612157979832,"4.2-4.3":1.03626419545,"4.4":1.9359434253,"4.4.3-4.4.4":0.891761260838,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0322305323828,"6.0-6.1":0.0989533888945,"7.0-7.1":1.25246717944,"8":0.269153217793,"8.1":3.97849168149},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":6.65472636816e-5,"12.1":0.00039928358209,"0":null},"ie":{"5.5":null,"6":0.0422192616372,"7":0.0337754093098,"8":1.97586144462,"9":1.1061446549,"10":1.78165284109,"11":10.8334625361,"0":null},"ie_mob":{"10":0.0620986666667,"11":0.131853333333},"bb":{"7":0.00209,"10":null},"and_uc":{"0":0.028424},"op_mini":{"5.0-8.0":0.0463501691542},"and_chr":{"0":6.142712},"and_ff":{"0":0.17556}},"total":98.6619421477}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NE.json
new file mode 100644
index 0000000..e851836
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NE.json
@@ -0,0 +1 @@
+{"id":"NE","name":"Niger","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.006825,"3":0.147875,"3.5":0.0182,"3.6":0.1729,"4":0.02275,"5":0.015925,"6":0.020475,"7":0.061425,"8":0.0728,"9":0.02275,"10":0.025025,"11":0.1092,"12":0.14105,"13":0.020475,"14":0.0273,"15":0.20475,"16":0.106925,"17":0.025025,"18":0.034125,"19":0.0273,"20":0.0273,"21":0.02275,"22":0.029575,"23":0.056875,"24":0.05005,"25":0.13195,"26":0.02275,"27":0.0728,"28":0.02275,"29":0.10465,"30":0.21385,"31":0.1638,"32":0.111475,"33":0.3003,"34":0.288925,"35":6.21985,"36":0.316225,"37":0.14105,"38":null,"39":null},"chrome":{"4":null,"5":0.006825,"6":0.00455,"7":0.01365,"8":0.002275,"9":null,"10":0.006825,"11":0.047775,"12":0.01365,"13":0.02275,"14":0.00455,"15":0.002275,"16":null,"17":null,"18":null,"19":null,"20":0.006825,"21":0.01365,"22":null,"23":0.00455,"24":0.0091,"25":0.0091,"26":0.011375,"27":0.00455,"28":0.00455,"29":0.0091,"30":0.029575,"31":0.31395,"32":0.015925,"33":0.020475,"34":0.05005,"35":0.047775,"36":0.211575,"37":0.025025,"38":0.084175,"39":0.2275,"40":4.2679,"41":0.1638,"42":0.03185,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.00455,"11.5":null,"11.6":0.0637,"12":0.002275,"12.1":0.025025,"15":0.002275,"16":null,"17":null,"18":0.0091,"19":0.01365,"20":0.006825,"21":0.00455,"22":0.025025,"23":null,"24":null,"25":0.00455,"26":0.029575,"27":0.370825,"28":0.00455,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.0182,"5":0.015925,"5.1":0.03185,"6":0.006825,"6.1":0.015925,"7":0.0091,"7.1":0.091,"8":0.047775},"android":{"2.1":0,"2.2":0,"2.3":0.370790362824,"3":0,"4":0.749386838549,"4.1":2.4140404148,"4.2-4.3":4.08650010396,"4.4":7.63437841771,"4.4.3-4.4.4":3.51665386215,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00769319710814,"6.0-6.1":0.0236194648057,"7.0-7.1":0.298954940255,"8":0.0642449442715,"8.1":0.94963745356},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0488206823028,"12.1":0.292924093817,"0":null},"ie":{"5.5":null,"6":0.0300460858586,"7":0.0300460858586,"8":1.21339962121,"9":1.54159532828,"10":0.70492739899,"11":2.39906439394,"0":null},"ie_mob":{"10":0.321536184211,"11":0.682713815789},"bb":{"7":0.04635,"10":null},"and_uc":{"0":10.560075},"op_mini":{"5.0-8.0":34.0036052239},"and_chr":{"0":5.167675},"and_ff":{"0":0.208575}},"total":93.4378539141}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NF.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NF.json
new file mode 100644
index 0000000..a793e02
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NF.json
@@ -0,0 +1 @@
+{"id":"NF","name":"Norfolk Island","month":"2014-10","access_date":"2014-11-01","data":{"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":null,"33":null,"34":null,"35":null,"36":null,"37":70.827953,"38":null,"39":null,"40":null,"41":null},"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":null,"33":null,"34":null,"35":null,"36":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":null,"5.1":null,"6":null,"6.1":null,"7":null,"7.1":null,"8":null},"android":{"2.1":0,"2.2":0,"2.3":0,"3":0,"4":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0293661971831,"6.0-6.1":0.131728370221,"7.0-7.1":1.82196277666,"8":1.60129678068,"8.1":0.585645875252},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0,"12.1":0,"0":null},"ie":{"5.5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":25.002047},"bb":{"7":0,"10":null},"and_ff":{"0":null},"ie_mob":{"10":0},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0},"and_chr":{"0":0}},"total":100}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NG.json
new file mode 100644
index 0000000..a8d951f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NG.json
@@ -0,0 +1 @@
+{"id":"NG","name":"Nigeria","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007041,"3":0.053981,"3.5":0.011735,"3.6":0.09388,"4":0.063369,"5":0.018776,"6":0.02347,"7":0.103268,"8":0.035205,"9":0.018776,"10":0.079798,"11":0.103268,"12":0.100921,"13":0.119697,"14":0.063369,"15":0.089186,"16":0.063369,"17":0.042246,"18":0.061022,"19":0.07041,"20":0.039899,"21":0.056328,"22":0.051634,"23":0.04694,"24":0.086839,"25":0.044593,"26":0.051634,"27":0.058675,"28":0.049287,"29":0.171331,"30":0.213577,"31":0.180719,"32":0.157249,"33":0.283987,"34":0.361438,"35":5.348813,"36":1.091355,"37":0.039899,"38":0.004694,"39":null},"chrome":{"4":0.007041,"5":0.007041,"6":0.009388,"7":0.002347,"8":0.004694,"9":0.009388,"10":0.007041,"11":0.044593,"12":0.014082,"13":0.004694,"14":0.004694,"15":0.072757,"16":0.007041,"17":0.004694,"18":0.004694,"19":0.007041,"20":0.004694,"21":0.032858,"22":0.016429,"23":0.009388,"24":0.009388,"25":0.011735,"26":0.107962,"27":0.014082,"28":0.014082,"29":0.021123,"30":0.02347,"31":0.075104,"32":0.018776,"33":0.077451,"34":0.030511,"35":0.058675,"36":0.25817,"37":0.084492,"38":0.110309,"39":0.443583,"40":6.423739,"41":0.072757,"42":0.122044,"43":null},"opera":{"9":null,"9.5-9.6":0.007041,"10.0-10.1":0.004694,"10.5":null,"10.6":0.007041,"11":0.004694,"11.1":0.004694,"11.5":0.016429,"11.6":0.009388,"12":0.014082,"12.1":0.091533,"15":0.009388,"16":0.007041,"17":0.007041,"18":0.011735,"19":0.014082,"20":0.014082,"21":0.011735,"22":0.009388,"23":0.002347,"24":0.004694,"25":0.016429,"26":0.063369,"27":0.476441,"28":0.002347,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.009388,"5":0.016429,"5.1":0.068063,"6":0.02347,"6.1":0.044593,"7":0.063369,"7.1":0.098574,"8":0.206536},"android":{"2.1":0,"2.2":0,"2.3":0.0751297213848,"3":0,"4":0.151841121114,"4.1":0.489134028173,"4.2-4.3":0.828008613577,"4.4":1.54688142135,"4.4.3-4.4.4":0.712546094397,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00635124460287,"6.0-6.1":0.0194994351843,"7.0-7.1":0.246807136761,"8":0.0530384637012,"8.1":0.783988719751},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.070710021322,"12.1":0.424260127932,"0":null},"ie":{"5.5":null,"6":0.0500693333333,"7":0.0214582857143,"8":0.689049396825,"9":0.534072888889,"10":0.731965968254,"11":1.7047415873,"0":null},"ie_mob":{"10":0.343042368421,"11":0.728377631579},"bb":{"7":0.95853825,"10":null},"and_uc":{"0":8.158098},"op_mini":{"5.0-8.0":49.2495298507},"and_chr":{"0":3.259168},"and_ff":{"0":0.321426}},"total":91.3116007103}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NI.json
new file mode 100644
index 0000000..a00f447
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NI.json
@@ -0,0 +1 @@
+{"id":"NI","name":"Nicaragua","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.020436,"3.5":0.013624,"3.6":0.115804,"4":0.013624,"5":0.006812,"6":null,"7":0.006812,"8":0.013624,"9":0.013624,"10":0.027248,"11":0.027248,"12":0.061308,"13":0.027248,"14":0.047684,"15":0.027248,"16":0.040872,"17":0.03406,"18":0.027248,"19":0.020436,"20":0.06812,"21":0.095368,"22":0.040872,"23":0.040872,"24":0.054496,"25":0.054496,"26":0.081744,"27":0.074932,"28":0.061308,"29":0.143052,"30":0.197548,"31":0.231608,"32":0.252044,"33":0.320164,"34":0.44278,"35":10.83108,"36":0.57902,"37":0.020436,"38":null,"39":null},"chrome":{"4":0.013624,"5":0.013624,"6":0.020436,"7":null,"8":null,"9":null,"10":null,"11":0.088556,"12":0.013624,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.081744,"19":null,"20":0.013624,"21":0.027248,"22":0.040872,"23":0.020436,"24":0.027248,"25":0.040872,"26":0.047684,"27":0.074932,"28":0.047684,"29":0.061308,"30":0.074932,"31":0.177112,"32":0.10218,"33":0.183924,"34":0.20436,"35":0.44278,"36":0.640328,"37":0.728884,"38":0.91962,"39":3.058588,"40":35.83112,"41":0.217984,"42":0.108992,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.03406,"11.6":0.006812,"12":0.013624,"12.1":0.06812,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.006812,"21":null,"22":null,"23":null,"24":0.006812,"25":0.006812,"26":0.03406,"27":0.790192,"28":0.013624,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.040872,"5":0.047684,"5.1":0.108992,"6":0.061308,"6.1":0.061308,"7":0.177112,"7.1":0.224796,"8":0.524524},"android":{"2.1":0,"2.2":0,"2.3":0.175689655889,"3":0,"4":0.355078041376,"4.1":1.14383212808,"4.2-4.3":1.93628494438,"4.4":3.61735754652,"4.4.3-4.4.4":1.66627768375,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0137942861733,"6.0-6.1":0.0423508786023,"7.0-7.1":0.536041120594,"8":0.115194389798,"8.1":1.70274732483},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00989254299929,"12.1":0.0593552579957,"0":null},"ie":{"5.5":null,"6":0.0419766486486,"7":0.0769571891892,"8":1.44819437838,"9":0.776568,"10":1.25230335135,"11":3.61698789189,"0":null},"ie_mob":{"10":0.335816649123,"11":0.713035350877},"bb":{"7":0.132302,"10":null},"and_uc":{"0":1.552556},"op_mini":{"5.0-8.0":6.890156199},"and_chr":{"0":8.071992},"and_ff":{"0":0.121144}},"total":96.0906294595}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NL.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NL.json
new file mode 100644
index 0000000..0643244
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NL.json
@@ -0,0 +1 @@
+{"id":"NL","name":"Netherlands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.014216,"3.5":null,"3.6":0.078188,"4":0.007108,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.014216,"11":0.007108,"12":0.021324,"13":0.007108,"14":null,"15":0.014216,"16":0.03554,"17":0.056864,"18":0.007108,"19":0.014216,"20":0.014216,"21":0.021324,"22":0.007108,"23":0.014216,"24":0.056864,"25":0.014216,"26":0.03554,"27":0.14216,"28":0.028432,"29":0.028432,"30":0.063972,"31":0.3554,"32":0.135052,"33":0.113728,"34":0.21324,"35":9.84458,"36":0.561532,"37":0.014216,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.07108,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.021324,"19":null,"20":null,"21":0.014216,"22":0.028432,"23":0.007108,"24":0.03554,"25":0.007108,"26":0.021324,"27":0.056864,"28":0.021324,"29":0.03554,"30":0.03554,"31":0.163484,"32":0.056864,"33":0.10662,"34":0.10662,"35":0.277212,"36":0.305644,"37":0.369616,"38":0.597072,"39":1.556652,"40":28.311164,"41":0.163484,"42":0.085296,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.007108,"12.1":0.120836,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.007108,"25":0.007108,"26":0.014216,"27":0.42648,"28":0.014216,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.042648,"5":0.135052,"5.1":0.525992,"6":0.078188,"6.1":0.3554,"7":0.3554,"7.1":0.95958,"8":2.693932},"android":{"2.1":0,"2.2":0,"2.3":0.0918561014658,"3":0,"4":0.185646015594,"4.1":0.598031565859,"4.2-4.3":1.01235092879,"4.4":1.89126878387,"4.4.3-4.4.4":0.871182604429,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0677815222412,"6.0-6.1":0.208101164776,"7.0-7.1":2.6339661713,"8":0.56603516819,"8.1":8.36685597349},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000119215351812,"12.1":0.000715292110874,"0":null},"ie":{"5.5":null,"6":0.0214986002136,"7":0.0573296005696,"8":1.24691881239,"9":2.39351082378,"10":1.48340341474,"11":14.9128623482,"0":null},"ie_mob":{"10":0.128706684211,"11":0.273281315789},"bb":{"7":0.016629,"10":null},"and_uc":{"0":0.078084},"op_mini":{"5.0-8.0":0.0830334925373},"and_chr":{"0":11.703052},"and_ff":{"0":0.133032}},"total":99.1650845999}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NO.json
new file mode 100644
index 0000000..510a27c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NO.json
@@ -0,0 +1 @@
+{"id":"NO","name":"Norway","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.023721,"4":0.007907,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.015814,"11":null,"12":0.015814,"13":null,"14":null,"15":0.015814,"16":0.023721,"17":0.015814,"18":null,"19":0.007907,"20":0.007907,"21":0.023721,"22":null,"23":0.015814,"24":0.023721,"25":null,"26":0.023721,"27":0.015814,"28":0.023721,"29":0.023721,"30":0.142326,"31":0.23721,"32":0.071163,"33":0.102791,"34":0.221396,"35":9.124678,"36":0.498141,"37":0.007907,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.023721,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.023721,"19":null,"20":null,"21":0.007907,"22":0.023721,"23":null,"24":0.015814,"25":null,"26":0.015814,"27":0.023721,"28":0.023721,"29":0.023721,"30":0.023721,"31":0.205582,"32":0.086977,"33":0.150233,"34":0.110698,"35":0.355815,"36":0.379536,"37":0.31628,"38":0.498141,"39":3.755825,"40":31.968001,"41":0.292559,"42":0.118605,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.798607,"15":null,"16":null,"17":0.007907,"18":null,"19":null,"20":0.007907,"21":null,"22":0.007907,"23":null,"24":0.015814,"25":0.015814,"26":0.039535,"27":1.510237,"28":0.015814,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.031628,"5":0.110698,"5.1":0.466513,"6":0.15814,"6.1":0.521862,"7":0.782793,"7.1":1.763261,"8":3.463266},"android":{"2.1":0,"2.2":0,"2.3":0.0396884499428,"3":0,"4":0.0802124462002,"4.1":0.258392697786,"4.2-4.3":0.437408495686,"4.4":0.817164295665,"4.4.3-4.4.4":0.376413614721,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0620523325635,"6.0-6.1":0.190511547344,"7.0-7.1":2.41133187067,"8":0.518191408776,"8.1":7.65965284065},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000163631840796,"12.1":0.000981791044776,"0":null},"ie":{"5.5":null,"6":0.0158465123355,"7":0.0396162808388,"8":0.927020971628,"9":2.37697685033,"10":1.75103961308,"11":14.1509355156,"0":null},"ie_mob":{"10":0.0931476798246,"11":0.197779320175},"bb":{"7":0.0052325,"10":null},"and_uc":{"0":0.014651},"op_mini":{"5.0-8.0":0.113969577114},"and_chr":{"0":7.556196},"and_ff":{"0":0.092092}},"total":99.0384702438}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NP.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NP.json
new file mode 100644
index 0000000..47fcf06
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NP.json
@@ -0,0 +1 @@
+{"id":"NP","name":"Nepal","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.005171,"3":0.031026,"3.5":0.020684,"3.6":0.072394,"4":0.05171,"5":0.036197,"6":0.036197,"7":0.020684,"8":0.041368,"9":0.056881,"10":0.05171,"11":0.098249,"12":0.134446,"13":0.072394,"14":0.10342,"15":0.113762,"16":0.087907,"17":0.046539,"18":0.020684,"19":0.046539,"20":0.036197,"21":0.072394,"22":0.056881,"23":0.05171,"24":0.041368,"25":0.046539,"26":0.056881,"27":0.046539,"28":0.05171,"29":0.160301,"30":0.191327,"31":0.25855,"32":0.191327,"33":0.289576,"34":0.41368,"35":9.126815,"36":2.17182,"37":0.082736,"38":0.005171,"39":null},"chrome":{"4":0.05171,"5":0.082736,"6":0.062052,"7":0.036197,"8":0.05171,"9":0.046539,"10":0.05171,"11":0.134446,"12":0.284405,"13":0.020684,"14":0.056881,"15":0.041368,"16":0.046539,"17":0.062052,"18":0.031026,"19":0.025855,"20":0.046539,"21":0.010342,"22":0.025855,"23":0.025855,"24":0.015513,"25":0.046539,"26":0.020684,"27":0.062052,"28":0.046539,"29":0.046539,"30":0.093078,"31":0.134446,"32":0.191327,"33":0.382654,"34":0.087907,"35":0.139617,"36":0.899754,"37":0.222353,"38":0.41368,"39":1.727114,"40":24.996614,"41":0.418851,"42":0.67223,"43":null},"opera":{"9":null,"9.5-9.6":0.010342,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.020684,"11.1":0.005171,"11.5":0.015513,"11.6":0.020684,"12":0.020684,"12.1":0.093078,"15":0.010342,"16":0.010342,"17":0.005171,"18":0.015513,"19":0.005171,"20":0.031026,"21":0.010342,"22":0.010342,"23":null,"24":0.010342,"25":0.005171,"26":0.046539,"27":0.77565,"28":0.010342,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.010342,"5":0.025855,"5.1":0.15513,"6":0.025855,"6.1":0.046539,"7":0.082736,"7.1":0.129275,"8":0.305089},"android":{"2.1":0,"2.2":0,"2.3":0.149182413972,"3":0,"4":0.301505510344,"4.1":0.97125603202,"4.2-4.3":1.6441472361,"4.4":3.07158738663,"4.4.3-4.4.4":1.41487742094,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0174399681695,"6.0-6.1":0.0535437619239,"7.0-7.1":0.677711043779,"8":0.145639032433,"8.1":2.15276519369},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0271892949538,"12.1":0.163135769723,"0":null},"ie":{"5.5":null,"6":0.0589705061224,"7":0.0268047755102,"8":0.696924163265,"9":0.187633428571,"10":0.487846914286,"11":1.16868821224,"0":null},"ie_mob":{"10":0.180896881579,"11":0.384096118421},"bb":{"7":0.02052325,"10":null},"and_uc":{"0":7.393199},"op_mini":{"5.0-8.0":18.9373439353},"and_chr":{"0":7.583377},"and_ff":{"0":0.130383}},"total":96.27141325}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NR.json
new file mode 100644
index 0000000..74c6251
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NR.json
@@ -0,0 +1 @@
+{"id":"NR","name":"Nauru","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.124831,"3.5":null,"3.6":null,"4":null,"5":null,"6":null,"7":null,"8":null,"9":0.491981,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":0.124831,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.124831,"27":0.124831,"28":null,"29":null,"30":3.443867,"31":0.491981,"32":7.254884,"33":0.124831,"34":0.491981,"35":8.121358,"36":1.351112,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":2.827055,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":null,"33":null,"34":null,"35":null,"36":0.36715,"37":null,"38":0.491981,"39":0.491981,"40":21.896826,"41":0.124831,"42":null,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":null,"5.1":null,"6":null,"6.1":null,"7":null,"7.1":0.124831,"8":1.108793},"android":{"2.1":0,"2.2":0,"2.3":0,"3":0,"4":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.000699533487298,"6.0-6.1":0.00214769053118,"7.0-7.1":0.0271836258661,"8":0.0058417182448,"8.1":0.0863494318707},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0,"12.1":0,"0":null},"ie":{"5.5":null,"6":null,"7":null,"8":7.379715,"9":2.709567,"10":1.725605,"11":11.932375,"0":null},"ie_mob":{"10":0,"11":0},"bb":{"7":0,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0},"and_chr":{"0":26.447778},"and_ff":{"0":null}},"total":100.022029}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NU.json
new file mode 100644
index 0000000..6e5d54d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NU.json
@@ -0,0 +1 @@
+{"id":"NU","name":"Niue","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.04437,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":0.692172,"29":1.703808,"30":null,"31":null,"32":12.06864,"33":0.04437,"34":1.37547,"35":18.023094,"36":1.135872,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":0.04437,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":null,"33":0.079866,"34":null,"35":0.04437,"36":null,"37":0.283968,"38":null,"39":6.682122,"40":37.466028,"41":0.124236,"42":0.04437,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.079866,"5.1":0.204102,"6":0.4437,"6.1":null,"7":null,"7.1":0.079866,"8":3.23901},"android":{"2.1":0,"2.2":0,"2.3":0.127198550785,"3":0,"4":0.257074965797,"4.1":0.828129512215,"4.2-4.3":1.40186192286,"4.4":2.61895121406,"4.4.3-4.4.4":1.20637783429,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00625772888844,"6.0-6.1":0.0192123255347,"7.0-7.1":0.243173148911,"8":0.0522575254544,"8.1":0.772445271212},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0,"12.1":0,"0":null},"ie":{"5.5":null,"6":0.04437,"7":0.124236,"8":0.159732,"9":null,"10":0.204102,"11":4.295016,"0":null},"ie_mob":{"10":0.168722210526,"11":0.358245789474},"bb":{"7":0,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0},"and_chr":{"0":3.16339},"and_ff":{"0":0.081072}},"total":100.035496}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NZ.json
new file mode 100644
index 0000000..e3a9a0e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/NZ.json
@@ -0,0 +1 @@
+{"id":"NZ","name":"New Zealand","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.0156,"3.5":null,"3.6":0.039,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.0156,"11":0.0156,"12":0.0312,"13":null,"14":null,"15":0.0156,"16":0.039,"17":0.0156,"18":0.0156,"19":0.0156,"20":0.0546,"21":0.0234,"22":0.0156,"23":0.0156,"24":0.0312,"25":0.0156,"26":0.0312,"27":0.1248,"28":0.0312,"29":0.0234,"30":0.0702,"31":0.1794,"32":0.156,"33":0.117,"34":0.2808,"35":10.2726,"36":0.6318,"37":0.0156,"38":0.0156,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.039,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.0078,"19":null,"20":0.0234,"21":0.039,"22":0.0624,"23":0.0156,"24":0.0156,"25":0.0234,"26":0.0624,"27":0.0312,"28":0.0312,"29":0.0312,"30":0.0936,"31":0.702,"32":0.0936,"33":0.2106,"34":0.2028,"35":0.3042,"36":0.4602,"37":0.3432,"38":0.7644,"39":2.379,"40":34.3278,"41":0.2184,"42":0.1248,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.117,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.0078,"27":0.312,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.0702,"5":0.2496,"5.1":0.8034,"6":0.1872,"6.1":0.5694,"7":0.7332,"7.1":1.3962,"8":3.0498},"android":{"2.1":0,"2.2":0,"2.3":0.0787851127976,"3":0,"4":0.159228859549,"4.1":0.512932550161,"4.2-4.3":0.868294874727,"4.4":1.62214400665,"4.4.3-4.4.4":0.747214596112,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0520411888744,"6.0-6.1":0.159775579877,"7.0-7.1":2.02230233959,"8":0.434589577267,"8.1":6.42389131439},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000190760483298,"12.1":0.00114456289979,"0":null},"ie":{"5.5":null,"6":0.0235827232796,"7":0.0628872620791,"8":1.21057979502,"9":1.55645973646,"10":1.3913806735,"11":11.8621098097,"0":null},"ie_mob":{"10":0.154260526316,"11":0.327539473684},"bb":{"7":0.00825,"10":null},"and_uc":{"0":0.2486},"op_mini":{"5.0-8.0":0.132864676617},"and_chr":{"0":8.1016},"and_ff":{"0":0.1386}},"total":98.72785}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/OM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/OM.json
new file mode 100644
index 0000000..99deee8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/OM.json
@@ -0,0 +1 @@
+{"id":"OM","name":"Oman","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.016445,"3.5":null,"3.6":0.019734,"4":0.013156,"5":0.003289,"6":0.016445,"7":null,"8":0.009867,"9":0.009867,"10":0.016445,"11":0.026312,"12":0.029601,"13":0.013156,"14":0.013156,"15":0.009867,"16":0.023023,"17":0.003289,"18":0.009867,"19":0.009867,"20":0.013156,"21":0.013156,"22":0.003289,"23":0.016445,"24":0.006578,"25":0.009867,"26":0.006578,"27":0.016445,"28":0.013156,"29":0.03289,"30":0.023023,"31":0.029601,"32":0.042757,"33":0.052624,"34":0.121693,"35":2.864719,"36":0.358501,"37":0.009867,"38":0.003289,"39":null},"chrome":{"4":0.009867,"5":0.023023,"6":0.016445,"7":0.023023,"8":0.006578,"9":0.019734,"10":0.023023,"11":0.075647,"12":0.03289,"13":0.023023,"14":0.026312,"15":0.009867,"16":null,"17":0.003289,"18":0.013156,"19":0.009867,"20":0.016445,"21":0.013156,"22":0.03289,"23":0.006578,"24":0.003289,"25":0.016445,"26":0.019734,"27":0.016445,"28":0.019734,"29":0.049335,"30":0.049335,"31":0.095381,"32":0.039468,"33":0.171028,"34":0.075647,"35":0.128271,"36":0.483483,"37":0.151294,"38":0.276276,"39":0.957099,"40":15.19518,"41":0.157872,"42":0.157872,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.023023,"12.1":0.042757,"15":null,"16":null,"17":0.003289,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.009867,"27":0.289432,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.013156,"5":0.023023,"5.1":0.075647,"6":0.039468,"6.1":0.062491,"7":0.078936,"7.1":0.138138,"8":0.381524},"android":{"2.1":0,"2.2":0,"2.3":0.399932064664,"3":0,"4":0.808283751741,"4.1":2.60376823152,"4.2-4.3":4.40767233371,"4.4":8.23439072086,"4.4.3-4.4.4":3.79303989749,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0264646152224,"6.0-6.1":0.0812510116478,"7.0-7.1":1.02840566171,"8":0.221002751682,"8.1":3.26675495973},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000372038379531,"12.1":0.00223223027719,"0":null},"ie":{"5.5":null,"6":0.0368209075123,"7":0.0334735522839,"8":1.7807929815,"9":1.45944687958,"10":1.21174259268,"11":4.34486708645,"0":null},"ie_mob":{"10":0.184787973684,"11":0.392358026316},"bb":{"7":0.09227625,"10":null},"and_uc":{"0":18.851199},"op_mini":{"5.0-8.0":0.259124731343},"and_chr":{"0":16.102277},"and_ff":{"0":0.167775}},"total":93.30028425}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PA.json
new file mode 100644
index 0000000..79605cb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PA.json
@@ -0,0 +1 @@
+{"id":"PA","name":"Panama","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.006615,"3":0.019845,"3.5":null,"3.6":0.046305,"4":null,"5":null,"6":null,"7":null,"8":0.01323,"9":null,"10":null,"11":0.01323,"12":0.019845,"13":0.006615,"14":0.006615,"15":0.006615,"16":0.033075,"17":0.006615,"18":null,"19":null,"20":0.02646,"21":0.01323,"22":0.01323,"23":0.033075,"24":0.01323,"25":0.01323,"26":0.033075,"27":0.019845,"28":0.01323,"29":0.019845,"30":0.03969,"31":0.19845,"32":0.125685,"33":0.165375,"34":0.152145,"35":6.793605,"36":0.38367,"37":0.01323,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.06615,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.02646,"19":null,"20":0.019845,"21":0.072765,"22":0.06615,"23":null,"24":null,"25":0.03969,"26":0.06615,"27":0.03969,"28":0.02646,"29":0.085995,"30":0.05292,"31":0.191835,"32":0.178605,"33":0.09261,"34":0.191835,"35":0.390285,"36":0.58212,"37":0.681345,"38":0.72765,"39":2.216025,"40":32.73102,"41":0.14553,"42":0.059535,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.072765,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.006615,"22":null,"23":null,"24":null,"25":null,"26":0.019845,"27":0.62181,"28":0.006615,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.059535,"5":0.178605,"5.1":0.377055,"6":0.205065,"6.1":0.3969,"7":0.535815,"7.1":0.82026,"8":2.017575},"android":{"2.1":0,"2.2":0,"2.3":0.303354979728,"3":0,"4":0.613096380081,"4.1":1.97500057854,"4.2-4.3":3.34329119763,"4.4":6.24591937208,"4.4.3-4.4.4":2.87708249194,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0195482985239,"6.0-6.1":0.0600167059946,"7.0-7.1":0.759640021589,"8":0.163245440305,"8.1":2.41301453359},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000822793176972,"12.1":0.00493675906183,"0":null},"ie":{"5.5":null,"6":0.0272111408677,"7":0.0680278521693,"8":1.68028794858,"9":1.0068122121,"10":1.39457096947,"11":8.51028430637,"0":null},"ie_mob":{"10":0.0964576535088,"11":0.204807346491},"bb":{"7":0.12778375,"10":null},"and_uc":{"0":0.280955},"op_mini":{"5.0-8.0":0.573075447761},"and_chr":{"0":13.16574},"and_ff":{"0":0.152325}},"total":98.3853431796}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PE.json
new file mode 100644
index 0000000..08a99b3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PE.json
@@ -0,0 +1 @@
+{"id":"PE","name":"Peru","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008658,"3":0.051948,"3.5":null,"3.6":0.04329,"4":0.008658,"5":null,"6":null,"7":null,"8":0.017316,"9":null,"10":0.008658,"11":0.008658,"12":0.034632,"13":0.017316,"14":0.034632,"15":0.008658,"16":0.025974,"17":0.017316,"18":0.017316,"19":0.017316,"20":0.025974,"21":0.025974,"22":0.017316,"23":0.017316,"24":0.017316,"25":0.017316,"26":0.025974,"27":0.034632,"28":0.025974,"29":0.069264,"30":0.112554,"31":0.147186,"32":0.112554,"33":0.164502,"34":0.225108,"35":5.792202,"36":0.30303,"37":0.008658,"38":null,"39":null},"chrome":{"4":0.008658,"5":null,"6":null,"7":null,"8":0.008658,"9":null,"10":null,"11":0.077922,"12":0.025974,"13":0.051948,"14":0.008658,"15":0.008658,"16":0.025974,"17":0.008658,"18":0.051948,"19":null,"20":0.025974,"21":0.025974,"22":0.155844,"23":0.051948,"24":0.034632,"25":0.077922,"26":0.138528,"27":0.08658,"28":0.060606,"29":0.12987,"30":0.138528,"31":0.277056,"32":0.12987,"33":0.320346,"34":0.354978,"35":0.640692,"36":0.831168,"37":0.943722,"38":1.108224,"39":4.060602,"40":52.874406,"41":0.268398,"42":0.08658,"43":0.008658},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.008658,"12.1":0.025974,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.017316,"27":0.502164,"28":0.008658,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.034632,"5":0.025974,"5.1":0.08658,"6":0.051948,"6.1":0.060606,"7":0.103896,"7.1":0.164502,"8":0.34632},"android":{"2.1":0,"2.2":0,"2.3":0.0606501964861,"3":0,"4":0.122577239214,"4.1":0.394864700281,"4.2-4.3":0.668429007589,"4.4":1.24875562449,"4.4.3-4.4.4":0.575219231937,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00687439803193,"6.0-6.1":0.0211056079928,"7.0-7.1":0.267136695451,"8":0.0574072537403,"8.1":0.848566044784},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00133341577825,"12.1":0.00800049466951,"0":null},"ie":{"5.5":null,"6":0.0803932105263,"7":0.0982583684211,"8":3.21572842105,"9":1.85797642105,"10":1.84011126316,"11":6.14561431579,"0":null},"ie_mob":{"10":0.26339104386,"11":0.55925495614},"bb":{"7":0.050996,"10":null},"and_uc":{"0":0.155672},"op_mini":{"5.0-8.0":0.928724089552},"and_chr":{"0":7.148828},"and_ff":{"0":0.108702}},"total":98.743156}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PF.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PF.json
new file mode 100644
index 0000000..ac0c887
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PF.json
@@ -0,0 +1 @@
+{"id":"PF","name":"French Polynesia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.016022,"3":0.032044,"3.5":0.032044,"3.6":0.152209,"4":0.024033,"5":0.048066,"6":0.016022,"7":0.072099,"8":null,"9":0.072099,"10":0.072099,"11":0.048066,"12":0.120165,"13":0.064088,"14":0.032044,"15":0.032044,"16":0.128176,"17":0.112154,"18":0.016022,"19":0.024033,"20":0.048066,"21":0.016022,"22":0.104143,"23":0.024033,"24":0.096132,"25":0.064088,"26":0.112154,"27":0.032044,"28":0.056077,"29":0.056077,"30":0.40055,"31":0.368506,"32":0.176242,"33":0.648891,"34":0.424583,"35":21.717821,"36":1.321815,"37":0.048066,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":0.032044,"8":0.016022,"9":null,"10":null,"11":0.048066,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.016022,"19":null,"20":null,"21":null,"22":0.08011,"23":0.200275,"24":0.024033,"25":0.016022,"26":0.056077,"27":0.016022,"28":0.088121,"29":0.008011,"30":0.016022,"31":0.16022,"32":0.176242,"33":0.096132,"34":0.152209,"35":0.336462,"36":0.536737,"37":0.352484,"38":0.576792,"39":1.369881,"40":27.629939,"41":0.192264,"42":0.136187,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.008011,"12":null,"12.1":0.192264,"15":null,"16":null,"17":null,"18":0.048066,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.424583,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.032044,"5":0.48066,"5.1":1.337837,"6":0.176242,"6.1":0.64088,"7":0.696957,"7.1":1.706343,"8":2.683685},"android":{"2.1":0,"2.2":0,"2.3":0.0964910032228,"3":0,"4":0.195013395987,"4.1":0.628207215719,"4.2-4.3":1.06343242499,"4.4":1.98669897162,"4.4.3-4.4.4":0.91514098846,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0367019331258,"6.0-6.1":0.112681373632,"7.0-7.1":1.4262242434,"8":0.306493336279,"8.1":4.53043511357},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":4.80639658849e-5,"12.1":0.000288383795309,"0":null},"ie":{"5.5":null,"6":0.024033,"7":0.064088,"8":1.017397,"9":0.624858,"10":1.68231,"11":7.578406,"0":null},"ie_mob":{"10":0.245179144737,"11":0.520585855263},"bb":{"7":0.001989,"10":null},"and_uc":{"0":0.025857},"op_mini":{"5.0-8.0":0.0334765522388},"and_chr":{"0":7.820895},"and_ff":{"0":0.173043}},"total":98.698781}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PG.json
new file mode 100644
index 0000000..88f409c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PG.json
@@ -0,0 +1 @@
+{"id":"PG","name":"Papua New Guinea","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.001213,"3":0.023047,"3.5":0.004852,"3.6":0.016982,"4":0.010917,"5":0.004852,"6":0.004852,"7":0.02426,"8":0.082484,"9":0.003639,"10":0.035177,"11":0.019408,"12":0.018195,"13":0.006065,"14":0.008491,"15":0.033964,"16":0.008491,"17":0.002426,"18":0.009704,"19":0.019408,"20":0.02426,"21":0.006065,"22":0.01213,"23":0.004852,"24":0.023047,"25":0.014556,"26":0.013343,"27":0.013343,"28":0.015769,"29":0.038816,"30":0.032751,"31":0.075206,"32":0.225618,"33":0.073993,"34":0.105531,"35":1.187527,"36":0.090975,"37":0.013343,"38":0.004852,"39":0.001213},"chrome":{"4":0.002426,"5":null,"6":null,"7":null,"8":0.008491,"9":0.002426,"10":0.014556,"11":0.046094,"12":0.008491,"13":0.002426,"14":0.002426,"15":0.001213,"16":null,"17":null,"18":0.006065,"19":null,"20":0.003639,"21":0.009704,"22":0.007278,"23":0.008491,"24":0.002426,"25":0.007278,"26":0.015769,"27":0.003639,"28":0.029112,"29":0.008491,"30":0.013343,"31":0.058224,"32":0.010917,"33":0.032751,"34":0.014556,"35":0.023047,"36":0.126152,"37":0.031538,"38":0.053372,"39":0.190441,"40":3.055547,"41":0.014556,"42":0.026686,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.001213,"11.5":0.003639,"11.6":0.003639,"12":0.002426,"12.1":0.033964,"15":null,"16":null,"17":0.002426,"18":null,"19":0.021834,"20":0.002426,"21":0.003639,"22":null,"23":null,"24":0.020621,"25":0.002426,"26":0.016982,"27":0.164968,"28":0.002426,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.004852,"5":0.008491,"5.1":0.059437,"6":0.023047,"6.1":0.047307,"7":0.082484,"7.1":0.054585,"8":0.105531},"android":{"2.1":0,"2.2":0,"2.3":0.770632415012,"3":0,"4":1.55748867034,"4.1":5.01722261774,"4.2-4.3":8.49318040545,"4.4":15.8669158291,"4.4.3-4.4.4":7.30884006238,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00663855688322,"6.0-6.1":0.0203815342906,"7.0-7.1":0.257971991164,"8":0.0554377732704,"8.1":0.819454144392},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00781899360341,"12.1":0.0469139616205,"0":null},"ie":{"5.5":null,"6":0.018232295754,"7":0.0352491051245,"8":0.679456888433,"9":0.84354755022,"10":0.55669276369,"11":2.00555253294,"0":null},"ie_mob":{"10":0.461394578947,"11":0.979673421053},"bb":{"7":0.035148,"10":null},"and_uc":{"0":24.946293},"op_mini":{"5.0-8.0":5.44592904478},"and_chr":{"0":5.283662},"and_ff":{"0":0.08787}},"total":88.4331491362}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PH.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PH.json
new file mode 100644
index 0000000..a18e8e9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PH.json
@@ -0,0 +1 @@
+{"id":"PH","name":"Philippines","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.022839,"3.5":0.015226,"3.6":0.091356,"4":0.038065,"5":0.022839,"6":0.022839,"7":0.015226,"8":0.022839,"9":0.07613,"10":0.038065,"11":0.060904,"12":0.091356,"13":0.060904,"14":0.053291,"15":0.045678,"16":0.068517,"17":0.045678,"18":0.053291,"19":0.053291,"20":0.068517,"21":0.068517,"22":0.060904,"23":0.068517,"24":0.060904,"25":0.068517,"26":0.083743,"27":0.083743,"28":0.07613,"29":0.197938,"30":0.258842,"31":0.296907,"32":0.289294,"33":0.395876,"34":0.45678,"35":8.039328,"36":1.210467,"37":0.053291,"38":0.007613,"39":null},"chrome":{"4":0.022839,"5":0.038065,"6":0.068517,"7":0.053291,"8":0.038065,"9":0.022839,"10":0.083743,"11":0.098969,"12":0.106582,"13":0.053291,"14":0.060904,"15":0.038065,"16":0.083743,"17":0.030452,"18":0.15226,"19":0.022839,"20":0.030452,"21":0.045678,"22":0.121808,"23":0.091356,"24":0.07613,"25":0.114195,"26":0.205551,"27":0.15226,"28":0.175099,"29":0.167486,"30":0.175099,"31":0.395876,"32":0.197938,"33":0.822204,"34":0.327359,"35":0.83743,"36":1.385566,"37":0.982077,"38":1.271371,"39":4.278506,"40":42.084664,"41":0.487232,"42":0.677557,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.07613,"15":null,"16":0.030452,"17":null,"18":null,"19":null,"20":0.015226,"21":null,"22":null,"23":null,"24":0.007613,"25":0.015226,"26":0.030452,"27":0.525297,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.022839,"5":0.083743,"5.1":0.167486,"6":0.053291,"6.1":0.091356,"7":0.159873,"7.1":0.190325,"8":0.53291},"android":{"2.1":0,"2.2":0,"2.3":0.138477763801,"3":0,"4":0.279870848945,"4.1":0.901563125377,"4.2-4.3":1.52617072315,"4.4":2.85118427363,"4.4.3-4.4.4":1.3133522651,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0254931312381,"6.0-6.1":0.0782683853801,"7.0-7.1":0.990654134953,"8":0.212890008234,"8.1":3.14683634019},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00215797014925,"12.1":0.0129478208955,"0":null},"ie":{"5.5":null,"6":0.0233108801653,"7":0.139865280992,"8":0.986827260331,"9":0.473987896694,"10":0.419595842975,"11":1.70946454545,"0":null},"ie_mob":{"10":0.10699622807,"11":0.22718377193},"bb":{"7":0.0393855,"10":null},"and_uc":{"0":1.004927},"op_mini":{"5.0-8.0":1.50302620896},"and_chr":{"0":9.800107},"and_ff":{"0":0.11935}},"total":98.8576332066}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PK.json
new file mode 100644
index 0000000..ef87573
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PK.json
@@ -0,0 +1 @@
+{"id":"PK","name":"Pakistan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.010412,"3":0.083296,"3.5":0.031236,"3.6":0.114532,"4":0.036442,"5":0.02603,"6":0.020824,"7":0.020824,"8":0.031236,"9":0.031236,"10":0.05206,"11":0.062472,"12":0.109326,"13":0.057266,"14":0.072884,"15":0.067678,"16":0.083296,"17":0.067678,"18":0.062472,"19":0.046854,"20":0.031236,"21":0.036442,"22":0.02603,"23":0.041648,"24":0.046854,"25":0.046854,"26":0.057266,"27":0.062472,"28":0.046854,"29":0.177004,"30":0.135356,"31":0.150974,"32":0.161386,"33":0.203034,"34":0.249888,"35":5.565214,"36":1.785658,"37":0.062472,"38":0.010412,"39":null},"chrome":{"4":0.015618,"5":0.046854,"6":0.015618,"7":0.015618,"8":0.036442,"9":0.015618,"10":0.083296,"11":0.083296,"12":0.083296,"13":0.093708,"14":0.114532,"15":0.072884,"16":0.145768,"17":0.046854,"18":0.020824,"19":0.015618,"20":0.02603,"21":0.020824,"22":0.041648,"23":0.057266,"24":0.036442,"25":0.07809,"26":0.041648,"27":0.062472,"28":0.067678,"29":0.07809,"30":0.36442,"31":0.150974,"32":0.07809,"33":0.70281,"34":0.177004,"35":0.239476,"36":0.640338,"37":0.41648,"38":0.655956,"39":2.389554,"40":25.702022,"41":0.723634,"42":1.40562,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.046854,"10.5":null,"10.6":null,"11":0.010412,"11.1":0.005206,"11.5":0.015618,"11.6":0.046854,"12":0.02603,"12.1":0.15618,"15":0.015618,"16":0.010412,"17":0.015618,"18":0.020824,"19":0.015618,"20":0.031236,"21":0.015618,"22":0.015618,"23":0.010412,"24":0.015618,"25":0.02603,"26":0.124944,"27":1.671126,"28":0.010412,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.010412,"5":0.015618,"5.1":0.041648,"6":0.010412,"6.1":0.015618,"7":0.036442,"7.1":0.02603,"8":0.083296},"android":{"2.1":0,"2.2":0,"2.3":0.184747672315,"3":0,"4":0.373384769311,"4.1":1.20280458239,"4.2-4.3":2.03611382015,"4.4":3.80385733735,"4.4.3-4.4.4":1.75218581848,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0111948251833,"6.0-6.1":0.034370077317,"7.0-7.1":0.435026978612,"8":0.0934866103022,"8.1":1.38187350859},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0128044434968,"12.1":0.0768266609808,"0":null},"ie":{"5.5":null,"6":0.129697304348,"7":0.0270202717391,"8":0.875456804348,"9":0.156717576087,"10":0.42151623913,"11":1.37262980435,"0":null},"ie_mob":{"10":0.208749263158,"11":0.443234736842},"bb":{"7":0.052734,"10":null},"and_uc":{"0":14.50185},"op_mini":{"5.0-8.0":8.91829489552},"and_chr":{"0":7.683324},"and_ff":{"0":0.129438}},"total":93.912592}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PL.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PL.json
new file mode 100644
index 0000000..20d593f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PL.json
@@ -0,0 +1 @@
+{"id":"PL","name":"Poland","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.010752,"3.5":0.005376,"3.6":0.032256,"4":0.010752,"5":0.005376,"6":0.005376,"7":null,"8":0.005376,"9":0.010752,"10":0.016128,"11":0.021504,"12":0.05376,"13":0.010752,"14":0.016128,"15":0.016128,"16":0.021504,"17":0.021504,"18":0.016128,"19":0.010752,"20":0.021504,"21":0.021504,"22":0.05376,"23":0.021504,"24":0.032256,"25":0.016128,"26":0.032256,"27":0.02688,"28":0.043008,"29":0.037632,"30":0.069888,"31":0.204288,"32":0.172032,"33":0.177408,"34":0.311808,"35":15.552768,"36":0.849408,"37":0.016128,"38":0.005376,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.010752,"11":0.069888,"12":0.005376,"13":null,"14":0.005376,"15":null,"16":null,"17":null,"18":0.032256,"19":null,"20":null,"21":null,"22":0.032256,"23":0.010752,"24":0.010752,"25":0.005376,"26":0.032256,"27":0.016128,"28":0.02688,"29":0.016128,"30":0.02688,"31":0.129024,"32":0.059136,"33":0.102144,"34":0.166656,"35":0.327936,"36":0.231168,"37":0.317184,"38":0.365568,"39":1.311744,"40":21.3696,"41":0.059136,"42":0.037632,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.010752,"11.6":0.016128,"12":0.02688,"12.1":0.666624,"15":0.010752,"16":0.010752,"17":0.010752,"18":0.032256,"19":0.021504,"20":0.059136,"21":0.02688,"22":0.010752,"23":0.016128,"24":0.016128,"25":0.02688,"26":0.10752,"27":3.273984,"28":0.043008,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.021504,"5.1":0.069888,"6":0.010752,"6.1":0.02688,"7":0.069888,"7.1":0.096768,"8":0.333312},"android":{"2.1":0,"2.2":0,"2.3":0.335202744568,"3":0,"4":0.677462389022,"4.1":2.18234628964,"4.2-4.3":3.69428709013,"4.4":6.90164808816,"4.4.3-4.4.4":3.17913339848,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00317583693142,"6.0-6.1":0.00975037654383,"7.0-7.1":0.123411908826,"8":0.0265210241992,"8.1":0.392020853499},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.004068594172,"12.1":0.024411565032,"0":null},"ie":{"5.5":null,"6":0.0270891828794,"7":0.043342692607,"8":0.552619330739,"9":0.390084233463,"10":0.346741540856,"11":2.81727501946,"0":null},"ie_mob":{"10":0.657338105263,"11":1.39571789474},"bb":{"7":0.015028,"10":null},"and_uc":{"0":0.083232},"op_mini":{"5.0-8.0":2.8337758408},"and_chr":{"0":22.939584},"and_ff":{"0":0.291312}},"total":97.696212}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PM.json
new file mode 100644
index 0000000..40a0fd3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PM.json
@@ -0,0 +1 @@
+{"id":"PM","name":"Saint Pierre and Miquelon","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.09553,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":0.019106,"13":null,"14":null,"15":null,"16":0.019106,"17":null,"18":null,"19":null,"20":0.076424,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.047765,"27":null,"28":null,"29":0.019106,"30":null,"31":0.305696,"32":0.028659,"33":0.09553,"34":0.391673,"35":21.58978,"36":1.127254,"37":0.047765,"38":null,"39":null},"chrome":{"4":0.019106,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.028659,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":0.038212,"24":null,"25":0.028659,"26":null,"27":null,"28":0.085977,"29":null,"30":0.133742,"31":0.105083,"32":0.152848,"33":0.038212,"34":0.057318,"35":0.28659,"36":0.105083,"37":0.372567,"38":2.063448,"39":0.840664,"40":43.580786,"41":0.277037,"42":0.019106,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.038212,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":1.490268,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.009553,"5":2.139872,"5.1":1.767305,"6":0.133742,"6.1":0.257931,"7":0.487203,"7.1":1.700434,"8":2.330932},"android":{"2.1":0,"2.2":0,"2.3":0.00800826593201,"3":0,"4":0.0161851269363,"4.1":0.0521380260942,"4.2-4.3":0.0882595203244,"4.4":0.164885980663,"4.4.3-4.4.4":0.0759520800499,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00953767567025,"6.0-6.1":0.0292823375841,"7.0-7.1":0.370630729993,"8":0.0796479582287,"8.1":1.17731729852},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":4.44776119403e-6,"12.1":2.66865671642e-5,"0":null},"ie":{"5.5":null,"6":null,"7":0.038212,"8":0.429885,"9":0.964853,"10":0.554074,"11":9.982885,"0":null},"ie_mob":{"10":0.0150274342105,"11":0.0319075657895},"bb":{"7":0,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0.00309786567164},"and_chr":{"0":2.353506},"and_ff":{"0":0.023691}},"total":98.920958}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PR.json
new file mode 100644
index 0000000..1972688
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PR.json
@@ -0,0 +1 @@
+{"id":"PR","name":"Puerto Rico","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.019308,"3.5":null,"3.6":0.051488,"4":0.006436,"5":0.006436,"6":null,"7":null,"8":0.012872,"9":null,"10":0.006436,"11":0.019308,"12":0.025744,"13":0.025744,"14":0.012872,"15":0.012872,"16":0.025744,"17":0.019308,"18":0.012872,"19":0.006436,"20":0.012872,"21":0.019308,"22":0.012872,"23":0.025744,"24":0.03218,"25":null,"26":0.03218,"27":0.03218,"28":0.019308,"29":0.019308,"30":0.057924,"31":0.09654,"32":0.070796,"33":0.09654,"34":0.205952,"35":8.070744,"36":0.4827,"37":0.057924,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.083668,"12":0.012872,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.03218,"19":null,"20":0.006436,"21":0.045052,"22":0.019308,"23":null,"24":0.006436,"25":0.012872,"26":0.012872,"27":0.019308,"28":0.045052,"29":0.025744,"30":0.025744,"31":0.167336,"32":0.083668,"33":0.167336,"34":0.186644,"35":0.399032,"36":0.61142,"37":0.38616,"38":0.572804,"39":1.853568,"40":26.220264,"41":0.141592,"42":0.154464,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.045052,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.012872,"27":0.559932,"28":0.006436,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.090104,"5":0.22526,"5.1":0.604984,"6":0.141592,"6.1":0.45052,"7":0.392596,"7.1":0.823808,"8":2.194676},"android":{"2.1":0,"2.2":0,"2.3":0.182824048238,"3":0,"4":0.369497023807,"4.1":1.19028077721,"4.2-4.3":2.01491345795,"4.4":3.76425093003,"4.4.3-4.4.4":1.73394176276,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0517508259865,"6.0-6.1":0.158884114871,"7.0-7.1":2.01101893965,"8":0.432164792449,"8.1":6.38804932704},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000162115138593,"12.1":0.000972690831557,"0":null},"ie":{"5.5":null,"6":0.0325424456959,"7":0.0846103588093,"8":1.28868084956,"9":1.50346099115,"10":1.48393552373,"11":11.7803653419,"0":null},"ie_mob":{"10":0.385693578947,"11":0.818938421053},"bb":{"7":0.00891,"10":null},"and_uc":{"0":0.042768},"op_mini":{"5.0-8.0":0.11291319403},"and_chr":{"0":16.592572},"and_ff":{"0":0.149688}},"total":99.0324015109}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PS.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PS.json
new file mode 100644
index 0000000..b3d5be5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PS.json
@@ -0,0 +1 @@
+{"id":"PS","name":"Palestinian Territory","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.032012,"3.5":0.032012,"3.6":0.08003,"4":0.024009,"5":0.016006,"6":0.016006,"7":0.016006,"8":0.040015,"9":0.032012,"10":0.032012,"11":0.064024,"12":0.248093,"13":0.040015,"14":0.032012,"15":0.032012,"16":0.088033,"17":0.072027,"18":0.032012,"19":0.064024,"20":0.048018,"21":0.040015,"22":0.088033,"23":0.048018,"24":0.032012,"25":0.08003,"26":0.096036,"27":0.088033,"28":0.040015,"29":0.16006,"30":0.176066,"31":0.336126,"32":0.344129,"33":0.368138,"34":0.464174,"35":13.789169,"36":1.224459,"37":0.040015,"38":null,"39":null},"chrome":{"4":0.016006,"5":0.032012,"6":0.016006,"7":0.040015,"8":0.024009,"9":0.008003,"10":0.08003,"11":0.168063,"12":0.072027,"13":0.048018,"14":0.032012,"15":0.088033,"16":0.040015,"17":0.016006,"18":0.032012,"19":null,"20":0.016006,"21":0.008003,"22":0.096036,"23":0.024009,"24":0.056021,"25":0.040015,"26":0.064024,"27":0.144054,"28":0.08003,"29":0.056021,"30":0.176066,"31":0.128048,"32":0.120045,"33":0.72027,"34":0.120045,"35":0.208078,"36":1.056396,"37":0.704264,"38":1.048393,"39":2.921095,"40":39.966982,"41":0.192072,"42":0.168063,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.008003,"12":0.016006,"12.1":3.289233,"15":null,"16":null,"17":null,"18":0.016006,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.040015,"27":0.944354,"28":0.016006,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.016006,"5":0.024009,"5.1":0.056021,"6":0.016006,"6.1":0.032012,"7":0.104039,"7.1":0.144054,"8":0.272102},"android":{"2.1":0,"2.2":0,"2.3":0.126226842707,"3":0,"4":0.255111092629,"4.1":0.821803181204,"4.2-4.3":1.39115267699,"4.4":2.59894425616,"4.4.3-4.4.4":1.19716195031,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0124698703685,"6.0-6.1":0.0382846897279,"7.0-7.1":0.484574787127,"8":0.10413435606,"8.1":1.53926329672},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00151016915423,"12.1":0.00906101492537,"0":null},"ie":{"5.5":null,"6":0.0993072992701,"7":0.0744804744526,"8":2.38337518248,"9":0.571016970803,"10":0.59584379562,"11":3.0702506691,"0":null},"ie_mob":{"10":0.0524300087719,"11":0.111323991228},"bb":{"7":0.00549175,"10":null},"and_uc":{"0":0.191712},"op_mini":{"5.0-8.0":1.05183281592},"and_chr":{"0":9.298317},"and_ff":{"0":0.151772}},"total":98.5119451417}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PT.json
new file mode 100644
index 0000000..80d4355
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PT.json
@@ -0,0 +1 @@
+{"id":"PT","name":"Portugal","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.01822,"3.5":null,"3.6":0.04555,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.01822,"11":0.00911,"12":0.01822,"13":null,"14":null,"15":null,"16":0.03644,"17":0.00911,"18":null,"19":0.00911,"20":0.01822,"21":0.00911,"22":0.01822,"23":0.01822,"24":0.01822,"25":0.00911,"26":0.03644,"27":0.00911,"28":0.03644,"29":0.02733,"30":0.06377,"31":0.38262,"32":0.2733,"33":0.11843,"34":0.21864,"35":11.77012,"36":0.62859,"37":0.02733,"38":0.00911,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.11843,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.10932,"19":null,"20":null,"21":0.02733,"22":0.10021,"23":0.01822,"24":0.00911,"25":0.01822,"26":0.03644,"27":0.02733,"28":0.03644,"29":0.02733,"30":0.03644,"31":0.21864,"32":0.13665,"33":0.19131,"34":0.21864,"35":0.64681,"36":0.94744,"37":0.97477,"38":1.10231,"39":3.48913,"40":46.63409,"41":0.20953,"42":0.11843,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.06377,"12":null,"12.1":0.11843,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.00911,"26":0.00911,"27":1.04765,"28":0.01822,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.05466,"5":0.13665,"5.1":0.38262,"6":0.04555,"6.1":0.19131,"7":0.26419,"7.1":0.4555,"8":1.51226},"android":{"2.1":0,"2.2":0,"2.3":0.0463227466473,"3":0,"4":0.0936207090134,"4.1":0.301585461067,"4.2-4.3":0.510525428839,"4.4":0.953760973074,"4.4.3-4.4.4":0.43933468136,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0110741058339,"6.0-6.1":0.0339994477357,"7.0-7.1":0.430335867055,"8":0.0924784978411,"8.1":1.36697208153},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000144221748401,"12.1":0.000865330490405,"0":null},"ie":{"5.5":null,"6":0.01843864,"7":0.08297388,"8":1.69635488,"9":1.62260032,"10":1.18929228,"11":11.51493068,"0":null},"ie_mob":{"10":0.115692192982,"11":0.245647807018},"bb":{"7":0.00979,"10":null},"and_uc":{"0":0.04984},"op_mini":{"5.0-8.0":0.100450447761},"and_chr":{"0":4.40187},"and_ff":{"0":0.05518}},"total":99.00199068}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PW.json
new file mode 100644
index 0000000..f593971
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PW.json
@@ -0,0 +1 @@
+{"id":"PW","name":"Palau","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.08624,"3.5":null,"3.6":0.2156,"4":null,"5":0.137984,"6":0.155232,"7":null,"8":0.008624,"9":0.077616,"10":0.155232,"11":0.896896,"12":0.275968,"13":null,"14":0.060368,"15":null,"16":null,"17":null,"18":0.017248,"19":0.034496,"20":0.077616,"21":null,"22":0.04312,"23":0.120736,"24":0.284592,"25":0.120736,"26":0.04312,"27":1.560944,"28":0.077616,"29":0.2156,"30":0.30184,"31":0.206976,"32":0.275968,"33":2.061136,"34":0.888272,"35":7.692608,"36":1.267728,"37":0.034496,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":5.010544,"9":null,"10":0.206976,"11":0.060368,"12":null,"13":null,"14":0.120736,"15":null,"16":0.025872,"17":null,"18":0.698544,"19":0.51744,"20":0.094864,"21":0.2156,"22":0.146608,"23":null,"24":null,"25":0.068992,"26":null,"27":0.017248,"28":0.025872,"29":0.198352,"30":0.060368,"31":0.491568,"32":0.224224,"33":1.276352,"34":0.068992,"35":0.327712,"36":1.009008,"37":0.120736,"38":0.845152,"39":0.810656,"40":23.233056,"41":0.017248,"42":3.803184,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.051744,"11.5":0.38808,"11.6":null,"12":0.163856,"12.1":0.379456,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.155232,"28":null,"29":null},"safari":{"3.1":0.008624,"3.2":null,"4":0.04312,"5":0.500192,"5.1":1.052128,"6":0.396704,"6.1":0.319088,"7":0.319088,"7.1":0.08624,"8":0.396704},"android":{"2.1":0,"2.2":0,"2.3":0.109316111862,"3":0,"4":0.220933615553,"4.1":0.711705423017,"4.2-4.3":1.20477862231,"4.4":2.25076120844,"4.4.3-4.4.4":1.03677701882,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0116163470228,"6.0-6.1":0.0356642233156,"7.0-7.1":0.451407169395,"8":0.0970066874184,"8.1":1.43390557285},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00071587206823,"12.1":0.00429523240938,"0":null},"ie":{"5.5":null,"6":0.103671164602,"7":0.302374230088,"8":1.80560611681,"9":4.73431651681,"10":1.53778894159,"11":11.0409790301,"0":null},"ie_mob":{"10":0.198693192982,"11":0.421882807018},"bb":{"7":0.006192,"10":null},"and_uc":{"0":0.79808},"op_mini":{"5.0-8.0":0.498604895522},"and_chr":{"0":6.368464},"and_ff":{"0":0.297216}},"total":97.033888}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PY.json
new file mode 100644
index 0000000..9d3ba4f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/PY.json
@@ -0,0 +1 @@
+{"id":"PY","name":"Paraguay","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.005384,"3":0.02692,"3.5":0.043072,"3.6":0.10768,"4":0.043072,"5":0.010768,"6":0.010768,"7":0.010768,"8":0.016152,"9":0.016152,"10":0.032304,"11":0.037688,"12":0.08076,"13":0.010768,"14":0.037688,"15":0.032304,"16":0.032304,"17":0.048456,"18":0.016152,"19":0.032304,"20":0.048456,"21":0.032304,"22":0.048456,"23":0.032304,"24":0.064608,"25":0.016152,"26":0.032304,"27":0.02692,"28":0.043072,"29":0.08076,"30":0.086144,"31":0.113064,"32":0.1346,"33":0.150752,"34":0.258432,"35":8.39904,"36":0.506096,"37":0.016152,"38":null,"39":null},"chrome":{"4":0.010768,"5":null,"6":0.010768,"7":0.010768,"8":0.005384,"9":0.010768,"10":0.02692,"11":0.059224,"12":0.02692,"13":0.02692,"14":null,"15":null,"16":null,"17":null,"18":0.037688,"19":0.005384,"20":null,"21":0.021536,"22":0.021536,"23":0.005384,"24":0.010768,"25":0.016152,"26":0.02692,"27":0.02692,"28":0.021536,"29":0.059224,"30":0.059224,"31":0.113064,"32":0.064608,"33":0.177672,"34":0.156136,"35":0.301504,"36":0.360728,"37":0.45764,"38":0.613776,"39":1.862864,"40":30.301152,"41":0.145368,"42":0.059224,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.048456,"15":null,"16":0.005384,"17":null,"18":null,"19":null,"20":0.005384,"21":0.010768,"22":null,"23":null,"24":null,"25":null,"26":0.016152,"27":0.425336,"28":0.010768,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.016152,"5":0.032304,"5.1":0.043072,"6":0.010768,"6.1":0.037688,"7":0.059224,"7.1":0.123832,"8":0.29612},"android":{"2.1":0,"2.2":0,"2.3":0.302345840524,"3":0,"4":0.611056856638,"4.1":1.9684305512,"4.2-4.3":3.33216942135,"4.4":6.225141727,"4.4.3-4.4.4":2.86751160329,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0121001401747,"6.0-6.1":0.037149553168,"7.0-7.1":0.470207201526,"8":0.101046784617,"8.1":1.49362432051},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00671239232409,"12.1":0.0402743539446,"0":null},"ie":{"5.5":null,"6":0.149077769376,"7":0.0883423818526,"8":1.52390608696,"9":0.662567863894,"10":0.800602835539,"11":2.60610026465,"0":null},"ie_mob":{"10":0.750788350877,"11":1.59413964912},"bb":{"7":0.105014,"10":null},"and_uc":{"0":0.812416},"op_mini":{"5.0-8.0":4.67518125373},"and_chr":{"0":15.207248},"and_ff":{"0":0.175408}},"total":93.6154992023}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/QA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/QA.json
new file mode 100644
index 0000000..91f4c41
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/QA.json
@@ -0,0 +1 @@
+{"id":"QA","name":"Qatar","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.02174,"3.5":null,"3.6":0.016305,"4":0.005435,"5":0.005435,"6":0.016305,"7":null,"8":null,"9":null,"10":null,"11":0.02174,"12":0.02174,"13":0.005435,"14":0.005435,"15":0.01087,"16":0.01087,"17":0.016305,"18":0.03261,"19":0.005435,"20":0.01087,"21":0.005435,"22":0.01087,"23":0.01087,"24":0.01087,"25":0.005435,"26":0.01087,"27":0.016305,"28":0.01087,"29":0.02174,"30":0.03261,"31":0.09783,"32":0.06522,"33":0.04348,"34":0.125005,"35":4.092555,"36":0.548935,"37":0.016305,"38":0.005435,"39":null},"chrome":{"4":null,"5":0.016305,"6":0.005435,"7":null,"8":null,"9":0.01087,"10":0.027175,"11":0.06522,"12":0.016305,"13":0.02174,"14":0.016305,"15":0.005435,"16":0.01087,"17":null,"18":0.01087,"19":0.016305,"20":null,"21":0.01087,"22":0.1087,"23":0.005435,"24":0.005435,"25":0.016305,"26":0.048915,"27":0.027175,"28":0.05435,"29":0.059785,"30":0.114135,"31":0.11957,"32":0.04348,"33":0.33697,"34":0.08696,"35":0.20653,"36":0.809815,"37":0.266315,"38":0.5435,"39":1.635935,"40":27.16413,"41":0.222835,"42":0.36958,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.005435,"12":null,"12.1":0.048915,"15":0.005435,"16":null,"17":0.01087,"18":0.016305,"19":null,"20":0.02174,"21":0.005435,"22":null,"23":null,"24":null,"25":0.027175,"26":0.42393,"27":0.30436,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.038045,"5":0.05435,"5.1":0.20653,"6":0.08696,"6.1":0.135875,"7":0.23914,"7.1":0.35871,"8":0.85873},"android":{"2.1":0,"2.2":0,"2.3":0.15897058426,"3":0,"4":0.321287917663,"4.1":1.03498217226,"4.2-4.3":1.75202317601,"4.4":3.27312066119,"4.4.3-4.4.4":1.50771048862,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0383030956923,"6.0-6.1":0.117597223617,"7.0-7.1":1.48844485892,"8":0.319864448238,"8.1":4.72808037353},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0125302274343,"12.1":0.0751813646055,"0":null},"ie":{"5.5":null,"6":0.0110882357967,"7":0.083161768475,"8":2.13448539086,"9":1.58007360103,"10":1.29177947031,"11":7.86710329774,"0":null},"ie_mob":{"10":0.204624122807,"11":0.434475877193},"bb":{"7":0.10043,"10":null},"and_uc":{"0":9.81475},"op_mini":{"5.0-8.0":8.72730340796},"and_chr":{"0":10.48995},"and_ff":{"0":0.10043}},"total":98.3324217642}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RE.json
new file mode 100644
index 0000000..2fe8095
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RE.json
@@ -0,0 +1 @@
+{"id":"RE","name":"Reunion","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.020007,"3.5":0.026676,"3.6":0.153387,"4":0.080028,"5":0.013338,"6":0.026676,"7":0.060021,"8":null,"9":0.013338,"10":0.046683,"11":0.053352,"12":0.033345,"13":0.020007,"14":0.120042,"15":0.146718,"16":0.153387,"17":0.040014,"18":0.033345,"19":0.013338,"20":0.080028,"21":0.053352,"22":0.033345,"23":0.273429,"24":0.300105,"25":0.213408,"26":0.093366,"27":0.020007,"28":0.06669,"29":0.093366,"30":0.346788,"31":0.26676,"32":0.46683,"33":0.380133,"34":0.460161,"35":16.199001,"36":0.853632,"37":0.026676,"38":null,"39":null},"chrome":{"4":0.020007,"5":0.013338,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.080028,"12":0.013338,"13":null,"14":0.006669,"15":null,"16":0.006669,"17":null,"18":0.026676,"19":null,"20":null,"21":0.013338,"22":0.080028,"23":0.113373,"24":0.033345,"25":0.026676,"26":0.053352,"27":0.026676,"28":0.100035,"29":0.086697,"30":0.13338,"31":0.206739,"32":0.093366,"33":0.146718,"34":0.233415,"35":0.353457,"36":0.566865,"37":0.386802,"38":0.480168,"39":1.520532,"40":22.367826,"41":0.180063,"42":0.100035,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.006669,"12.1":0.106704,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.013338,"21":null,"22":null,"23":null,"24":0.006669,"25":0.006669,"26":0.020007,"27":0.546858,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.080028,"5":0.393471,"5.1":0.886977,"6":0.173394,"6.1":0.460161,"7":0.446823,"7.1":1.047033,"8":1.86732},"android":{"2.1":0,"2.2":0,"2.3":0.166660814014,"3":0,"4":0.336830276744,"4.1":1.08504961545,"4.2-4.3":1.83677760287,"4.4":3.43145844433,"4.4.3-4.4.4":1.5806462466,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0378056291796,"6.0-6.1":0.116069914148,"7.0-7.1":1.46911348479,"8":0.315710166483,"8.1":4.6666738054},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000407201137171,"12.1":0.00244320682303,"0":null},"ie":{"5.5":null,"6":0.00682386067416,"7":0.0272954426966,"8":1.00993137978,"9":0.552732714607,"10":0.791567838202,"11":6.72150276404,"0":null},"ie_mob":{"10":0.25382804386,"11":0.53894995614},"bb":{"7":0.0049965,"10":null},"and_uc":{"0":0.03331},"op_mini":{"5.0-8.0":0.28361559204},"and_chr":{"0":18.095728},"and_ff":{"0":0.239832}},"total":98.4182715}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RO.json
new file mode 100644
index 0000000..1eb89f2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RO.json
@@ -0,0 +1 @@
+{"id":"RO","name":"Romania","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007316,"3":0.080476,"3.5":0.014632,"3.6":0.065844,"4":0.021948,"5":0.007316,"6":0.007316,"7":0.007316,"8":0.014632,"9":0.014632,"10":0.029264,"11":0.029264,"12":0.051212,"13":0.021948,"14":0.021948,"15":0.021948,"16":0.029264,"17":0.03658,"18":0.021948,"19":0.021948,"20":0.021948,"21":0.021948,"22":0.021948,"23":0.021948,"24":0.051212,"25":0.021948,"26":0.043896,"27":0.029264,"28":0.043896,"29":0.051212,"30":0.080476,"31":0.460908,"32":0.25606,"33":0.160952,"34":0.307272,"35":13.980876,"36":0.95108,"37":0.029264,"38":0.014632,"39":null},"chrome":{"4":0.021948,"5":0.007316,"6":null,"7":null,"8":0.014632,"9":null,"10":0.014632,"11":0.080476,"12":0.014632,"13":null,"14":0.021948,"15":0.014632,"16":0.014632,"17":null,"18":0.080476,"19":null,"20":0.007316,"21":0.021948,"22":0.058528,"23":0.014632,"24":0.014632,"25":0.014632,"26":0.051212,"27":0.021948,"28":0.03658,"29":0.153636,"30":0.131688,"31":0.131688,"32":0.058528,"33":0.278008,"34":0.248744,"35":0.263376,"36":0.614544,"37":0.58528,"38":0.577964,"39":2.055796,"40":34.49494,"41":0.160952,"42":0.153636,"43":null},"opera":{"9":null,"9.5-9.6":0.007316,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.014632,"11.1":null,"11.5":null,"11.6":0.014632,"12":0.043896,"12.1":0.453592,"15":0.014632,"16":0.014632,"17":0.014632,"18":0.029264,"19":0.029264,"20":0.051212,"21":0.021948,"22":0.007316,"23":null,"24":0.014632,"25":0.014632,"26":0.131688,"27":2.70692,"28":0.03658,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.07316,"5":0.03658,"5.1":0.102424,"6":0.014632,"6.1":0.03658,"7":0.131688,"7.1":0.102424,"8":0.409696},"android":{"2.1":0,"2.2":0,"2.3":0.149080727726,"3":0,"4":0.301299997089,"4.1":0.97059400104,"4.2-4.3":1.64302654663,"4.4":3.06949372035,"4.4.3-4.4.4":1.41391300717,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0314609322221,"6.0-6.1":0.0965905813837,"7.0-7.1":1.22256078723,"8":0.262726381364,"8.1":3.8834933178},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00162909452736,"12.1":0.00977456716418,"0":null},"ie":{"5.5":null,"6":0.128109714286,"7":0.112096,"8":2.85044114286,"9":0.928795428571,"10":1.01687085714,"11":4.876176,"0":null},"ie_mob":{"10":0.226868631579,"11":0.481707368421},"bb":{"7":0.095282,"10":null},"and_uc":{"0":1.32858},"op_mini":{"5.0-8.0":1.13466433831},"and_chr":{"0":9.583564},"and_ff":{"0":0.171776}},"total":98.0522031429}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RS.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RS.json
new file mode 100644
index 0000000..58d6705
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RS.json
@@ -0,0 +1 @@
+{"id":"RS","name":"Serbia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.008867,"3":0.044335,"3.5":0.017734,"3.6":0.097537,"4":0.026601,"5":0.008867,"6":0.017734,"7":0.017734,"8":0.026601,"9":0.026601,"10":0.044335,"11":0.035468,"12":0.08867,"13":0.035468,"14":0.026601,"15":0.035468,"16":0.062069,"17":0.044335,"18":0.044335,"19":0.044335,"20":0.035468,"21":0.035468,"22":0.035468,"23":0.035468,"24":0.062069,"25":0.035468,"26":0.079803,"27":0.053202,"28":0.070936,"29":0.070936,"30":0.133005,"31":0.203941,"32":0.150739,"33":0.230542,"34":0.469951,"35":21.316268,"36":1.835469,"37":0.053202,"38":0.008867,"39":null},"chrome":{"4":0.017734,"5":0.008867,"6":0.017734,"7":null,"8":0.008867,"9":null,"10":0.017734,"11":0.070936,"12":0.035468,"13":null,"14":0.008867,"15":null,"16":0.008867,"17":0.008867,"18":0.070936,"19":null,"20":null,"21":0.008867,"22":0.08867,"23":0.017734,"24":0.017734,"25":0.017734,"26":0.070936,"27":0.053202,"28":0.035468,"29":0.035468,"30":0.053202,"31":0.159606,"32":0.08867,"33":0.186207,"34":0.390148,"35":0.186207,"36":0.399015,"37":0.336946,"38":0.602956,"39":2.190149,"40":42.765541,"41":0.257143,"42":0.257143,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.008867,"11.1":null,"11.5":null,"11.6":0.026601,"12":0.044335,"12.1":1.170444,"15":0.026601,"16":0.017734,"17":0.026601,"18":0.062069,"19":0.044335,"20":0.08867,"21":0.035468,"22":0.017734,"23":0.008867,"24":0.008867,"25":0.026601,"26":0.115271,"27":3.662071,"28":0.062069,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.017734,"5":0.044335,"5.1":0.124138,"6":0.017734,"6.1":0.062069,"7":0.062069,"7.1":0.106404,"8":0.425616},"android":{"2.1":0,"2.2":0,"2.3":0.0646548528953,"3":0,"4":0.130670860588,"4.1":0.420937121218,"4.2-4.3":0.712564536646,"4.4":1.33120939224,"4.4.3-4.4.4":0.613200236407,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00513587227633,"6.0-6.1":0.0157680289186,"7.0-7.1":0.199578194598,"8":0.0428890386585,"8.1":0.633964865549},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0018633702914,"12.1":0.0111802217484,"0":null},"ie":{"5.5":null,"6":0.0444996101485,"7":0.0622994542079,"8":1.75328463985,"9":1.1391900198,"10":0.622994542079,"11":3.56886873391,"0":null},"ie_mob":{"10":0.201331118421,"11":0.427483881579},"bb":{"7":0.0243595,"10":null},"and_uc":{"0":0.039655},"op_mini":{"5.0-8.0":1.29783740796},"and_chr":{"0":4.886926},"and_ff":{"0":0.074778}},"total":98.8040165}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RU.json
new file mode 100644
index 0000000..6f19b0c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RU.json
@@ -0,0 +1 @@
+{"id":"RU","name":"Russian Federation","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.017566,"3":0.052698,"3.5":0.070264,"3.6":0.298622,"4":0.026349,"5":0.017566,"6":0.017566,"7":0.017566,"8":0.035132,"9":0.035132,"10":0.035132,"11":0.035132,"12":0.079047,"13":0.035132,"14":0.035132,"15":0.043915,"16":0.043915,"17":0.043915,"18":0.026349,"19":0.035132,"20":0.043915,"21":0.079047,"22":0.035132,"23":0.043915,"24":0.210792,"25":0.939781,"26":0.105396,"27":0.210792,"28":0.079047,"29":0.070264,"30":0.08783,"31":0.342537,"32":0.245924,"33":0.228358,"34":0.324971,"35":10.135582,"36":0.649942,"37":0.017566,"38":null,"39":null},"chrome":{"4":0.017566,"5":0.017566,"6":0.008783,"7":null,"8":0.026349,"9":0.008783,"10":0.017566,"11":0.070264,"12":0.043915,"13":0.017566,"14":0.017566,"15":0.043915,"16":0.026349,"17":0.140528,"18":0.079047,"19":0.017566,"20":0.017566,"21":0.043915,"22":0.070264,"23":0.017566,"24":0.149311,"25":0.026349,"26":0.079047,"27":0.140528,"28":0.360103,"29":0.079047,"30":0.061481,"31":1.870779,"32":0.096613,"33":0.219575,"34":0.140528,"35":0.404018,"36":0.307405,"37":0.395235,"38":0.430367,"39":1.686336,"40":30.538491,"41":0.114179,"42":0.597244,"43":null},"opera":{"9":null,"9.5-9.6":0.026349,"10.0-10.1":0.035132,"10.5":0.017566,"10.6":0.035132,"11":0.017566,"11.1":0.026349,"11.5":0.070264,"11.6":0.140528,"12":0.237141,"12.1":3.996265,"15":0.026349,"16":0.210792,"17":0.061481,"18":0.421584,"19":0.061481,"20":0.122962,"21":0.043915,"22":0.043915,"23":0.026349,"24":0.052698,"25":0.079047,"26":0.166877,"27":5.717733,"28":0.061481,"29":0.008783},"safari":{"3.1":null,"3.2":null,"4":0.035132,"5":0.043915,"5.1":0.149311,"6":0.043915,"6.1":0.08783,"7":0.166877,"7.1":0.316188,"8":0.869517},"android":{"2.1":0,"2.2":0,"2.3":0.0579337041272,"3":0,"4":0.117087065183,"4.1":0.377178905292,"4.2-4.3":0.638490402329,"4.4":1.19282447656,"4.4.3-4.4.4":0.549455446512,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0147389099307,"6.0-6.1":0.045251039261,"7.0-7.1":0.57274886836,"8":0.12308282679,"8.1":1.81935035566},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00184236673774,"12.1":0.0110542004264,"0":null},"ie":{"5.5":null,"6":0.0900617459016,"7":0.135092618852,"8":1.90030283852,"9":1.16179652213,"10":1.42297558525,"11":6.26829751475,"0":null},"ie_mob":{"10":0.131313232456,"11":0.278815767544},"bb":{"7":0.0054765,"10":null},"and_uc":{"0":0.567122},"op_mini":{"5.0-8.0":1.28320843284},"and_chr":{"0":4.383653},"and_ff":{"0":0.066935}},"total":89.8878423254}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RW.json
new file mode 100644
index 0000000..2423cc3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/RW.json
@@ -0,0 +1 @@
+{"id":"RW","name":"Rwanda","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.018664,"3":0.083988,"3.5":0.027996,"3.6":0.20997,"4":0.107318,"5":0.09332,"6":0.074656,"7":0.04666,"8":0.04666,"9":0.079322,"10":0.111984,"11":0.363948,"12":0.382612,"13":0.09332,"14":0.079322,"15":0.107318,"16":0.205304,"17":0.06999,"18":0.04666,"19":0.097986,"20":0.223968,"21":0.149312,"22":0.065324,"23":0.088654,"24":0.111984,"25":0.032662,"26":0.04666,"27":0.097986,"28":0.032662,"29":0.247298,"30":0.223968,"31":0.242632,"32":0.167976,"33":0.37328,"34":0.410608,"35":13.470742,"36":2.328334,"37":0.079322,"38":null,"39":null},"chrome":{"4":null,"5":0.018664,"6":0.041994,"7":0.004666,"8":null,"9":0.013998,"10":0.04666,"11":0.037328,"12":null,"13":null,"14":0.027996,"15":0.051326,"16":0.032662,"17":null,"18":0.037328,"19":0.027996,"20":0.004666,"21":0.018664,"22":0.009332,"23":null,"24":null,"25":0.060658,"26":0.013998,"27":null,"28":0.013998,"29":0.013998,"30":0.051326,"31":0.11665,"32":0.018664,"33":0.149312,"34":0.088654,"35":0.06999,"36":0.919202,"37":0.11665,"38":0.130648,"39":0.681236,"40":14.072656,"41":0.102652,"42":0.494596,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.009332,"11.1":0.004666,"11.5":0.018664,"11.6":0.083988,"12":0.018664,"12.1":0.331286,"15":0.009332,"16":null,"17":null,"18":0.004666,"19":0.027996,"20":0.02333,"21":null,"22":null,"23":null,"24":null,"25":0.013998,"26":0.041994,"27":1.171166,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.004666,"5":0.032662,"5.1":0.130648,"6":0.102652,"6.1":0.083988,"7":0.13998,"7.1":0.2333,"8":0.503928},"android":{"2.1":0,"2.2":0,"2.3":0.0704859902277,"3":0,"4":0.142455896039,"4.1":0.458900894272,"4.2-4.3":0.776829808088,"4.4":1.4512694409,"4.4.3-4.4.4":0.668503970475,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00534256953509,"6.0-6.1":0.0164026257656,"7.0-7.1":0.207610377548,"8":0.0446151420825,"8.1":0.659479285069},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0589355820896,"12.1":0.353613492537,"0":null},"ie":{"5.5":null,"6":0.0141567402062,"7":0.0188756536082,"8":0.934344853608,"9":0.358637418557,"10":0.679523529897,"11":2.56708889072,"0":null},"ie_mob":{"10":0.191275368421,"11":0.406132631579},"bb":{"7":0.104013,"10":null},"and_uc":{"0":2.090928},"op_mini":{"5.0-8.0":41.0486329254},"and_chr":{"0":2.53356},"and_ff":{"0":0.149352}},"total":97.2304100866}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SA.json
new file mode 100644
index 0000000..1d505a8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SA.json
@@ -0,0 +1 @@
+{"id":"SA","name":"Saudi Arabia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.013695,"3":0.022825,"3.5":null,"3.6":0.022825,"4":0.00913,"5":0.004565,"6":0.00913,"7":null,"8":0.004565,"9":0.013695,"10":0.00913,"11":0.022825,"12":0.03652,"13":0.00913,"14":0.01826,"15":0.13695,"16":0.022825,"17":0.013695,"18":0.13695,"19":0.013695,"20":0.013695,"21":0.13695,"22":0.00913,"23":0.13695,"24":0.00913,"25":0.260205,"26":0.013695,"27":0.013695,"28":0.01826,"29":0.03652,"30":0.041085,"31":0.095865,"32":0.08217,"33":0.077605,"34":0.14608,"35":3.756995,"36":0.42911,"37":0.013695,"38":null,"39":null},"chrome":{"4":0.013695,"5":0.02739,"6":0.00913,"7":0.004565,"8":0.013695,"9":0.00913,"10":0.022825,"11":0.059345,"12":0.02739,"13":0.01826,"14":0.022825,"15":0.013695,"16":0.013695,"17":0.04565,"18":0.00913,"19":0.132385,"20":0.004565,"21":0.00913,"22":0.031955,"23":0.00913,"24":0.397155,"25":0.022825,"26":0.02739,"27":0.03652,"28":0.02739,"29":0.050215,"30":0.21912,"31":0.086735,"32":0.04565,"33":0.69388,"34":0.095865,"35":0.38346,"36":0.61171,"37":0.342375,"38":0.451935,"39":1.42428,"40":22.80674,"41":0.19173,"42":0.305855,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.12782,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.00913,"12":0.00913,"12.1":0.041085,"15":0.004565,"16":null,"17":0.004565,"18":0.004565,"19":0.00913,"20":0.013695,"21":null,"22":0.00913,"23":0.004565,"24":0.00913,"25":0.01826,"26":0.041085,"27":0.059345,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.022825,"5":0.150645,"5.1":0.10956,"6":0.041085,"6.1":0.068475,"7":0.13695,"7.1":0.17347,"8":0.50215},"android":{"2.1":0,"2.2":0,"2.3":0.272360229754,"3":0,"4":0.550454359081,"4.1":1.77320844319,"4.2-4.3":3.00169642686,"4.4":5.60775378314,"4.4.3-4.4.4":2.58312175798,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0792607350136,"6.0-6.1":0.243344361884,"7.0-7.1":3.08004435184,"8":0.661896664324,"8.1":9.78383388694},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000347654584222,"12.1":0.00208592750533,"0":null},"ie":{"5.5":null,"6":0.0280021465696,"7":0.0466702442827,"8":2.19350148129,"9":1.65679367204,"10":1.13408693607,"11":3.92030051975,"0":null},"ie_mob":{"10":0.0713462938596,"11":0.15148870614},"bb":{"7":0.36958,"10":null},"and_uc":{"0":6.581785},"op_mini":{"5.0-8.0":0.24214141791},"and_chr":{"0":17.381335},"and_ff":{"0":0.15218}},"total":97.66864}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SB.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SB.json
new file mode 100644
index 0000000..01637e0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SB.json
@@ -0,0 +1 @@
+{"id":"SB","name":"Solomon Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.027525,"3.5":null,"3.6":0.01101,"4":0.016515,"5":0.016515,"6":0.01101,"7":0.01101,"8":0.04404,"9":0.05505,"10":0.01101,"11":0.060555,"12":0.04404,"13":0.05505,"14":0.01101,"15":0.04404,"16":0.016515,"17":null,"18":0.01101,"19":0.08808,"20":0.01101,"21":0.05505,"22":0.14313,"23":0.060555,"24":0.170655,"25":0.060555,"26":0.016515,"27":null,"28":0.027525,"29":0.07707,"30":0.03303,"31":0.016515,"32":0.19818,"33":0.214695,"34":0.522975,"35":6.027975,"36":0.62757,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.04404,"12":0.05505,"13":null,"14":null,"15":null,"16":null,"17":0.016515,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.005505,"27":0.005505,"28":0.060555,"29":0.03303,"30":0.05505,"31":0.082575,"32":0.049545,"33":0.17616,"34":0.082575,"35":0.038535,"36":0.3303,"37":0.08808,"38":0.39636,"39":0.74868,"40":16.916865,"41":0.412875,"42":0.69363,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.02202,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.005505,"22":null,"23":null,"24":null,"25":0.04404,"26":null,"27":1.040445,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.027525,"5":0.08808,"5.1":0.23121,"6":0.071565,"6.1":0.27525,"7":0.1101,"7.1":0.23121,"8":0.34131},"android":{"2.1":0,"2.2":0,"2.3":0.106190227674,"3":0,"4":0.214616039089,"4.1":0.691354271754,"4.2-4.3":1.17032808816,"4.4":2.18640089822,"4.4.3-4.4.4":1.0071304751,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0164909945778,"6.0-6.1":0.0506302465107,"7.0-7.1":0.640834262978,"8":0.137714270509,"8.1":2.03562522542},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0232449324805,"12.1":0.139469594883,"0":null},"ie":{"5.5":null,"6":0.04404,"7":0.01101,"8":1.623975,"9":2.923155,"10":2.658915,"11":15.32592,"0":null},"ie_mob":{"10":0.436074144737,"11":0.925910855263},"bb":{"7":0.03258875,"10":null},"and_uc":{"0":7.735895},"op_mini":{"5.0-8.0":16.1900954726},"and_chr":{"0":5.141105},"and_ff":{"0":0.013485}},"total":93.05887875}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SC.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SC.json
new file mode 100644
index 0000000..61153b8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SC.json
@@ -0,0 +1 @@
+{"id":"SC","name":"Seychelles","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.019803,"3":0.039606,"3.5":0.046207,"3.6":0.085813,"4":0.052808,"5":0.039606,"6":0.026404,"7":0.039606,"8":null,"9":0.052808,"10":0.046207,"11":0.138621,"12":0.059409,"13":0.019803,"14":0.072611,"15":0.085813,"16":0.092414,"17":0.013202,"18":0.046207,"19":0.039606,"20":0.013202,"21":0.112217,"22":0.019803,"23":0.06601,"24":0.118818,"25":0.039606,"26":null,"27":0.125419,"28":0.039606,"29":0.125419,"30":0.211232,"31":0.349853,"32":0.33005,"33":0.303646,"34":0.39606,"35":11.294311,"36":1.373008,"37":0.052808,"38":0.026404,"39":null},"chrome":{"4":0.013202,"5":0.006601,"6":0.019803,"7":null,"8":0.019803,"9":null,"10":null,"11":0.039606,"12":0.013202,"13":null,"14":0.019803,"15":0.013202,"16":0.013202,"17":null,"18":0.118818,"19":0.085813,"20":0.026404,"21":0.052808,"22":0.033005,"23":0.013202,"24":0.013202,"25":0.026404,"26":0.039606,"27":0.072611,"28":0.046207,"29":0.033005,"30":0.033005,"31":0.442267,"32":0.26404,"33":0.534681,"34":0.138621,"35":0.297045,"36":0.877933,"37":0.448868,"38":0.310247,"39":1.58424,"40":23.03749,"41":0.250838,"42":0.85813,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.019803,"11.5":0.112217,"11.6":0.006601,"12":0.019803,"12.1":0.191429,"15":0.013202,"16":null,"17":null,"18":null,"19":0.013202,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.026404,"27":1.029756,"28":null,"29":null},"safari":{"3.1":0.013202,"3.2":0.006601,"4":0.019803,"5":0.178227,"5.1":0.270641,"6":0.019803,"6.1":0.165025,"7":0.231035,"7.1":0.402661,"8":1.161776},"android":{"2.1":0,"2.2":0,"2.3":0.145490203763,"3":0,"4":0.294043359185,"4.1":0.947217800291,"4.2-4.3":1.60345519306,"4.4":2.9955667217,"4.4.3-4.4.4":1.37985972201,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0223721709007,"6.0-6.1":0.0686864896074,"7.0-7.1":0.869374711316,"8":0.186827251732,"8.1":2.76158937644},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0034690575693,"12.1":0.0208143454158,"0":null},"ie":{"5.5":null,"6":0.173126883253,"7":0.139833251858,"8":3.43590275995,"9":1.23852308789,"10":1.97098297857,"11":8.25682058592,"0":null},"ie_mob":{"10":0.550667815789,"11":1.16922618421},"bb":{"7":0.2226345,"10":null},"and_uc":{"0":6.910167},"op_mini":{"5.0-8.0":2.41619859701},"and_chr":{"0":7.510855},"and_ff":{"0":0.278718}},"total":95.2845540474}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SD.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SD.json
new file mode 100644
index 0000000..1b7a50e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SD.json
@@ -0,0 +1 @@
+{"id":"SD","name":"Sudan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.004748,"3":0.045106,"3.5":0.014244,"3.6":0.140066,"4":0.040358,"5":0.037984,"6":0.018992,"7":0.018992,"8":0.033236,"9":0.05935,"10":0.052228,"11":0.085464,"12":0.092586,"13":0.049854,"14":0.05935,"15":0.054602,"16":0.078342,"17":0.049854,"18":0.068846,"19":0.075968,"20":0.068846,"21":0.061724,"22":0.04748,"23":0.102082,"24":0.054602,"25":0.066472,"26":0.061724,"27":0.056976,"28":0.045106,"29":0.144814,"30":0.235026,"31":0.22553,"32":0.147188,"33":0.32049,"34":0.458182,"35":6.105928,"36":0.811908,"37":0.021366,"38":0.009496,"39":null},"chrome":{"4":0.052228,"5":0.075968,"6":0.02374,"7":0.014244,"8":0.049854,"9":0.097334,"10":0.061724,"11":0.102082,"12":0.04748,"13":0.026114,"14":0.028488,"15":0.01187,"16":0.033236,"17":0.042732,"18":0.042732,"19":0.061724,"20":0.049854,"21":0.056976,"22":0.144814,"23":0.113952,"24":0.05935,"25":0.13057,"26":0.180424,"27":0.170928,"28":0.199416,"29":0.199416,"30":0.151936,"31":0.33236,"32":0.185172,"33":0.595874,"34":0.15431,"35":0.197042,"36":0.721696,"37":0.292002,"38":0.370344,"39":1.061178,"40":1.37692,"41":0.03561,"42":0.021366,"43":null},"opera":{"9":null,"9.5-9.6":0.004748,"10.0-10.1":0.002374,"10.5":null,"10.6":0.014244,"11":0.01187,"11.1":0.014244,"11.5":0.16618,"11.6":0.045106,"12":0.033236,"12.1":0.239774,"15":0.018992,"16":0.004748,"17":0.01187,"18":0.02374,"19":0.016618,"20":0.021366,"21":0.026114,"22":0.026114,"23":0.007122,"24":0.009496,"25":0.018992,"26":0.068846,"27":0.550768,"28":0.009496,"29":0.002374},"safari":{"3.1":null,"3.2":null,"4":0.01187,"5":0.009496,"5.1":0.075968,"6":0.009496,"6.1":0.01187,"7":0.018992,"7.1":0.037984,"8":0.056976},"android":{"2.1":0,"2.2":0,"2.3":0.224895251066,"3":0,"4":0.454525138996,"4.1":1.46418645036,"4.2-4.3":2.47858239859,"4.4":4.63047485352,"4.4.3-4.4.4":2.13295390747,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00995155095893,"6.0-6.1":0.0305530073301,"7.0-7.1":0.386713778492,"8":0.0831041799377,"8.1":1.22840548328},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.047262771855,"12.1":0.28357663113,"0":null},"ie":{"5.5":null,"6":0.0707497800643,"7":0.0707497800643,"8":1.02221233955,"9":0.424498680386,"10":0.44889515627,"11":1.71019295949,"0":null},"ie_mob":{"10":0.0805747105263,"11":0.171083289474},"bb":{"7":0.0095325,"10":null},"and_uc":{"0":5.849142},"op_mini":{"5.0-8.0":32.918520597},"and_chr":{"0":6.817352},"and_ff":{"0":0.244032}},"total":82.5719751958}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SE.json
new file mode 100644
index 0000000..5ab8a27
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SE.json
@@ -0,0 +1 @@
+{"id":"SE","name":"Sweden","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007636,"3.5":0.007636,"3.6":0.030544,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.007636,"11":0.007636,"12":0.022908,"13":null,"14":0.007636,"15":0.007636,"16":0.053452,"17":0.045816,"18":0.015272,"19":0.007636,"20":0.030544,"21":0.022908,"22":null,"23":0.015272,"24":0.03818,"25":0.007636,"26":0.03818,"27":0.015272,"28":0.030544,"29":0.030544,"30":0.045816,"31":0.251988,"32":0.106904,"33":0.106904,"34":0.22908,"35":11.011112,"36":0.626152,"37":0.015272,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.030544,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.03818,"19":null,"20":null,"21":0.015272,"22":0.03818,"23":null,"24":0.007636,"25":0.015272,"26":0.015272,"27":0.030544,"28":0.022908,"29":0.03818,"30":0.022908,"31":0.213808,"32":0.061088,"33":0.160356,"34":0.129812,"35":0.34362,"36":0.30544,"37":0.397072,"38":0.481068,"39":1.962452,"40":32.307916,"41":0.183264,"42":0.083996,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.137448,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.007636,"26":0.015272,"27":0.5727,"28":0.007636,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.045816,"5":0.145084,"5.1":0.603244,"6":0.236716,"6.1":0.5727,"7":0.702512,"7.1":1.382116,"8":3.268208},"android":{"2.1":0,"2.2":0,"2.3":0.0473955088887,"3":0,"4":0.0957888179644,"4.1":0.30856970787,"4.2-4.3":0.522348397962,"4.4":0.975848583013,"4.4.3-4.4.4":0.449508984302,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0701815318807,"6.0-6.1":0.215469615423,"7.0-7.1":2.72722970379,"8":0.586077353951,"8.1":8.66310979496},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000104170575693,"12.1":0.000625023454158,"0":null},"ie":{"5.5":null,"6":0.0153311937984,"7":0.0383279844961,"8":1.08084916279,"9":2.32267586047,"10":1.69409691473,"11":12.6482348837,"0":null},"ie_mob":{"10":0.0893135789474,"11":0.189638421053},"bb":{"7":0.002364,"10":null},"and_uc":{"0":0.02364},"op_mini":{"5.0-8.0":0.0725548059701},"and_chr":{"0":8.469836},"and_ff":{"0":0.120564}},"total":98.875312}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SG.json
new file mode 100644
index 0000000..cac119f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SG.json
@@ -0,0 +1 @@
+{"id":"SG","name":"Singapore","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.006503,"3":0.123557,"3.5":null,"3.6":0.039018,"4":null,"5":null,"6":0.006503,"7":null,"8":null,"9":null,"10":0.006503,"11":0.013006,"12":0.019509,"13":0.006503,"14":0.013006,"15":0.013006,"16":0.032515,"17":0.013006,"18":0.013006,"19":0.013006,"20":0.013006,"21":0.013006,"22":0.006503,"23":0.019509,"24":0.026012,"25":0.013006,"26":0.026012,"27":0.019509,"28":0.026012,"29":0.032515,"30":0.045521,"31":1.053486,"32":0.695821,"33":0.091042,"34":0.19509,"35":6.756617,"36":0.468216,"37":0.013006,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.052024,"12":0.006503,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.013006,"19":null,"20":0.006503,"21":0.026012,"22":0.182084,"23":0.013006,"24":0.013006,"25":0.019509,"26":0.032515,"27":0.032515,"28":0.039018,"29":0.19509,"30":0.078036,"31":0.331653,"32":0.058527,"33":0.156072,"34":0.104048,"35":0.221102,"36":1.222564,"37":1.69078,"38":0.45521,"39":1.567223,"40":24.795939,"41":0.234108,"42":0.13006,"43":0.006503},"opera":{"9":null,"9.5-9.6":0.019509,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.084539,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.013006,"27":0.273126,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.214599,"5":0.156072,"5.1":0.487725,"6":0.123557,"6.1":0.351162,"7":0.812875,"7.1":0.747845,"8":2.321571},"android":{"2.1":0,"2.2":0,"2.3":0.109690699657,"3":0,"4":0.221690677201,"4.1":0.714144186714,"4.2-4.3":1.20890697411,"4.4":2.25847377399,"4.4.3-4.4.4":1.04032968833,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0656891031228,"6.0-6.1":0.201677070991,"7.0-7.1":2.55265549854,"8":0.548561633096,"8.1":8.10857069425},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000367843638948,"12.1":0.00220706183369,"0":null},"ie":{"5.5":null,"6":0.0149741646018,"7":0.0748708230088,"8":5.56290214956,"9":1.73700309381,"10":1.43751980177,"11":8.09353596726,"0":null},"ie_mob":{"10":0.0694185175439,"11":0.147395482456},"bb":{"7":0.02185625,"10":null},"and_uc":{"0":1.489722},"op_mini":{"5.0-8.0":0.256203094527},"and_chr":{"0":15.597411},"and_ff":{"0":0.304239}},"total":98.96075425}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SH.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SH.json
new file mode 100644
index 0000000..5e7b8aa
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SH.json
@@ -0,0 +1 @@
+{"id":"SH","name":"Saint Helena","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.028452,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.028452,"12":null,"13":0.180196,"14":null,"15":null,"16":null,"17":null,"18":null,"19":0.512136,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":0.33194,"30":0.028452,"31":null,"32":null,"33":null,"34":0.180196,"35":6.800028,"36":0.66388,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.056904,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.398328,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":0.028452,"32":1.51744,"33":0.246584,"34":3.158172,"35":0.028452,"36":0.208648,"37":0.730268,"38":0.606976,"39":0.66388,"40":39.756928,"41":null,"42":null,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.028452,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.09484,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.275036,"5.1":0.056904,"6":0.151744,"6.1":null,"7":0.180196,"7.1":0.635428,"8":null},"android":{"2.1":0,"2.2":0,"2.3":0.0167867636968,"3":0,"4":0.0339269329452,"4.1":0.109290666805,"4.2-4.3":0.185007806217,"4.4":0.345630629379,"4.4.3-4.4.4":0.159209200956,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.011293451953,"6.0-6.1":0.0346728788031,"7.0-7.1":0.438859580279,"8":0.0943102303444,"8.1":1.39404785862},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000388008528785,"12.1":0.00232805117271,"0":null},"ie":{"5.5":null,"6":0.028452,"7":0.483684,"8":9.284836,"9":6.344796,"10":7.103516,"11":13.931996,"0":null},"ie_mob":{"10":0.0485718947368,"11":0.103132105263},"bb":{"7":0.098685,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0.270247940299},"and_chr":{"0":1.517556},"and_ff":{"0":null}},"total":99.618589}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SI.json
new file mode 100644
index 0000000..2671587
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SI.json
@@ -0,0 +1 @@
+{"id":"SI","name":"Slovenia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.017836,"3.5":0.071344,"3.6":0.053508,"4":0.017836,"5":0.008918,"6":0.008918,"7":0.008918,"8":0.008918,"9":0.017836,"10":0.026754,"11":0.026754,"12":0.04459,"13":0.017836,"14":0.017836,"15":0.017836,"16":0.04459,"17":0.13377,"18":0.017836,"19":0.017836,"20":0.04459,"21":0.026754,"22":0.026754,"23":0.026754,"24":0.053508,"25":0.026754,"26":0.04459,"27":0.035672,"28":0.04459,"29":0.062426,"30":0.080262,"31":0.472654,"32":0.347802,"33":0.22295,"34":0.374556,"35":23.472176,"36":1.29311,"37":0.017836,"38":0.017836,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.053508,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.035672,"19":null,"20":null,"21":null,"22":0.04459,"23":0.017836,"24":0.008918,"25":null,"26":0.026754,"27":0.017836,"28":0.026754,"29":0.035672,"30":0.04459,"31":0.169442,"32":0.080262,"33":0.124852,"34":0.17836,"35":0.240786,"36":0.606424,"37":0.740194,"38":0.659932,"39":1.837108,"40":36.189244,"41":0.22295,"42":0.169442,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.008918,"11.1":null,"11.5":null,"11.6":null,"12":0.026754,"12.1":0.285376,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.026754,"21":null,"22":null,"23":0.008918,"24":null,"25":null,"26":0.017836,"27":0.945308,"28":0.017836,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.035672,"5":0.107016,"5.1":0.392392,"6":0.04459,"6.1":0.329966,"7":0.258622,"7.1":0.481572,"8":1.275274},"android":{"2.1":0,"2.2":0,"2.3":0.0537299220293,"3":0,"4":0.108591000312,"4.1":0.349810071317,"4.2-4.3":0.592160298576,"4.4":1.10627081568,"4.4.3-4.4.4":0.509585892089,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0101933330656,"6.0-6.1":0.0312953208153,"7.0-7.1":0.39610934632,"8":0.0851232726177,"8.1":1.25825072718},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00021070931059,"12.1":0.00126425586354,"0":null},"ie":{"5.5":null,"6":0.053791444379,"7":0.179304814597,"8":1.96338771984,"9":1.51512568334,"10":1.26409894291,"11":10.2383049135,"0":null},"ie_mob":{"10":0.147925535088,"11":0.314088464912},"bb":{"7":0.01082,"10":null},"and_uc":{"0":0.012984},"op_mini":{"5.0-8.0":0.146759034826},"and_chr":{"0":5.594886},"and_ff":{"0":0.100626}},"total":99.1098715185}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SK.json
new file mode 100644
index 0000000..337be0e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SK.json
@@ -0,0 +1 @@
+{"id":"SK","name":"Slovakia (Slovak Republic)","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.036092,"3.5":0.027069,"3.6":0.063161,"4":0.018046,"5":null,"6":0.018046,"7":null,"8":0.009023,"9":0.045115,"10":0.027069,"11":0.018046,"12":0.063161,"13":0.018046,"14":0.018046,"15":0.018046,"16":0.054138,"17":0.027069,"18":0.027069,"19":0.018046,"20":0.027069,"21":0.027069,"22":0.027069,"23":0.027069,"24":0.045115,"25":0.045115,"26":0.054138,"27":0.036092,"28":0.09023,"29":0.063161,"30":0.108276,"31":0.36092,"32":0.225575,"33":0.261667,"34":0.424081,"35":20.319796,"36":1.200059,"37":0.018046,"38":0.018046,"39":null},"chrome":{"4":0.036092,"5":null,"6":0.009023,"7":0.027069,"8":null,"9":null,"10":0.009023,"11":0.09023,"12":0.027069,"13":0.018046,"14":null,"15":0.018046,"16":null,"17":null,"18":0.027069,"19":null,"20":null,"21":null,"22":0.108276,"23":null,"24":0.009023,"25":0.018046,"26":0.054138,"27":0.027069,"28":0.027069,"29":0.018046,"30":0.054138,"31":0.207529,"32":0.072184,"33":0.162414,"34":0.225575,"35":0.315805,"36":0.415058,"37":0.505288,"38":0.532357,"39":1.885807,"40":41.063673,"41":0.171437,"42":0.126322,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.018046,"11.6":0.036092,"12":0.045115,"12.1":1.651209,"15":0.036092,"16":0.018046,"17":0.018046,"18":0.045115,"19":0.036092,"20":0.09023,"21":0.027069,"22":null,"23":0.009023,"24":0.018046,"25":0.018046,"26":0.099253,"27":3.888913,"28":0.054138,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.054138,"5.1":0.162414,"6":0.027069,"6.1":0.108276,"7":0.18046,"7.1":0.288736,"8":1.055691},"android":{"2.1":0,"2.2":0,"2.3":0.0464895176214,"3":0,"4":0.0939577619295,"4.1":0.302671227882,"4.2-4.3":0.512363420522,"4.4":0.957194699657,"4.4.3-4.4.4":0.440916372388,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00824794407069,"6.0-6.1":0.0253226353047,"7.0-7.1":0.320512212572,"8":0.0688775680289,"8.1":1.01811464002},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000494402274343,"12.1":0.00296641364606,"0":null},"ie":{"5.5":null,"6":0.144606822167,"7":0.144606822167,"8":1.5545233383,"9":0.831489227461,"10":0.786299595533,"11":7.46532719438,"0":null},"ie_mob":{"10":0.117617087719,"11":0.249734912281},"bb":{"7":0.01441075,"10":null},"and_uc":{"0":0.079137},"op_mini":{"5.0-8.0":0.34435118408},"and_chr":{"0":5.037013},"and_ff":{"0":0.092815}},"total":98.79021775}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SL.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SL.json
new file mode 100644
index 0000000..2bc1b97
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SL.json
@@ -0,0 +1 @@
+{"id":"SL","name":"Sierra Leone","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.006564,"3":0.056888,"3.5":0.015316,"3.6":0.030632,"4":0.061264,"5":0.015316,"6":0.004376,"7":0.028444,"8":0.030632,"9":0.03282,"10":0.0547,"11":0.06564,"12":0.102836,"13":0.227552,"14":0.01094,"15":0.024068,"16":0.059076,"17":0.02188,"18":0.024068,"19":0.041572,"20":0.019692,"21":0.017504,"22":0.017504,"23":0.04376,"24":0.048136,"25":0.052512,"26":0.017504,"27":0.019692,"28":0.019692,"29":0.111588,"30":0.280064,"31":0.17504,"32":0.07658,"33":0.220988,"34":0.177228,"35":5.161492,"36":1.231844,"37":0.06564,"38":null,"39":null},"chrome":{"4":null,"5":0.006564,"6":0.004376,"7":null,"8":0.006564,"9":null,"10":0.006564,"11":0.019692,"12":null,"13":null,"14":null,"15":0.002188,"16":0.008752,"17":null,"18":null,"19":null,"20":null,"21":0.004376,"22":0.015316,"23":null,"24":null,"25":0.008752,"26":0.004376,"27":null,"28":0.006564,"29":0.02188,"30":0.19692,"31":0.019692,"32":0.024068,"33":0.188168,"34":0.013128,"35":0.01094,"36":0.286628,"37":0.048136,"38":0.024068,"39":0.30632,"40":4.52916,"41":0.024068,"42":0.052512,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.008752,"11":0.008752,"11.1":0.015316,"11.5":0.015316,"11.6":0.03282,"12":0.008752,"12.1":0.234116,"15":0.024068,"16":0.01094,"17":null,"18":0.01094,"19":0.008752,"20":0.002188,"21":0.006564,"22":0.008752,"23":null,"24":null,"25":0.004376,"26":0.07658,"27":0.822688,"28":0.002188,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.12034,"5.1":0.063452,"6":0.008752,"6.1":0.01094,"7":0.039384,"7.1":0.096272,"8":0.413532},"android":{"2.1":0,"2.2":0,"2.3":0.0499955005718,"3":0,"4":0.101043537998,"4.1":0.325497022144,"4.2-4.3":0.551003043144,"4.4":1.02938104335,"4.4.3-4.4.4":0.474167852791,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00697502801486,"6.0-6.1":0.0214145596947,"7.0-7.1":0.271047141279,"8":0.0582476023697,"8.1":0.860987668641},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0891911641791,"12.1":0.535146985075,"0":null},"ie":{"5.5":null,"6":0.0242523045045,"7":0.0264570594595,"8":0.604102857658,"9":0.202837455856,"10":1.06048713333,"11":2.96760016937,"0":null},"ie_mob":{"10":0.182588368421,"11":0.387687631579},"bb":{"7":0.021483,"10":null},"and_uc":{"0":5.304348},"op_mini":{"5.0-8.0":62.1216458507},"and_chr":{"0":1.784896},"and_ff":{"0":0.085932}},"total":95.7137639802}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SM.json
new file mode 100644
index 0000000..f13b8f3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SM.json
@@ -0,0 +1 @@
+{"id":"SM","name":"San Marino","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.072208,"3.5":null,"3.6":0.027078,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.018052,"11":null,"12":1.065068,"13":null,"14":0.018052,"15":0.054156,"16":0.054156,"17":0.009026,"18":0.018052,"19":null,"20":0.13539,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":0.081234,"29":0.036104,"30":0.126364,"31":0.189546,"32":0.036104,"33":0.207598,"34":0.243702,"35":23.792536,"36":1.390004,"37":0.04513,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":0.099286,"23":null,"24":null,"25":null,"26":0.027078,"27":0.009026,"28":null,"29":null,"30":0.018052,"31":0.072208,"32":0.324936,"33":0.036104,"34":0.081234,"35":0.388118,"36":0.324936,"37":0.22565,"38":0.126364,"39":1.3539,"40":33.21568,"41":0.027078,"42":0.153442,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.162468,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.31591,"28":0.063182,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.027078,"5":0.22565,"5.1":2.951502,"6":0.126364,"6.1":0.9026,"7":0.523508,"7.1":1.17338,"8":3.953388},"android":{"2.1":0,"2.2":0,"2.3":0.0339953238382,"3":0,"4":0.0687063387046,"4.1":0.221327450463,"4.2-4.3":0.374664253249,"4.4":0.699945825554,"4.4.3-4.4.4":0.322418808192,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.021501448539,"6.0-6.1":0.0660132191987,"7.0-7.1":0.835538745858,"8":0.179555956221,"8.1":2.65410863018},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":1.52295664534e-5,"12.1":9.13773987207e-5,"0":null},"ie":{"5.5":null,"6":0.0180756437459,"7":0.0451891093648,"8":2.14196378389,"9":0.994160406025,"10":1.42797585593,"11":9.14627573543,"0":null},"ie_mob":{"10":0.120998140351,"11":0.256913859649},"bb":{"7":0.0046265,"10":null},"and_uc":{"0":0.001948},"op_mini":{"5.0-8.0":0.0106073930348},"and_chr":{"0":3.828666},"and_ff":{"0":0.0487}},"total":98.0516650344}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SN.json
new file mode 100644
index 0000000..3081567
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SN.json
@@ -0,0 +1 @@
+{"id":"SN","name":"Senegal","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.07496,"3.5":0.03748,"3.6":0.14992,"4":0.044976,"5":0.014992,"6":0.059968,"7":0.03748,"8":0.022488,"9":0.029984,"10":0.07496,"11":0.07496,"12":0.247368,"13":0.067464,"14":0.089952,"15":0.134928,"16":0.089952,"17":0.07496,"18":0.03748,"19":0.284848,"20":0.07496,"21":0.292344,"22":0.097448,"23":0.14992,"24":0.052472,"25":0.059968,"26":0.089952,"27":0.247368,"28":0.104944,"29":0.194896,"30":0.322328,"31":0.382296,"32":0.629664,"33":0.464752,"34":0.569696,"35":16.018952,"36":1.034448,"37":0.059968,"38":0.007496,"39":null},"chrome":{"4":0.022488,"5":0.07496,"6":0.082456,"7":0.044976,"8":0.059968,"9":0.044976,"10":0.07496,"11":0.269856,"12":0.119936,"13":0.044976,"14":0.03748,"15":0.03748,"16":0.022488,"17":0.022488,"18":0.014992,"19":0.022488,"20":0.014992,"21":0.03748,"22":0.022488,"23":0.03748,"24":0.029984,"25":0.029984,"26":0.022488,"27":0.07496,"28":0.089952,"29":0.089952,"30":0.194896,"31":0.217384,"32":0.1874,"33":0.247368,"34":0.119936,"35":0.329824,"36":1.206856,"37":0.284848,"38":0.494736,"39":1.671608,"40":31.902976,"41":0.352312,"42":0.127432,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.022488,"12":0.022488,"12.1":0.142424,"15":0.022488,"16":0.014992,"17":null,"18":0.03748,"19":0.007496,"20":0.022488,"21":0.007496,"22":0.007496,"23":null,"24":0.007496,"25":0.014992,"26":0.07496,"27":1.694096,"28":0.014992,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.029984,"5":0.142424,"5.1":0.179904,"6":0.059968,"6.1":0.14992,"7":0.11244,"7.1":0.209888,"8":0.404784},"android":{"2.1":0,"2.2":0,"2.3":0.179195184531,"3":0,"4":0.362162899262,"4.1":1.16665496455,"4.2-4.3":1.97491956004,"4.4":3.68953453623,"4.4.3-4.4.4":1.69952485539,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0159080309268,"6.0-6.1":0.0488404458279,"7.0-7.1":0.61818050005,"8":0.132846012652,"8.1":1.96366501054},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00415019758351,"12.1":0.0249011855011,"0":null},"ie":{"5.5":null,"6":0.03748,"7":0.067464,"8":1.034448,"9":0.629664,"10":1.731576,"11":5.269688,"0":null},"ie_mob":{"10":0.47060922807,"11":0.99923877193},"bb":{"7":0.073242,"10":null},"and_uc":{"0":0.618488},"op_mini":{"5.0-8.0":2.89061261692},"and_chr":{"0":7.352216},"and_ff":{"0":0.13772}},"total":97.88341}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SO.json
new file mode 100644
index 0000000..44d2d84
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SO.json
@@ -0,0 +1 @@
+{"id":"SO","name":"Somalia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.010916,"3.5":0.021832,"3.6":0.169198,"4":0.076412,"5":0.016374,"6":0.016374,"7":0.016374,"8":0.02729,"9":0.021832,"10":0.070954,"11":0.371144,"12":0.169198,"13":0.060038,"14":0.076412,"15":0.076412,"16":0.065496,"17":0.032748,"18":0.016374,"19":0.141908,"20":0.092786,"21":0.049122,"22":0.043664,"23":0.130992,"24":0.02729,"25":0.076412,"26":0.125534,"27":0.201946,"28":0.130992,"29":0.392976,"30":0.21832,"31":0.251068,"32":0.223778,"33":0.442098,"34":0.605838,"35":7.864978,"36":1.741102,"37":0.05458,"38":null,"39":null},"chrome":{"4":null,"5":0.049122,"6":null,"7":0.005458,"8":0.021832,"9":0.622212,"10":0.065496,"11":0.087328,"12":0.043664,"13":0.038206,"14":0.005458,"15":0.010916,"16":0.021832,"17":null,"18":0.049122,"19":null,"20":0.02729,"21":0.016374,"22":0.021832,"23":0.032748,"24":0.016374,"25":0.130992,"26":0.076412,"27":0.043664,"28":0.032748,"29":0.032748,"30":0.207404,"31":0.076412,"32":0.070954,"33":0.73683,"34":0.098244,"35":0.158282,"36":0.949692,"37":0.256526,"38":0.622212,"39":1.184386,"40":25.128632,"41":0.398434,"42":0.84599,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.043664,"11":0.005458,"11.1":0.005458,"11.5":0.016374,"11.6":0.010916,"12":0.005458,"12.1":0.049122,"15":0.010916,"16":null,"17":0.02729,"18":0.005458,"19":0.02729,"20":0.010916,"21":0.010916,"22":0.010916,"23":null,"24":0.010916,"25":null,"26":0.05458,"27":1.03702,"28":0.103702,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.038206,"5.1":0.038206,"6":0.010916,"6.1":0.043664,"7":0.070954,"7.1":0.070954,"8":0.251068},"android":{"2.1":0,"2.2":0,"2.3":0.221329832623,"3":0,"4":0.44731924067,"4.1":1.44097369976,"4.2-4.3":2.43928773428,"4.4":4.55706476432,"4.4.3-4.4.4":2.09913872835,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00844869464806,"6.0-6.1":0.0259389747967,"7.0-7.1":0.328313309569,"8":0.0705540114469,"8.1":1.04289500954},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0155854840085,"12.1":0.0935129040512,"0":null},"ie":{"5.5":null,"6":0.0164048943396,"7":0.0218731924528,"8":0.8694594,"9":0.437463849057,"10":1.31785984528,"11":3.13333481887,"0":null},"ie_mob":{"10":0.269033815789,"11":0.571236184211},"bb":{"7":0.0556395,"10":null},"and_uc":{"0":11.282328},"op_mini":{"5.0-8.0":10.8552896119},"and_chr":{"0":6.131814},"and_ff":{"0":0.208932}},"total":96.2479575}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SR.json
new file mode 100644
index 0000000..ac893d2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SR.json
@@ -0,0 +1 @@
+{"id":"SR","name":"Suriname","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.006374,"3.5":null,"3.6":0.019122,"4":0.006374,"5":0.076488,"6":0.006374,"7":null,"8":null,"9":null,"10":0.006374,"11":0.019122,"12":0.012748,"13":null,"14":0.019122,"15":0.019122,"16":0.019122,"17":null,"18":0.012748,"19":0.012748,"20":null,"21":0.012748,"22":null,"23":null,"24":null,"25":0.012748,"26":0.019122,"27":0.006374,"28":0.050992,"29":0.050992,"30":0.03187,"31":0.178472,"32":0.15935,"33":0.09561,"34":0.28683,"35":9.484512,"36":0.854116,"37":0.03187,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.082862,"12":0.012748,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.03187,"19":null,"20":0.038244,"21":0.019122,"22":0.152976,"23":null,"24":0.012748,"25":null,"26":0.121106,"27":0.057366,"28":0.044618,"29":0.038244,"30":0.089236,"31":0.305952,"32":0.070114,"33":0.15935,"34":0.133854,"35":0.178472,"36":1.21106,"37":0.38244,"38":0.325074,"39":1.740102,"40":29.51162,"41":0.114732,"42":0.299578,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.070114,"15":0.050992,"16":null,"17":null,"18":null,"19":null,"20":0.025496,"21":0.006374,"22":null,"23":null,"24":null,"25":null,"26":0.41431,"27":0.994344,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.006374,"5":0.012748,"5.1":0.082862,"6":0.012748,"6.1":0.09561,"7":0.101984,"7.1":0.184846,"8":0.650148},"android":{"2.1":0,"2.2":0,"2.3":0.274315438195,"3":0,"4":0.554405938247,"4.1":1.7859378792,"4.2-4.3":3.023244882,"4.4":5.64801049589,"4.4.3-4.4.4":2.60166536646,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0262321566422,"6.0-6.1":0.0805373230244,"7.0-7.1":1.01937240285,"8":0.219061518626,"8.1":3.23806059886},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00130917412935,"12.1":0.00785504477612,"0":null},"ie":{"5.5":null,"6":0.0576476200295,"7":0.0960793667158,"8":1.56929632302,"9":1.38994817182,"10":1.2490317673,"11":8.64714300442,"0":null},"ie_mob":{"10":0.212454973684,"11":0.451103026316},"bb":{"7":0.605542,"10":null},"and_uc":{"0":0.710696},"op_mini":{"5.0-8.0":0.911839781095},"and_chr":{"0":13.347864},"and_ff":{"0":0.137788}},"total":97.2203242533}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ST.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ST.json
new file mode 100644
index 0000000..3e52df5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ST.json
@@ -0,0 +1 @@
+{"id":"ST","name":"Sao Tome and Principe","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.055454,"4":null,"5":null,"6":null,"7":null,"8":0.031688,"9":null,"10":null,"11":null,"12":0.102986,"13":null,"14":null,"15":0.015844,"16":null,"17":0.269348,"18":0.071298,"19":null,"20":0.031688,"21":0.023766,"22":null,"23":0.015844,"24":0.023766,"25":0.031688,"26":null,"27":0.015844,"28":0.047532,"29":0.110908,"30":0.071298,"31":0.047532,"32":0.047532,"33":0.245582,"34":0.134674,"35":9.007314,"36":0.59415,"37":0.031688,"38":null,"39":null},"chrome":{"4":0.015844,"5":null,"6":null,"7":null,"8":null,"9":0.015844,"10":0.023766,"11":0.015844,"12":0.007922,"13":null,"14":0.07922,"15":null,"16":0.134674,"17":null,"18":0.023766,"19":null,"20":0.015844,"21":null,"22":null,"23":null,"24":null,"25":0.047532,"26":0.110908,"27":null,"28":null,"29":0.03961,"30":0.102986,"31":0.031688,"32":0.055454,"33":5.101768,"34":0.095064,"35":0.348568,"36":3.1688,"37":0.126752,"38":0.190128,"39":2.067642,"40":33.224868,"41":0.19805,"42":0.308958,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.023766,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":0.102986,"23":null,"24":0.015844,"25":0.015844,"26":0.015844,"27":2.29738,"28":0.023766,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.063376,"5":0.023766,"5.1":0.087142,"6":null,"6.1":0.190128,"7":0.047532,"7.1":0.11883,"8":0.67337},"android":{"2.1":0,"2.2":0,"2.3":0.154742842291,"3":0,"4":0.312743428631,"4.1":1.00745734692,"4.2-4.3":1.70542900925,"4.4":3.18607367918,"4.4.3-4.4.4":1.46761369373,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00532822652877,"6.0-6.1":0.0163585902199,"7.0-7.1":0.207053013355,"8":0.0444953653981,"8.1":0.657708804498},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00406738592751,"12.1":0.024404315565,"0":null},"ie":{"5.5":null,"6":0.015844,"7":0.055454,"8":1.647776,"9":1.132846,"10":1.774528,"11":12.683122,"0":null},"ie_mob":{"10":0.210242561404,"11":0.446405438596},"bb":{"7":0.013507,"10":null},"and_uc":{"0":3.941966},"op_mini":{"5.0-8.0":2.83293429851},"and_chr":{"0":4.434026},"and_ff":{"0":0.033248}},"total":98.293873}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SV.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SV.json
new file mode 100644
index 0000000..33d60e3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SV.json
@@ -0,0 +1 @@
+{"id":"SV","name":"El Salvador","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.00666,"3":0.05328,"3.5":0.07326,"3.6":0.08658,"4":0.02664,"5":0.01998,"6":0.00666,"7":0.01332,"8":0.01998,"9":0.01998,"10":0.02664,"11":0.0333,"12":0.05994,"13":0.0333,"14":0.02664,"15":0.04662,"16":0.02664,"17":0.03996,"18":0.03996,"19":0.01998,"20":0.03996,"21":0.04662,"22":0.0333,"23":0.04662,"24":0.03996,"25":0.07326,"26":0.05994,"27":0.03996,"28":0.07992,"29":0.07992,"30":0.17982,"31":0.15984,"32":0.24642,"33":0.31968,"34":0.4329,"35":12.64068,"36":0.5661,"37":0.01332,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.04662,"12":0.01998,"13":null,"14":null,"15":0.00666,"16":null,"17":null,"18":0.01332,"19":null,"20":0.00666,"21":0.01998,"22":0.05994,"23":0.01332,"24":0.01998,"25":0.01998,"26":0.05328,"27":0.0333,"28":0.03996,"29":0.04662,"30":0.05328,"31":0.1332,"32":0.1332,"33":0.15984,"34":0.17316,"35":0.3663,"36":0.45288,"37":0.50616,"38":0.75258,"39":2.0646,"40":32.94702,"41":0.11322,"42":0.0666,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.03996,"15":null,"16":null,"17":null,"18":0.01332,"19":null,"20":0.01332,"21":0.00666,"22":null,"23":null,"24":null,"25":0.00666,"26":0.01998,"27":0.67266,"28":0.01332,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.02664,"5":0.0999,"5.1":0.12654,"6":0.07992,"6.1":0.07992,"7":0.0999,"7.1":0.21978,"8":0.65268},"android":{"2.1":0,"2.2":0,"2.3":0.261321405552,"3":0,"4":0.528144314378,"4.1":1.70133988772,"4.2-4.3":2.88003696434,"4.4":5.38047020272,"4.4.3-4.4.4":2.47842722528,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0179502781404,"6.0-6.1":0.0551105030626,"7.0-7.1":0.697541510192,"8":0.14990056833,"8.1":2.21575714028},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00267769722814,"12.1":0.0160661833689,"0":null},"ie":{"5.5":null,"6":0.0535380145278,"7":0.10038377724,"8":2.04782905569,"9":1.1309905569,"10":1.05737578692,"11":3.86142929782,"0":null},"ie_mob":{"10":0.266277105263,"11":0.565382894737},"bb":{"7":0.22545,"10":null},"and_uc":{"0":0.93186},"op_mini":{"5.0-8.0":1.8650161194},"and_chr":{"0":13.32532},"and_ff":{"0":0.23046}},"total":98.3163964891}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SY.json
new file mode 100644
index 0000000..bbe3b46
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SY.json
@@ -0,0 +1 @@
+{"id":"SY","name":"Syrian Arab Republic","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.027552,"3":0.059696,"3.5":0.018368,"3.6":0.09184,"4":0.059696,"5":0.050512,"6":0.04592,"7":0.027552,"8":0.059696,"9":0.027552,"10":0.101024,"11":0.073472,"12":0.146944,"13":0.082656,"14":0.036736,"15":0.087248,"16":0.09184,"17":0.050512,"18":0.064288,"19":0.064288,"20":0.09184,"21":0.09184,"22":0.036736,"23":0.059696,"24":0.09184,"25":0.105616,"26":0.156128,"27":0.165312,"28":0.110208,"29":0.25256,"30":0.454608,"31":0.43624,"32":0.48216,"33":0.574,"34":0.991872,"35":11.796848,"36":0.98728,"37":0.036736,"38":0.018368,"39":null},"chrome":{"4":0.013776,"5":0.041328,"6":0.04592,"7":0.009184,"8":0.04592,"9":0.013776,"10":0.032144,"11":0.156128,"12":0.055104,"13":0.04592,"14":0.032144,"15":0.041328,"16":0.013776,"17":0.013776,"18":0.02296,"19":0.018368,"20":0.018368,"21":0.013776,"22":0.027552,"23":0.027552,"24":0.032144,"25":0.032144,"26":0.059696,"27":0.09184,"28":0.050512,"29":0.055104,"30":0.101024,"31":0.110208,"32":0.087248,"33":0.84952,"34":0.110208,"35":0.146944,"36":0.890848,"37":0.335216,"38":0.477568,"39":1.726592,"40":13.748448,"41":0.128576,"42":0.238784,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.032144,"11.6":0.02296,"12":0.018368,"12.1":0.119392,"15":0.009184,"16":0.004592,"17":0.004592,"18":0.009184,"19":0.009184,"20":0.009184,"21":null,"22":0.004592,"23":null,"24":null,"25":0.009184,"26":0.013776,"27":0.358176,"28":0.004592,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.009184,"5":0.036736,"5.1":0.050512,"6":0.041328,"6.1":0.009184,"7":0.027552,"7.1":0.036736,"8":0.082656},"android":{"2.1":0,"2.2":0,"2.3":0.383063387046,"3":0,"4":0.774191266452,"4.1":2.49394426198,"4.2-4.3":4.22176174987,"4.4":7.88707352698,"4.4.3-4.4.4":3.63305380767,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0131857672457,"6.0-6.1":0.0404826187368,"7.0-7.1":0.512394288583,"8":0.110112722964,"8.1":1.62763260247},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00889418052594,"12.1":0.0533650831557,"0":null},"ie":{"5.5":null,"6":0.125839122195,"7":0.0466070822943,"8":1.88758683292,"9":0.992730852868,"10":0.512677905237,"11":1.93419391521,"0":null},"ie_mob":{"10":0.0519452631579,"11":0.110294736842},"bb":{"7":0.012168,"10":null},"and_uc":{"0":6.32736},"op_mini":{"5.0-8.0":6.19479673632},"and_chr":{"0":14.118896},"and_ff":{"0":0.492128}},"total":93.6580757107}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SZ.json
new file mode 100644
index 0000000..4b6b05a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/SZ.json
@@ -0,0 +1 @@
+{"id":"SZ","name":"Swaziland","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.003347,"3":0.030123,"3.5":0.006694,"3.6":0.020082,"4":0.013388,"5":0.020082,"6":0.003347,"7":0.020082,"8":0.026776,"9":0.023429,"10":null,"11":0.006694,"12":0.043511,"13":0.013388,"14":0.083675,"15":0.016735,"16":0.070287,"17":0.013388,"18":0.030123,"19":0.030123,"20":0.03347,"21":0.03347,"22":0.016735,"23":0.030123,"24":0.006694,"25":0.123839,"26":0.083675,"27":0.080328,"28":0.036817,"29":0.056899,"30":0.210861,"31":0.558949,"32":0.103757,"33":0.404987,"34":0.187432,"35":4.863191,"36":0.659359,"37":0.013388,"38":0.003347,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":0.013388,"10":null,"11":0.023429,"12":0.006694,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.023429,"19":null,"20":0.013388,"21":0.013388,"22":null,"23":null,"24":null,"25":0.040164,"26":0.026776,"27":0.020082,"28":0.020082,"29":null,"30":0.006694,"31":0.157309,"32":0.043511,"33":0.056899,"34":0.03347,"35":0.113798,"36":0.247678,"37":0.053552,"38":0.244331,"39":0.428416,"40":10.064429,"41":0.050205,"42":0.013388,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.020082,"11.6":null,"12":0.006694,"12.1":0.03347,"15":null,"16":null,"17":null,"18":0.013388,"19":0.003347,"20":0.003347,"21":null,"22":null,"23":null,"24":0.023429,"25":0.016735,"26":0.050205,"27":0.679441,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.013388,"5.1":0.147268,"6":0.046858,"6.1":0.060246,"7":0.060246,"7.1":0.076981,"8":0.174044},"android":{"2.1":0,"2.2":0,"2.3":0.104342611498,"3":0,"4":0.210881909554,"4.1":0.679325318016,"4.2-4.3":1.14996541304,"4.4":2.14835945358,"4.4.3-4.4.4":0.989607294313,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00685407972688,"6.0-6.1":0.0210432272316,"7.0-7.1":0.266347133246,"8":0.0572375780701,"8.1":0.846057981725},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0587847164179,"12.1":0.352708298507,"0":null},"ie":{"5.5":null,"6":0.0940584137156,"7":0.0906991846543,"8":2.45895567285,"9":1.79046908966,"10":2.31114959415,"11":5.20680504497,"0":null},"ie_mob":{"10":0.971338,"11":2.06243},"bb":{"7":0.14137625,"10":null},"and_uc":{"0":3.160175},"op_mini":{"5.0-8.0":40.9435549851},"and_chr":{"0":3.526787},"and_ff":{"0":0.172978}},"total":90.94855525}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TC.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TC.json
new file mode 100644
index 0000000..f78dd7d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TC.json
@@ -0,0 +1 @@
+{"id":"TC","name":"Turks and Caicos Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.099593,"3":null,"3.5":null,"3.6":0.015322,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.007661,"11":null,"12":0.045966,"13":0.007661,"14":null,"15":null,"16":0.015322,"17":null,"18":0.015322,"19":null,"20":null,"21":null,"22":null,"23":0.007661,"24":null,"25":null,"26":null,"27":0.015322,"28":null,"29":null,"30":0.038305,"31":0.298779,"32":0.183864,"33":0.038305,"34":0.130237,"35":9.03998,"36":0.390711,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":0.007661,"10":null,"11":0.068949,"12":0.030644,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":0.038305,"22":null,"23":0.015322,"24":null,"25":0.038305,"26":0.015322,"27":0.015322,"28":null,"29":null,"30":0.038305,"31":0.091932,"32":0.061288,"33":0.099593,"34":0.068949,"35":0.168542,"36":1.164472,"37":0.543931,"38":0.582236,"39":1.003591,"40":37.745747,"41":0.084271,"42":0.291118,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.015322,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":0.015322,"24":null,"25":null,"26":0.015322,"27":0.38305,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.091932,"5":0.137898,"5.1":0.467321,"6":0.091932,"6.1":0.413694,"7":0.597558,"7.1":1.348336,"8":1.99186},"android":{"2.1":0,"2.2":0,"2.3":0.0745688470735,"3":0,"4":0.150707564612,"4.1":0.48548244121,"4.2-4.3":0.821827188273,"4.4":1.53533331448,"4.4.3-4.4.4":0.70722664435,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0411789886535,"6.0-6.1":0.12642671955,"7.0-7.1":1.60020105031,"8":0.343880677176,"8.1":5.08307656431},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00012634257285,"12.1":0.0007580554371,"0":null},"ie":{"5.5":null,"6":0.015322,"7":0.068949,"8":1.164472,"9":1.662437,"10":1.463251,"11":12.426142,"0":null},"ie_mob":{"10":0.236649350877,"11":0.502474649123},"bb":{"7":0.31985825,"10":null},"and_uc":{"0":0.130984},"op_mini":{"5.0-8.0":0.08799760199},"and_chr":{"0":11.190544},"and_ff":{"0":0.128645}},"total":98.46188325}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TD.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TD.json
new file mode 100644
index 0000000..01ca7b0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TD.json
@@ -0,0 +1 @@
+{"id":"TD","name":"Chad","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.001287,"3":0.032175,"3.5":0.018018,"3.6":0.074646,"4":0.034749,"5":0.007722,"6":0.015444,"7":0.006435,"8":0.003861,"9":0.006435,"10":0.05148,"11":0.782496,"12":0.011583,"13":0.009009,"14":0.014157,"15":0.068211,"16":0.023166,"17":0.030888,"18":0.042471,"19":0.029601,"20":0.033462,"21":0.055341,"22":0.01287,"23":0.029601,"24":0.074646,"25":0.037323,"26":0.003861,"27":0.006435,"28":0.018018,"29":0.01287,"30":0.138996,"31":0.087516,"32":0.037323,"33":0.081081,"34":0.637065,"35":2.50965,"36":0.185328,"37":null,"38":0.003861,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":0.003861,"10":0.006435,"11":0.059202,"12":0.006435,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":0.108108,"20":null,"21":0.061776,"22":null,"23":0.007722,"24":null,"25":null,"26":0.018018,"27":null,"28":0.018018,"29":null,"30":null,"31":0.419562,"32":0.020592,"33":0.05148,"34":0.010296,"35":0.009009,"36":0.072072,"37":0.023166,"38":0.037323,"39":0.226512,"40":2.540538,"41":0.003861,"42":0.009009,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":0.01287,"11":null,"11.1":0.003861,"11.5":0.009009,"11.6":null,"12":0.020592,"12.1":0.019305,"15":null,"16":null,"17":0.001287,"18":null,"19":0.016731,"20":0.011583,"21":0.003861,"22":null,"23":null,"24":null,"25":null,"26":0.006435,"27":0.119691,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.033462,"5":0.005148,"5.1":0.021879,"6":0.024453,"6.1":0.028314,"7":0.041184,"7.1":0.178893,"8":0.138996},"android":{"2.1":0,"2.2":0,"2.3":0.130971272482,"3":0,"4":0.26469983491,"4.1":0.852691916104,"4.2-4.3":1.44344128724,"4.4":2.69662956815,"4.4.3-4.4.4":1.24215912111,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0122676660307,"6.0-6.1":0.0376638869364,"7.0-7.1":0.47671719751,"8":0.102445772467,"8.1":1.51430347706},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0737911215352,"12.1":0.442746729211,"0":null},"ie":{"5.5":null,"6":0.0301709807445,"7":0.00918247240051,"8":0.577183979461,"9":0.228250028241,"10":0.407964130937,"11":1.79189389987,"0":null},"ie_mob":{"10":0.131115364035,"11":0.278395635965},"bb":{"7":0.17208175,"10":null},"and_uc":{"0":4.870567},"op_mini":{"5.0-8.0":51.3955161493},"and_chr":{"0":5.219872},"and_ff":{"0":0.304955}},"total":84.3473072417}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TG.json
new file mode 100644
index 0000000..18dbe94
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TG.json
@@ -0,0 +1 @@
+{"id":"TG","name":"Togo","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.039828,"3":0.09957,"3.5":0.019914,"3.6":0.092932,"4":0.026552,"5":0.046466,"6":0.046466,"7":0.059742,"8":0.046466,"9":0.073018,"10":0.086294,"11":0.192502,"12":0.292072,"13":0.192502,"14":0.119484,"15":0.16595,"16":0.411556,"17":0.152674,"18":0.126122,"19":0.604058,"20":0.192502,"21":0.29871,"22":0.205778,"23":0.325262,"24":0.179226,"25":0.26552,"26":0.258882,"27":0.305348,"28":0.418194,"29":0.73018,"30":1.49355,"31":0.876216,"32":0.770008,"33":1.765708,"34":1.46036,"35":25.138106,"36":1.885192,"37":0.292072,"38":0.013276,"39":null},"chrome":{"4":0.03319,"5":0.006638,"6":0.013276,"7":0.006638,"8":0.046466,"9":0.006638,"10":0.013276,"11":0.073018,"12":0.013276,"13":0.059742,"14":0.079656,"15":0.019914,"16":0.059742,"17":null,"18":0.013276,"19":null,"20":0.013276,"21":null,"22":0.026552,"23":null,"24":null,"25":0.079656,"26":0.06638,"27":0.013276,"28":0.046466,"29":0.073018,"30":0.185864,"31":0.212416,"32":0.039828,"33":0.212416,"34":0.073018,"35":0.112846,"36":0.617334,"37":0.086294,"38":0.219054,"39":0.6638,"40":12.964014,"41":0.073018,"42":0.059742,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.026552,"12":0.019914,"12.1":0.092932,"15":0.053104,"16":0.086294,"17":null,"18":0.03319,"19":0.013276,"20":0.013276,"21":null,"22":0.013276,"23":null,"24":0.006638,"25":0.006638,"26":0.079656,"27":1.081994,"28":null,"29":null},"safari":{"3.1":null,"3.2":0.006638,"4":0.026552,"5":0.03319,"5.1":0.06638,"6":0.019914,"6.1":0.039828,"7":0.039828,"7.1":0.053104,"8":0.086294},"android":{"2.1":0,"2.2":0,"2.3":0.117210385695,"3":0,"4":0.236888358457,"4.1":0.763101300551,"4.2-4.3":1.29178182971,"4.4":2.41330015178,"4.4.3-4.4.4":1.1116479738,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0058881417813,"6.0-6.1":0.0180776282759,"7.0-7.1":0.228811123607,"8":0.0491711489105,"8.1":0.726823957425},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0203870533049,"12.1":0.122322319829,"0":null},"ie":{"5.5":null,"6":0.0540779598253,"7":0.0540779598253,"8":1.81837139913,"9":0.824688887336,"10":1.18971511616,"11":3.7448987179,"0":null},"ie_mob":{"10":0.191604508772,"11":0.406831491228},"bb":{"7":0.0428655,"10":null},"and_uc":{"0":6.777792},"op_mini":{"5.0-8.0":14.1995826269},"and_chr":{"0":3.121664},"and_ff":{"0":0.245426}},"total":97.7267475402}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TH.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TH.json
new file mode 100644
index 0000000..e455dd1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TH.json
@@ -0,0 +1 @@
+{"id":"TH","name":"Thailand","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.029865,"3.5":0.011946,"3.6":0.053757,"4":0.017919,"5":0.011946,"6":0.017919,"7":0.029865,"8":0.017919,"9":0.011946,"10":0.005973,"11":0.017919,"12":0.047784,"13":0.011946,"14":0.029865,"15":0.017919,"16":0.023892,"17":0.023892,"18":0.011946,"19":0.011946,"20":0.017919,"21":0.017919,"22":0.023892,"23":0.017919,"24":0.017919,"25":0.017919,"26":0.053757,"27":0.047784,"28":0.023892,"29":0.047784,"30":0.071676,"31":0.095568,"32":0.095568,"33":0.107514,"34":0.191136,"35":5.871459,"36":0.501732,"37":0.023892,"38":0.005973,"39":null},"chrome":{"4":0.011946,"5":0.005973,"6":0.005973,"7":0.005973,"8":0.017919,"9":0.011946,"10":0.101541,"11":0.107514,"12":0.155298,"13":0.095568,"14":0.011946,"15":0.041811,"16":0.011946,"17":0.017919,"18":0.017919,"19":null,"20":0.017919,"21":0.035838,"22":0.047784,"23":0.017919,"24":0.011946,"25":0.041811,"26":0.053757,"27":0.047784,"28":0.029865,"29":0.065703,"30":0.053757,"31":0.149325,"32":0.053757,"33":1.636602,"34":0.131406,"35":0.280731,"36":0.471867,"37":0.459921,"38":0.854139,"39":2.622147,"40":29.50662,"41":0.161271,"42":0.328515,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.053757,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.011946,"26":0.011946,"27":0.256839,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.029865,"5":0.047784,"5.1":0.149325,"6":0.053757,"6.1":0.095568,"7":0.155298,"7.1":0.232947,"8":0.645084},"android":{"2.1":0,"2.2":0,"2.3":0.257880388814,"3":0,"4":0.521189838445,"4.1":1.6789370577,"4.2-4.3":2.84211333777,"4.4":5.30962147916,"4.4.3-4.4.4":2.44579189812,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0502224601868,"6.0-6.1":0.154191763731,"7.0-7.1":1.95162718094,"8":0.419401597349,"8.1":6.19938999779},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000480835820896,"12.1":0.00288501492537,"0":null},"ie":{"5.5":null,"6":0.0741763255814,"7":0.154534011628,"8":3.95607069767,"9":1.97803534884,"10":1.15591440698,"11":3.3132092093,"0":null},"ie_mob":{"10":0.323625969298,"11":0.687151030702},"bb":{"7":0.01107425,"10":null},"and_uc":{"0":0.24162},"op_mini":{"5.0-8.0":0.334902149254},"and_chr":{"0":17.44098},"and_ff":{"0":0.132891}},"total":98.74099525}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TJ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TJ.json
new file mode 100644
index 0000000..932eab3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TJ.json
@@ -0,0 +1 @@
+{"id":"TJ","name":"Tajikistan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":0.00428,"3.6":0.11128,"4":0.01284,"5":0.0214,"6":0.00428,"7":null,"8":0.0214,"9":0.0642,"10":0.01712,"11":0.00856,"12":0.03852,"13":0.07704,"14":0.00428,"15":0.00428,"16":0.01284,"17":0.05136,"18":0.00856,"19":0.02568,"20":0.01284,"21":0.00428,"22":0.01712,"23":0.0214,"24":0.01284,"25":0.0214,"26":0.03424,"27":0.03424,"28":0.02568,"29":0.01284,"30":0.0856,"31":0.05564,"32":0.07276,"33":0.08988,"34":0.214,"35":3.56952,"36":0.13696,"37":0.0214,"38":null,"39":null},"chrome":{"4":0.00856,"5":0.11128,"6":0.00856,"7":0.01284,"8":0.13696,"9":0.00856,"10":0.02996,"11":0.17976,"12":0.32528,"13":null,"14":0.0214,"15":0.05564,"16":0.107,"17":0.26964,"18":0.04708,"19":null,"20":0.07276,"21":0.00428,"22":0.01712,"23":0.02568,"24":0.03424,"25":0.02996,"26":0.02568,"27":0.0642,"28":0.20972,"29":0.0214,"30":0.03424,"31":0.17548,"32":0.06848,"33":0.1284,"34":0.03424,"35":0.17976,"36":0.1498,"37":0.07704,"38":0.1284,"39":0.88596,"40":18.30556,"41":0.05564,"42":0.52644,"43":null},"opera":{"9":null,"9.5-9.6":0.00428,"10.0-10.1":0.00856,"10.5":0.07276,"10.6":0.00428,"11":0.08132,"11.1":0.05136,"11.5":0.107,"11.6":0.15836,"12":0.12412,"12.1":1.58788,"15":0.02568,"16":0.02568,"17":0.01712,"18":0.0428,"19":0.03852,"20":0.07704,"21":0.02568,"22":0.02996,"23":0.05136,"24":0.05136,"25":0.10272,"26":0.33384,"27":2.46528,"28":0.02568,"29":0.00856},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.01284,"5.1":0.04708,"6":0.00856,"6.1":0.03852,"7":0.05992,"7.1":0.06848,"8":0.16264},"android":{"2.1":0,"2.2":0,"2.3":0.204841293274,"3":0,"4":0.413995034827,"4.1":1.33362463042,"4.2-4.3":2.25756667429,"4.4":4.2175744173,"4.4.3-4.4.4":1.94275794989,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0218363972286,"6.0-6.1":0.0670415704388,"7.0-7.1":0.848554734411,"8":0.182353071594,"8.1":2.69545422633},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0226848614072,"12.1":0.136109168443,"0":null},"ie":{"5.5":null,"6":0.120441204013,"7":0.0602206020067,"8":1.16139732441,"9":0.490367759197,"10":0.494669230769,"11":2.79595652174,"0":null},"ie_mob":{"10":0.346135263158,"11":0.734944736842},"bb":{"7":0.01144,"10":null},"and_uc":{"0":6.59516},"op_mini":{"5.0-8.0":15.8000059701},"and_chr":{"0":10.98652},"and_ff":{"0":0.06864}},"total":87.4370926421}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TK.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TK.json
new file mode 100644
index 0000000..c7e6760
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TK.json
@@ -0,0 +1 @@
+{"id":"TK","name":"Tokelau","month":"2015-01","access_date":"2015-02-01","data":{"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":null,"33":null,"34":null,"35":null,"36":null,"37":null,"38":null,"39":null,"40":null,"41":null,"42":null,"43":null},"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":null,"33":null,"34":null,"35":null,"36":null,"37":null,"38":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":null,"5.1":null,"6":null,"6.1":null,"7":null,"7.1":null,"8":null},"android":{"2.1":0,"2.2":0,"2.3":0,"3":0,"4":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":0,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8":0,"8.1":0},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0,"12.1":0,"0":null},"ie":{"5.5":null,"6":null,"7":100,"8":null,"9":null,"10":null,"11":null,"0":null},"ie_mob":{"10":0,"11":0},"bb":{"7":0,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0},"and_chr":{"0":0},"and_ff":{"0":null}},"total":100}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TL.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TL.json
new file mode 100644
index 0000000..8ee1e93
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TL.json
@@ -0,0 +1 @@
+{"id":"TL","name":"Timor-Leste","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.09374,"3.5":0.665554,"3.6":0.834286,"4":0.60931,"5":0.37496,"6":0.684302,"7":0.056244,"8":0.037496,"9":0.149984,"10":0.628058,"11":0.440578,"12":0.4687,"13":0.731172,"14":0.271846,"15":0.262472,"16":1.584206,"17":0.009374,"18":0.178106,"19":0.393708,"20":0.224976,"21":0.478074,"22":0.04687,"23":0.215602,"24":0.262472,"25":0.206228,"26":0.196854,"27":0.206228,"28":3.215282,"29":0.721798,"30":0.834286,"31":1.040514,"32":0.403082,"33":0.881156,"34":0.881156,"35":20.24784,"36":4.799488,"37":0.440578,"38":0.028122,"39":null},"chrome":{"4":0.084366,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":0.103114,"13":0.037496,"14":null,"15":null,"16":0.009374,"17":0.018748,"18":0.112488,"19":null,"20":0.009374,"21":null,"22":null,"23":0.121862,"24":0.037496,"25":null,"26":null,"27":0.112488,"28":0.009374,"29":null,"30":0.299968,"31":0.103114,"32":0.28122,"33":0.412456,"34":0.168732,"35":0.159358,"36":1.059262,"37":0.431204,"38":0.224976,"39":3.23403,"40":15.448352,"41":0.084366,"42":0.37496,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.018748,"15":null,"16":null,"17":0.056244,"18":null,"19":null,"20":0.018748,"21":null,"22":null,"23":null,"24":null,"25":0.04687,"26":null,"27":0.431204,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.112488,"5":0.103114,"5.1":0.131236,"6":0.356212,"6.1":0.271846,"7":0.09374,"7.1":0.149984,"8":0.18748},"android":{"2.1":0,"2.2":0,"2.3":0.034028784697,"3":0,"4":0.0687739648612,"4.1":0.221545298264,"4.2-4.3":0.375033027134,"4.4":0.700634767024,"4.4.3-4.4.4":0.322736158021,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00792893523446,"6.0-6.1":0.0243432222111,"7.0-7.1":0.308115641129,"8":0.0662135644141,"8.1":0.978736637012},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00135967022033,"12.1":0.00815802132196,"0":null},"ie":{"5.5":null,"6":0.384334,"7":1.631076,"8":6.98363,"9":6.13997,"10":2.830948,"11":6.46806,"0":null},"ie_mob":{"10":0.0410881140351,"11":0.0872418859649},"bb":{"7":0.014711,"10":null},"and_uc":{"0":1.272032},"op_mini":{"5.0-8.0":0.947010308458},"and_chr":{"0":0.718616},"and_ff":{"0":0.014398}},"total":99.371517}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TM.json
new file mode 100644
index 0000000..8dde43e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TM.json
@@ -0,0 +1 @@
+{"id":"TM","name":"Turkmenistan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.064449,"3":0.055242,"3.5":0.03069,"3.6":0.147312,"4":0.006138,"5":0.018414,"6":null,"7":0.006138,"8":0.012276,"9":0.052173,"10":0.009207,"11":null,"12":0.021483,"13":0.009207,"14":0.018414,"15":0.021483,"16":0.018414,"17":0.012276,"18":null,"19":0.033759,"20":0.003069,"21":0.024552,"22":0.009207,"23":0.018414,"24":0.27621,"25":0.006138,"26":0.024552,"27":0.006138,"28":0.021483,"29":0.052173,"30":0.082863,"31":0.024552,"32":0.067518,"33":0.09207,"34":0.211761,"35":2.010195,"36":0.104346,"37":null,"38":null,"39":null},"chrome":{"4":0.03069,"5":0.178002,"6":0.012276,"7":0.003069,"8":0.248589,"9":0.036828,"10":0.006138,"11":0.254727,"12":0.217899,"13":0.012276,"14":0.024552,"15":0.052173,"16":0.107415,"17":0.082863,"18":0.03069,"19":0.003069,"20":0.03069,"21":null,"22":0.095139,"23":0.009207,"24":0.006138,"25":0.003069,"26":0.012276,"27":0.012276,"28":0.098208,"29":0.015345,"30":0.770319,"31":0.205623,"32":0.135036,"33":0.116622,"34":0.082863,"35":0.042966,"36":0.036828,"37":0.085932,"38":0.472626,"39":0.791802,"40":12.159378,"41":0.024552,"42":0.073656,"43":null},"opera":{"9":null,"9.5-9.6":0.006138,"10.0-10.1":0.06138,"10.5":0.033759,"10.6":0.03069,"11":0.135036,"11.1":0.018414,"11.5":0.015345,"11.6":0.070587,"12":0.107415,"12.1":2.924757,"15":0.06138,"16":0.018414,"17":0.006138,"18":0.021483,"19":0.116622,"20":0.055242,"21":0.095139,"22":0.046035,"23":0.012276,"24":0.049104,"25":0.052173,"26":0.039897,"27":0.085932,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.018414,"5":0.003069,"5.1":0.012276,"6":0.021483,"6.1":0.021483,"7":0.089001,"7.1":0.015345,"8":0.09207},"android":{"2.1":0,"2.2":0,"2.3":0.412221206986,"3":0,"4":0.833120755172,"4.1":2.68377701601,"4.2-4.3":4.54311161805,"4.4":8.48741769332,"4.4.3-4.4.4":3.90959271047,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0752130768149,"6.0-6.1":0.230917341099,"7.0-7.1":2.92275377448,"8":0.628095167788,"8.1":9.28419663982},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00199013788202,"12.1":0.0119408272921,"0":null},"ie":{"5.5":null,"6":0.0123070195831,"7":0.0892258919773,"8":1.15685984081,"9":0.495357538219,"10":0.726114155401,"11":2.37525477953,"0":null},"ie_mob":{"10":0.217475324561,"11":0.461762675439},"bb":{"7":0.00866375,"10":null},"and_uc":{"0":3.756602},"op_mini":{"5.0-8.0":1.38613103483},"and_chr":{"0":24.477192},"and_ff":{"0":0.187137}},"total":93.8650509755}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TN.json
new file mode 100644
index 0000000..ea1d5b8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TN.json
@@ -0,0 +1 @@
+{"id":"TN","name":"Tunisia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.01673,"3":0.15057,"3.5":0.06692,"3.6":0.175665,"4":0.041825,"5":0.01673,"6":0.008365,"7":0.01673,"8":0.025095,"9":0.03346,"10":0.03346,"11":0.03346,"12":0.125475,"13":0.03346,"14":0.041825,"15":0.05019,"16":0.041825,"17":0.03346,"18":0.025095,"19":0.025095,"20":0.03346,"21":0.108745,"22":0.01673,"23":0.01673,"24":0.01673,"25":0.01673,"26":0.058555,"27":0.025095,"28":0.025095,"29":0.075285,"30":0.11711,"31":0.31787,"32":0.242585,"33":0.20076,"34":0.309505,"35":9.979445,"36":0.58555,"37":0.025095,"38":null,"39":null},"chrome":{"4":0.058555,"5":0.05019,"6":0.058555,"7":0.06692,"8":0.092015,"9":0.05019,"10":0.13384,"11":0.1673,"12":0.10038,"13":0.108745,"14":0.075285,"15":0.108745,"16":0.058555,"17":0.01673,"18":0.058555,"19":0.008365,"20":0.01673,"21":0.06692,"22":0.041825,"23":0.08365,"24":0.05019,"25":0.058555,"26":0.108745,"27":0.10038,"28":0.075285,"29":0.15057,"30":0.326235,"31":0.23422,"32":0.142205,"33":0.48517,"34":0.326235,"35":0.409885,"36":1.30494,"37":0.761215,"38":0.86996,"39":3.253985,"40":49.328405,"41":0.56882,"42":0.1673,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.075285,"15":null,"16":null,"17":null,"18":null,"19":0.008365,"20":0.025095,"21":null,"22":0.008365,"23":null,"24":0.008365,"25":0.01673,"26":0.058555,"27":1.229655,"28":0.008365,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.058555,"5":0.05019,"5.1":0.15057,"6":0.041825,"6.1":0.05019,"7":0.15057,"7.1":0.142205,"8":0.175665},"android":{"2.1":0,"2.2":0,"2.3":0.101440030149,"3":0,"4":0.205015639879,"4.1":0.660427985757,"4.2-4.3":1.11797591122,"4.4":2.08859683127,"4.4.3-4.4.4":0.962078601726,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.011818986344,"6.0-6.1":0.0362863615825,"7.0-7.1":0.459281662315,"8":0.0986989035044,"8.1":1.45891908625},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00175933901919,"12.1":0.0105560341151,"0":null},"ie":{"5.5":null,"6":0.0830303703704,"7":0.175286337449,"8":2.45400872428,"9":0.987138847737,"10":0.618114979424,"11":2.40788074074,"0":null},"ie_mob":{"10":0.157046052632,"11":0.333453947368},"bb":{"7":0.0335175,"10":null},"and_uc":{"0":0.446355},"op_mini":{"5.0-8.0":1.22537962687},"and_chr":{"0":5.32382},"and_ff":{"0":0.10137}},"total":97.1286675}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TO.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TO.json
new file mode 100644
index 0000000..48b463b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TO.json
@@ -0,0 +1 @@
+{"id":"TO","name":"Tonga","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.041295,"3.5":null,"3.6":0.140403,"4":0.156921,"5":null,"6":0.132144,"7":0.115626,"8":null,"9":null,"10":null,"11":0.024777,"12":0.08259,"13":0.222993,"14":0.074331,"15":0.173439,"16":0.057813,"17":0.041295,"18":0.115626,"19":0.016518,"20":null,"21":0.016518,"22":0.049554,"23":0.008259,"24":0.041295,"25":0.066072,"26":0.033036,"27":0.090849,"28":0.049554,"29":0.090849,"30":0.198216,"31":0.264288,"32":0.396432,"33":0.140403,"34":1.189296,"35":17.682519,"36":8.729763,"37":0.602907,"38":0.08259,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.024777,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.008259,"19":null,"20":1.536174,"21":null,"22":null,"23":null,"24":null,"25":0.222993,"26":0.066072,"27":0.057813,"28":0.033036,"29":0.008259,"30":0.156921,"31":1.090188,"32":0.08259,"33":0.099108,"34":0.041295,"35":0.074331,"36":2.345556,"37":0.231252,"38":0.272547,"39":1.965642,"40":25.635936,"41":0.181698,"42":1.032375,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.008259,"12":null,"12.1":0.066072,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.049554,"26":null,"27":0.627684,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.041295,"5":0.024777,"5.1":0.355137,"6":0.536835,"6.1":0.231252,"7":0.173439,"7.1":0.437727,"8":0.512058},"android":{"2.1":0,"2.2":0,"2.3":0.122081765256,"3":0,"4":0.246733672939,"4.1":0.794816545379,"4.2-4.3":1.34546956025,"4.4":2.51359929307,"4.4.3-4.4.4":1.15784916311,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0165411607591,"6.0-6.1":0.0507842654885,"7.0-7.1":0.642783703183,"8":0.138133202129,"8.1":2.04181766844},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00160365031983,"12.1":0.00962190191898,"0":null},"ie":{"5.5":null,"6":0.0331026944818,"7":0.0993080834455,"8":1.64685905047,"9":0.993080834455,"10":1.67996174495,"11":7.82051157133,"0":null},"ie_mob":{"10":0.452072030702,"11":0.959878969298},"bb":{"7":0.0095755,"10":null},"and_uc":{"0":0.238517},"op_mini":{"5.0-8.0":1.11694244776},"and_chr":{"0":4.805939},"and_ff":{"0":0.012187}},"total":98.3088534791}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TR.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TR.json
new file mode 100644
index 0000000..cb5db03
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TR.json
@@ -0,0 +1 @@
+{"id":"TR","name":"Turkey","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.006537,"3.5":null,"3.6":0.019611,"4":0.006537,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.006537,"11":0.006537,"12":0.013074,"13":null,"14":0.006537,"15":0.006537,"16":0.013074,"17":0.013074,"18":0.013074,"19":0.013074,"20":0.013074,"21":0.013074,"22":0.006537,"23":0.013074,"24":0.013074,"25":0.013074,"26":0.019611,"27":0.019611,"28":0.019611,"29":0.026148,"30":0.052296,"31":0.098055,"32":0.104592,"33":0.084981,"34":0.117666,"35":3.490758,"36":0.209184,"37":0.006537,"38":null,"39":null},"chrome":{"4":0.032685,"5":null,"6":0.013074,"7":null,"8":0.013074,"9":0.006537,"10":0.019611,"11":0.111129,"12":0.058833,"13":0.045759,"14":0.026148,"15":0.06537,"16":0.019611,"17":0.013074,"18":0.032685,"19":null,"20":null,"21":0.013074,"22":0.248406,"23":0.032685,"24":0.019611,"25":0.039222,"26":0.104592,"27":0.045759,"28":0.058833,"29":0.045759,"30":0.228795,"31":0.137277,"32":0.091518,"33":0.156888,"34":0.163425,"35":0.516423,"36":0.424905,"37":0.549108,"38":0.869421,"39":2.660559,"40":40.00644,"41":0.06537,"42":0.039222,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":0.006537,"12.1":0.039222,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.013074,"27":0.549108,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.006537,"5":0.013074,"5.1":0.039222,"6":0.013074,"6.1":0.019611,"7":0.039222,"7.1":0.058833,"8":0.169962},"android":{"2.1":0,"2.2":0,"2.3":0.208492832935,"3":0,"4":0.421374988668,"4.1":1.35739807548,"4.2-4.3":2.29781048508,"4.4":4.29275769706,"4.4.3-4.4.4":1.97738992078,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0273917423436,"6.0-6.1":0.0840974545637,"7.0-7.1":1.06443349633,"8":0.228745076413,"8.1":3.38119823034},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0012060199005,"12.1":0.00723611940299,"0":null},"ie":{"5.5":null,"6":0.0197324303406,"7":0.0855071981424,"8":1.97982051084,"9":1.13132600619,"10":1.24314311146,"11":6.14994078947,"0":null},"ie_mob":{"10":0.31599875,"11":0.67095625},"bb":{"7":0.0155835,"10":null},"and_uc":{"0":0.083112},"op_mini":{"5.0-8.0":0.839992860697},"and_chr":{"0":16.66536},"and_ff":{"0":0.072723}},"total":97.0102465464}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TT.json
new file mode 100644
index 0000000..57c6ef3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TT.json
@@ -0,0 +1 @@
+{"id":"TT","name":"Trinidad and Tobago","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.031848,"4":null,"5":null,"6":null,"7":null,"8":0.015924,"9":null,"10":0.023886,"11":0.031848,"12":0.023886,"13":0.031848,"14":null,"15":0.007962,"16":0.023886,"17":0.023886,"18":0.015924,"19":0.007962,"20":null,"21":0.007962,"22":0.007962,"23":0.007962,"24":0.007962,"25":null,"26":0.023886,"27":null,"28":0.015924,"29":0.015924,"30":0.055734,"31":0.095544,"32":0.071658,"33":0.07962,"34":0.207012,"35":10.247094,"36":0.971364,"37":0.023886,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.007962,"11":0.071658,"12":0.015924,"13":null,"14":0.007962,"15":0.015924,"16":0.007962,"17":null,"18":0.063696,"19":0.007962,"20":0.015924,"21":0.015924,"22":0.230898,"23":null,"24":0.023886,"25":0.015924,"26":0.07962,"27":0.095544,"28":0.047772,"29":0.03981,"30":0.03981,"31":0.214974,"32":0.167202,"33":0.366252,"34":0.167202,"35":0.390138,"36":1.624248,"37":0.47772,"38":0.724542,"39":2.643384,"40":39.762228,"41":0.222936,"42":0.509568,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.207012,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.015924,"27":0.71658,"28":0.031848,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.095544,"5":0.087582,"5.1":0.270708,"6":0.047772,"6.1":0.191088,"7":0.175164,"7.1":0.453834,"8":1.066908},"android":{"2.1":0,"2.2":0,"2.3":0.141659962574,"3":0,"4":0.28630224015,"4.1":0.922280914232,"4.2-4.3":1.56124190332,"4.4":2.91670407153,"4.4.3-4.4.4":1.3435329082,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0166101399739,"6.0-6.1":0.0509960437795,"7.0-7.1":0.645464211266,"8":0.13870923908,"8.1":2.0503323659},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000202786069652,"12.1":0.00121671641791,"0":null},"ie":{"5.5":null,"6":0.0159593866667,"7":0.07181724,"8":1.0772586,"9":1.10119768,"10":2.04280149333,"11":10.0544136,"0":null},"ie_mob":{"10":0.341266675439,"11":0.724607324561},"bb":{"7":0.125337,"10":null},"and_uc":{"0":0.181382},"op_mini":{"5.0-8.0":0.141240497512},"and_chr":{"0":9.109996},"and_ff":{"0":0.130432}},"total":98.705837}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TV.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TV.json
new file mode 100644
index 0000000..d0a2f59
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TV.json
@@ -0,0 +1 @@
+{"id":"TV","name":"Tuvalu","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.204226,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.102113,"12":0.362037,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":0.566263,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":0.102113,"29":0.055698,"30":null,"31":0.46415,"32":0.519848,"33":0.724074,"34":0.362037,"35":18.630981,"36":0.46415,"37":0.102113,"38":null,"39":null},"chrome":{"4":null,"5":0.055698,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.055698,"21":null,"22":null,"23":0.055698,"24":0.204226,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":0.157811,"33":0.102113,"34":null,"35":0.872602,"36":0.519848,"37":1.346035,"38":1.8566,"39":0.872602,"40":36.537888,"41":0.102113,"42":0.46415,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":0.102113,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null},"safari":{"3.1":0.055698,"3.2":null,"4":0,"5":null,"5.1":0.46415,"6":0.204226,"6.1":0.259924,"7":0.621961,"7.1":3.453276,"8":0.204226},"android":{"2.1":0,"2.2":0,"2.3":0.0163011466888,"3":0,"4":0.0329454754132,"4.1":0.106129044495,"4.2-4.3":0.179655795613,"4.4":0.335632030772,"4.4.3-4.4.4":0.154603507017,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0280489622452,"6.0-6.1":0.0861152349633,"7.0-7.1":1.08997283111,"8":0.2342334391,"8.1":3.46232453258},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0,"12.1":0,"0":null},"ie":{"5.5":null,"6":null,"7":0.055698,"8":0.46415,"9":0.9283,"10":11.51092,"11":6.915835,"0":null},"ie_mob":{"10":0,"11":0},"bb":{"7":0,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0},"and_chr":{"0":1.135011},"and_ff":{"0":null}},"total":97.964335}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TW.json
new file mode 100644
index 0000000..3ee4a20
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TW.json
@@ -0,0 +1 @@
+{"id":"TW","name":"Taiwan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.021232,"3.5":null,"3.6":0.010616,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.010616,"12":0.015924,"13":null,"14":null,"15":null,"16":0.010616,"17":0.005308,"18":0.005308,"19":null,"20":null,"21":0.005308,"22":0.005308,"23":0.010616,"24":0.005308,"25":0.005308,"26":0.010616,"27":0.010616,"28":0.021232,"29":0.015924,"30":0.02654,"31":0.122084,"32":0.095544,"33":0.058388,"34":0.143316,"35":3.736832,"36":0.228244,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.483028,"12":null,"13":null,"14":null,"15":null,"16":null,"17":0.005308,"18":0.021232,"19":null,"20":0.005308,"21":0.015924,"22":0.015924,"23":0.010616,"24":0.010616,"25":0.015924,"26":0.02654,"27":0.063696,"28":0.047772,"29":0.05308,"30":0.084928,"31":0.360944,"32":0.069004,"33":0.207012,"34":0.143316,"35":0.222936,"36":0.307864,"37":0.34502,"38":0.536108,"39":1.719792,"40":24.315948,"41":0.095544,"42":0.074312,"43":0.005308},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.037156,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.005308,"26":0.010616,"27":0.143316,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.031848,"5":0.047772,"5.1":0.084928,"6":0.02654,"6.1":0.063696,"7":0.138008,"7.1":0.196396,"8":0.541416},"android":{"2.1":0,"2.2":0,"2.3":0.313811340056,"3":0,"4":0.63422923464,"4.1":2.04307698763,"4.2-4.3":3.45853129515,"4.4":6.46121032789,"4.4.3-4.4.4":2.97625281464,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0391001570439,"6.0-6.1":0.120044341801,"7.0-7.1":1.51941838337,"8":0.3265206097,"8.1":4.82646850808},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000106712153518,"12.1":0.000640272921109,"0":null},"ie":{"5.5":null,"6":0.174046226671,"7":0.114217836253,"8":4.45993455846,"9":1.28902986629,"10":1.03339947086,"11":8.14210004147,"0":null},"ie_mob":{"10":0.0645973157895,"11":0.137158684211},"bb":{"7":0.001173,"10":null},"and_uc":{"0":0.145452},"op_mini":{"5.0-8.0":0.0743250149254},"and_chr":{"0":25.747132},"and_ff":{"0":0.168912}},"total":99.441697}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TZ.json
new file mode 100644
index 0000000..d355d5f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/TZ.json
@@ -0,0 +1 @@
+{"id":"TZ","name":"Tanzania","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.003954,"3":0.027678,"3.5":0.011862,"3.6":0.049425,"4":0.053379,"5":0.025701,"6":0.021747,"7":0.01977,"8":0.041517,"9":0.03954,"10":0.03954,"11":0.073149,"12":0.114666,"13":0.081057,"14":0.057333,"15":0.063264,"16":0.083034,"17":0.037563,"18":0.043494,"19":0.041517,"20":0.047448,"21":0.047448,"22":0.017793,"23":0.041517,"24":0.027678,"25":0.027678,"26":0.031632,"27":0.027678,"28":0.051402,"29":0.11862,"30":0.156183,"31":0.128505,"32":0.11862,"33":0.215493,"34":0.262941,"35":4.90296,"36":0.858018,"37":0.031632,"38":0.005931,"39":null},"chrome":{"4":0.003954,"5":0.005931,"6":0.003954,"7":null,"8":0.007908,"9":0.005931,"10":0.011862,"11":0.051402,"12":0.011862,"13":0.003954,"14":0.003954,"15":0.005931,"16":0.011862,"17":null,"18":0.005931,"19":0.001977,"20":0.005931,"21":0.021747,"22":0.003954,"23":0.003954,"24":0.003954,"25":0.015816,"26":0.017793,"27":0.005931,"28":0.007908,"29":0.015816,"30":0.011862,"31":0.049425,"32":0.005931,"33":0.071172,"34":0.013839,"35":0.031632,"36":0.328182,"37":0.055356,"38":0.045471,"39":0.225378,"40":5.10066,"41":0.063264,"42":0.083034,"43":null},"opera":{"9":null,"9.5-9.6":0.005931,"10.0-10.1":0.011862,"10.5":null,"10.6":0.005931,"11":0.005931,"11.1":0.003954,"11.5":0.011862,"11.6":0.01977,"12":0.017793,"12.1":0.122574,"15":0.025701,"16":0.011862,"17":0.011862,"18":0.007908,"19":0.01977,"20":0.007908,"21":0.015816,"22":0.007908,"23":0.003954,"24":0.003954,"25":0.013839,"26":0.075126,"27":0.693927,"28":0.013839,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.009885,"5":0.023724,"5.1":0.092919,"6":0.041517,"6.1":0.031632,"7":0.061287,"7.1":0.088965,"8":0.168045},"android":{"2.1":0,"2.2":0,"2.3":0.225509773365,"3":0,"4":0.455767120907,"4.1":1.46818731396,"4.2-4.3":2.48535508119,"4.4":4.64312754424,"4.4.3-4.4.4":2.13878216634,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00560216306858,"6.0-6.1":0.0171996234562,"7.0-7.1":0.217698091174,"8":0.0467829758008,"8.1":0.691523146501},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0711977100213,"12.1":0.427186260128,"0":null},"ie":{"5.5":null,"6":0.0343181413043,"7":0.016149713555,"8":0.809504391944,"9":0.27252641624,"10":0.429986123402,"11":1.58267192839,"0":null},"ie_mob":{"10":0.282564429825,"11":0.599965570175},"bb":{"7":0.040115,"10":null},"and_uc":{"0":5.29518},"op_mini":{"5.0-8.0":49.5892050299},"and_chr":{"0":4.692212},"and_ff":{"0":0.312897}},"total":92.8609607148}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UA.json
new file mode 100644
index 0000000..8d85401
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UA.json
@@ -0,0 +1 @@
+{"id":"UA","name":"Ukraine","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.027351,"3":0.054702,"3.5":0.200574,"3.6":0.355563,"4":0.027351,"5":0.009117,"6":0.018234,"7":0.009117,"8":0.009117,"9":0.027351,"10":0.036468,"11":0.036468,"12":0.072936,"13":0.018234,"14":0.027351,"15":0.027351,"16":0.036468,"17":0.036468,"18":0.027351,"19":0.082053,"20":0.164106,"21":0.054702,"22":0.027351,"23":0.063819,"24":0.063819,"25":0.045585,"26":0.072936,"27":0.036468,"28":0.109404,"29":0.063819,"30":0.100287,"31":0.45585,"32":0.300861,"33":0.264393,"34":0.392031,"35":12.736449,"36":0.838764,"37":0.054702,"38":null,"39":null},"chrome":{"4":0.027351,"5":0.018234,"6":0.018234,"7":null,"8":0.027351,"9":0.018234,"10":0.018234,"11":0.072936,"12":0.054702,"13":0.018234,"14":0.018234,"15":0.045585,"16":0.027351,"17":0.054702,"18":0.036468,"19":0.009117,"20":0.009117,"21":0.018234,"22":0.082053,"23":0.018234,"24":0.063819,"25":0.018234,"26":0.054702,"27":0.136755,"28":0.218808,"29":0.063819,"30":0.063819,"31":0.136755,"32":0.054702,"33":0.136755,"34":0.145872,"35":0.492318,"36":0.464967,"37":0.574371,"38":0.437616,"39":1.73223,"40":35.993916,"41":0.136755,"42":0.665541,"43":0.018234},"opera":{"9":null,"9.5-9.6":0.027351,"10.0-10.1":0.036468,"10.5":0.018234,"10.6":0.054702,"11":0.027351,"11.1":0.045585,"11.5":0.09117,"11.6":0.200574,"12":0.300861,"12.1":6.47307,"15":0.027351,"16":0.045585,"17":0.036468,"18":0.072936,"19":0.18234,"20":0.136755,"21":0.045585,"22":0.063819,"23":0.027351,"24":0.045585,"25":0.072936,"26":0.246159,"27":8.105013,"28":0.100287,"29":0.036468},"safari":{"3.1":null,"3.2":null,"4":0.027351,"5":0.036468,"5.1":0.127638,"6":0.036468,"6.1":0.063819,"7":0.154989,"7.1":0.18234,"8":0.793179},"android":{"2.1":0,"2.2":0,"2.3":0.0380225179333,"3":0,"4":0.0768455099283,"4.1":0.247546603597,"4.2-4.3":0.419048171328,"4.4":0.782863632394,"4.4.3-4.4.4":0.36061356482,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0077222379757,"6.0-6.1":0.023708625364,"7.0-7.1":0.300083458179,"8":0.0644874609901,"8.1":0.953222217492},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00267222032694,"12.1":0.0160333219616,"0":null},"ie":{"5.5":null,"6":0.113218987627,"7":0.367961709786,"8":2.24550992126,"9":0.981231226097,"10":0.943491563555,"11":3.72679167604,"0":null},"ie_mob":{"10":0.0590874166667,"11":0.125459583333},"bb":{"7":0.00596025,"10":null},"and_uc":{"0":0.493597},"op_mini":{"5.0-8.0":1.86120145771},"and_chr":{"0":2.741804},"and_ff":{"0":0.056512}},"total":94.1445163344}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UG.json
new file mode 100644
index 0000000..ee09949
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UG.json
@@ -0,0 +1 @@
+{"id":"UG","name":"Uganda","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.016788,"3":0.04197,"3.5":0.033576,"3.6":0.163683,"4":0.109122,"5":0.062955,"6":0.04197,"7":0.058758,"8":0.096531,"9":0.12591,"10":0.092334,"11":0.151092,"12":0.297987,"13":0.272805,"14":0.172077,"15":0.16788,"16":0.180471,"17":0.184668,"18":0.092334,"19":0.159486,"20":0.184668,"21":0.176274,"22":0.092334,"23":0.113319,"24":0.176274,"25":0.113319,"26":0.151092,"27":0.151092,"28":0.12591,"29":0.386124,"30":0.554004,"31":0.457473,"32":0.415503,"33":0.730278,"34":0.860385,"35":12.38115,"36":2.253789,"37":0.075546,"38":0.016788,"39":null},"chrome":{"4":0.004197,"5":0.025182,"6":0.004197,"7":0.012591,"8":0.008394,"9":0.012591,"10":0.008394,"11":0.058758,"12":0.008394,"13":0.012591,"14":0.008394,"15":0.008394,"16":null,"17":null,"18":0.033576,"19":0.029379,"20":0.020985,"21":0.016788,"22":0.012591,"23":0.008394,"24":0.012591,"25":0.037773,"26":0.025182,"27":0.020985,"28":0.033576,"29":0.020985,"30":0.037773,"31":0.08394,"32":0.020985,"33":0.071349,"34":0.046167,"35":0.088137,"36":0.310578,"37":0.163683,"38":0.176274,"39":0.679914,"40":10.735926,"41":0.058758,"42":0.130107,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.008394,"10.5":null,"10.6":null,"11":0.004197,"11.1":0.008394,"11.5":0.020985,"11.6":0.020985,"12":0.012591,"12.1":0.138501,"15":0.008394,"16":0.008394,"17":0.012591,"18":0.016788,"19":0.008394,"20":0.020985,"21":0.004197,"22":0.016788,"23":null,"24":0.004197,"25":0.016788,"26":0.075546,"27":0.512034,"28":0.016788,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.004197,"5":0.054561,"5.1":0.100728,"6":0.050364,"6.1":0.046167,"7":0.130107,"7.1":0.088137,"8":0.222441},"android":{"2.1":0,"2.2":0,"2.3":0.112331697682,"3":0,"4":0.227028273209,"4.1":0.731338473854,"4.2-4.3":1.23801355234,"4.4":2.31285053332,"4.4.3-4.4.4":1.06537746959,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00627730886635,"6.0-6.1":0.019272439502,"7.0-7.1":0.243934019982,"8":0.0524210354453,"8.1":0.774862196204},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0534436915423,"12.1":0.320662149254,"0":null},"ie":{"5.5":null,"6":0.0840875219684,"7":0.0252262565905,"8":1.15620342707,"9":0.508729507909,"10":0.74417456942,"11":2.25774996485,"0":null},"ie_mob":{"10":0.464494517544,"11":0.986255482456},"bb":{"7":0.052227,"10":null},"and_uc":{"0":3.313513},"op_mini":{"5.0-8.0":37.2235311592},"and_chr":{"0":3.633256},"and_ff":{"0":0.243726}},"total":94.4698122478}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/US.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/US.json
new file mode 100644
index 0000000..5defe7f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/US.json
@@ -0,0 +1 @@
+{"id":"US","name":"United States of America","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007008,"3":0.056064,"3.5":0.007008,"3.6":0.154176,"4":0.007008,"5":null,"6":0.063072,"7":null,"8":null,"9":0.007008,"10":0.014016,"11":0.021024,"12":0.028032,"13":0.007008,"14":0.014016,"15":0.014016,"16":0.042048,"17":0.028032,"18":0.014016,"19":0.014016,"20":0.021024,"21":0.07008,"22":0.021024,"23":0.028032,"24":0.091104,"25":0.021024,"26":0.042048,"27":0.3504,"28":0.049056,"29":0.056064,"30":0.063072,"31":0.84096,"32":0.49056,"33":0.126144,"34":0.371424,"35":7.891008,"36":0.469536,"37":0.007008,"38":null,"39":null},"chrome":{"4":0.014016,"5":0.014016,"6":0.007008,"7":null,"8":0.007008,"9":0.007008,"10":0.056064,"11":0.084096,"12":0.028032,"13":0.028032,"14":0.03504,"15":0.021024,"16":null,"17":0.007008,"18":0.03504,"19":null,"20":0.007008,"21":0.196224,"22":0.03504,"23":0.007008,"24":0.028032,"25":0.014016,"26":0.021024,"27":0.063072,"28":0.049056,"29":0.154176,"30":0.03504,"31":0.189216,"32":0.063072,"33":0.119136,"34":0.24528,"35":0.45552,"36":1.065216,"37":1.674912,"38":0.413472,"39":1.773024,"40":20.715648,"41":0.168192,"42":0.084096,"43":0.007008},"opera":{"9":null,"9.5-9.6":0.007008,"10.0-10.1":0.042048,"10.5":null,"10.6":null,"11":null,"11.1":0.014016,"11.5":0.014016,"11.6":null,"12":0.007008,"12.1":0.098112,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.007008,"26":0.021024,"27":0.154176,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.133152,"5":0.203232,"5.1":0.714816,"6":0.133152,"6.1":0.574656,"7":0.77088,"7.1":1.219392,"8":2.431776},"android":{"2.1":0,"2.2":0,"2.3":0.0608726894688,"3":0,"4":0.123026909242,"4.1":0.396313246699,"4.2-4.3":0.670881114461,"4.4":1.2533366379,"4.4.3-4.4.4":0.577329402225,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0863251635706,"6.0-6.1":0.265033396927,"7.0-7.1":3.35456556682,"8":0.720890839643,"8.1":10.655857033},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000157361762615,"12.1":0.000944170575693,"0":null},"ie":{"5.5":null,"6":0.102285653333,"7":0.211877424762,"8":5.09236431238,"9":2.96628394667,"10":2.35257002667,"11":12.2669722819,"0":null},"ie_mob":{"10":0.155190315789,"11":0.329513684211},"bb":{"7":0.047124,"10":null},"and_uc":{"0":0.23936},"op_mini":{"5.0-8.0":0.109602467662},"and_chr":{"0":10.708304},"and_ff":{"0":0.122672}},"total":98.8491416457}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UY.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UY.json
new file mode 100644
index 0000000..0ecdd20
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UY.json
@@ -0,0 +1 @@
+{"id":"UY","name":"Uruguay","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.156275,"3.5":0.04935,"3.6":0.3619,"4":0.008225,"5":null,"6":null,"7":0.008225,"8":null,"9":null,"10":0.024675,"11":0.024675,"12":0.18095,"13":0.008225,"14":0.04935,"15":0.01645,"16":0.4277,"17":0.287875,"18":null,"19":0.008225,"20":0.11515,"21":0.008225,"22":0.008225,"23":0.01645,"24":0.0329,"25":0.929425,"26":0.024675,"27":0.64155,"28":0.04935,"29":0.041125,"30":0.074025,"31":0.18095,"32":0.1316,"33":0.14805,"34":0.287875,"35":10.2648,"36":0.567525,"37":0.01645,"38":null,"39":null},"chrome":{"4":null,"5":0.156275,"6":null,"7":0.008225,"8":null,"9":null,"10":null,"11":0.074025,"12":0.01645,"13":0.01645,"14":null,"15":0.008225,"16":null,"17":null,"18":0.074025,"19":0.008225,"20":0.008225,"21":0.024675,"22":0.04935,"23":0.024675,"24":0.024675,"25":0.024675,"26":0.08225,"27":0.1645,"28":0.024675,"29":0.0329,"30":0.024675,"31":0.172725,"32":0.0987,"33":0.189175,"34":0.238525,"35":0.5264,"36":0.616875,"37":0.666225,"38":1.16795,"39":3.5532,"40":46.101125,"41":0.2303,"42":0.11515,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.0658,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.01645,"21":null,"22":null,"23":null,"24":null,"25":0.008225,"26":0.024675,"27":0.732025,"28":0.01645,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.01645,"5":0.04935,"5.1":0.08225,"6":0.0329,"6.1":0.090475,"7":0.090475,"7.1":0.222075,"8":0.452375},"android":{"2.1":0,"2.2":0,"2.3":0.0969782201892,"3":0,"4":0.195998087119,"4.1":0.6313792546,"4.2-4.3":1.06880206882,"4.4":1.99673051253,"4.4.3-4.4.4":0.919761856742,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00975278642434,"6.0-6.1":0.0299427653379,"7.0-7.1":0.37898985842,"8":0.081444321719,"8.1":1.2038702681},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000931023454158,"12.1":0.00558614072495,"0":null},"ie":{"5.5":null,"6":0.0843210431655,"7":0.0590247302158,"8":1.56837140288,"9":0.590247302158,"10":0.826346223022,"11":3.90406429856,"0":null},"ie_mob":{"10":0.716072368421,"11":1.52042763158},"bb":{"7":0.044375,"10":null},"and_uc":{"0":0.1633},"op_mini":{"5.0-8.0":0.648457835821},"and_chr":{"0":7.588925},"and_ff":{"0":0.23785}},"total":96.1459}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UZ.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UZ.json
new file mode 100644
index 0000000..cfd1378
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/UZ.json
@@ -0,0 +1 @@
+{"id":"UZ","name":"Uzbekistan","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.013281,"3":0.017708,"3.5":0.017708,"3.6":0.172653,"4":0.017708,"5":0.048697,"6":0.013281,"7":0.022135,"8":0.008854,"9":0.075259,"10":0.017708,"11":0.022135,"12":0.070832,"13":0.061978,"14":0.013281,"15":0.039843,"16":0.022135,"17":0.04427,"18":0.013281,"19":0.013281,"20":0.022135,"21":0.030989,"22":0.070832,"23":0.030989,"24":0.066405,"25":0.039843,"26":0.057551,"27":0.026562,"28":0.048697,"29":0.137237,"30":0.141664,"31":0.08854,"32":0.08854,"33":0.181507,"34":0.296609,"35":3.731961,"36":0.243485,"37":0.013281,"38":null,"39":null},"chrome":{"4":0.048697,"5":0.106248,"6":0.035416,"7":0.048697,"8":0.115102,"9":0.013281,"10":0.035416,"11":0.061978,"12":0.340879,"13":0.04427,"14":0.035416,"15":0.079686,"16":0.208069,"17":0.230204,"18":0.115102,"19":0.013281,"20":0.026562,"21":0.026562,"22":0.030989,"23":0.039843,"24":0.048697,"25":0.026562,"26":0.030989,"27":0.123956,"28":0.194788,"29":0.048697,"30":0.053124,"31":0.208069,"32":0.172653,"33":0.106248,"34":0.057551,"35":0.181507,"36":0.128383,"37":0.119529,"38":0.181507,"39":1.071334,"40":19.164483,"41":0.061978,"42":0.332025,"43":null},"opera":{"9":null,"9.5-9.6":0.026562,"10.0-10.1":0.039843,"10.5":0.057551,"10.6":0.030989,"11":0.066405,"11.1":0.110675,"11.5":0.048697,"11.6":0.239058,"12":0.256766,"12.1":2.421569,"15":0.017708,"16":0.066405,"17":0.057551,"18":0.053124,"19":0.066405,"20":0.119529,"21":0.039843,"22":0.04427,"23":0.092967,"24":0.092967,"25":0.092967,"26":0.247912,"27":3.050203,"28":0.079686,"29":0.030989},"safari":{"3.1":null,"3.2":null,"4":0,"5":0.013281,"5.1":0.039843,"6":0.017708,"6.1":0.008854,"7":0.057551,"7.1":0.04427,"8":0.208069},"android":{"2.1":0,"2.2":0,"2.3":0.12373114461,"3":0,"4":0.250067155422,"4.1":0.805554873064,"4.2-4.3":1.36364745691,"4.4":2.54755914586,"4.4.3-4.4.4":1.17349222414,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0290261582488,"6.0-6.1":0.0891153981323,"7.0-7.1":1.12794632493,"8":0.24239388292,"8.1":3.58294823577},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0214998180526,"12.1":0.128998908316,"0":null},"ie":{"5.5":null,"6":0.076420956057,"7":0.076420956057,"8":1.10136083729,"9":0.463021086698,"10":0.355132678147,"11":1.66327963183,"0":null},"ie_mob":{"10":0.135609666667,"11":0.287938333333},"bb":{"7":0.0083595,"10":null},"and_uc":{"0":14.283599},"op_mini":{"5.0-8.0":14.9746232736},"and_chr":{"0":7.37906},"and_ff":{"0":0.128179}},"total":90.2698356461}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VA.json
new file mode 100644
index 0000000..54cf5e2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VA.json
@@ -0,0 +1 @@
+{"id":"VA","name":"Holy See (Vatican City State)","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.028545,"4":null,"5":0.504295,"6":0.01903,"7":null,"8":null,"9":0.028545,"10":null,"11":0.01903,"12":null,"13":0.028545,"14":null,"15":0.313995,"16":null,"17":null,"18":null,"19":0.03806,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.01903,"27":null,"28":null,"29":null,"30":0.39963,"31":0.01903,"32":0.047575,"33":0.123695,"34":0.142725,"35":20.485795,"36":1.132285,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.142725,"19":null,"20":null,"21":null,"22":0.047575,"23":null,"24":null,"25":null,"26":0.542355,"27":null,"28":null,"29":0.009515,"30":null,"31":0.009515,"32":0.085635,"33":0.104665,"34":null,"35":0.085635,"36":0.87538,"37":0.180785,"38":0.028545,"39":0.199815,"40":29.09687,"41":0.047575,"42":0.028545,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.01903,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.333025,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.07612,"5":0.30448,"5.1":0.390115,"6":0.485265,"6.1":0.104665,"7":1.67464,"7.1":0.523325,"8":1.741245},"android":{"2.1":0,"2.2":0,"2.3":0.0338269726583,"3":0,"4":0.0683660921094,"4.1":0.220231395675,"4.2-4.3":0.372808846034,"4.4":0.696479563364,"4.4.3-4.4.4":0.320822130159,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00664823526458,"6.0-6.1":0.0204112486193,"7.0-7.1":0.258348089668,"8":0.0555185962446,"8.1":0.820648830204},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":3.44705046198e-6,"12.1":2.06823027719e-5,"0":null},"ie":{"5.5":null,"6":0.142725,"7":0.03806,"8":5.99445,"9":2.0933,"10":1.493855,"11":22.34122,"0":null},"ie_mob":{"10":0.246903289474,"11":0.524246710526},"bb":{"7":0.01067,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0.00240087064677},"and_chr":{"0":1.179565},"and_ff":{"0":0.02522}},"total":97.453605}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VC.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VC.json
new file mode 100644
index 0000000..b6d8249
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VC.json
@@ -0,0 +1 @@
+{"id":"VC","name":"Saint Vincent and the Grenadines","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":0.04389,"4":null,"5":0.008778,"6":null,"7":0.008778,"8":0.008778,"9":null,"10":null,"11":0.070224,"12":null,"13":0.017556,"14":0.026334,"15":0.017556,"16":0.04389,"17":null,"18":null,"19":null,"20":null,"21":0.008778,"22":null,"23":0.035112,"24":null,"25":0.008778,"26":0.052668,"27":null,"28":null,"29":0.026334,"30":0.008778,"31":0.210672,"32":0.17556,"33":0.140448,"34":0.245784,"35":6.62739,"36":0.904134,"37":0.052668,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.008778,"11":0.061446,"12":null,"13":null,"14":0.070224,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.008778,"21":0.035112,"22":0.122892,"23":null,"24":0.017556,"25":null,"26":0.017556,"27":0.08778,"28":0.035112,"29":0.008778,"30":0.079002,"31":0.079002,"32":0.070224,"33":0.21945,"34":0.105336,"35":0.228228,"36":1.632708,"37":0.359898,"38":0.342342,"39":1.562484,"40":59.55873,"41":0.860244,"42":0.596904,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.052668,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.035112,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.008778,"27":0.605682,"28":0.052668,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.008778,"5":0.052668,"5.1":0.237006,"6":0.026334,"6.1":0.13167,"7":0.193116,"7.1":0.210672,"8":0.649572},"android":{"2.1":0,"2.2":0,"2.3":0.100822940015,"3":0,"4":0.20376846824,"4.1":0.6564104042,"4.2-4.3":1.11117492837,"4.4":2.07589127019,"4.4.3-4.4.4":0.95622598898,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0106100128527,"6.0-6.1":0.0325746008635,"7.0-7.1":0.412301376644,"8":0.0886029143488,"8.1":1.30968509529},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000427309168443,"12.1":0.00256385501066,"0":null},"ie":{"5.5":null,"6":0.026334,"7":0.017556,"8":0.79002,"9":0.553014,"10":1.211364,"11":6.820506,"0":null},"ie_mob":{"10":0.143590359649,"11":0.304883640351},"bb":{"7":0.156416,"10":null},"and_uc":{"0":0.463138},"op_mini":{"5.0-8.0":0.297620835821},"and_chr":{"0":4.000092},"and_ff":{"0":0.065988}},"total":98.987758}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VE.json
new file mode 100644
index 0000000..cb6ba0d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VE.json
@@ -0,0 +1 @@
+{"id":"VE","name":"Venezuela","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.0747,"3":0.1079,"3.5":0.0332,"3.6":0.9462,"4":0.0415,"5":0.0249,"6":0.0332,"7":0.0166,"8":1.5853,"9":0.0166,"10":0.0332,"11":0.0415,"12":0.083,"13":0.0415,"14":0.0747,"15":0.0249,"16":0.0581,"17":0.0249,"18":0.0415,"19":0.0415,"20":0.0498,"21":0.0332,"22":0.0332,"23":0.1909,"24":0.0498,"25":0.0581,"26":0.0747,"27":0.0996,"28":0.0747,"29":0.1079,"30":0.1743,"31":0.249,"32":0.2241,"33":0.2656,"34":0.332,"35":13.2717,"36":0.7387,"37":0.0166,"38":null,"39":null},"chrome":{"4":0.0166,"5":0.0166,"6":0.249,"7":null,"8":0.0332,"9":0.0166,"10":0.0166,"11":0.0913,"12":0.0249,"13":0.0581,"14":0.0083,"15":0.0083,"16":null,"17":null,"18":0.0581,"19":null,"20":0.1079,"21":0.0249,"22":0.0332,"23":0.0249,"24":0.0415,"25":0.0332,"26":0.0498,"27":0.0664,"28":0.0332,"29":0.0581,"30":0.083,"31":0.1826,"32":0.0996,"33":0.1909,"34":0.2739,"35":0.5478,"36":0.6308,"37":0.7304,"38":0.9794,"39":2.6975,"40":44.7536,"41":0.1743,"42":0.0664,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.0083,"12":null,"12.1":0.0498,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.0249,"27":0.7055,"28":0.0083,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.0581,"5":0.0664,"5.1":0.1245,"6":0.0332,"6.1":0.0747,"7":0.0913,"7.1":0.1494,"8":0.3071},"android":{"2.1":0,"2.2":0,"2.3":0.125318224348,"3":0,"4":0.253274727103,"4.1":0.815887597463,"4.2-4.3":1.38113874623,"4.4":2.58023628236,"4.4.3-4.4.4":1.1885444225,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00978827191485,"6.0-6.1":0.0300517120193,"7.0-7.1":0.38036881213,"8":0.0817406566924,"8.1":1.20825054724},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00176886993603,"12.1":0.0106132196162,"0":null},"ie":{"5.5":null,"6":0.0879041248606,"7":0.140646599777,"8":2.07453734671,"9":0.817508361204,"10":0.650490523969,"11":4.09633221851,"0":null},"ie_mob":{"10":0.11539122807,"11":0.24500877193},"bb":{"7":0.28815,"10":null},"and_uc":{"0":0.1734},"op_mini":{"5.0-8.0":1.23201791045},"and_chr":{"0":6.2659},"and_ff":{"0":0.2108}},"total":98.036269175}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VG.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VG.json
new file mode 100644
index 0000000..5f727a7
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VG.json
@@ -0,0 +1 @@
+{"id":"VG","name":"British Virgin Islands","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.00847,"3":0.05929,"3.5":0.00847,"3.6":0.05929,"4":null,"5":0.02541,"6":null,"7":0.02541,"8":null,"9":null,"10":null,"11":null,"12":null,"13":0.01694,"14":0.02541,"15":0.00847,"16":0.04235,"17":null,"18":null,"19":null,"20":null,"21":null,"22":0.03388,"23":0.05929,"24":0.00847,"25":0.00847,"26":0.03388,"27":0.01694,"28":0.03388,"29":0.02541,"30":0.07623,"31":0.11011,"32":0.12705,"33":0.03388,"34":0.36421,"35":8.57164,"36":0.48279,"37":0.01694,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.0847,"12":0.01694,"13":null,"14":null,"15":null,"16":null,"17":0.01694,"18":null,"19":null,"20":null,"21":0.13552,"22":0.01694,"23":0.03388,"24":null,"25":0.02541,"26":0.02541,"27":0.00847,"28":0.01694,"29":0.24563,"30":0.03388,"31":0.33033,"32":0.06776,"33":0.60137,"34":0.05929,"35":0.11011,"36":0.5082,"37":0.29645,"38":0.21175,"39":1.59236,"40":32.46551,"41":0.04235,"42":0.12705,"43":null},"opera":{"9":null,"9.5-9.6":0.00847,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.1694,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.22022,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.1694,"5":0.09317,"5.1":0.46585,"6":0.24563,"6.1":0.6776,"7":0.29645,"7.1":1.61777,"8":2.57488},"android":{"2.1":0,"2.2":0,"2.3":0.054126593201,"3":0,"4":0.109392693627,"4.1":0.352392609419,"4.2-4.3":0.596532032436,"4.4":1.11443806633,"4.4.3-4.4.4":0.51334800499,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0302200733005,"6.0-6.1":0.0927809267999,"7.0-7.1":1.17434144492,"8":0.252364120896,"8.1":3.73032343408},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000123965884861,"12.1":0.000743795309168,"0":null},"ie":{"5.5":null,"6":0.0642323644252,"7":0.385394186551,"8":5.0009483731,"9":5.18446941432,"10":3.38596321041,"11":15.5809363991,"0":null},"ie_mob":{"10":0.0769093421053,"11":0.163300657895},"bb":{"7":0.0891225,"10":null},"and_uc":{"0":0.05355},"op_mini":{"5.0-8.0":0.086342238806},"and_chr":{"0":6.84595},"and_ff":{"0":0.07956}},"total":98.9124164479}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VI.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VI.json
new file mode 100644
index 0000000..7d9f82d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VI.json
@@ -0,0 +1 @@
+{"id":"VI","name":"Virgin Islands (US)","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.062512,"3.5":null,"3.6":0.031256,"4":0.007814,"5":0.007814,"6":null,"7":null,"8":null,"9":null,"10":0.007814,"11":null,"12":0.015628,"13":0.054698,"14":0.007814,"15":0.015628,"16":0.031256,"17":0.031256,"18":0.007814,"19":0.007814,"20":0.007814,"21":0.07814,"22":0.007814,"23":0.015628,"24":0.015628,"25":0.007814,"26":0.046884,"27":null,"28":0.070326,"29":0.031256,"30":0.210978,"31":0.320374,"32":0.218792,"33":0.109396,"34":0.367258,"35":10.330108,"36":0.609492,"37":null,"38":0.015628,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.101582,"12":0.007814,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.007814,"19":null,"20":null,"21":0.054698,"22":0.015628,"23":0.015628,"24":0.03907,"25":0.007814,"26":null,"27":0.031256,"28":0.03907,"29":0.023442,"30":null,"31":0.093768,"32":0.031256,"33":0.140652,"34":0.336002,"35":0.171908,"36":1.047076,"37":0.570422,"38":0.171908,"39":1.023634,"40":27.161464,"41":0.15628,"42":0.125024,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":0.007814,"11.1":0.015628,"11.5":0.023442,"11.6":null,"12":0.015628,"12.1":0.023442,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":0.007814,"27":0.320374,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.101582,"5":0.328188,"5.1":0.85954,"6":0.148466,"6.1":0.648562,"7":0.828284,"7.1":1.336194,"8":2.047268},"android":{"2.1":0,"2.2":0,"2.3":0.068050300447,"3":0,"4":0.137533238798,"4.1":0.443043271858,"4.2-4.3":0.749985942821,"4.4":1.40111987026,"4.4.3-4.4.4":0.645403375819,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0534366042775,"6.0-6.1":0.164059749975,"7.0-7.1":2.07652769254,"8":0.446242519932,"8.1":6.59613943328},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":4.97171286425e-5,"12.1":0.000298302771855,"0":null},"ie":{"5.5":null,"6":0.00784213321332,"7":0.196053330333,"8":1.54490024302,"9":1.25474131413,"10":1.52137384338,"11":21.6050770027,"0":null},"ie_mob":{"10":0.426941140351,"11":0.906518859649},"bb":{"7":0.0158485,"10":null},"and_uc":{"0":0.056836},"op_mini":{"5.0-8.0":0.0346279800995},"and_chr":{"0":7.412314},"and_ff":{"0":0.080882}},"total":98.6837303668}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VN.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VN.json
new file mode 100644
index 0000000..5329609
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VN.json
@@ -0,0 +1 @@
+{"id":"VN","name":"Viet Nam","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.146937,"3.5":0.020991,"3.6":0.062973,"4":0.06997,"5":0.041982,"6":0.020991,"7":0.020991,"8":0.013994,"9":0.027988,"10":0.020991,"11":0.034985,"12":0.104955,"13":0.034985,"14":0.034985,"15":0.027988,"16":0.034985,"17":0.055976,"18":0.020991,"19":0.034985,"20":0.027988,"21":0.034985,"22":0.034985,"23":0.027988,"24":0.041982,"25":0.048979,"26":0.048979,"27":0.062973,"28":0.034985,"29":0.06997,"30":0.083964,"31":0.713694,"32":0.538769,"33":0.160931,"34":0.251892,"35":5.485648,"36":0.517778,"37":0.020991,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.048979,"11":0.06997,"12":0.062973,"13":0.020991,"14":0.020991,"15":0.034985,"16":0.020991,"17":0.020991,"18":0.013994,"19":0.006997,"20":null,"21":0.041982,"22":0.181922,"23":0.104955,"24":0.041982,"25":0.048979,"26":0.076967,"27":0.097958,"28":0.146937,"29":0.272883,"30":0.146937,"31":0.328859,"32":0.258889,"33":0.258889,"34":0.328859,"35":0.384835,"36":0.937598,"37":1.315436,"38":0.83964,"39":2.288019,"40":23.321001,"41":0.202913,"42":0.090961,"43":null},"opera":{"9":null,"9.5-9.6":0.020991,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.041982,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.013994,"26":0.013994,"27":0.307868,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.188919,"5":0.020991,"5.1":0.034985,"6":0.020991,"6.1":0.027988,"7":0.272883,"7.1":0.083964,"8":0.363844},"android":{"2.1":0,"2.2":0,"2.3":0.107719629899,"3":0,"4":0.21770704148,"4.1":0.701311485186,"4.2-4.3":1.18718371057,"4.4":2.21789048508,"4.4.3-4.4.4":1.02163564778,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0423845452355,"6.0-6.1":0.130127989758,"7.0-7.1":1.64704855608,"8":0.353948132142,"8.1":5.23188877678},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0049132238806,"12.1":0.0294793432836,"0":null},"ie":{"5.5":null,"6":0.106754228571,"7":0.115650414286,"8":6.82337444286,"9":0.907410942857,"10":1.00526898571,"11":1.62800198571,"0":null},"ie_mob":{"10":1.13936190789,"11":2.41919309211},"bb":{"7":0.0375375,"10":null},"and_uc":{"0":3.480477},"op_mini":{"5.0-8.0":3.42206043284},"and_chr":{"0":5.828103},"and_ff":{"0":0.063063}},"total":82.3622765}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VU.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VU.json
new file mode 100644
index 0000000..854eca6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/VU.json
@@ -0,0 +1 @@
+{"id":"VU","name":"Vanuatu","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.098544,"3.5":null,"3.6":0.213512,"4":0.049272,"5":0.049272,"6":0.188876,"7":0.016424,"8":0.016424,"9":0.065696,"10":0.106756,"11":0.262784,"12":0.114968,"13":0.024636,"14":0.098544,"15":0.032848,"16":0.08212,"17":0.024636,"18":0.016424,"19":null,"20":0.024636,"21":0.04106,"22":0.032848,"23":0.073908,"24":0.090332,"25":0.188876,"26":0.008212,"27":0.517356,"28":0.090332,"29":0.098544,"30":0.320268,"31":0.188876,"32":0.262784,"33":0.188876,"34":0.541992,"35":14.510604,"36":1.634188,"37":0.008212,"38":null,"39":null},"chrome":{"4":0.016424,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.04106,"11":0.016424,"12":0.08212,"13":null,"14":0.032848,"15":null,"16":null,"17":null,"18":0.36954,"19":0.2053,"20":0.057484,"21":0.090332,"22":0.057484,"23":null,"24":0.024636,"25":0.024636,"26":null,"27":0.016424,"28":0.016424,"29":0.057484,"30":0.008212,"31":0.270996,"32":0.139604,"33":0.303844,"34":0.188876,"35":0.139604,"36":0.599476,"37":0.550204,"38":0.53378,"39":0.648748,"40":30.852484,"41":0.2053,"42":1.76558,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":0.024636,"11.5":0.172452,"11.6":null,"12":0.090332,"12.1":0.098544,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.221724,"28":null,"29":null},"safari":{"3.1":0.008212,"3.2":null,"4":0.008212,"5":0.377752,"5.1":0.648748,"6":0.024636,"6.1":0.12318,"7":0.147816,"7.1":0.344904,"8":1.35498},"android":{"2.1":0,"2.2":0,"2.3":0.166063357937,"3":0,"4":0.335622786568,"4.1":1.08115986194,"4.2-4.3":1.830193008,"4.4":3.41915713816,"4.4.3-4.4.4":1.57497984739,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0147465564816,"6.0-6.1":0.0452745155136,"7.0-7.1":0.573046010644,"8":0.123146682197,"8.1":1.82029423516},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000322780383795,"12.1":0.00193668230277,"0":null},"ie":{"5.5":null,"6":0.0823044564241,"7":0.131687130279,"8":7.15225726325,"9":1.72839358491,"10":2.69135572507,"11":6.53497384007,"0":null},"ie_mob":{"10":0.306273421053,"11":0.650306578947},"bb":{"7":0.001788,"10":null},"and_uc":{"0":2.211756},"op_mini":{"5.0-8.0":0.224816537313},"and_chr":{"0":3.989816},"and_ff":{"0":0.407664}},"total":98.344432}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/WF.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/WF.json
new file mode 100644
index 0000000..73eac8e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/WF.json
@@ -0,0 +1 @@
+{"id":"WF","name":"Wallis and Futuna","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":null,"5":null,"6":0.411004,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":1.858859,"15":null,"16":0.112092,"17":1.195648,"18":null,"19":null,"20":null,"21":0.196161,"22":null,"23":0.084069,"24":0.046705,"25":null,"26":null,"27":null,"28":null,"29":0.112092,"30":0.046705,"31":0.523096,"32":0.242866,"33":0.196161,"34":0.112092,"35":22.820063,"36":1.503901,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":0.046705,"23":0.242866,"24":null,"25":0.308253,"26":0.504414,"27":null,"28":null,"29":2.839664,"30":null,"31":0.018682,"32":null,"33":0.130774,"34":0.149456,"35":null,"36":0.541778,"37":0.046705,"38":0.700575,"39":1.615993,"40":42.520232,"41":0.065387,"42":1.58797,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.28023,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.411004,"5":0.046705,"5.1":0.326935,"6":0.411004,"6.1":0.326935,"7":0.084069,"7.1":1.522583,"8":0.980805},"android":{"2.1":0,"2.2":0,"2.3":0.0396496163842,"3":0,"4":0.0801339615345,"4.1":0.258139870881,"4.2-4.3":0.436980508993,"4.4":0.816364733132,"4.4.3-4.4.4":0.376045309076,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0052465240486,"6.0-6.1":0.016107749272,"7.0-7.1":0.203878083643,"8":0.0438130780199,"8.1":0.647623565017},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":6.18251599147e-5,"12.1":0.000370950959488,"0":null},"ie":{"5.5":null,"6":null,"7":null,"8":2.073702,"9":0.28023,"10":1.176966,"11":3.969925,"0":null},"ie_mob":{"10":0,"11":0},"bb":{"7":0,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0.0430612238806},"and_chr":{"0":2.528154},"and_ff":{"0":null}},"total":98.167692}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/WS.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/WS.json
new file mode 100644
index 0000000..95f4aa1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/WS.json
@@ -0,0 +1 @@
+{"id":"WS","name":"Samoa","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.066465,"3.5":null,"3.6":0.17091,"4":2.725065,"5":null,"6":1.65213,"7":null,"8":0.03798,"9":0.01899,"10":0.41778,"11":0.142425,"12":0.370305,"13":null,"14":0.047475,"15":null,"16":0.53172,"17":0.13293,"18":0.066465,"19":0.294345,"20":null,"21":0.05697,"22":0.142425,"23":0.028485,"24":0.237375,"25":0.028485,"26":null,"27":0.03798,"28":0.066465,"29":0.104445,"30":0.3798,"31":0.58869,"32":0.72162,"33":3.76002,"34":0.93051,"35":24.76296,"36":0.89253,"37":null,"38":0.028485,"39":null},"chrome":{"4":0.028485,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":0.47475,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.009495,"26":null,"27":null,"28":0.066465,"29":null,"30":0.01899,"31":0.199395,"32":0.01899,"33":0.142425,"34":0.047475,"35":0.07596,"36":0.389295,"37":0.58869,"38":0.39879,"39":0.977985,"40":28.52298,"41":0.066465,"42":0.028485,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":0.01899,"28":null,"29":null},"safari":{"3.1":0.01899,"3.2":null,"4":0,"5":0.28485,"5.1":0.218385,"6":0.028485,"6.1":0.199395,"7":0.275355,"7.1":0.085455,"8":0.218385},"android":{"2.1":0,"2.2":0,"2.3":0.0275810115397,"3":0,"4":0.0557426759538,"4.1":0.179566901445,"4.2-4.3":0.303971779811,"4.4":0.56787851128,"4.4.3-4.4.4":0.261584119971,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00791666984637,"6.0-6.1":0.0243055653178,"7.0-7.1":0.307639012451,"8":0.0661111376644,"8.1":0.97722261472},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0003639445629,"12.1":0.0021836673774,"0":null},"ie":{"5.5":null,"6":0.18136716,"7":0.12409332,"8":4.98282408,"9":5.43146916,"10":2.0045844,"11":8.75335188,"0":null},"ie_mob":{"10":0.0446260526316,"11":0.0947539473684},"bb":{"7":0.03295125,"10":null},"and_uc":{"0":0.01515},"op_mini":{"5.0-8.0":0.25348738806},"and_chr":{"0":1.627315},"and_ff":{"0":0.053025}},"total":99.22670625}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/YE.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/YE.json
new file mode 100644
index 0000000..bc8297e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/YE.json
@@ -0,0 +1 @@
+{"id":"YE","name":"Yemen","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.009854,"3":0.054197,"3.5":0.019708,"3.6":0.137956,"4":0.123175,"5":0.024635,"6":0.108394,"7":0.034489,"8":0.073905,"9":0.113321,"10":0.14781,"11":0.202007,"12":0.335036,"13":0.123175,"14":0.118248,"15":0.167518,"16":0.202007,"17":0.202007,"18":0.202007,"19":0.211861,"20":0.118248,"21":0.19708,"22":0.103467,"23":0.290693,"24":0.206934,"25":0.162591,"26":0.369525,"27":0.221715,"28":0.305474,"29":0.349817,"30":0.650364,"31":0.64051,"32":0.699634,"33":0.763685,"34":0.970619,"35":7.691047,"36":0.606021,"37":0.019708,"38":null,"39":null},"chrome":{"4":0.039416,"5":0.088686,"6":0.083759,"7":null,"8":0.09854,"9":0.009854,"10":0.068978,"11":0.137956,"12":0.167518,"13":0.113321,"14":0.142883,"15":0.142883,"16":0.04927,"17":0.118248,"18":0.09854,"19":0.059124,"20":0.088686,"21":0.019708,"22":0.19708,"23":0.123175,"24":0.167518,"25":0.133029,"26":0.211861,"27":0.300547,"28":0.221715,"29":0.211861,"30":0.211861,"31":0.349817,"32":0.320255,"33":0.748904,"34":0.310401,"35":0.458211,"36":0.867152,"37":0.674999,"38":0.655291,"39":2.404376,"40":15.805816,"41":0.083759,"42":0.073905,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.014781,"10.5":null,"10.6":null,"11":null,"11.1":0.004927,"11.5":0.029562,"11.6":0.029562,"12":0.044343,"12.1":0.157664,"15":null,"16":null,"17":0.004927,"18":0.024635,"19":0.009854,"20":0.009854,"21":null,"22":0.009854,"23":null,"24":0.014781,"25":0.014781,"26":0.059124,"27":0.517335,"28":0.024635,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.024635,"5":0.029562,"5.1":0.034489,"6":0.009854,"6.1":0.004927,"7":0.024635,"7.1":0.024635,"8":0.083759},"android":{"2.1":0,"2.2":0,"2.3":0.293399663167,"3":0,"4":0.592976161347,"4.1":1.91018622809,"4.2-4.3":3.23357312985,"4.4":6.04094464373,"4.4.3-4.4.4":2.78266417382,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.026218735114,"6.0-6.1":0.080496116578,"7.0-7.1":1.01885084697,"8":0.218949437092,"8.1":3.23640386424},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0205804434968,"12.1":0.123482660981,"0":null},"ie":{"5.5":null,"6":0.089912722449,"7":0.0476008530612,"8":1.61842900408,"9":0.460141579592,"10":0.444274628571,"11":1.1953103102,"0":null},"ie_mob":{"10":0.05684875,"11":0.12070625},"bb":{"7":0.02156025,"10":null},"and_uc":{"0":9.111108},"op_mini":{"5.0-8.0":14.3342788955},"and_chr":{"0":6.61811},"and_ff":{"0":0.375402}},"total":98.316869348}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/YT.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/YT.json
new file mode 100644
index 0000000..8675e88
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/YT.json
@@ -0,0 +1 @@
+{"id":"YT","name":"Mayotte","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.029468,"3":0.007367,"3.5":0.029468,"3.6":0.044202,"4":0.029468,"5":0.007367,"6":null,"7":0.07367,"8":null,"9":null,"10":null,"11":0.014734,"12":0.022101,"13":0.029468,"14":null,"15":0.051569,"16":0.044202,"17":0.103138,"18":0.036835,"19":0.029468,"20":0.044202,"21":0.029468,"22":null,"23":0.014734,"24":0.044202,"25":0.014734,"26":0.110505,"27":0.058936,"28":0.036835,"29":0.176808,"30":0.213643,"31":0.125239,"32":0.139973,"33":0.235744,"34":0.316781,"35":12.789112,"36":0.832471,"37":0.022101,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":0.014734,"11":0.081037,"12":null,"13":null,"14":null,"15":0.051569,"16":null,"17":null,"18":0.014734,"19":null,"20":null,"21":0.036835,"22":0.014734,"23":0.051569,"24":0.125239,"25":0.007367,"26":0.044202,"27":0.213643,"28":0.051569,"29":0.014734,"30":0.07367,"31":0.353616,"32":0.095771,"33":0.191542,"34":0.176808,"35":0.44202,"36":0.950343,"37":0.265212,"38":0.383084,"39":2.092228,"40":28.473455,"41":0.449387,"42":0.191542,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.125239,"15":null,"16":null,"17":null,"18":0.014734,"19":null,"20":0.014734,"21":null,"22":null,"23":null,"24":0.014734,"25":0.014734,"26":0.022101,"27":1.245023,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.081037,"5":0.103138,"5.1":0.648296,"6":0.095771,"6.1":0.206276,"7":0.390451,"7.1":0.707232,"8":1.163986},"android":{"2.1":0,"2.2":0,"2.3":0.122324050317,"3":0,"4":0.247223343799,"4.1":0.796393948643,"4.2-4.3":1.34813979665,"4.4":2.51858781495,"4.4.3-4.4.4":1.16014704564,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0169385524651,"6.0-6.1":0.0520043277437,"7.0-7.1":0.658226205442,"8":0.141451771463,"8.1":2.09087114289},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0011564989339,"12.1":0.00693899360341,"0":null},"ie":{"5.5":null,"6":0.066303,"7":0.117872,"8":2.239568,"9":0.788269,"10":0.987178,"11":10.203295,"0":null},"ie_mob":{"10":0.182935758772,"11":0.388425241228},"bb":{"7":0.03225425,"10":null},"and_uc":{"0":0.094788},"op_mini":{"5.0-8.0":0.805501507463},"and_chr":{"0":17.283647},"and_ff":{"0":0.173778}},"total":97.99036125}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZA.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZA.json
new file mode 100644
index 0000000..3d53c0c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZA.json
@@ -0,0 +1 @@
+{"id":"ZA","name":"South Africa","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.004112,"3":0.016448,"3.5":0.008224,"3.6":0.024672,"4":0.008224,"5":0.008224,"6":null,"7":0.008224,"8":0.004112,"9":0.008224,"10":0.016448,"11":0.032896,"12":0.06168,"13":0.012336,"14":0.016448,"15":0.012336,"16":0.032896,"17":0.012336,"18":0.012336,"19":0.04112,"20":0.024672,"21":0.02056,"22":0.012336,"23":0.012336,"24":0.032896,"25":0.016448,"26":0.02056,"27":0.057568,"28":0.024672,"29":0.04112,"30":0.078128,"31":0.090464,"32":0.078128,"33":0.127472,"34":0.180928,"35":5.028976,"36":0.402976,"37":0.016448,"38":0.008224,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.037008,"12":0.012336,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.04112,"19":null,"20":0.008224,"21":0.02056,"22":0.016448,"23":0.008224,"24":0.008224,"25":0.012336,"26":0.098688,"27":0.016448,"28":0.024672,"29":0.02056,"30":0.016448,"31":0.086352,"32":0.037008,"33":0.094576,"34":0.074016,"35":0.176816,"36":0.316624,"37":0.18504,"38":0.312512,"39":0.949872,"40":15.000576,"41":0.119248,"42":0.057568,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.004112,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.016448,"12":0.004112,"12.1":0.078128,"15":null,"16":null,"17":null,"18":0.004112,"19":null,"20":0.008224,"21":null,"22":0.008224,"23":null,"24":null,"25":0.008224,"26":0.04112,"27":0.361856,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.012336,"5":0.057568,"5.1":0.172704,"6":0.057568,"6.1":0.12336,"7":0.172704,"7.1":0.279616,"8":0.674368},"android":{"2.1":0,"2.2":0,"2.3":0.122932429566,"3":0,"4":0.248452910282,"4.1":0.800354817757,"4.2-4.3":1.35484477638,"4.4":2.5311140235,"4.4.3-4.4.4":1.16591704252,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0223092471132,"6.0-6.1":0.0684933025404,"7.0-7.1":0.866929515012,"8":0.18630178291,"8.1":2.75382215242},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.027510811656,"12.1":0.165064869936,"0":null},"ie":{"5.5":null,"6":0.0494614507587,"7":0.090679326391,"8":2.24225243439,"9":2.05677199405,"10":1.9619708801,"11":7.44394833918,"0":null},"ie_mob":{"10":0.699406596491,"11":1.48504140351},"bb":{"7":2.225664,"10":null},"and_uc":{"0":1.672192},"op_mini":{"5.0-8.0":19.1612803184},"and_chr":{"0":12.192896},"and_ff":{"0":0.123648}},"total":88.1717564249}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZM.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZM.json
new file mode 100644
index 0000000..9652495
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZM.json
@@ -0,0 +1 @@
+{"id":"ZM","name":"Zambia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.012156,"3":0.012156,"3.5":0.018234,"3.6":0.06078,"4":0.045585,"5":0.027351,"6":0.018234,"7":0.024312,"8":0.057741,"9":0.054702,"10":0.063819,"11":0.048624,"12":0.088131,"13":0.042546,"14":0.088131,"15":0.069897,"16":0.048624,"17":0.027351,"18":0.054702,"19":0.042546,"20":0.054702,"21":0.051663,"22":0.03039,"23":0.042546,"24":0.033429,"25":0.042546,"26":0.051663,"27":0.057741,"28":0.042546,"29":0.130677,"30":0.209691,"31":0.164106,"32":0.148911,"33":0.258315,"34":0.370758,"35":6.093195,"36":0.88131,"37":0.024312,"38":0.009117,"39":0.003039},"chrome":{"4":0.012156,"5":0.012156,"6":0.009117,"7":0.003039,"8":null,"9":null,"10":0.012156,"11":0.027351,"12":0.024312,"13":0.021273,"14":0.015195,"15":0.006078,"16":0.045585,"17":null,"18":0.009117,"19":0.012156,"20":0.003039,"21":0.033429,"22":0.009117,"23":0.006078,"24":0.006078,"25":0.024312,"26":0.042546,"27":0.006078,"28":0.009117,"29":0.009117,"30":0.03039,"31":0.106365,"32":0.048624,"33":0.079014,"34":0.036468,"35":0.103326,"36":0.407226,"37":0.094209,"38":0.139794,"39":0.635151,"40":8.211378,"41":0.127638,"42":0.072936,"43":null},"opera":{"9":null,"9.5-9.6":0.006078,"10.0-10.1":0,"10.5":0.003039,"10.6":0.006078,"11":0.009117,"11.1":0.015195,"11.5":0.018234,"11.6":0.033429,"12":0.036468,"12.1":0.176262,"15":0.015195,"16":0.006078,"17":0.012156,"18":0.009117,"19":0.009117,"20":0.015195,"21":0.009117,"22":0.012156,"23":0.009117,"24":0.006078,"25":0.006078,"26":0.054702,"27":0.711126,"28":0.012156,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.003039,"5":0.027351,"5.1":0.276549,"6":0.06078,"6.1":0.094209,"7":0.106365,"7.1":0.167145,"8":0.258315},"android":{"2.1":0,"2.2":0,"2.3":0.129385298888,"3":0,"4":0.261494498804,"4.1":0.842366393284,"4.2-4.3":1.42596218879,"4.4":2.66397520657,"4.4.3-4.4.4":1.22711741366,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0103985136058,"6.0-6.1":0.0319252610704,"7.0-7.1":0.404082590119,"8":0.0868367101115,"8.1":1.28357792509},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.056924851457,"12.1":0.341549108742,"0":null},"ie":{"5.5":null,"6":0.0580600110497,"7":0.0427810607735,"8":1.11536337017,"9":1.04813598895,"10":1.41483079558,"11":4.00919655249,"0":null},"ie_mob":{"10":0.572786495614,"11":1.21619050439},"bb":{"7":0.3793745,"10":null},"and_uc":{"0":5.833318},"op_mini":{"5.0-8.0":39.6481590398},"and_chr":{"0":5.320544},"and_ff":{"0":0.118337}},"total":91.785114279}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZW.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZW.json
new file mode 100644
index 0000000..ab3c675
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/ZW.json
@@ -0,0 +1 @@
+{"id":"ZW","name":"Zimbabwe","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.0073,"3":0.01825,"3.5":0.01095,"3.6":0.07665,"4":0.0365,"5":0.01825,"6":0.02555,"7":0.0292,"8":0.0292,"9":0.0292,"10":0.05475,"11":0.0657,"12":0.1022,"13":0.04745,"14":0.06935,"15":0.06205,"16":0.0511,"17":0.02555,"18":0.0219,"19":0.04745,"20":0.0438,"21":0.03285,"22":0.03285,"23":0.0365,"24":0.1022,"25":0.04015,"26":0.0438,"27":0.0657,"28":0.06205,"29":0.1898,"30":0.18615,"31":0.26645,"32":0.2701,"33":0.33215,"34":0.40515,"35":8.07015,"36":1.4527,"37":0.05475,"38":0.0073,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":0.0073,"8":null,"9":null,"10":0.0073,"11":0.0292,"12":0.01825,"13":0.00365,"14":null,"15":0.00365,"16":0.01095,"17":null,"18":0.0073,"19":null,"20":null,"21":0.01095,"22":0.01095,"23":0.0073,"24":0.0073,"25":0.0292,"26":0.0219,"27":0.0146,"28":0.01095,"29":0.0365,"30":0.0219,"31":0.07665,"32":0.01825,"33":0.1241,"34":0.0438,"35":0.073,"36":0.33945,"37":0.11315,"38":0.1679,"39":0.58765,"40":10.34775,"41":0.06935,"42":0.06935,"43":null},"opera":{"9":null,"9.5-9.6":0.00365,"10.0-10.1":0,"10.5":null,"10.6":0.0073,"11":0.00365,"11.1":0.0073,"11.5":0.0146,"11.6":0.02555,"12":0.0219,"12.1":0.1752,"15":0.0073,"16":0.0073,"17":0.0073,"18":0.0146,"19":0.01095,"20":0.01825,"21":0.0146,"22":0.0146,"23":0.00365,"24":0.01095,"25":0.0146,"26":0.1168,"27":1.0512,"28":0.01825,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.0073,"5":0.05475,"5.1":0.14965,"6":0.04745,"6.1":0.0511,"7":0.1022,"7.1":0.13505,"8":0.365},"android":{"2.1":0,"2.2":0,"2.3":0.0590769830544,"3":0,"4":0.119397692068,"4.1":0.384622252833,"4.2-4.3":0.651090539557,"4.4":1.21636398794,"4.4.3-4.4.4":0.560298544547,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.00526988151421,"6.0-6.1":0.0161794607892,"7.0-7.1":0.204785746561,"8":0.0440081333467,"8.1":0.650506777789},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0709737739872,"12.1":0.425842643923,"0":null},"ie":{"5.5":null,"6":0.0365150515464,"7":0.0438180618557,"8":2.01197934021,"9":1.07719402062,"10":1.50442012371,"11":4.15176136082,"0":null},"ie_mob":{"10":0.441185745614,"11":0.936764254386},"bb":{"7":0.0428625,"10":null},"and_uc":{"0":1.2065},"op_mini":{"5.0-8.0":49.4332335821},"and_chr":{"0":1.96435},"and_ff":{"0":0.06985}},"total":94.6235504588}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-af.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-af.json
new file mode 100644
index 0000000..700c749
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-af.json
@@ -0,0 +1 @@
+{"id":"af","name":"Africa","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.311064,"3":0.083748,"3.5":0.041874,"3.6":0.161514,"4":0.05982,"5":0.02991,"6":0.02991,"7":0.02991,"8":0.041874,"9":0.035892,"10":0.071784,"11":0.083748,"12":0.167496,"13":0.095712,"14":0.071784,"15":0.376866,"16":0.095712,"17":0.053838,"18":0.352938,"19":0.071784,"20":0.065802,"21":0.370884,"22":0.053838,"23":0.370884,"24":0.071784,"25":0.65802,"26":0.095712,"27":0.08973,"28":0.071784,"29":0.20937,"30":0.293118,"31":0.323028,"32":0.323028,"33":0.412758,"34":0.514452,"35":10.330914,"36":1.292112,"37":0.047856,"38":0.005982,"39":null},"chrome":{"4":0.02991,"5":0.041874,"6":0.035892,"7":0.023928,"8":0.023928,"9":0.023928,"10":0.053838,"11":0.083748,"12":0.05982,"13":0.035892,"14":0.035892,"15":0.047856,"16":0.035892,"17":0.017946,"18":0.035892,"19":0.305082,"20":0.011964,"21":0.023928,"22":0.053838,"23":0.02991,"24":0.92721,"25":0.041874,"26":0.077766,"27":0.053838,"28":0.053838,"29":0.071784,"30":0.41874,"31":0.185442,"32":0.071784,"33":0.729804,"34":0.113658,"35":0.795606,"36":0.65802,"37":0.376866,"38":0.532398,"39":2.177448,"40":20.69772,"41":0.203388,"42":0.14955,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.2991,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.011964,"11.6":0.023928,"12":0.017946,"12.1":0.11964,"15":0.011964,"16":0.005982,"17":0.005982,"18":0.011964,"19":0.011964,"20":0.017946,"21":0.011964,"22":0.011964,"23":null,"24":0.005982,"25":0.011964,"26":0.05982,"27":0.873372,"28":0.011964,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.023928,"5":0.340974,"5.1":0.107676,"6":0.035892,"6.1":0.05982,"7":0.113658,"7.1":0.131604,"8":0.317046},"android":{"2.1":0,"2.2":0,"2.3":0.131588560141,"3":0,"4":0.265947405759,"4.1":0.856710783657,"4.2-4.3":1.45024444703,"4.4":2.70933919617,"4.4.3-4.4.4":1.24801360724,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0116824187167,"6.0-6.1":0.0358670750075,"7.0-7.1":0.453974692238,"8":0.0975584440205,"8.1":1.44206137002},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.021971920398,"12.1":0.131831522388,"0":null},"ie":{"5.5":null,"6":0.0737142383721,"7":0.0859999447674,"8":2.20528429797,"9":1.41285623547,"10":1.48042762064,"11":3.18814080959,"0":null},"ie_mob":{"10":0.289454605263,"11":0.614595394737},"bb":{"7":0.4831645,"10":null},"and_uc":{"0":2.173738},"op_mini":{"5.0-8.0":15.3034425572},"and_chr":{"0":7.5915},"and_ff":{"0":0.164738}},"total":93.7957816468}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-an.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-an.json
new file mode 100644
index 0000000..61fd2b1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-an.json
@@ -0,0 +1 @@
+{"id":"an","name":"Antarctica","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":null,"3.5":null,"3.6":null,"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":null,"33":null,"34":1.59712,"35":9.60256,"36":null,"37":null,"38":null,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":null,"12":null,"13":null,"14":null,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null,"30":null,"31":null,"32":null,"33":null,"34":null,"35":null,"36":null,"37":null,"38":null,"39":null,"40":80.0048,"41":null,"42":null,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":1.20032,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":null,"26":null,"27":null,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0,"5":null,"5.1":null,"6":null,"6.1":null,"7":null,"7.1":null,"8":null},"android":{"2.1":0,"2.2":0,"2.3":0.00790102921302,"3":0,"4":0.0159683958831,"4.1":0.0514398586132,"4.2-4.3":0.0870776588003,"4.4":0.16267803306,"4.4.3-4.4.4":0.0749350244308,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0,"7.0-7.1":0,"8":0,"8.1":0},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0,"12.1":0,"0":null},"ie":{"5.5":null,"6":null,"7":null,"8":null,"9":0.3968,"10":null,"11":6.0016,"0":null},"ie_mob":{"10":0,"11":0},"bb":{"7":0,"10":null},"and_uc":{"0":null},"op_mini":{"5.0-8.0":0},"and_chr":{"0":0.4},"and_ff":{"0":null}},"total":99.6032}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-as.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-as.json
new file mode 100644
index 0000000..e53da35
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-as.json
@@ -0,0 +1 @@
+{"id":"as","name":"Asia","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.038766,"3.5":0.011076,"3.6":0.060918,"4":0.02769,"5":0.016614,"6":0.016614,"7":0.011076,"8":0.099684,"9":0.022152,"10":0.02769,"11":0.044304,"12":0.066456,"13":0.02769,"14":0.033228,"15":0.033228,"16":0.044304,"17":0.033228,"18":0.033228,"19":0.02769,"20":0.033228,"21":0.033228,"22":0.02769,"23":0.033228,"24":0.038766,"25":0.044304,"26":0.044304,"27":0.044304,"28":0.044304,"29":0.088608,"30":0.11076,"31":0.188292,"32":0.160602,"33":0.177216,"34":0.243672,"35":4.950972,"36":0.742092,"37":0.02769,"38":null,"39":null},"chrome":{"4":0.022152,"5":0.022152,"6":0.022152,"7":0.016614,"8":0.016614,"9":0.011076,"10":0.033228,"11":0.094146,"12":0.05538,"13":0.033228,"14":0.033228,"15":0.038766,"16":0.02769,"17":0.022152,"18":0.033228,"19":0.011076,"20":0.016614,"21":0.060918,"22":0.099684,"23":0.02769,"24":0.02769,"25":0.038766,"26":0.066456,"27":0.060918,"28":0.05538,"29":0.060918,"30":0.238134,"31":1.594944,"32":0.08307,"33":0.38766,"34":0.177216,"35":0.315666,"36":0.44304,"37":0.437502,"38":0.875004,"39":2.07675,"40":24.998532,"41":0.177216,"42":0.260286,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.005538,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":0.011076,"12":0.011076,"12.1":0.094146,"15":null,"16":null,"17":null,"18":0.005538,"19":null,"20":0.011076,"21":null,"22":null,"23":null,"24":0.005538,"25":0.011076,"26":0.033228,"27":0.515034,"28":0.005538,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.02769,"5":0.038766,"5.1":0.105222,"6":0.033228,"6.1":0.060918,"7":0.105222,"7.1":0.13845,"8":0.35997},"android":{"2.1":0,"2.2":0,"2.3":0.181824528537,"3":0,"4":0.367476941886,"4.1":1.1837733779,"4.2-4.3":2.00389769872,"4.4":3.74367134546,"4.4.3-4.4.4":1.7244621075,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0264830161663,"6.0-6.1":0.0813075057737,"7.0-7.1":1.02912071594,"8":0.221156415704,"8.1":3.26902634642},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00793455863539,"12.1":0.0476073518124,"0":null},"ie":{"5.5":null,"6":0.152408350877,"7":0.105513473684,"8":2.83127821053,"9":1.57684024561,"10":1.19581936842,"11":5.14085091228,"0":null},"ie_mob":{"10":0.220007912281,"11":0.467140087719},"bb":{"7":0.091471,"10":null},"and_uc":{"0":9.539756},"op_mini":{"5.0-8.0":5.52642008955},"and_chr":{"0":11.777438},"and_ff":{"0":0.129398}},"total":95.0022455614}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-eu.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-eu.json
new file mode 100644
index 0000000..67fb71e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-eu.json
@@ -0,0 +1 @@
+{"id":"eu","name":"Europe","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007784,"3":0.023352,"3.5":0.015568,"3.6":0.093408,"4":0.015568,"5":0.007784,"6":0.007784,"7":0.007784,"8":0.007784,"9":0.015568,"10":0.031136,"11":0.023352,"12":0.054488,"13":0.015568,"14":0.015568,"15":0.023352,"16":0.054488,"17":0.03892,"18":0.023352,"19":0.023352,"20":0.03892,"21":0.03892,"22":0.023352,"23":0.031136,"24":0.07784,"25":0.054488,"26":0.054488,"27":0.124544,"28":0.054488,"29":0.062272,"30":0.101192,"31":0.521528,"32":0.295792,"33":0.202384,"34":0.435904,"35":15.949416,"36":0.93408,"37":0.023352,"38":0.007784,"39":null},"chrome":{"4":0.015568,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.085624,"12":0.015568,"13":null,"14":null,"15":null,"16":0.007784,"17":0.007784,"18":0.031136,"19":null,"20":0.007784,"21":0.031136,"22":0.085624,"23":0.031136,"24":0.031136,"25":0.023352,"26":0.054488,"27":0.03892,"28":0.046704,"29":0.046704,"30":0.046704,"31":0.27244,"32":0.085624,"33":0.179032,"34":0.1946,"35":0.35028,"36":0.576016,"37":0.70056,"38":0.54488,"39":1.759184,"40":31.104864,"41":0.171248,"42":0.132328,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.007784,"11.6":0.023352,"12":0.03892,"12.1":0.614936,"15":null,"16":0.007784,"17":null,"18":0.023352,"19":0.007784,"20":0.023352,"21":0.007784,"22":0.007784,"23":null,"24":0.015568,"25":0.023352,"26":0.046704,"27":1.47896,"28":0.023352,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.054488,"5":0.147896,"5.1":0.50596,"6":0.093408,"6.1":0.31136,"7":0.404768,"7.1":0.755048,"8":1.977136},"android":{"2.1":0,"2.2":0,"2.3":0.0935838985342,"3":0,"4":0.189137984406,"4.1":0.609280434141,"4.2-4.3":1.03139307121,"4.4":1.92684321613,"4.4.3-4.4.4":0.887569395571,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0379735041671,"6.0-6.1":0.116585319811,"7.0-7.1":1.4756370479,"8":0.317112069887,"8.1":4.68739605824},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00081584079602,"12.1":0.00489504477612,"0":null},"ie":{"5.5":null,"6":0.0473598782914,"7":0.11050638268,"8":1.6733823663,"9":1.47604954008,"10":1.07349057461,"11":9.100989945,"0":null},"ie_mob":{"10":0.251166105263,"11":0.533297894737},"bb":{"7":0.054846,"10":null},"and_uc":{"0":0.170632},"op_mini":{"5.0-8.0":0.568233114428},"and_chr":{"0":8.919496},"and_ff":{"0":0.139608}},"total":98.314160687}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-na.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-na.json
new file mode 100644
index 0000000..aa86a4d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-na.json
@@ -0,0 +1 @@
+{"id":"na","name":"North America","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.056664,"3.5":0.007083,"3.6":0.134577,"4":0.007083,"5":null,"6":0.049581,"7":null,"8":null,"9":0.007083,"10":0.014166,"11":0.021249,"12":0.028332,"13":0.007083,"14":0.014166,"15":0.014166,"16":0.042498,"17":0.021249,"18":0.014166,"19":0.014166,"20":0.021249,"21":0.063747,"22":0.021249,"23":0.021249,"24":0.077913,"25":0.021249,"26":0.042498,"27":0.297486,"28":0.042498,"29":0.056664,"30":0.063747,"31":0.814545,"32":0.481644,"33":0.127494,"34":0.339984,"35":8.032122,"36":0.474561,"37":0.014166,"38":null,"39":null},"chrome":{"4":0.014166,"5":0.014166,"6":null,"7":null,"8":null,"9":0.007083,"10":0.042498,"11":0.077913,"12":0.021249,"13":0.021249,"14":0.028332,"15":0.014166,"16":null,"17":0.007083,"18":0.028332,"19":null,"20":0.007083,"21":0.162909,"22":0.042498,"23":0.007083,"24":0.028332,"25":0.014166,"26":0.021249,"27":0.056664,"28":0.042498,"29":0.14166,"30":0.035415,"31":0.205407,"32":0.077913,"33":0.127494,"34":0.233739,"35":0.446229,"36":1.041201,"37":1.600758,"38":0.460395,"39":1.820331,"40":22.998501,"41":0.169992,"42":0.092079,"43":null},"opera":{"9":null,"9.5-9.6":0.007083,"10.0-10.1":0.035415,"10.5":null,"10.6":null,"11":null,"11.1":0.014166,"11.5":0.014166,"11.6":null,"12":0.007083,"12.1":0.092079,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":null,"25":0.007083,"26":0.014166,"27":0.219573,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.120411,"5":0.198324,"5.1":0.701217,"6":0.134577,"6.1":0.56664,"7":0.757881,"7.1":1.20411,"8":2.372805},"android":{"2.1":0,"2.2":0,"2.3":0.075364678241,"3":0,"4":0.152315981287,"4.1":0.490663720969,"4.2-4.3":0.830598085456,"4.4":1.55171905936,"4.4.3-4.4.4":0.714774474686,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0768487003715,"6.0-6.1":0.235938992369,"7.0-7.1":2.98631353198,"8":0.641754059243,"8.1":9.48609571604},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000431226723525,"12.1":0.00258736034115,"0":null},"ie":{"5.5":null,"6":0.0958906862812,"7":0.184405165925,"8":4.52899087513,"9":2.7291964557,"10":2.20548578447,"11":11.7945544126,"0":null},"ie_mob":{"10":0.171847122807,"11":0.364880877193},"bb":{"7":0.0597985,"10":null},"and_uc":{"0":0.227526},"op_mini":{"5.0-8.0":0.300349412935},"and_chr":{"0":10.64116},"and_ff":{"0":0.119597}},"total":98.7130768801}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-oc.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-oc.json
new file mode 100644
index 0000000..d89920d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-oc.json
@@ -0,0 +1 @@
+{"id":"oc","name":"Oceania","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":null,"3":0.007348,"3.5":null,"3.6":0.044088,"4":0.007348,"5":null,"6":0.07348,"7":null,"8":null,"9":null,"10":0.014696,"11":0.022044,"12":0.029392,"13":0.007348,"14":0.007348,"15":0.014696,"16":0.03674,"17":0.022044,"18":0.014696,"19":0.014696,"20":0.022044,"21":0.022044,"22":0.014696,"23":0.014696,"24":0.066132,"25":0.022044,"26":0.03674,"27":0.051436,"28":0.03674,"29":0.066132,"30":0.095524,"31":0.213092,"32":0.139612,"33":0.161656,"34":0.264528,"35":9.25848,"36":0.521708,"37":0.014696,"38":0.014696,"39":null},"chrome":{"4":null,"5":null,"6":null,"7":null,"8":null,"9":null,"10":null,"11":0.058784,"12":0.007348,"13":null,"14":null,"15":null,"16":null,"17":null,"18":0.03674,"19":null,"20":0.007348,"21":0.029392,"22":0.03674,"23":0.022044,"24":0.014696,"25":0.022044,"26":0.058784,"27":0.205744,"28":0.03674,"29":0.044088,"30":0.080828,"31":0.529056,"32":0.161656,"33":0.323312,"34":0.25718,"35":0.484968,"36":0.448228,"37":0.639276,"38":0.756844,"39":2.197052,"40":27.51826,"41":0.1837,"42":0.088176,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.095524,"15":null,"16":null,"17":null,"18":null,"19":null,"20":null,"21":null,"22":null,"23":null,"24":0.007348,"25":0.051436,"26":0.007348,"27":0.249832,"28":null,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.044088,"5":0.213092,"5.1":0.889108,"6":0.25718,"6.1":0.653972,"7":0.9185,"7.1":1.535732,"8":3.350688},"android":{"2.1":0,"2.2":0,"2.3":0.0688847281422,"3":0,"4":0.139219661087,"4.1":0.448475835326,"4.2-4.3":0.759182214367,"4.4":1.41830029733,"4.4.3-4.4.4":0.653317263749,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0804922875791,"6.0-6.1":0.247125444322,"7.0-7.1":3.12790205241,"8":0.672181208555,"8.1":9.93585500713},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000218643923241,"12.1":0.00131186353945,"0":null},"ie":{"5.5":null,"6":0.0296177267583,"7":0.0962576119644,"8":1.75485031043,"9":2.0584320097,"10":1.64378383508,"11":12.7356225061,"0":null},"ie_mob":{"10":0.153688052632,"11":0.326323947368},"bb":{"7":0.009282,"10":null},"and_uc":{"0":0.34476},"op_mini":{"5.0-8.0":0.152285492537},"and_chr":{"0":7.837204},"and_ff":{"0":0.116688}},"total":98.686798}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-sa.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-sa.json
new file mode 100644
index 0000000..6cc1bea
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-sa.json
@@ -0,0 +1 @@
+{"id":"sa","name":"South America","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.007786,"3":0.031144,"3.5":0.015572,"3.6":0.093432,"4":0.015572,"5":0.007786,"6":0.007786,"7":0.007786,"8":0.085646,"9":0.007786,"10":0.015572,"11":0.015572,"12":0.046716,"13":0.015572,"14":0.023358,"15":0.031144,"16":0.031144,"17":0.023358,"18":0.015572,"19":0.015572,"20":0.031144,"21":0.023358,"22":0.023358,"23":0.031144,"24":0.031144,"25":0.031144,"26":0.031144,"27":0.03893,"28":0.031144,"29":0.054502,"30":0.085646,"31":0.19465,"32":0.132362,"33":0.147934,"34":0.218008,"35":7.544634,"36":0.474946,"37":0.015572,"38":null,"39":null},"chrome":{"4":null,"5":0.007786,"6":0.015572,"7":null,"8":null,"9":null,"10":0.007786,"11":0.046716,"12":0.023358,"13":0.015572,"14":0.007786,"15":null,"16":null,"17":null,"18":0.046716,"19":null,"20":0.015572,"21":0.015572,"22":0.101218,"23":0.015572,"24":0.015572,"25":0.03893,"26":0.062288,"27":0.054502,"28":0.03893,"29":0.062288,"30":0.046716,"31":0.218008,"32":0.101218,"33":0.498304,"34":0.27251,"35":0.513876,"36":0.910962,"37":0.692954,"38":0.965464,"39":2.64724,"40":45.291162,"41":0.319226,"42":0.179078,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":null,"11.6":null,"12":null,"12.1":0.054502,"15":null,"16":null,"17":null,"18":null,"19":null,"20":0.007786,"21":null,"22":null,"23":null,"24":0.007786,"25":0.015572,"26":0.023358,"27":0.576164,"28":0.007786,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.023358,"5":0.03893,"5.1":0.109004,"6":0.031144,"6.1":0.07786,"7":0.11679,"7.1":0.186864,"8":0.46716},"android":{"2.1":0,"2.2":0,"2.3":0.113659979208,"3":0,"4":0.229712800083,"4.1":0.739986285685,"4.2-4.3":1.25265261295,"4.4":2.34019915085,"4.4.3-4.4.4":1.07797517122,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0116199985942,"6.0-6.1":0.0356754342806,"7.0-7.1":0.45154906818,"8":0.0970371812431,"8.1":1.4343563177},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.00151376545842,"12.1":0.00908259275053,"0":null},"ie":{"5.5":null,"6":0.0557852387181,"7":0.0796931981687,"8":2.53424370177,"9":1.31493776978,"10":1.23524457162,"11":6.95721620013,"0":null},"ie_mob":{"10":0.343092315789,"11":0.728483684211},"bb":{"7":0.05535,"10":null},"and_uc":{"0":0.394092},"op_mini":{"5.0-8.0":1.05433764179},"and_chr":{"0":11.211702},"and_ff":{"0":0.117342}},"total":98.5236986802}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-ww.json b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-ww.json
new file mode 100644
index 0000000..fefcb79
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/caniuse-db/region-usage-json/alt-ww.json
@@ -0,0 +1 @@
+{"id":"ww","name":"Worldwide","month":"2015-02","access_date":"2015-03-01","data":{"firefox":{"2":0.013404,"3":0.040212,"3.5":0.013404,"3.6":0.093828,"4":0.020106,"5":0.013404,"6":0.020106,"7":0.013404,"8":0.046914,"9":0.013404,"10":0.026808,"11":0.03351,"12":0.053616,"13":0.020106,"14":0.026808,"15":0.03351,"16":0.046914,"17":0.03351,"18":0.03351,"19":0.026808,"20":0.03351,"21":0.053616,"22":0.026808,"23":0.040212,"24":0.060318,"25":0.060318,"26":0.046914,"27":0.127338,"28":0.046914,"29":0.073722,"30":0.10053,"31":0.455736,"32":0.281484,"33":0.174252,"34":0.321696,"35":8.933766,"36":0.717114,"37":0.020106,"38":null,"39":null},"chrome":{"4":0.013404,"5":0.013404,"6":0.013404,"7":0.006702,"8":0.013404,"9":0.006702,"10":0.026808,"11":0.080424,"12":0.03351,"13":0.020106,"14":0.020106,"15":0.020106,"16":0.013404,"17":0.013404,"18":0.03351,"19":0.013404,"20":0.013404,"21":0.073722,"22":0.080424,"23":0.020106,"24":0.053616,"25":0.026808,"26":0.053616,"27":0.053616,"28":0.046914,"29":0.080424,"30":0.127338,"31":0.750624,"32":0.080424,"33":0.288186,"34":0.227868,"35":0.388716,"36":0.6702,"37":0.817644,"38":0.683604,"39":1.970388,"40":27.37767,"41":0.187656,"42":0.174252,"43":null},"opera":{"9":null,"9.5-9.6":null,"10.0-10.1":0.020106,"10.5":null,"10.6":null,"11":null,"11.1":null,"11.5":0.006702,"11.6":0.013404,"12":0.013404,"12.1":0.227868,"15":null,"16":null,"17":null,"18":0.006702,"19":null,"20":0.013404,"21":null,"22":null,"23":null,"24":0.006702,"25":0.013404,"26":0.03351,"27":0.697008,"28":0.013404,"29":null},"safari":{"3.1":null,"3.2":null,"4":0.060318,"5":0.120636,"5.1":0.36861,"6":0.073722,"6.1":0.261378,"7":0.361908,"7.1":0.589776,"8":1.326996},"android":{"2.1":0,"2.2":0,"2.3":0.124294725023,"3":0,"4":0.2512061811,"4.1":0.809224078179,"4.2-4.3":1.36985870631,"4.4":2.55916296996,"4.4.3-4.4.4":1.17883733943,"37":0},"ios_saf":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0412817935536,"6.0-6.1":0.126742348629,"7.0-7.1":1.60419601265,"8":0.344739188272,"8.1":5.09576665689},"op_mob":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.0040597981521,"12.1":0.0243587889126,"0":null},"ie":{"5.5":null,"6":0.104359252652,"7":0.125231103182,"8":2.90118722372,"9":1.82280827965,"10":1.4401576866,"11":8.02174788717,"0":null},"ie_mob":{"10":0.224914921053,"11":0.477559078947},"bb":{"7":0.0816255,"10":null},"and_uc":{"0":3.84217},"op_mini":{"5.0-8.0":2.82764941294},"and_chr":{"0":10.513682},"and_ff":{"0":0.13192}},"total":97.064364933}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/num2fraction/.editorconfig b/node_modules/autoprefixer-core/node_modules/num2fraction/.editorconfig
new file mode 100644
index 0000000..4a12c11
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/num2fraction/.editorconfig
@@ -0,0 +1,14 @@
+# editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/node_modules/autoprefixer-core/node_modules/num2fraction/.npmignore b/node_modules/autoprefixer-core/node_modules/num2fraction/.npmignore
new file mode 100644
index 0000000..a8d3284
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/num2fraction/.npmignore
@@ -0,0 +1,8 @@
+.gitignore
+.travis.yml
+
+node_modules/
+test/
+
+gulpfile.js
+Gruntfile.js
diff --git a/node_modules/autoprefixer-core/node_modules/num2fraction/LICENSE b/node_modules/autoprefixer-core/node_modules/num2fraction/LICENSE
new file mode 100644
index 0000000..9d10f01
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/num2fraction/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 PostCSS
+
+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/node_modules/autoprefixer-core/node_modules/num2fraction/README.md b/node_modules/autoprefixer-core/node_modules/num2fraction/README.md
new file mode 100644
index 0000000..7041a26
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/num2fraction/README.md
@@ -0,0 +1,60 @@
+# num2fraction
+
+[](https://travis-ci.org/yisibl/num2fraction)
+[](https://www.npmjs.com/package/num2fraction)
+[](https://www.npmjs.com/package/num2fraction)
+[](http://opensource.org/licenses/MIT)
+
+> Converting Number to Fraction with Node.js.
+
+## Installation
+
+```console
+npm install num2fraction
+```
+
+## Usage
+
+```js
+var n2f = require('num2fraction')
+
+console.log(n2f(0)) // => 0
+console.log(n2f(.2)) // => 1/5
+console.log(n2f(1.3)) // => 13/10
+console.log(n2f(1.4)) // => 7/5
+console.log(n2f(1.5)) // => 3/2
+console.log(n2f(2)) // => 2/1
+console.log(n2f(3)) // => 3/1
+console.log(n2f('3em')) // => 3/1
+console.log(n2f('1.5px')) // => 3/2
+```
+
+## Example
+
+Opera [old versions](http://www.opera.com/docs/specs/presto28/css/o-vendor/) support the non-standard `-o-min-device-pixel-ratio` or `-o-max-device-pixel-ratio` in CSS media queries.
+
+```css
+@media
+ only screen and (-webkit-min-device-pixel-ratio: 2),
+ only screen and ( min--moz-device-pixel-ratio: 2),
+ only screen and ( -o-min-device-pixel-ratio: 2/1), /* Opera */
+ only screen and ( min-device-pixel-ratio: 2),
+ only screen and ( min-resolution: 192dpi), /* fallback */
+ only screen and ( min-resolution: 2dppx) {
+
+}
+```
+
+## Changelog
+
+### v1.0.1
+
+* \- Remove "ci.testling.com"
+
+### V1.0.0
+
+> First release.
+
+## License
+
+[MIT](LICENSE)
diff --git a/node_modules/autoprefixer-core/node_modules/num2fraction/index.js b/node_modules/autoprefixer-core/node_modules/num2fraction/index.js
new file mode 100644
index 0000000..df285b9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/num2fraction/index.js
@@ -0,0 +1,29 @@
+//最大公约数 Greatest Common Divisor
+function GCD(a, b) {
+ if (b === 0) return a
+ return GCD(b, a % b)
+}
+
+function num2fraction(num) {
+ if (num === 0) return 0
+
+ if (typeof num === 'string') {
+ num = parseFloat(num)
+ }
+
+
+ var precision = 100000000 //精确度
+ var number = num * precision
+ var gcd = GCD(number, precision)
+
+ //分子
+ var numerator = number / gcd
+ //分母
+ var denominator = precision / gcd
+
+ //分数
+ return numerator + '/' + denominator
+}
+
+module.exports = num2fraction
+
diff --git a/node_modules/autoprefixer-core/node_modules/num2fraction/package.json b/node_modules/autoprefixer-core/node_modules/num2fraction/package.json
new file mode 100644
index 0000000..1ccb993
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/num2fraction/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "num2fraction",
+ "version": "1.0.1",
+ "description": "Convert number to fraction",
+ "main": "index.js",
+ "author": {
+ "name": "yisi",
+ "email": "yiorsi@gmail.com",
+ "url": "http://iyunlu.com/view"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:yisibl/num2fraction.git"
+ },
+ "keywords": [
+ "fraction",
+ "number",
+ "math",
+ "maths",
+ "arithmetic",
+ "gcd",
+ "rational"
+ ],
+ "devDependencies": {
+ "tape": "^3.0.0"
+ },
+ "scripts": {
+ "test": "tape test/*.js"
+ },
+ "gitHead": "8e094652157b0ed03a49156abe8e80c76b40daee",
+ "bugs": {
+ "url": "https://github.com/yisibl/num2fraction/issues"
+ },
+ "homepage": "https://github.com/yisibl/num2fraction",
+ "_id": "num2fraction@1.0.1",
+ "_shasum": "addc0cad817e1a8686584a303ff244cbd336c531",
+ "_from": "num2fraction@~1.0.1",
+ "_npmVersion": "2.1.11",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "yisi",
+ "email": "yiorsi@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "yisi",
+ "email": "yiorsi@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "addc0cad817e1a8686584a303ff244cbd336c531",
+ "tarball": "http://registry.npmjs.org/num2fraction/-/num2fraction-1.0.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/API.md b/node_modules/autoprefixer-core/node_modules/postcss/API.md
new file mode 100644
index 0000000..57a9644
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/API.md
@@ -0,0 +1,1296 @@
+# PostCSS API
+
+* [postcss function](#postcss-function)
+* [PostCSS class](#postcss-class)
+* [Result class](#result-class)
+* [Vendor module](#vendor-module)
+* [List module](#list-module)
+* [Input class](#input-class)
+* [Nodes common methods](#nodes-common-methods)
+* [Containers common methods](#containers-common-methods)
+* [Root node](#root-node)
+* [AtRule node](#atrule-node)
+* [Rule node](#rule-node)
+* [Declaration node](#declaration-node)
+* [Comment node](#comment-node)
+
+## `postcss` function
+
+The `postcss` function is the main entry point for PostCSS.
+
+```js
+var postcss = require('postcss');
+```
+
+### `postcss(plugins)`
+
+Returns a new `PostCSS` instance that will apply `plugins`
+as CSS processors.
+
+```js
+postcss([autoprefixer, cssnext, cssgrace]).process(css).css;
+```
+
+You can also set plugins with the [`PostCSS#use`] method.
+
+See [`PostCSS#use`] below for details about plugin formats.
+
+### `postcss.parse(css, opts)`
+
+Parses source `css` and returns a new `Root` node, which contains
+the source CSS nodes.
+
+```js
+// Simple CSS concatenation with source map support
+var root1 = postcss.parse(css1, { from: file1 });
+var root2 = postcss.parse(css2, { from: file2 });
+root1.append(root2).toResult().css;
+```
+
+Options:
+
+* `from`: the path to the source CSS file. You should always set `from`,
+ because it is used in map generation and in syntax error messages.
+* `safe`: enable [Safe Mode], in which PostCSS will try
+ to fix CSS syntax errors.
+* `map`: an object of [source map options].
+ Only `map.prev` is used in `parse`.
+
+### `postcss.root(props)`
+
+Creates a new [`Root` node].
+
+```js
+postcss.root({ after: '\n' }).toString() //=> "\n"
+```
+
+### `postcss.atRule(props)`
+
+Creates a new [`AtRule` node].
+
+```js
+postcss.atRule({ name: 'charset' }).toString() //=> "@charset"
+```
+
+### `postcss.rule(props)`
+
+Creates a new [`Rule` node].
+
+```js
+postcss.rule({ selector: 'a' }).toString() //=> "a {\n}"
+```
+
+### `postcss.decl(props)`
+
+Creates a new [`Declaration` node].
+
+```js
+postcss.decl({ prop: 'color', value: 'black' }).toString() //=> "color: black"
+```
+
+### `postcss.comment(props)`
+
+Creates a new [`Comment` node].
+
+```js
+postcss.comment({ text: 'test' }).toString() //=> "/* test */"
+```
+
+## `PostCSS` class
+
+A `PostCSS` instance contains plugins to process CSS. You can create
+one `PostCSS` instance, initialize its plugins, and then use that instance
+on many CSS files.
+
+```js
+var processor = postcss([autoprefixer, cssnext, cssgrace]);
+processor.process(css1).css;
+processor.process(css2).css;
+```
+
+### `p.use(plugin)`
+
+Adds a plugin to be used as a CSS processor.
+
+```js
+var processor = postcss();
+processor.use(autoprefixer).use(cssnext).use(cssgrace);
+```
+
+Plugins can also be added by passing them as arguments when creating
+a `postcss` instance (cf. [`postcss(plugins)`]).
+
+Plugins can come in three formats:
+
+1. A function. PostCSS will pass the function a [`Root` node]
+ as the first argument.
+2. An object with a `postcss` method. PostCSS will use that method
+ as described in #1.
+3. Another `PostCSS` instance. PostCSS will copy plugins
+ from that instance to this one.
+
+Plugin functions should mutate the passed `Root` node and return nothing,
+or return a new `Root` node.
+
+```js
+processor.use(function (css) {
+ css.prepend({ name: 'charset', params: '"UTF-8"' });
+});
+processor.use(function (css) {
+ return postcss.root();
+});
+```
+
+### `p.process(css, opts)`
+
+This is the main method of PostCSS. It will parse the source CSS
+and create a [`Root` node]; send this `Root` to each plugin successively,
+for transformations; and then return a `Result` instance created
+from the transformed `Root`.
+
+```js
+var result = processor.process(css, { from: 'a.css', to: 'a.out.css' });
+```
+
+Input CSS formats are:
+
+* A string of CSS.
+* A `Result` instance from another PostCSS processor. PostCSS will accept
+ the already parsed `Root` from it.
+* Any object with a `toString()` method — for example, a file stream.
+
+Options:
+
+* `from`: the path of the CSS source file. You should always set `from`,
+ because it is used in source map generation and syntax error messages.
+* `to`: the path where you’ll put the output CSS file. You should always set
+ `to` to generate correct source maps.
+* `safe`: enable [Safe Mode], in which PostCSS will try
+ to fix CSS syntax errors.
+* `map`: an object of [source map options].
+
+## `Result` class
+
+Provides result of PostCSS transformations.
+
+A `Result` instance is returned
+by [`PostCSS#process(css, opts)`] and [`Root#toResult(opts)`].
+
+```js
+var result1 = postcss().process(css);
+var result2 = postcss.parse(css).toResult();
+```
+
+### `result.root`
+
+The source `Root` instance.
+
+```js
+root.toResult().root == root;
+```
+
+### `result.opts`
+
+Options from the [`PostCSS#process(css, opts)`] or
+[`Root#toResult(opts)`] call that produced
+this `Result` instance.
+
+```js
+postcss().process(css, opts).opts == opts;
+```
+
+### `result.css`
+
+A CSS string representing this `Result`’s '`Root` instance.
+
+```js
+postcss().process('a{}').css //=> "a{}"
+```
+
+This property is generated *lazily*: `Root` is not stringified until
+the first request for the `css` property (or the [`result.map`] property).
+That initial request for `css` will also generate a source map.
+Source map will inlined into CSS or assigned to the [`result.map`] property,
+if user ask to save map to separated file.
+
+### `result.map`
+
+An instance of the `SourceMapGenerator` class from the [`source-map`] library,
+representing changes to the `Result`’s `Root` instance.
+
+```js
+result.map.toJSON() //=> { version: 3, file: 'a.css', sources: ['a.css'], … }
+```
+
+This property is generated *lazily*: the source map for `Root` is not generated
+until the first request for the `map` property (or the [`result.css`] property).
+That initial request will also stringify `Root` and assign the generated
+CSS string to the [`result.css`] property.
+
+Additionally, *this property will receive a value only if the user does not wan
+an inline source map*. By default, PostCSS generates inline source maps,
+written directly into the processed CSS; so by default the `map` property
+will be empty.
+
+An external source map will be generated — and assigned to `map` — only if the
+user has set the `map.inline` option to `false`, or if PostCSS was passed
+an external input source map.
+
+```js
+if ( result.map ) {
+ fs.writeFileSync(to + '.map', result.map.toString());
+}
+```
+
+## Vendor module
+
+Contains helpers for working with vendor prefixes.
+
+### `vendor.prefix(string)`
+
+Returns the vendor prefix extracted from an input string.
+
+```js
+vendor.prefix('-moz-tab-size') //=> '-moz-'
+```
+
+### `vendor.unprefixed(string)`
+
+Returns the input string stripped of its vendor prefix.
+
+```js
+vendor.unprefixed('-moz-tab-size') //=> 'tab-size'
+```
+
+## List module
+
+Contains helpers for safely splitting lists of CSS values, preserving parentheses
+and quotes.
+
+```js
+var list = require('postcss/lib/list');
+```
+
+### `list.space(string)`
+
+Safely splits space-separated values (such as those for `background`,
+`border-radius`, and other shorthand properties).
+
+```js
+list.space('1px calc(10% + 1px)')
+//=> ['1px', 'calc(10% + 1px)']
+```
+
+### `list.comma(string)`
+
+Safely splits comma-separated values (such as those
+for `transition-*` and `background` properties).
+
+```js
+list.comma('black, linear-gradient(white, black)')
+//=> ['black', 'linear-gradient(white, black)']
+```
+
+## `Input` class
+
+Represents the source CSS.
+
+```js
+var root = postcss.parse(css, { from: file });
+var input = root.source.input;
+```
+
+### `input.file`
+
+The absolute path to the CSS source file defined with
+the [`from` option](#pprocesscss-opts).
+
+```js
+var root = postcss.parse(css, { from: 'a.css' });
+root.source.input.file //=> '/home/ai/a.css'
+```
+
+### `input.id`
+
+The unique ID of the CSS source. This is used if the user did not enter a `from`
+options so PostCSS does not know about a file path.
+
+```js
+var root = postcss.parse(css);
+root.source.input.file //=> undefined
+root.source.input.id //=>
+```
+
+### `input.from`
+
+The CSS source identifier. Contains [`input.file`](#inputfile) if the user set the
+[`from` option](#pprocesscss-opts), or [`input.id`](#inputid) if she did not.
+
+```js
+var root = postcss.parse(css, { from: 'a.css' });
+root.source.input.from //=> '/home/ai/a.css'
+
+var root = postcss.parse(css);
+root.source.input.from //=>
+```
+
+### `input.map`
+
+Represents the input source map passed from a compilation step before PostCSS
+(for example, from the Sass compiler).
+
+`map.consumer()` returns an instance of the `SourceMapConsumer` class
+from the [`source-map`] library.
+
+```js
+root.source.input.map.consumer().sources //=> ['a.sass']
+```
+
+### `input.origin(line, column)`
+
+Reads the input source map and returns a symbol position in the input source
+(for example, in a Sass file that was compiled to CSS before being passed
+to PostCSS):
+
+```js
+root.source.input.origin(1, 1) //=> { source: 'a.css', line: 3, column: 1 }
+```
+
+## Nodes: common methods
+
+All node classes have many common methods.
+
+### `node.type`
+
+Returns a string representing the node’s type.
+
+Possible values are `root`, `atrule`, `rule`, `decl`, or `comment`.
+
+```js
+postcss.decl({ prop: 'color', value: 'black' }).type //=> 'decl'
+```
+
+### `node.parent`
+
+Returns the node’s parent node.
+
+```js
+root.nodes[0].parent == root;
+```
+
+### `node.source`
+
+Returns the input source of the node, with the following properties:
+
+- `node.source.input`: An [`Input`] instance.
+- `node.source.start`: The starting position of the node’s source —
+ line and column.
+- `node.source.end`: The ending position of the node’s source — line and column.
+
+```js
+decl.source.input.from //=> '/home/ai/a.sass'
+decl.source.start //=> { line: 10, column: 2 }
+decl.source.end //=> { line: 10, column: 12 }
+```
+
+The property is used in source map generation.
+
+If you create a node manually (for example, with `postcss.decl()`),
+that node will not have a `source` property and will be absent
+from the source map. For this reason, plugin developer should consider
+cloning nodes to create new ones (in which case the new node’s source
+will reference the original, cloned node) or setting the `source` property
+manually.
+
+```js
+// Bad
+var prefixed = postcss.decl({ prop: '-moz-' + decl.prop, value: decl.value });
+
+// Good
+var prefixed = decl.clone({ prop: '-moz-' + decl.prop });
+```
+
+```js
+if ( atrule.name == 'add-link' ) {
+ var rule = postcss.rule({ selector: 'a' }); // Rule has no source
+ atrule.parent.insertBefore(atrule, rule); // We add it because of atrule
+ rule.source = atrule.source; // So we copy source from atrule
+}
+```
+
+### `node.toString()`
+
+Returns a CSS string representing the node.
+
+```js
+postcss.rule({ selector: 'a' }).toString() //=> 'a {}''
+```
+
+### `node.error(message)`
+
+Returns a `CssSyntaxError` instance that presents the original position
+of the node in the source, showing line and column numbers and also
+a small excerpt to facilitate debugging.
+
+It will use an input source map, if present, to get the original position
+of the source, even from a previous compilation step
+(for example, from Sass compilation).
+
+This method produces very useful error messages.
+
+```js
+if ( !variables[name] ) {
+ throw decl.error('Unknown variable ' + name);
+ // CssSyntaxError: a.sass:4:3: Unknown variable $black
+ // a
+ // color: $black
+ // ^
+ // background: white
+}
+
+if ( oldSyntax.check(decl) ) {
+ console.warn( decl.error('Old syntax for variables').message );
+ // a.sass:4:3: Old syntax for variables
+}
+```
+
+### `node.next()` and `node.prev()`
+
+Returns the next/previous child of the node’s parent; or returns `undefined`
+if the current node is the last/first child.
+
+```js
+var annotation = decl.prev();
+if ( annotation.type == 'comment' ) {
+ readAnnotation( annotation.text );
+}
+```
+
+### `node.root()`
+
+Returns the `Root` instance of the node’s tree.
+
+```js
+root.nodes[0].nodes[0].root() == root
+```
+
+### `node.removeSelf()`
+
+Removes the node from its parent, and cleans the `parent` property in the node
+and its children.
+
+```js
+if ( decl.prop.match(/^-webkit-/) ) {
+ decl.removeSelf();
+}
+```
+
+### `node.replaceWith(otherNode)`
+
+Inserts another node before the current node, and removes the current node.
+
+```js
+if ( atrule.name == 'mixin' ) {
+ atrule.replaceWith(mixinRules[atrule.params]);
+}
+```
+
+### `node.clone(props)`
+
+Returns a clones of the node.
+
+The resultant clone node and its (clone) children will have clean `parent`
+and code style properties. You can override properties in the clone node
+by passing a `props` argument.
+
+```js
+var clonded = decl.clone({ prop: '-moz-' + decl.prop });
+cloned.before //=> undefined
+cloned.parent //=> undefined
+cloned.toString() //=> -moz-transform: scale(0)
+```
+
+### `node.cloneBefore(props)` and `node.cloneAfter(props)`
+
+Shortcuts to clone the node and insert the resultant clone node before/after
+the current node.
+
+```js
+decl.cloneBefore({ prop: '-moz-' + decl.prop });
+```
+
+### `node.moveTo(newParent)`
+
+Removes the node from its current parent and inserts it
+at the end of `newParent`.
+
+This will clean the `before` and `after` code style properties from the node,
+and replace them with the indentation style of `newParent`. It will also clean
+the `between` property if `newParent` is in another `Root`.
+
+```js
+atrule.moveTo(atrule.parent.parent);
+```
+
+### `node.moveBefore(otherNode)` and `node.moveAfter(otherNode)`
+
+Removes the node from its current parent and inserts it into a new parent
+before/after `otherNode`.
+
+This will also clean the node’s code style properties just
+as `node.moveTo(newParent)` does.
+
+### `node.style(prop, defaultType)`
+
+Returns a code style property value. If the node is missing the code style
+property (because the node was manually built or cloned), PostCSS will try
+to autodetect the code style property by looking at other nodes in the tree.
+
+```js
+var root = postcss.parse('a { background: white }');
+root.nodes[0].append({ prop: 'color', value: 'black' });
+root.nodes[0].nodes[1].style('before') //=> ' '
+```
+
+## Containers: common methods
+
+The `Root`, `AtRule`, and `Rule` container nodes have some common methods
+to help work with their children.
+
+Note that all containers can store *any* content. If you write a rule inside
+a rule, PostCSS will parse it.
+
+### `container.nodes`
+
+An array containing the container’s children.
+
+```js
+var root = postcss.parse('a { color: black }');
+root.nodes.length //=> 1
+root.nodes[0].selector //=> 'a'
+root.nodes[0].nodes[0].prop //=> 'color'
+```
+
+### `container.first`
+
+The container’s first child.
+
+```js
+rule.first == rules.nodes[0];
+```
+
+### `container.last`
+
+The container’s last child.
+
+```js
+rule.last == rule.nodes[rule.nodes.length - 1];
+```
+
+### `container.index(child)`
+
+Returns `child`’s index within the container’s `nodes` array.
+
+```js
+rule.index( rule.nodes[2] ) //=> 2
+```
+
+### `container.every(callback)`
+
+Returns `true` if `callback` returns a truthy value for all
+of the container’s children.
+
+```js
+var noPrefixes = rule.every(function (decl) {
+ return decl.prop[0] != '-';
+});
+```
+
+### `container.some(callback)`
+
+Return `true` if `callback` returns a truthy value
+for (at least) one of the container’s children.
+
+```js
+var hasPrefix = rule.some(function (decl) {
+ return decl.prop[0] == '-';
+});
+```
+
+### `container.each(callback)`
+
+Iterates through the container’s immediate children, calling `callback`
+for each child.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+Returning `false` within `callback` will break iteration.
+
+```js
+var color;
+rule.each(function (decl) {
+ if ( decl.prop == 'color' ) {
+ color = decl.value;
+ return false;
+ }
+});
+```
+
+Unlike the `for {}`-cycle or `Array#forEach()` this iterator is safe
+if you are mutating the array of child nodes during iteration.
+PostCSS will adjust the current index to match the mutations.
+
+```js
+var root = postcss.parse('a { color: black; z-index: 1 }');
+var rule = root.first;
+
+for ( var i = 0; i < rule.nodes.length; i++ ) {
+ var decl = rule.nodes[i];
+ decl.cloneBefore({ prop: '-webkit-' + decl.prop });
+ // Cycle will be infinite, because cloneBefore move current node
+ // to next index
+}
+
+rule.each(function (decl) {
+ decl.cloneBefore({ prop: '-webkit-' + decl.prop });
+ // Will be executed only for color and z-index
+});
+```
+
+`container.each()` only iterates through the container’s immediate children.
+If you need to recursively iterate through all the container’s descendents,
+use `container.eachInside()`.
+
+### `container.eachInside(callback)`
+
+Recursively iterates through the container’s children,
+those children’s children, etc., calling `callback` for each.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+```js
+root.eachInside(function (node) {
+ // Will be iterate through all nodes
+});
+```
+
+Like `container.each()`, this method is safe to use
+if you are mutating arrays during iteration.
+
+If you only need to iterate through the container’s immediate children,
+use `container.each()`.
+
+### `container.eachDecl([propFilter,] callback)`
+
+Recursively iterates through all declaration nodes within the container,
+calling `callback` for each.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+```js
+root.eachDecl(function (decl) {
+ if ( decl.prop.match(/^-webkit-/) ) {
+ decl.removeSelf();
+ }
+});
+```
+
+If you pass a string or regular expression as `filter`, only those declarations whose
+property matches`filter` will be iterated over.
+
+```js
+// Make flat design
+root.eachDecl('border-radius', function (decl) {
+ decl.removeSelf();
+});
+root.eachDecl(/^background/, function (decl) {
+ decl.value = takeFirstColorFromGradient(decl.value);
+});
+```
+
+Like `container.each()`, this method is safe to use if you are mutating
+arrays during iteration.
+
+### `container.eachAtRule([nameFilter,] callback)`
+
+Recursively iterates through all at-rule nodes within the container,
+calling `callback` for each.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+
+```js
+root.eachAtRule(function (rule) {
+ if ( rule.name.match(/^-webkit-/) ) rule.removeSelf();
+});
+```
+
+If you pass a string or regular expression as `filter`, only those at-rules whose name
+matches `filter` will be iterated over.
+
+```js
+var first = false;
+root.eachAtRule('charset', function (rule) {
+ if ( !first ) {
+ first = true;
+ } else {
+ rule.removeSelf();
+ }
+});
+```
+
+Like `container.each()`, this method is safe to use if you are mutating arrays
+during iteration.
+
+### `container.eachRule(callback)`
+
+Recursively iterates through all rule nodes within the container, calling
+`callback` for each.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+```js
+var selectors = [];
+root.eachRule(function (rule) {
+ selectors.push(rule.selector);
+});
+console.log('You CSS uses ' + selectors.length + ' selectors');
+```
+
+Like `container.each()`, this method is safe to use if you are mutating arrays
+during iteration.
+
+### `container.eachComment(callback)`
+
+Recursively iterates through all comment nodes within the container, calling
+`callback` for each.
+
+```js
+root.eachComment(function (comment) {
+ comment.removeSelf();
+})
+```
+
+Like `container.each()`, this method is safe to use if you are mutating arrays
+during iteration.
+
+### `container.replaceValues(regexp, opts, callback)`
+
+Passes all declaration values within the container that match `regexp` through
+`callback`, replacing those values with the returned result of `callback`.
+
+`callback` will receive the same arguments as those passed to a function
+parameter of [`String#replace`].
+
+You can speed up the search by passing `opts`:
+
+- `props`: An array of property names. The method will only search for values
+ that match `regexp` within declarations of listed properties.
+- `fast`: A string that will be used to narrow down values and speed up
+ the regexp search. Searching every single value with a regexp can be slow;
+ so if you pass a `fast` string, PostCSS will first check whether the value
+ contains the `fast` string; and only if it does will PostCSS check that value
+ against `regexp`. For example, instead of just checking for `/\d+rem/` on
+ all values, you can set `fast: 'rem'` to first check whether a value has
+ the `rem` unit, and only if it does perform the regexp check.
+
+This method is useful if you are using a custom unit or function,
+so need to iterate through all values.
+
+```js
+root.replaceValues(/\d+rem/, { fast: 'rem' }, function (string) {
+ return 15 * parseInt(string) + 'px';
+});
+```
+
+[`String#replace`]: (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter)
+
+### `container.prepend(node)` and `container.append(node)`
+
+Insert a new node to the start/end of the container.
+
+```js
+var decl = postcss.decl({ prop: 'color', value: 'black' });
+rule.append(decl);
+```
+
+Because each node class is identifiable by unique properties, you can use
+the following shortcuts to create nodes to prepend/append:
+
+```js
+root.append({ name: '@charset', params: '"UTF-8"' }); // at-rule
+root.append({ selector: 'a' }); // rule
+rule.append({ prop: 'color', value: 'black' }); // declaration
+rule.append({ text: 'Comment' }) // comment
+```
+
+### `container.insertBefore(oldNode, newNew)` and `container.insertAftr(oldNode, newNew)`
+
+Insert `newNode` before/after `oldNode` within the container.
+
+`oldNode` can be a node or a node’s index.
+
+```js
+rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop }));
+```
+
+You can also use the same shorcuts available to `container.append()`.
+
+```js
+rule.insertBefore(decl, { prop: 'color', value: 'black' });
+```
+
+### `container.remove(node)`
+
+Removes `node` from the container, and the `parent` properties of `node`
+and its children.
+
+`node` can be a node or a node’s index.
+
+```js
+rule.nodes.length //=> 5
+rule.remove(decl);
+rule.nodes.length //=> 4
+decl.parent //=> undefined
+```
+
+### `container.removeAll()`
+
+Removes all children from the container, and cleans their `parent` properties.
+
+```js
+rule.removeAll();
+rule.nodes.length //=> 0
+```
+
+## `Root` node
+
+Represents a CSS file and contains all its parsed nodes.
+
+```js
+var root = postcss.parse('a{color:black} b{z-index:2}');
+root.type //=> 'root'
+root.nodes.length //=> 2
+```
+
+### `root.toResult(opts)`
+
+Returns a [`Result`] instance representing the root's CSS.
+
+```js
+var root1 = postcss.parse(css1, { from: 'a.css' });
+var root2 = postcss.parse(css2, { from: 'b.css' });
+
+root1.append(root2);
+var result = root1.toResult({ to: 'all.css', map: true });
+```
+
+Options:
+
+* `to`: the path where you’ll put the output CSS file. You should always set
+ `to` to generate correct source maps.
+* `map`: an object of [source map options].
+
+### `root.after`
+
+The space symbols after the last child of `root`,
+such as `\n` at the end of a file.
+
+```js
+var root = parse('a {}\nb { color: black }\n');
+root.after //=> '\n'
+```
+
+This is a code style property.
+
+## `AtRule` node
+
+Represents an at-rule.
+
+This node will have a `nodes` property, representing its children,
+if it is followed in the CSS by a `{}` block.
+
+
+```js
+var root = postcss.parse('@charset "UTF-8"; @media print {}');
+
+var charset = root.first;
+charset.type //=> 'atrule'
+charset.nodes //=> undefined
+
+var media = root.last;
+media.nodes //=> []
+```
+
+### `atrule.name`
+
+The at-rule’s name. This is the identifier that immediately follows the `@`.
+
+```js
+var root = postcss.parse('@media print {}');
+var media = root.first;
+media.name //=> 'media'
+```
+
+### `atrule.params`
+
+The at-rule’s parameters. These are the values that follow the at-rule’s name
+but precede any `{}` block. The spec refers to this area
+as the at-rule’s “prelude”.
+
+```js
+var root = postcss.parse('@media print, screen {}');
+var media = root.first;
+media.params //=> '[print, screen]'
+```
+
+This value will be cleaned of comments. If the source at-rule’s prelude
+contained comments, those comments will be available
+in the `_params.raw` property.
+
+If you have not changed the parameters, calling `atrule.toString()`
+will stringify the original raw value (comments and all).
+
+```js
+var root = postcss.parse('@media print, /**/ screen {}');
+var media = root.first;
+media.params //=> '[print, screen]'
+media._params.raw //=> 'print, /**/ screen'
+media.toString() //=> '@media print, /**/ screen {}'
+```
+
+### `atrule.before`
+
+The space symbols before the at-rule.
+
+The default value is `\n`, except for the first rule in a `Root`,
+whose `before` property is empty.
+
+```js
+var root = postcss.parse('@charset "UTF-8";\n@media print {}\n');
+var media = root.last;
+media.before //=> '\n'
+```
+
+This is a code style property.
+
+### `atrule.afterName`
+
+The space symbols between the at-rule’s name and its parameters.
+
+The default value is ` `.
+
+```js
+var root = postcss.parse('@media\n print,\n screen {}\n');
+var media = root.first;
+media.afterName //=> '\n '
+```
+
+This is a code style property.
+
+### `atrule.between`
+
+The space symbols between the at-rule’s parameters
+and `{`, the block-opening curly brace.
+
+The default value is ` `.
+
+```js
+var root = postcss.parse('@media print, screen\n{}\n');
+var media = root.first;
+media.before //=> '\n'
+```
+
+This is a code style property.
+
+### `atrule.after`
+
+The space symbols between the at-rule’s last child and `}`,
+the block-closing curly brace.
+
+The default value is `\n` if the at-rule has children,
+and an empty string (`''`) if it does not.
+
+```js
+var root = postcss.parse('@media print {\n a {}\n }\n');
+var media = root.first;
+media.after //=> '\n '
+```
+
+This is a code style property.
+
+### `atrule.semicolon`
+
+`true` if at-rule’s last child declaration
+is followed by an (optional) semicolon.
+
+`undefined` if the semicolon is omitted.
+
+```js
+postcss.parse('@page{color:black}').first.semicolon //=> undefined
+postcss.parse('@page{color:black;}').first.semicolon //=> true
+```
+
+This is a code style property.
+
+## `Rule` node
+
+Represents a CSS rule: a selector followed by a declaration block.
+
+```js
+var root = postcss.parse('a{}');
+var rule = root.first;
+rule.type //=> 'rule'
+rule.toString() //=> 'a{}'
+```
+
+### `rule.selector`
+
+The rule’s full selector represented as a string. If there are multiple
+comma-separated selectors, the entire group will be included.
+
+```js
+var root = postcss.parse('a, b { }');
+var rule = root.first;
+rule.selector //=> 'a, b'
+```
+
+This value will be cleaned of comments. If the source selector contained
+comments, those comments will be available in the `_selector.raw` property.
+
+If you have not changed the selector, the result of `rule.toString()`
+will include the original raw selector value (comments and all).
+
+```js
+var root = postcss.parse('a /**/ b {}');
+var rule = root.first;
+rule.selector //=> 'a b'
+rule._selector.raw //=> 'a /**/ b'
+rule.toString() //=> 'a /**/ b {}'
+```
+
+### `rule.selectors`
+
+An array containing the rule’s individual selectors.
+Groups of selectors are split at commas.
+
+```js
+var root = postcss.parse('a, b { }');
+var rule = root.first;
+
+rule.selector //=> 'a, b'
+rule.selectors //=> ['a', 'b']
+
+rule.selectors = ['a', 'strong'];
+rule.selector //=> 'a, strong'
+```
+
+### `rule.before`
+
+The space symbols before the rule.
+
+The default value is `\n`, except for first rule in root,
+whose `before` property is empty.
+
+```js
+var root = postcss.parse('a {}\nb {}\n');
+var rule = root.last;
+rule.before //=> '\n'
+```
+
+This is a code style property.
+
+### `rule.after`
+
+The space symbols between the rule’s last child and `}`,
+the block-closing curly brace.
+
+The default value is `\n` if rule has children and an empty string (`''`)
+if it does not.
+
+```js
+var root = postcss.parse('@a {\n color: black\n }\n');
+var rule = root.first;
+root.after //=> '\n '
+```
+
+This is a code style property.
+
+### `rule.semicolon`
+
+`true` if rule’s last child declaration is followed by an (optional) semicolon.
+
+`undefined` if the semicolon is omitted.
+
+```js
+postcss.parse('a{color:black}').first.semicolon //=> undefined
+postcss.parse('a{color:black;}').first.semicolon //=> true
+```
+
+This is a code style property.
+
+## `Declaration` node
+
+Represents a CSS declaration.
+
+```js
+var root = postcss.parse('a { color: black }');
+var decl = root.first.first;
+decl.type //=> 'decl'
+decl.toString() //=> ' color: black'
+```
+
+### `declaration.prop`
+
+The declaration’s property name.
+
+```js
+var root = postcss.parse('a { color: black }');
+var decl = root.first.first;
+decl.prop //=> 'color'
+```
+
+### `declaration.value`
+
+The declaration’s value.
+
+```js
+var root = postcss.parse('a { color: black }');
+var decl = root.first.first;
+decl.value //=> 'black'
+```
+
+This value will be cleaned of comments. If the source value contained comments,
+those comments will be available in the `_value.raw` property.
+
+If you have not changed the value, the result of `decl.toString()` will include
+the original raw value (comments and all).
+
+```js
+var root = postcss.parse('a { border-radius: 3px /**/ 0 }');
+var decl = root.first.first;
+decl.value //=> '3px 0'
+decl._value.raw //=> '3px /**/ 0'
+decl.toString() //=> ' border-radius: 3px /**/ 0'
+```
+
+### `declaration.before`
+
+The space symbols before the declaration.
+
+Default value is `\n `.
+
+```js
+var root = postcss.parse('a {\n color: black\n}\n');
+var decl = root.first.first;
+decl.before //=> '\n '
+```
+
+This is a code style property.
+
+### `declaration.between`
+
+The symbols between the declaration’s property and its value.
+
+Default value is `: `.
+
+```js
+var root = postcss.parse('a { color/**/: black }');
+var decl = root.first.first;
+decl.between //=> '/**/: '
+```
+
+This is a code style property.
+
+### `declaration.important`
+
+`true` if the declaration has an `!important` annotation.
+
+```js
+var root = postcss.parse('a { color: black !important; color: white }');
+root.first.first.important //=> true
+root.first.last.important //=> undefined
+```
+
+If there are comments between the declaration’s value and its
+`!important` annotation, they will be available in the `_important` property.
+
+```js
+var root = postcss.parse('a { color: black /**/ !important }');
+root.first.first._important //=> ' /**/ !important'
+```
+
+## `Comment` node
+
+Represents a comment between declarations or statements (rule and at-rules).
+Comments inside selectors, at-rules parameters, or declaration values
+will be stored in the raw properties explained above.
+
+```js
+var root = postcss.parse('a { color: /* inner */ black; /* outer */ }');
+var decl = root.first.first;
+var comment = root.first.last;
+
+comment.type //=> 'comment'
+decl.between //=> ': /* inner */'
+```
+
+### `comment.text`
+
+The comment’s text.
+
+```js
+var root = postcss.parse('/* Empty file */');
+var comment = root.first;
+var comment.text //=> 'Empty file'
+```
+
+### `comment.left` and `comment.right`
+
+The space symbols before/after the comment’s text.
+
+Default value is ` `.
+
+```js
+var root = postcss.parse('/* long */ /*short*/');
+var long = root.first;
+var short = root.last;
+
+long.left //=> ' '
+short.left //=> ''
+```
+
+This is a code style property.
+
+### `comment.before`
+
+The space symbols before the comment.
+
+Default value is `\n`.
+
+```js
+var root = postcss.parse('a {\n /**/}\n');
+var comment = root.first.first;
+comment.before //=> '\n '
+```
+
+This is a code style property.
+
+[`source-map`]: https://github.com/mozilla/source-map
+
+[source map options]: https://github.com/postcss/postcss#source-map
+[Safe Mode]: https://github.com/postcss/postcss#safe-mode
+
+[`PostCSS#process(css, opts)`]: #pprocesscss-opts
+[`Root#toResult(opts)`]: #roottoresult-opts
+[`postcss(plugins)`]: #postcssplugins
+[`Declaration` node]: #declaration-node
+[`Comment` node]: #comment-node
+[`PostCSS#use`]: #puseplugin
+[`AtRule` node]: #atrule-node
+[`result.map`]: #resultmap
+[`result.css`]: #resultcss
+[`Root` node]: #root-node
+[`Rule` node]: #rule-node
+[`Input`]: #inputclass
+[`Result`]: #result-class
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/ChangeLog.md b/node_modules/autoprefixer-core/node_modules/postcss/ChangeLog.md
new file mode 100644
index 0000000..736bf8d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/ChangeLog.md
@@ -0,0 +1,196 @@
+## 4.0.6
+* Remove `babel` from released package dependencies (by Andres Suarez).
+
+## 4.0.5
+* Fix error message on double colon in declaration.
+
+## 4.0.4
+* Fix indent detection in some rare cases.
+
+## 4.0.3
+* Faster API with 6to5 Loose mode.
+* Fix indexed source maps support.
+
+## 4.0.2
+* Do not copy IE hacks to code style.
+
+## 4.0.1
+* Add `source.input` to `Root` too.
+
+## 4.0 “Duke Flauros”
+* Rename `Container#childs` to `nodes`.
+* Rename `PostCSS#processors` to `plugins`.
+* Add `Node#replaceValues()` method.
+* Add `Node#moveTo()`, `moveBefore()` and `moveAfter()` methods.
+* Add `Node#cloneBefore()` and `cloneAfter()` shortcuts.
+* Add `Node#next()`, `prev()` and `root()` shorcuts.
+* Add `Node#replaceWith()` method.
+* Add `Node#error()` method.
+* Add `Container#removeAll()` method.
+* Add filter argument to `eachDecl()` and `eachAtRule()`.
+* Add `Node#source.input` and move `source.file` or `source.id` to `input`.
+* Change code indent, when node was moved.
+* Better fix code style on `Rule`, `AtRule` and `Comment` nodes changes.
+* Allow to create rules and at-rules by hash shortcut in append methods.
+* Add class name to CSS syntax error output.
+
+## 3.0.7
+* Fix IE filter parsing with multiple commands.
+* Safer way to consume PostCSS object as plugin (by Maxime Thirouin).
+
+## 3.0.6
+* Fix missing semicolon when comment comes after last declaration.
+* Fix Safe Mode declaration parsing on unclosed blocks.
+
+## 3.0.5
+* Fix parser to support difficult cases with backslash escape and brackets.
+* Add `CssSyntaxError#stack` (by Maxime Thirouin).
+
+## 3.0.4
+* Fix Safe Mode on unknown word before declaration.
+
+## 3.0.3
+* Increase tokenizer speed (by Roman Dvornov).
+
+## 3.0.2
+* Fix empty comment parsing.
+* Fix `Root#normalize` in some inserts.
+
+## 3.0.1
+* Fix Rhino JS runtime support.
+* Typo in deprecated warning (by Maxime Thirouin).
+
+## 3.0 “Marquis Andrealphus”
+* New parser, which become the fastest ever CSS parser written in JavaScript.
+* Parser can now parse declarations and rules in one parent (like in `@page`)
+ and nested declarations for plugins like `postcss-nested`.
+* Child nodes array is now in `childs` property, instead of `decls` and `rules`.
+* `map.inline` and `map.sourcesContent` options are now `true` by default.
+* Fix iterators (`each`, `insertAfter`) on children array changes.
+* Use previous source map to show origin source of CSS syntax error.
+* Use 6to5 ES6 compiler, instead of ES6 Transpiler.
+* Use code style for manually added rules from existing rules.
+* Use `from` option from previous source map `file` field.
+* Set `to` value to `from` if `to` option is missing.
+* Use better node source name when missing `from` option.
+* Show a syntax error when `;` is missed between declarations.
+* Allow to pass `PostCSS` instance or list of plugins to `use()` method.
+* Allow to pass `Result` instance to `process()` method.
+* Trim Unicode BOM on source maps parsing.
+* Parse at-rules without spaces like `@import"file"`.
+* Better previous `sourceMappingURL` annotation comment cleaning.
+* Do not remove previous `sourceMappingURL` comment on `map.annotation: false`.
+* Parse nameless at-rules in Safe Mode.
+* Fix source map generation for nodes without source.
+* Fix next child `before` if `Root` first child got removed.
+
+## 2.2.6
+* Fix map generation for nodes without source (by Josiah Savary).
+
+## 2.2.5
+* Fix source map with BOM marker support (by Mohammad Younes).
+* Fix source map paths (by Mohammad Younes).
+
+## 2.2.4
+* Fix `prepend()` on empty `Root`.
+
+## 2.2.3
+* Allow to use object shortcut in `use()` with functions like `autoprefixer`.
+
+## 2.2.2
+* Add shortcut to set processors in `use()` via object with `.postcss` property.
+
+## 2.2.1
+* Send `opts` from `Processor#process(css, opts)` to processors.
+
+## 2.2 “Marquis Cimeies”
+* Use GNU style syntax error messages.
+* Add `Node#replace` method.
+* Add `CssSyntaxError#reason` property.
+
+## 2.1.2
+* Fix UTF-8 support in inline source map.
+* Fix source map `sourcesContent` if there is no `from` and `to` options.
+
+## 2.1.1
+* Allow to miss `to` and `from` options for inline source maps.
+* Add `Node#source.id` if file name is unknown.
+* Better detect splitter between rules in CSS concatenation tools.
+* Automatically clone node in insert methods.
+
+## 2.1 “King Amdusias”
+* Change Traceur ES6 compiler to ES6 Transpiler.
+* Show broken CSS line in syntax error.
+
+## 2.0 “King Belial”
+* Project was rewritten from CoffeeScript to ES6.
+* Add Safe Mode to works with live input or with hacks from legacy code.
+* More safer parser to pass all hacks from Browserhacks.com.
+* Use real properties instead of magic getter/setter for raw propeties.
+
+## 1.0 “Marquis Decarabia”
+* Save previous source map for each node to support CSS concatenation
+ with multiple previous maps.
+* Add `map.sourcesContent` option to add origin content to `sourcesContent`
+ inside map.
+* Allow to set different place of output map in annotation comment.
+* Allow to use arrays and `Root` in `Container#append` and same methods.
+* Add `Root#prevMap` with information about previous map.
+* Allow to use latest PostCSS from GitHub by npm.
+* `Result` now is lazy and it will stringify output CSS only if you use `css` or
+ `map` property.
+* Use separated `map.prev` option to set previous map.
+* Rename `inlineMap` option to `map.inline`.
+* Rename `mapAnnotation` option to `map.annotation`.
+* `Result#map` now return `SourceMapGenerator` object, instead of string.
+* Run previous map autodetect only if input CSS contains annotation comment.
+* Add `map: 'inline'` shortcut for `map: { inline: true }` option.
+* `Node#source.file` now will contains absolute path.
+* Clean `Declaration#between` style on node clone.
+
+## 0.3.5
+* Allow to use `Root` or `Result` as first argument in `process()`.
+* Save parsed AST to `Result#root`.
+
+## 0.3.4
+* Better space symbol detect to read UTF-8 BOM correctly.
+
+## 0.3.3
+* Remove source map hacks by using new Mozilla’s `source-map` (by Simon Lydell).
+
+## 0.3.2
+* Add URI encoding support for inline source maps.
+
+## 0.3.1
+* Fix relative paths from previous source map.
+* Safer space split in `Rule#selectors` (by Simon Lydell).
+
+## 0.3 “Prince Seere”
+* Add `Comment` node for comments between declarations or rules.
+* Add source map annotation comment to output CSS.
+* Allow to inline source map to annotation comment by data:uri.
+* Fix source maps on Windows.
+* Fix source maps for styles in subdirectory (by @nDmitry and @lydell).
+* Autodetect previous source map.
+* Add `first` and `last` shortcuts to container nodes.
+* Parse `!important` to separated property in `Declaration`.
+* Allow to break iteration by returning `false`.
+* Copy code style to new nodes.
+* Add `eachInside` method to recursivelly iterate all nodes.
+* Add `selectors` shortcut to get selectors array.
+* Add `toResult` method to `Rule` to simplify work with several input files.
+* Clean declaration’s `value`, rule’s `selector` and at-rule’s `params`
+ by storing spaces in `between` property.
+
+## 0.2 “Duke Dantalion”
+* Add source map support.
+* Add shortcuts to create nodes.
+* Method `process()` now returns object with `css` and `map` keys.
+* Origin CSS file option was renamed from `file` to `from`.
+* Rename `Node#remove()` method to `removeSelf()` to fix name conflict.
+* Node source was moved to `source` property with origin file
+ and node end position.
+* You can set own stringify function.
+
+## 0.1 “Count Andromalius”
+* Initial release.
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/LICENSE b/node_modules/autoprefixer-core/node_modules/postcss/LICENSE
new file mode 100644
index 0000000..da057b4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2013 Andrey Sitnik
+
+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/node_modules/autoprefixer-core/node_modules/postcss/README.md b/node_modules/autoprefixer-core/node_modules/postcss/README.md
new file mode 100644
index 0000000..7b1cd81
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/README.md
@@ -0,0 +1,440 @@
+# PostCSS [](https://travis-ci.org/postcss/postcss) [](https://gitter.im/postcss/postcss?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+
+
+PostCSS is a tool for transforming CSS with JS plugins. The growing ecosystem
+of PostCSS plugins can add vendor prefixes, support variables and mixins,
+transpile future CSS syntax, inline images, and more.
+
+PostCSS is used by Google, Twitter, Alibaba, and Shopify.
+Its most popular plugin, [Autoprefixer], is one of the most universally
+praised CSS processors available.
+
+PostCSS can do the same work as preprocessors like Sass, Less, and Stylus.
+But PostCSS is modular, 4-40x faster, and much more powerful.
+
+PostCSS itself is very small. It includes only a CSS parser,
+a CSS node tree API, a source map generator, and a node tree stringifier.
+All CSS transformations are encapsulated in modular plugins. And these plugins
+are themselves small plain JS functions, which receive a CSS node tree,
+apply transformations to it, and return a modified tree.
+
+You can use the [cssnext] plugin pack and write future CSS code right now:
+
+```css
+:root {
+ --row: 1rem;
+ --mainColor: #ffbbaaff;
+}
+
+@custom-media --mobile (width <= 640px);
+
+@custom-selector --heading h1, h2, h3, h4, h5, h6;
+
+.post-article --heading {
+ margin-top: calc(10 * var(--row));
+ color: color(var(--mainColor) blackness(+20%));
+ font-variant-caps: small-caps;
+}
+@media (--mobile) {
+ .post-article --heading {
+ margin-top: 0;
+ }
+}
+```
+
+Or if you like the power provided by preprocessors like Sass,
+you could combine [postcss-nested], [postcss-mixins], [postcss-easings]
+and [postcss-media-minmax]:
+
+```css
+$mobile: width <= 640px;
+
+@define-mixin social-icon $color {
+ background: $color;
+ &:hover {
+ background: color($color whiteness(+10%));
+ }
+}
+
+.social-icon {
+ transition: background 200ms ease-in-sine;
+ &.is-twitter {
+ @mixin social-icon #55acee;
+ }
+ &.is-facebook {
+ @mixin social-icon #3b5998;
+ }
+}
+
+.post-article {
+ padding: 10px 5px;
+ @media ($mobile) {
+ padding: 0;
+ }
+}
+```
+
+Twitter account for articles, releases, and new plugins: [@postcss].
+Weibo account: [postcss].
+
+
+
+
+
+[@postcss]: https://twitter.com/postcss
+[postcss]: http://weibo.com/postcss
+
+## How PostCSS differs from Preprocessors
+
+Sass, Less and Stylus provide specialized languages that you can use to write
+CSS templates. These languages and their compilers are defined together
+in large codebases. Tools and libraries for preprocessors must work within
+each preprocessor’s limitations: usually they can only offer sets
+of pre-defined mixins, functions, and variables.
+
+In contrast, PostCSS provides a simple API that modular plugins can use
+to understand, transform, and create CSS. PostCSS plugins, therefore,
+can be created, maintained, and implemented independently. And they can perform
+many different tasks, not just compile special syntaxes to CSS.
+Each plugin does one thing well.
+
+## Features
+
+### Modularity
+
+Without any plugins, PostCSS will parse your CSS and stringify it back
+to you without changing a single byte. All of the processing that enables
+special features and syntax in your stylesheets is made possible
+by PostCSS plugins, which are nothing more than JS functions.
+
+Because each PostCSS plugin is an independent module, different plugins can take
+different approaches. This flexibility allows plugin authors to create whatever
+features they can imagine, while empowering PostCSS users to add only
+those features that they want to their workflow.
+
+Some plugins, like [postcss-custom-properties], [postcss-media-minmax],
+and [postcss-calc], implement syntax from present and future W3C specs,
+transpiling it to cross-browser-compatible output. Other plugins,
+like [postcss-mixins] and [postcss-simple-extend], add new powers
+to your stylesheets that are not yet part of any spec. With PostCSS,
+you can decide for yourself which plugins match your own needs and preferences.
+
+Another advantage of PostCSS’s modularity is that anybody can contribute easily
+to the PostCSS ecosystem. Plugins are simple npm packages;
+so there are no barriers to writing your own plugins, or contributing ideas
+and bug fixes to the plugins that you use.
+
+### Perfomance
+
+PostCSS is one of the fastest CSS parsers written in JS. (Only [CSSOM] is
+faster, and only because it is less accurate.) So PostCSS will read your CSS
+and apply transformations faster than any other stylesheet processor out there.
+
+If you use Ruby Sass now, PostCSS could significantly improve your development
+process: PostCSS processing is *40 times faster* than Ruby Sass compilation.
+And even if you throw in the entire [cssnext] plugin pack, PostCSS,
+written in JS, is still *4 times faster* than [libsass], written on C++.
+
+[libsass]: https://github.com/sass/libsass
+[CSSOM]: https://github.com/NV/CSSOM
+
+### Powerful Tools
+
+PostCSS plugins can read and rebuild an entire CSS node tree. With this power,
+plugin authors are able to create tools that would be impossible
+to build into preprocessors (like [Autoprefixer]).
+
+PostCSS-powered tools can do much more than transform special syntax into
+browser-friendly CSS. PostCSS plugin authors have built linters
+(like [doiuse] and [postcss-bem-linter]), code review tools
+(like [list-selectors]), and minifiers (like [csswring]).
+With [postcss-data-packer], you can create a cacheable “sprite”
+by moving all `data:uri` values to separate file.
+
+One unique example of PostCSS’s power is [RTLCSS]. As you know,
+in Arabic and Hebrew, writing moves from right-to-left (RTL), instead
+of the more widespread left-to-right convention. Because a language’s
+directionality affects its readers’ perspective, an international site’s layout
+needs to change for RTL users, not just its text. (Check out [Arabic Wikipedia]
+as an example.) The [RTLCSS] plugin effectively “mirrors” your stylesheet
+by swapping `left` and `right`, changing the value order in `margin` shorthands,
+and more.
+
+[Arabic Wikipedia]: https://ar.wikipedia.org/wiki/%D9%84%D8%BA%D8%A9_%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9
+
+### Use the CSS of the Future
+
+CSS3 added valuable features, but some of them are not yet available in all
+of the browsers that developers need to support. And exciting future CSS modules
+are being drafted now — some even implemented in cutting-edge browsers —
+that will not be widely available for quite a while. But PostCSS plugins
+can allow us to write this CSS of the future, then transpile it to code usable
+in all the browsers we must support.
+
+[Autoprefixer] exemplifies this power: you write spec-compliant, future-friendly
+CSS, pretending that vendor prefixes don’t exist, and it does the dirty work
+of inserting the prefixes you’ll need. All of the plugins bundled into [cssnext]
+do similar work, allowing authors to use syntax and functions
+from the latest W3C specs without worrying about the fallbacks they’ll need.
+
+As more CSS specs are drafted, more PostCSS plugins will be written. Users will
+be able to write stylesheets using standard, interoperable syntax, instead of
+a specialized language for a specialized tool (as with preprocessors).
+
+## Quick Start
+
+1. Implement PostCSS with your build tool of choice. See the PostCSS [Grunt],
+ [Gulp], and [webpack] plugins more detailed instructions.
+2. Select plugins from the list below and add them to your PostCSS process.
+3. Make awesome products.
+
+[webpack]: https://github.com/postcss/postcss-loader
+[Grunt]: https://github.com/nDmitry/grunt-postcss
+[Gulp]: https://github.com/w0rm/gulp-postcss
+
+## Plugins Packs
+
+* [cssnext] contains plugins that allow you to use future CSS features today.
+* [ACSS] contains plugins that transform your CSS according
+ to special annotation comments.
+
+[cssnext]: https://github.com/putaindecode/cssnext
+[ACSS]: https://github.com/morishitter/acss
+
+## Plugins
+
+### Future CSS Syntax
+
+* [postcss-color-function] supports functions to transform colors.
+* [postcss-color-gray] supports the `gray()` function.
+* [postcss-color-hex] transforms `rgb()` and `rgba()` to hex.
+* [postcss-color-hex-alpha] supports `#rrggbbaa` and `#rgba` notation.
+* [postcss-color-hwb] transforms `hwb()` to widely compatible `rgb()`.
+* [postcss-color-rebeccapurple] supports the `rebeccapurple` color.
+* [postcss-custom-media] supports custom aliases for media queries.
+* [postcss-custom-properties] supports variables, using syntax from
+ the W3C Custom Properties.
+* [postcss-custom-selectors] adds custom aliases for selectors.
+* [postcss-font-variant] transpiles human-readable `font-variant` to more widely
+ supported CSS.
+* [postcss-host] makes the Shadow DOM’s `:host` selector work properly
+ with pseudo-classes.
+* [postcss-media-minmax] adds `<=` and `=>` statements to media queries.
+* [mq4-hover-shim] supports the `@media (hover)` feature.
+
+### Fallbacks
+
+* [postcss-epub] adds the `-epub-` prefix to relevant properties.
+* [postcss-opacity] adds opacity filter for IE8.
+* [postcss-vmin] generates `vm` fallback for `vmin` unit in IE9.
+* [postcss-will-change] inserts 3D hack before `will-change` property.
+* [Autoprefixer] adds vendor prefixes for you, using data from Can I Use.
+* [cssgrace] provides various helpers and transpiles CSS3 for IE
+ and other old browsers.
+* [pixrem] generates pixel fallbacks for `rem` units.
+* [pleeease-filters] converts WebKit filters to SVG filters,
+ for cross-browser compatibility.
+
+### Language Extensions
+
+* [postcss-mixins] enables mixins more powerful than Sass’s,
+ defined within stylesheets or in JS.
+* [postcss-nested] unwraps nested rules, as Sass does.
+* [postcss-simple-extend] supports extending of silent classes,
+ like Sass’s `@extend`.
+* [postcss-simple-vars] supports for Sass-style variables.
+* [csstyle] adds components workflow to your styles.
+
+### Optimizations
+
+* [postcss-assets] allows you to simplify URLs, insert image dimensions,
+ and inline files.
+* [postcss-calc] reduces `calc()` to values
+ (when expressions involve the same units).
+* [postcss-data-packer] moves embedded Base64 data out of the stylesheet
+ and into a separate file.
+* [postcss-import] inlines the stylesheets referred to by `@import` rules.
+* [postcss-url] rebases or inlines `url()`s.
+* [csswring] is a CSS minifier.
+* [css-byebye] removes the CSS rules that you don’t want.
+* [css-mqpacker] joins matching CSS media queries into a single statement.
+* [webpcss] adds URLs for WebP images, so they can be used by browsers
+ that support WebP.
+
+### Shortcuts
+
+* [postcss-easings] replaces easing names from easings.net
+ with `cubic-bezier()` functions.
+* [postcss-size] adds a `size` shortcut that sets width and height
+ with one declaration.
+
+### Others
+
+* [postcss-brand-colors] inserts company brand colors
+ in the `brand-colors` module.
+* [postcss-color-palette] transforms CSS2 color keywords to a custom palette.
+* [postcss-single-charset] ensures that there is one
+ and only one `@charset` rule at the top of file.
+* [rtlcss] mirrors styles for right-to-left locales.
+
+### Analysis
+
+* [postcss-bem-linter] lints CSS for conformance to SUIT CSS methodology.
+* [css2modernizr] creates a Modernizr config file
+ that requires only the tests that your CSS uses.
+* [doiuse] lints CSS for browser support, using data from Can I Use.
+* [list-selectors] lists and categorizes the selectors used in your CSS,
+ for code review and analysis.
+
+[postcss-color-rebeccapurple]: https://github.com/postcss/postcss-color-rebeccapurple
+[postcss-custom-properties]: https://github.com/postcss/postcss-custom-properties
+[postcss-custom-selectors]: https://github.com/postcss/postcss-custom-selectors
+[postcss-color-hex-alpha]: https://github.com/postcss/postcss-color-hex-alpha
+[postcss-color-function]: https://github.com/postcss/postcss-color-function
+[postcss-single-charset]: https://github.com/hail2u/postcss-single-charset
+[postcss-color-palette]: https://github.com/zaim/postcss-color-palette
+[postcss-simple-extend]: https://github.com/davidtheclark/postcss-simple-extend
+[postcss-media-minmax]: https://github.com/postcss/postcss-media-minmax
+[postcss-custom-media]: https://github.com/postcss/postcss-custom-media
+[postcss-brand-colors]: https://github.com/postcss/postcss-brand-colors
+[postcss-font-variant]: https://github.com/postcss/postcss-font-variant
+[postcss-will-change]: https://github.com/postcss/postcss-will-change
+[postcss-simple-vars]: https://github.com/postcss/postcss-simple-vars
+[postcss-data-packer]: https://github.com/Ser-Gen/postcss-data-packer
+[postcss-bem-linter]: https://github.com/necolas/postcss-bem-linter
+[postcss-color-gray]: https://github.com/postcss/postcss-color-gray
+[postcss-color-hex]: https://github.com/TrySound/postcss-color-hex
+[postcss-color-hwb]: https://github.com/postcss/postcss-color-hwb
+[pleeease-filters]: https://github.com/iamvdo/pleeease-filters
+[postcss-easings]: https://github.com/postcss/postcss-easings
+[postcss-opacity]: https://github.com/iamvdo/postcss-opacity
+[postcss-assets]: https://github.com/borodean/postcss-assets
+[postcss-import]: https://github.com/postcss/postcss-import
+[postcss-nested]: https://github.com/postcss/postcss-nested
+[postcss-mixins]: https://github.com/postcss/postcss-mixins
+[mq4-hover-shim]: https://github.com/twbs/mq4-hover-shim
+[list-selectors]: https://github.com/davidtheclark/list-selectors
+[css2modernizr]: https://github.com/vovanbo/css2modernizr
+[Autoprefixer]: https://github.com/postcss/autoprefixer
+[css-mqpacker]: https://github.com/hail2u/node-css-mqpacker
+[postcss-epub]: https://github.com/Rycochet/postcss-epub
+[postcss-calc]: https://github.com/postcss/postcss-calc
+[postcss-size]: https://github.com/postcss/postcss-size
+[postcss-host]: https://github.com/vitkarpov/postcss-host
+[postcss-vmin]: https://github.com/iamvdo/postcss-vmin
+[postcss-url]: https://github.com/postcss/postcss-url
+[css-byebye]: https://github.com/AoDev/css-byebye
+[cssgrace]: https://github.com/cssdream/cssgrace
+[csswring]: https://github.com/hail2u/node-csswring
+[csstyle]: https://github.com/geddski/csstyle
+[webpcss]: https://github.com/lexich/webpcss
+[rtlcss]: https://github.com/MohammadYounes/rtlcss
+[RTLCSS]: https://github.com/MohammadYounes/rtlcss
+[pixrem]: https://github.com/robwierzbowski/node-pixrem
+[doiuse]: https://github.com/anandthakker/doiuse
+
+## Usage
+
+### JavaScript API
+
+```js
+var postcss = require('postcss');
+var processor = postcss([require('cssnext'), require('cssgrace')]);
+
+var result = processor.process(css, { from: 'app.css', to: 'app.out.css' });
+console.log(result.css);
+```
+
+Read the [postcss function], [processor], and [Result] API docs for more details.
+
+[postcss function]: https://github.com/postcss/postcss/blob/master/API.md#postcss-function
+[processor]: https://github.com/postcss/postcss/blob/master/API.md#postcss-class
+[Result]: https://github.com/postcss/postcss/blob/master/API.md#result-class
+
+### Source Maps
+
+PostCSS has great [source maps] support. It can read and interpret maps
+from previous transformation steps, autodetect the format that you expect,
+and output both external and inline maps.
+
+To ensure that you generate an accurate source map, you must indicate the input
+and output CSS files paths — using the options `from` and `to`, respectively.
+
+To generate a new source map with the default options, simply set `map: true`.
+This will generate an inline source map that contains the source content.
+If you don’t want the map inlined, you can use set `map.inline: false`.
+
+```js
+var result = processor.process(css, {
+ from: 'main.css',
+ to: 'main.out.css',
+ map: { inline: false },
+});
+
+result.map //=> '{"version":3,"file":"main.out.css","sources":["main.css"],"names":[],"mappings":"AAAA,KAAI"}'
+```
+
+If PostCSS finds source maps from a previous transformation,
+it will automatically update that source map with the same options.
+
+```js
+// main.sass.css has an annotation comment with a link to main.sass.css.map
+var result = minifier.process(css, { from: 'main.sass.css', to: 'main.min.css' });
+result.map //=> Source map from main.sass to main.min.css
+```
+
+If you want more control over source map generation, you can define the `map`
+option as an object with the following parameters:
+
+* `inline` boolean: indicates that the source map should be embedded
+ in the output CSS as a Base64-encoded comment. By default it is `true`.
+ But if all previous maps are external, not inline, PostCSS will not embed
+ the map even if you do not set this option.
+
+ If you have an inline source map, the `result.map` property will be empty,
+ as the source map will be contained within the text of `result.css`.
+
+* `prev` string, object or boolean: source map content from
+ a previous processing step (for example, Sass compilation).
+ PostCSS will try to read the previous source map automatically
+ (based on comments within the source CSS), but you can use this option
+ to identify it manually. If desired, you can omit the previous map
+ with `prev: false`.
+
+* `sourcesContent` boolean: indicates that PostCSS should set the origin
+ content (for example, Sass source) of the source map. By default it is `true`.
+ But if all previous maps do not contain sources content, PostCSS will also
+ leave it out even if you do not set this option.
+
+* `annotation` boolean or string: indicates that PostCSS should add annotation
+ comments to the CSS. By default, PostCSS will always add a comment with a path
+ to the source map. But if the input CSS does not have any annotation
+ comment, PostCSS will omit it, too, even if you do not set this option.
+
+ By default, PostCSS presumes that you want to save the source map as
+ `opts.to + '.map'` and will use this path in the annotation comment.
+ But you can set another path by providing a string value for `annotation`.
+
+ If you have set `inline: true`, annotation cannot be disabled.
+
+[source maps]: http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/
+
+### Safe Mode
+
+If you provide a `safe: true` option to the `process` or `parse` methods,
+PostCSS will try to correct any syntax errors that it finds in the CSS.
+
+```js
+postcss.parse('a {'); // will throw "Unclosed block"
+postcss.parse('a {', { safe: true }); // will return CSS root for a {}
+```
+
+This is useful for legacy code filled with hacks. Another use-case
+is interactive tools with live input — for example,
+the [Autoprefixer demo](http://jsfiddle.net/simevidas/udyTs/show/light/).
+
+## How to Develop PostCSS Plugin
+
+* [PostCSS API](https://github.com/postcss/postcss/blob/master/API.md)
+* [Plugin Boilerplate](https://github.com/postcss/postcss-plugin-boilerplate)
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/at-rule.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/at-rule.js
new file mode 100644
index 0000000..9c05e18
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/at-rule.js
@@ -0,0 +1,78 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Container = _interopRequire(require("./container"));
+
+// CSS at-rule like “this.keyframes name { }”.
+//
+// Can contain declarations (like this.font-face or this.page) ot another rules.
+
+var AtRule = (function (Container) {
+ function AtRule(defaults) {
+ _classCallCheck(this, AtRule);
+
+ this.type = "atrule";
+ Container.call(this, defaults);
+ }
+
+ _inherits(AtRule, Container);
+
+ // Stringify at-rule
+
+ AtRule.prototype.stringify = function stringify(builder, semicolon) {
+ var name = "@" + this.name;
+ var params = this.params ? this.stringifyRaw("params") : "";
+
+ if (typeof this.afterName != "undefined") {
+ name += this.afterName;
+ } else if (params) {
+ name += " ";
+ }
+
+ if (this.nodes) {
+ this.stringifyBlock(builder, name + params);
+ } else {
+ var before = this.style("before");
+ if (before) builder(before);
+ var end = (this.between || "") + (semicolon ? ";" : "");
+ builder(name + params + end, this);
+ }
+ };
+
+ // Hack to mark, that at-rule contains children
+
+ AtRule.prototype.append = function append(child) {
+ if (!this.nodes) this.nodes = [];
+ return Container.prototype.append.call(this, child);
+ };
+
+ // Hack to mark, that at-rule contains children
+
+ AtRule.prototype.prepend = function prepend(child) {
+ if (!this.nodes) this.nodes = [];
+ return Container.prototype.prepend.call(this, child);
+ };
+
+ // Hack to mark, that at-rule contains children
+
+ AtRule.prototype.insertBefore = function insertBefore(exist, add) {
+ if (!this.nodes) this.nodes = [];
+ return Container.prototype.insertBefore.call(this, exist, add);
+ };
+
+ // Hack to mark, that at-rule contains children
+
+ AtRule.prototype.insertAfter = function insertAfter(exist, add) {
+ if (!this.nodes) this.nodes = [];
+ return Container.prototype.insertAfter.call(this, exist, add);
+ };
+
+ return AtRule;
+})(Container);
+
+module.exports = AtRule;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/comment.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/comment.js
new file mode 100644
index 0000000..6cb5f3b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/comment.js
@@ -0,0 +1,36 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Node = _interopRequire(require("./node"));
+
+// CSS comment between declarations or rules
+
+var Comment = (function (Node) {
+ function Comment(defaults) {
+ _classCallCheck(this, Comment);
+
+ this.type = "comment";
+ Node.call(this, defaults);
+ }
+
+ _inherits(Comment, Node);
+
+ // Stringify declaration
+
+ Comment.prototype.stringify = function stringify(builder) {
+ var before = this.style("before");
+ if (before) builder(before);
+ var left = this.style("left", "commentLeft");
+ var right = this.style("right", "commentRight");
+ builder("/*" + left + this.text + right + "*/", this);
+ };
+
+ return Comment;
+})(Node);
+
+module.exports = Comment;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/container.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/container.js
new file mode 100644
index 0000000..7cd1723
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/container.js
@@ -0,0 +1,565 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var Comment = _interopRequire(require("./comment"));
+
+var Node = _interopRequire(require("./node"));
+
+// CSS node, that contain another nodes (like at-rules or rules with selectors)
+
+var Container = (function (Node) {
+ function Container() {
+ _classCallCheck(this, Container);
+
+ if (Node != null) {
+ Node.apply(this, arguments);
+ }
+ }
+
+ _inherits(Container, Node);
+
+ // Stringify container children
+
+ Container.prototype.stringifyContent = function stringifyContent(builder) {
+ if (!this.nodes) {
+ return;
+ }var i,
+ last = this.nodes.length - 1;
+ while (last > 0) {
+ if (this.nodes[last].type != "comment") break;
+ last -= 1;
+ }
+
+ var semicolon = this.style("semicolon");
+ for (i = 0; i < this.nodes.length; i++) {
+ this.nodes[i].stringify(builder, last != i || semicolon);
+ }
+ };
+
+ // Stringify node with start (for example, selector) and brackets block
+ // with child inside
+
+ Container.prototype.stringifyBlock = function stringifyBlock(builder, start) {
+ var before = this.style("before");
+ if (before) builder(before);
+
+ var between = this.style("between", "beforeOpen");
+ builder(start + between + "{", this, "start");
+
+ var after;
+ if (this.nodes && this.nodes.length) {
+ this.stringifyContent(builder);
+ after = this.style("after");
+ } else {
+ after = this.style("after", "emptyBody");
+ }
+
+ if (after) builder(after);
+ builder("}", this, "end");
+ };
+
+ // Add child to end of list without any checks.
+ // Please, use `append()` method, `push()` is mostly for parser.
+
+ Container.prototype.push = function push(child) {
+ child.parent = this;
+ this.nodes.push(child);
+ return this;
+ };
+
+ // Execute `callback` on every child element. First arguments will be child
+ // node, second will be index.
+ //
+ // css.each( (rule, i) => {
+ // console.log(rule.type + ' at ' + i);
+ // });
+ //
+ // It is safe for add and remove elements to list while iterating:
+ //
+ // css.each( (rule) => {
+ // css.insertBefore( rule, addPrefix(rule) );
+ // # On next iteration will be next rule, regardless of that
+ // # list size was increased
+ // });
+
+ Container.prototype.each = function each(callback) {
+ if (!this.lastEach) this.lastEach = 0;
+ if (!this.indexes) this.indexes = {};
+
+ this.lastEach += 1;
+ var id = this.lastEach;
+ this.indexes[id] = 0;
+
+ if (!this.nodes) {
+ return;
+ }var index, result;
+ while (this.indexes[id] < this.nodes.length) {
+ index = this.indexes[id];
+ result = callback(this.nodes[index], index);
+ if (result === false) break;
+
+ this.indexes[id] += 1;
+ }
+
+ delete this.indexes[id];
+
+ if (result === false) {
+ return false;
+ }
+ };
+
+ // Execute callback on every child in all rules inside.
+ //
+ // First argument will be child node, second will be index inside parent.
+ //
+ // css.eachInside( (node, i) => {
+ // console.log(node.type + ' at ' + i);
+ // });
+ //
+ // Also as `each` it is safe of insert/remove nodes inside iterating.
+
+ Container.prototype.eachInside = function eachInside(callback) {
+ return this.each(function (child, i) {
+ var result = callback(child, i);
+
+ if (result !== false && child.eachInside) {
+ result = child.eachInside(callback);
+ }
+
+ if (result === false) return result;
+ });
+ };
+
+ // Execute callback on every declaration in all rules inside.
+ // It will goes inside at-rules recursivelly.
+ //
+ // First argument will be declaration node, second will be index inside
+ // parent rule.
+ //
+ // css.eachDecl( (decl, i) => {
+ // console.log(decl.prop + ' in ' + decl.parent.selector + ':' + i);
+ // });
+ //
+ // Also as `each` it is safe of insert/remove nodes inside iterating.
+ //
+ // You can filter declrataion by property name:
+ //
+ // css.eachDecl('background', (decl) => { });
+
+ Container.prototype.eachDecl = function eachDecl(prop, callback) {
+ if (!callback) {
+ callback = prop;
+ return this.eachInside(function (child, i) {
+ if (child.type == "decl") {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ } else if (prop instanceof RegExp) {
+ return this.eachInside(function (child, i) {
+ if (child.type == "decl" && prop.test(child.prop)) {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ } else {
+ return this.eachInside(function (child, i) {
+ if (child.type == "decl" && child.prop == prop) {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ }
+ };
+
+ // Execute `callback` on every rule in conatiner and inside child at-rules.
+ //
+ // First argument will be rule node, second will be index inside parent.
+ //
+ // css.eachRule( (rule, i) => {
+ // if ( parent.type == 'atrule' ) {
+ // console.log(rule.selector + ' in ' + rule.parent.name);
+ // } else {
+ // console.log(rule.selector + ' at ' + i);
+ // }
+ // });
+
+ Container.prototype.eachRule = function eachRule(callback) {
+ return this.eachInside(function (child, i) {
+ if (child.type == "rule") {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ };
+
+ // Execute `callback` on every at-rule in conatiner and inside at-rules.
+ //
+ // First argument will be at-rule node, second will be index inside parent.
+ //
+ // css.eachAtRule( (atrule, parent, i) => {
+ // if ( parent.type == 'atrule' ) {
+ // console.log(atrule.name + ' in ' + atrule.parent.name);
+ // } else {
+ // console.log(atrule.name + ' at ' + i);
+ // }
+ // });
+ //
+ // You can filter at-rules by name:
+ //
+ // css.eachAtRule('keyframes', (atrule) => { });
+
+ Container.prototype.eachAtRule = function eachAtRule(name, callback) {
+ if (!callback) {
+ callback = name;
+ return this.eachInside(function (child, i) {
+ if (child.type == "atrule") {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ } else if (name instanceof RegExp) {
+ return this.eachInside(function (child, i) {
+ if (child.type == "atrule" && name.test(child.name)) {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ } else {
+ return this.eachInside(function (child, i) {
+ if (child.type == "atrule" && child.name == name) {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ }
+ };
+
+ // Execute callback on every block comment (only between rules
+ // and declarations, not inside selectors and values) in all rules inside.
+ //
+ // First argument will be comment node, second will be index inside
+ // parent rule.
+ //
+ // css.eachComment( (comment, i) => {
+ // console.log(comment.content + ' at ' + i);
+ // });
+ //
+ // Also as `each` it is safe of insert/remove nodes inside iterating.
+
+ Container.prototype.eachComment = function eachComment(callback) {
+ return this.eachInside(function (child, i) {
+ if (child.type == "comment") {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ };
+
+ // Add child to container.
+ //
+ // css.append(rule);
+ //
+ // You can add declaration by hash:
+ //
+ // rule.append({ prop: 'color', value: 'black' });
+
+ Container.prototype.append = function append(child) {
+ var nodes = this.normalize(child, this.last);
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ this.nodes.push(node);
+ }return this;
+ };
+
+ // Add child to beginning of container
+ //
+ // css.prepend(rule);
+ //
+ // You can add declaration by hash:
+ //
+ // rule.prepend({ prop: 'color', value: 'black' });
+
+ Container.prototype.prepend = function prepend(child) {
+ var nodes = this.normalize(child, this.first, "prepend").reverse();
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ this.nodes.unshift(node);
+ }for (var id in this.indexes) {
+ this.indexes[id] = this.indexes[id] + nodes.length;
+ }
+
+ return this;
+ };
+
+ // Insert new `added` child before `exist`.
+ // You can set node object or node index (it will be faster) in `exist`.
+ //
+ // css.insertAfter(1, rule);
+ //
+ // You can add declaration by hash:
+ //
+ // rule.insertBefore(1, { prop: 'color', value: 'black' });
+
+ Container.prototype.insertBefore = function insertBefore(exist, add) {
+ exist = this.index(exist);
+
+ var type = exist === 0 ? "prepend" : false;
+ var nodes = this.normalize(add, this.nodes[exist], type).reverse();
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ this.nodes.splice(exist, 0, node);
+ }var index;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (exist <= index) {
+ this.indexes[id] = index + nodes.length;
+ }
+ }
+
+ return this;
+ };
+
+ // Insert new `added` child after `exist`.
+ // You can set node object or node index (it will be faster) in `exist`.
+ //
+ // css.insertAfter(1, rule);
+ //
+ // You can add declaration by hash:
+ //
+ // rule.insertAfter(1, { prop: 'color', value: 'black' });
+
+ Container.prototype.insertAfter = function insertAfter(exist, add) {
+ exist = this.index(exist);
+
+ var nodes = this.normalize(add, this.nodes[exist]).reverse();
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ this.nodes.splice(exist + 1, 0, node);
+ }var index;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (exist < index) {
+ this.indexes[id] = index + nodes.length;
+ }
+ }
+
+ return this;
+ };
+
+ // Remove `child` by index or node.
+ //
+ // css.remove(2);
+
+ Container.prototype.remove = function remove(child) {
+ child = this.index(child);
+ this.nodes[child].parent = undefined;
+ this.nodes.splice(child, 1);
+
+ var index;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (index >= child) {
+ this.indexes[id] = index - 1;
+ }
+ }
+
+ return this;
+ };
+
+ // Remove all children in node.
+ //
+ // css.removeAll();
+
+ Container.prototype.removeAll = function removeAll() {
+ for (var _iterator = this.nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ node.parent = undefined;
+ }this.nodes = [];
+ return this;
+ };
+
+ // Recursivelly check all declarations inside node and replace
+ // `regexp` by `callback`.
+ //
+ // css.replaceValues('black', '#000');
+ //
+ // Argumets `regexp` and `callback` is same as in `String#replace()`.
+ //
+ // You can speed up checks by `props` and `fast` options:
+ //
+ // css.replaceValues(/\d+rem/, { fast: 'rem', props: ['width'] },
+ // function (str) {
+ // return (14 * parseInt(str)) + 'px';
+ // })
+
+ Container.prototype.replaceValues = function replaceValues(regexp, opts, callback) {
+ if (!callback) {
+ callback = opts;
+ opts = {};
+ }
+
+ this.eachDecl(function (decl) {
+ if (opts.props && opts.props.indexOf(decl.prop) == -1) return;
+ if (opts.fast && decl.value.indexOf(opts.fast) == -1) return;
+
+ decl.value = decl.value.replace(regexp, callback);
+ });
+
+ return this;
+ };
+
+ // Return true if all nodes return true in `condition`.
+ // Just shorcut for `nodes.every`.
+
+ Container.prototype.every = function every(condition) {
+ return this.nodes.every(condition);
+ };
+
+ // Return true if one or more nodes return true in `condition`.
+ // Just shorcut for `nodes.some`.
+
+ Container.prototype.some = function some(condition) {
+ return this.nodes.some(condition);
+ };
+
+ // Return index of child
+
+ Container.prototype.index = function index(child) {
+ if (typeof child == "number") {
+ return child;
+ } else {
+ return this.nodes.indexOf(child);
+ }
+ };
+
+ // Normalize child before insert. Copy before from `sample`.
+
+ Container.prototype.normalize = function normalize(nodes, sample) {
+ var _this = this;
+
+ if (!Array.isArray(nodes)) {
+ if (nodes.type == "root") {
+ nodes = nodes.nodes;
+ } else if (nodes.type) {
+ nodes = [nodes];
+ } else if (nodes.prop) {
+ nodes = [new Declaration(nodes)];
+ } else if (nodes.selector) {
+ var Rule = _interopRequire(require("./rule"));
+
+ nodes = [new Rule(nodes)];
+ } else if (nodes.name) {
+ var AtRule = _interopRequire(require("./at-rule"));
+
+ nodes = [new AtRule(nodes)];
+ } else if (nodes.text) {
+ nodes = [new Comment(nodes)];
+ }
+ }
+
+ var processed = nodes.map(function (child) {
+ if (child.parent) child = child.clone();
+ if (typeof child.before == "undefined") {
+ if (sample && typeof sample.before != "undefined") {
+ child.before = sample.before.replace(/[^\s]/g, "");
+ }
+ }
+ child.parent = _this;
+ return child;
+ });
+
+ return processed;
+ };
+
+ _prototypeProperties(Container, null, {
+ first: {
+
+ // Shortcut to get first child
+
+ get: function () {
+ if (!this.nodes) return undefined;
+ return this.nodes[0];
+ },
+ configurable: true
+ },
+ last: {
+
+ // Shortcut to get first child
+
+ get: function () {
+ if (!this.nodes) return undefined;
+ return this.nodes[this.nodes.length - 1];
+ },
+ configurable: true
+ }
+ });
+
+ return Container;
+})(Node);
+
+module.exports = Container;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/css-syntax-error.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/css-syntax-error.js
new file mode 100644
index 0000000..d87c9c1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/css-syntax-error.js
@@ -0,0 +1,89 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var PreviousMap = _interopRequire(require("./previous-map"));
+
+var path = _interopRequire(require("path"));
+
+// Error while CSS parsing
+
+var CssSyntaxError = (function (SyntaxError) {
+ function CssSyntaxError(message, line, column, source, file) {
+ _classCallCheck(this, CssSyntaxError);
+
+ this.reason = message;
+
+ this.message = file ? file : "";
+ if (typeof line != "undefined" && typeof column != "undefined") {
+ this.line = line;
+ this.column = column;
+ this.message += ":" + line + ":" + column + ": " + message;
+ } else {
+ this.message += ": " + message;
+ }
+
+ if (file) this.file = file;
+ if (source) this.source = source;
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, CssSyntaxError);
+ }
+ }
+
+ _inherits(CssSyntaxError, SyntaxError);
+
+ // Return source of broken lines
+
+ CssSyntaxError.prototype.highlight = function highlight(color) {
+ var num = this.line - 1;
+ var lines = this.source.split("\n");
+
+ var prev = num > 0 ? lines[num - 1] + "\n" : "";
+ var broken = lines[num];
+ var next = num < lines.length - 1 ? "\n" + lines[num + 1] : "";
+
+ var mark = "\n";
+ for (var i = 0; i < this.column - 1; i++) {
+ mark += " ";
+ }
+
+ if (typeof color == "undefined" && typeof process != "undefined") {
+ if (process.stdout && process.env) {
+ color = process.stdout.isTTY && !process.env.NODE_DISABLE_COLORS;
+ }
+ }
+
+ if (color) {
+ mark += "\u001b[1;31m^\u001b[0m";
+ } else {
+ mark += "^";
+ }
+
+ return prev + broken + mark + next;
+ };
+
+ CssSyntaxError.prototype.setMozillaProps = function setMozillaProps() {
+ var sample = Error.call(this, message);
+ if (sample.columnNumber) this.columnNumber = this.column;
+ if (sample.description) this.description = this.message;
+ if (sample.lineNumber) this.lineNumber = this.line;
+ if (sample.fileName) this.fileName = this.file;
+ };
+
+ CssSyntaxError.prototype.toString = function toString() {
+ var text = this.message;
+ if (this.source) text += "\n" + this.highlight();
+ return this.name + ": " + text;
+ };
+
+ return CssSyntaxError;
+})(SyntaxError);
+
+module.exports = CssSyntaxError;
+
+CssSyntaxError.prototype.name = "CssSyntaxError";
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/declaration.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/declaration.js
new file mode 100644
index 0000000..b4ceb82
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/declaration.js
@@ -0,0 +1,45 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var vendor = _interopRequire(require("./vendor"));
+
+var Node = _interopRequire(require("./node"));
+
+// CSS declaration like “color: black” in rules
+
+var Declaration = (function (Node) {
+ function Declaration(defaults) {
+ _classCallCheck(this, Declaration);
+
+ this.type = "decl";
+ Node.call(this, defaults);
+ }
+
+ _inherits(Declaration, Node);
+
+ // Stringify declaration
+
+ Declaration.prototype.stringify = function stringify(builder, semicolon) {
+ var before = this.style("before");
+ if (before) builder(before);
+
+ var between = this.style("between", "colon");
+ var string = this.prop + between + this.stringifyRaw("value");
+
+ if (this.important) {
+ string += this._important || " !important";
+ }
+
+ if (semicolon) string += ";";
+ builder(string, this);
+ };
+
+ return Declaration;
+})(Node);
+
+module.exports = Declaration;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/input.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/input.js
new file mode 100644
index 0000000..de7b40f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/input.js
@@ -0,0 +1,113 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var CssSyntaxError = _interopRequire(require("./css-syntax-error"));
+
+var PreviousMap = _interopRequire(require("./previous-map"));
+
+var Parser = _interopRequire(require("./parser"));
+
+var path = _interopRequire(require("path"));
+
+var sequence = 0;
+
+var Input = (function () {
+ function Input(css) {
+ var opts = arguments[1] === undefined ? {} : arguments[1];
+
+ _classCallCheck(this, Input);
+
+ this.css = css.toString();
+
+ if (this.css[0] == "" || this.css[0] == "") {
+ this.css = this.css.slice(1);
+ }
+
+ this.safe = !!opts.safe;
+
+ if (opts.from) this.file = path.resolve(opts.from);
+
+ var map = new PreviousMap(this.css, opts, this.id);
+ if (map.text) {
+ this.map = map;
+ var file = map.consumer().file;
+ if (!this.file && file) this.file = this.mapResolve(file);
+ }
+
+ if (this.file) {
+ this.from = this.file;
+ } else {
+ sequence += 1;
+ this.id = " ";
+ this.from = this.id;
+ }
+ if (this.map) this.map.file = this.from;
+ }
+
+ // Throw syntax error from this input
+
+ Input.prototype.error = (function (_error) {
+ var _errorWrapper = function error() {
+ return _error.apply(this, arguments);
+ };
+
+ _errorWrapper.toString = function () {
+ return _error.toString();
+ };
+
+ return _errorWrapper;
+ })(function (message, line, column) {
+ var error = new CssSyntaxError(message);
+
+ var origin = this.origin(line, column);
+ if (origin) {
+ error = new CssSyntaxError(message, origin.line, origin.column, origin.source, origin.file);
+
+ error.generated = {
+ line: line,
+ column: column,
+ source: this.css
+ };
+ if (this.file) error.generated.file = this.file;
+ } else {
+ error = new CssSyntaxError(message, line, column, this.css, this.file);
+ }
+
+ return error;
+ });
+
+ // Get origin position of code if source map was given
+
+ Input.prototype.origin = function origin(line, column) {
+ if (!this.map) {
+ return false;
+ }var consumer = this.map.consumer();
+
+ var from = consumer.originalPositionFor({ line: line, column: column });
+ if (!from.source) {
+ return false;
+ }var result = {
+ file: this.mapResolve(from.source),
+ line: from.line,
+ column: from.column
+ };
+
+ var source = consumer.sourceContentFor(result.file);
+ if (source) result.source = source;
+
+ return result;
+ };
+
+ // Return path relative from source map root
+
+ Input.prototype.mapResolve = function mapResolve(file) {
+ return path.resolve(this.map.consumer().sourceRoot || ".", file);
+ };
+
+ return Input;
+})();
+
+module.exports = Input;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/list.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/list.js
new file mode 100644
index 0000000..ce56e51
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/list.js
@@ -0,0 +1,75 @@
+"use strict";
+
+// Methods to parse list and split it to array
+module.exports = {
+
+ // Split string to array by separator symbols with function and inside strings
+ // cheching
+ split: function split(string, separators, last) {
+ var array = [];
+ var current = "";
+ var split = false;
+
+ var func = 0;
+ var quote = false;
+ var escape = false;
+
+ for (var i = 0; i < string.length; i++) {
+ var letter = string[i];
+
+ if (quote) {
+ if (escape) {
+ escape = false;
+ } else if (letter == "\\") {
+ escape = true;
+ } else if (letter == quote) {
+ quote = false;
+ }
+ } else if (letter == "\"" || letter == "'") {
+ quote = letter;
+ } else if (letter == "(") {
+ func += 1;
+ } else if (letter == ")") {
+ if (func > 0) func -= 1;
+ } else if (func === 0) {
+ for (var j = 0; j < separators.length; j++) {
+ if (letter == separators[j]) split = true;
+ }
+ }
+
+ if (split) {
+ if (current !== "") array.push(current.trim());
+ current = "";
+ split = false;
+ } else {
+ current += letter;
+ }
+ }
+
+ if (last || current !== "") array.push(current.trim());
+ return array;
+ },
+
+ // Split list devided by space:
+ //
+ // list.space('a b') #=> ['a', 'b']
+ //
+ // It check for fuction and strings:
+ //
+ // list.space('calc(1px + 1em) "b c"') #=> ['calc(1px + 1em)', '"b c"']
+ space: function space(string) {
+ return this.split(string, [" ", "\n", "\t"]);
+ },
+
+ // Split list devided by comma
+ //
+ // list.comma('a, b') #=> ['a', 'b']
+ //
+ // It check for fuction and strings:
+ //
+ // list.comma('rgba(0, 0, 0, 0) white') #=> ['rgba(0, 0, 0, 0)', '"white"']
+ comma: function comma(string) {
+ return this.split(string, [","], true);
+ }
+
+};
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/map-generator.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/map-generator.js
new file mode 100644
index 0000000..3c659e5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/map-generator.js
@@ -0,0 +1,313 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Result = _interopRequire(require("./result"));
+
+var Base64 = require("js-base64").Base64;
+
+var mozilla = _interopRequire(require("source-map"));
+
+var path = _interopRequire(require("path"));
+
+// All tools to generate source maps
+
+var MapGenerator = (function () {
+ function MapGenerator(root, opts) {
+ _classCallCheck(this, MapGenerator);
+
+ this.root = root;
+ this.opts = opts;
+ this.mapOpts = opts.map || {};
+ }
+
+ // Should map be generated
+
+ MapGenerator.prototype.isMap = function isMap() {
+ if (typeof this.opts.map != "undefined") {
+ return !!this.opts.map;
+ } else {
+ return this.previous().length > 0;
+ }
+ };
+
+ // Return source map arrays from previous compilation step (like Sass)
+
+ MapGenerator.prototype.previous = function previous() {
+ var _this = this;
+
+ if (!this.previousMaps) {
+ this.previousMaps = [];
+ this.root.eachInside(function (node) {
+ if (node.source && node.source.input.map) {
+ var map = node.source.input.map;
+ if (_this.previousMaps.indexOf(map) == -1) {
+ _this.previousMaps.push(map);
+ }
+ }
+ });
+ }
+
+ return this.previousMaps;
+ };
+
+ // Should we inline source map to annotation comment
+
+ MapGenerator.prototype.isInline = function isInline() {
+ if (typeof this.mapOpts.inline != "undefined") {
+ return this.mapOpts.inline;
+ }
+
+ var annotation = this.mapOpts.annotation;
+ if (typeof annotation != "undefined" && annotation !== true) {
+ return false;
+ }
+
+ if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.inline;
+ });
+ } else {
+ return true;
+ }
+ };
+
+ // Should we set sourcesContent
+
+ MapGenerator.prototype.isSourcesContent = function isSourcesContent() {
+ if (typeof this.mapOpts.sourcesContent != "undefined") {
+ return this.mapOpts.sourcesContent;
+ }
+ if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.withContent();
+ });
+ } else {
+ return true;
+ }
+ };
+
+ // Clear source map annotation comment
+
+ MapGenerator.prototype.clearAnnotation = function clearAnnotation() {
+ if (this.mapOpts.annotation === false) {
+ return;
+ }var node;
+ for (var i = this.root.nodes.length - 1; i >= 0; i--) {
+ node = this.root.nodes[i];
+ if (node.type != "comment") continue;
+ if (node.text.match(/^# sourceMappingURL=/)) {
+ this.root.remove(i);
+ return;
+ }
+ }
+ };
+
+ // Set origin CSS content
+
+ MapGenerator.prototype.setSourcesContent = function setSourcesContent() {
+ var _this = this;
+
+ var already = {};
+ this.root.eachInside(function (node) {
+ if (node.source) {
+ var from = node.source.input.from;
+ if (from && !already[from]) {
+ already[from] = true;
+ var relative = _this.relative(from);
+ _this.map.setSourceContent(relative, node.source.input.css);
+ }
+ }
+ });
+ };
+
+ // Apply source map from previous compilation step (like Sass)
+
+ MapGenerator.prototype.applyPrevMaps = function applyPrevMaps() {
+ for (var _iterator = this.previous(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var prev = _ref;
+
+ var from = this.relative(prev.file);
+ var root = prev.root || path.dirname(prev.file);
+ var map;
+
+ if (this.mapOpts.sourcesContent === false) {
+ map = new mozilla.SourceMapConsumer(prev.text);
+ map.sourcesContent = map.sourcesContent.map(function (i) {
+ return null;
+ });
+ } else {
+ map = prev.consumer();
+ }
+
+ this.map.applySourceMap(map, from, this.relative(root));
+ }
+ };
+
+ // Should we add annotation comment
+
+ MapGenerator.prototype.isAnnotation = function isAnnotation() {
+ if (this.isInline()) {
+ return true;
+ } else if (typeof this.mapOpts.annotation != "undefined") {
+ return this.mapOpts.annotation;
+ } else if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.annotation;
+ });
+ } else {
+ return true;
+ }
+ };
+
+ // Add source map annotation comment if it is needed
+
+ MapGenerator.prototype.addAnnotation = function addAnnotation() {
+ var content;
+
+ if (this.isInline()) {
+ content = "data:application/json;base64," + Base64.encode(this.map.toString());
+ } else if (typeof this.mapOpts.annotation == "string") {
+ content = this.mapOpts.annotation;
+ } else {
+ content = this.outputFile() + ".map";
+ }
+
+ this.css += "\n/*# sourceMappingURL=" + content + " */";
+ };
+
+ // Return output CSS file path
+
+ MapGenerator.prototype.outputFile = function outputFile() {
+ if (this.opts.to) {
+ return this.relative(this.opts.to);
+ } else if (this.opts.from) {
+ return this.relative(this.opts.from);
+ } else {
+ return "to.css";
+ }
+ };
+
+ // Return Result object with map
+
+ MapGenerator.prototype.generateMap = function generateMap() {
+ this.stringify();
+ if (this.isSourcesContent()) this.setSourcesContent();
+ if (this.previous().length > 0) this.applyPrevMaps();
+ if (this.isAnnotation()) this.addAnnotation();
+
+ if (this.isInline()) {
+ return [this.css];
+ } else {
+ return [this.css, this.map];
+ }
+ };
+
+ // Return path relative from output CSS file
+
+ MapGenerator.prototype.relative = function relative(file) {
+ var from = this.opts.to ? path.dirname(this.opts.to) : ".";
+
+ if (typeof this.mapOpts.annotation == "string") {
+ from = path.dirname(path.resolve(from, this.mapOpts.annotation));
+ }
+
+ file = path.relative(from, file);
+ if (path.sep == "\\") {
+ return file.replace(/\\/g, "/");
+ } else {
+ return file;
+ }
+ };
+
+ // Return path of node source for map
+
+ MapGenerator.prototype.sourcePath = function sourcePath(node) {
+ return this.relative(node.source.input.from);
+ };
+
+ // Return CSS string and source map
+
+ MapGenerator.prototype.stringify = function stringify() {
+ var _this = this;
+
+ this.css = "";
+ this.map = new mozilla.SourceMapGenerator({ file: this.outputFile() });
+
+ var line = 1;
+ var column = 1;
+
+ var lines, last;
+ var builder = function (str, node, type) {
+ _this.css += str;
+
+ if (node && node.source && node.source.start && type != "end") {
+ _this.map.addMapping({
+ source: _this.sourcePath(node),
+ original: {
+ line: node.source.start.line,
+ column: node.source.start.column - 1
+ },
+ generated: {
+ line: line,
+ column: column - 1
+ }
+ });
+ }
+
+ lines = str.match(/\n/g);
+ if (lines) {
+ line += lines.length;
+ last = str.lastIndexOf("\n");
+ column = str.length - last;
+ } else {
+ column = column + str.length;
+ }
+
+ if (node && node.source && node.source.end && type != "start") {
+ _this.map.addMapping({
+ source: _this.sourcePath(node),
+ original: {
+ line: node.source.end.line,
+ column: node.source.end.column
+ },
+ generated: {
+ line: line,
+ column: column
+ }
+ });
+ }
+ };
+
+ this.root.stringify(builder);
+ };
+
+ // Return Result object with or without map
+
+ MapGenerator.prototype.generate = function generate() {
+ this.clearAnnotation();
+
+ if (this.isMap()) {
+ return this.generateMap();
+ } else {
+ return [this.root.toString()];
+ }
+ };
+
+ return MapGenerator;
+})();
+
+module.exports = MapGenerator;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/node.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/node.js
new file mode 100644
index 0000000..168d058
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/node.js
@@ -0,0 +1,487 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var CssSyntaxError = _interopRequire(require("./css-syntax-error"));
+
+// Default code style
+var defaultStyle = {
+ colon: ": ",
+ indent: " ",
+ beforeDecl: "\n",
+ beforeRule: "\n",
+ beforeOpen: " ",
+ beforeClose: "\n",
+ beforeComment: "\n",
+ after: "\n",
+ emptyBody: "",
+ commentLeft: " ",
+ commentRight: " "
+};
+
+// Recursivly clone objects
+var cloneNode = (function (_cloneNode) {
+ var _cloneNodeWrapper = function cloneNode() {
+ return _cloneNode.apply(this, arguments);
+ };
+
+ _cloneNodeWrapper.toString = function () {
+ return _cloneNode.toString();
+ };
+
+ return _cloneNodeWrapper;
+})(function (obj, parent) {
+ if (typeof obj != "object") return obj;
+ var cloned = new obj.constructor();
+
+ for (var i in obj) {
+ if (!obj.hasOwnProperty(i)) continue;
+ var value = obj[i];
+
+ if (i == "parent" && typeof value == "object") {
+ if (parent) cloned[i] = parent;
+ } else if (i == "source") {
+ cloned[i] = value;
+ } else if (value instanceof Array) {
+ cloned[i] = value.map(function (i) {
+ return cloneNode(i, cloned);
+ });
+ } else if (i != "before" && i != "after" && i != "between" && i != "semicolon") {
+ cloned[i] = cloneNode(value, cloned);
+ }
+ }
+
+ return cloned;
+});
+
+// Some common methods for all CSS nodes
+
+var Node = (function () {
+ function Node() {
+ var defaults = arguments[0] === undefined ? {} : arguments[0];
+
+ _classCallCheck(this, Node);
+
+ for (var name in defaults) {
+ this[name] = defaults[name];
+ }
+ }
+
+ // Return error to mark error in your plugin syntax:
+ //
+ // if ( wrongVariable ) {
+ // throw decl.error('Wrong variable');
+ // }
+ //
+ // You can also get origin line and column from previous source map:
+ //
+ // if ( deprecatedSyntax ) {
+ // var error = decl.error('Deprecated syntax');
+ // console.warn(error.toString());
+ // }
+
+ Node.prototype.error = function error(message) {
+ if (this.source) {
+ var pos = this.source.start;
+ return this.source.input.error(message, pos.line, pos.column);
+ } else {
+ return new CssSyntaxError(message);
+ }
+ };
+
+ // Remove this node from parent
+ //
+ // decl.removeSelf();
+ //
+ // Note, that removing by index is faster:
+ //
+ // rule.each( (decl, i) => rule.remove(i) );
+
+ Node.prototype.removeSelf = function removeSelf() {
+ if (this.parent) {
+ this.parent.remove(this);
+ }
+ this.parent = undefined;
+ return this;
+ };
+
+ // Shortcut to insert nodes before and remove self.
+ //
+ // importNode.replace( loadedRoot );
+
+ Node.prototype.replace = function replace(nodes) {
+ this.parent.insertBefore(this, nodes);
+ this.parent.remove(this);
+ return this;
+ };
+
+ // Return CSS string of current node
+ //
+ // decl.toString(); //=> " color: black"
+
+ Node.prototype.toString = function toString() {
+ var result = "";
+ var builder = function (str) {
+ return result += str;
+ };
+ this.stringify(builder);
+ return result;
+ };
+
+ // Clone current node
+ //
+ // rule.append( decl.clone() );
+ //
+ // You can override properties while cloning:
+ //
+ // rule.append( decl.clone({ value: '0' }) );
+
+ Node.prototype.clone = function clone() {
+ var overrides = arguments[0] === undefined ? {} : arguments[0];
+
+ var cloned = cloneNode(this);
+ for (var name in overrides) {
+ cloned[name] = overrides[name];
+ }
+ return cloned;
+ };
+
+ // Clone node and insert clone before current one.
+ // It accept properties to change in clone and return new node.
+ //
+ // decl.cloneBefore({ prop: '-webkit-' + del.prop });
+
+ Node.prototype.cloneBefore = function cloneBefore() {
+ var overrides = arguments[0] === undefined ? {} : arguments[0];
+
+ var cloned = this.clone(overrides);
+ this.parent.insertBefore(this, cloned);
+ return cloned;
+ };
+
+ // Clone node and insert clone after current one.
+ // It accept properties to change in clone and return new node.
+ //
+ // decl.cloneAfter({ value: convertToRem(decl.value) });
+
+ Node.prototype.cloneAfter = function cloneAfter() {
+ var overrides = arguments[0] === undefined ? {} : arguments[0];
+
+ var cloned = this.clone(overrides);
+ this.parent.insertAfter(this, cloned);
+ return cloned;
+ };
+
+ // Replace with node by another one.
+ //
+ // decl.replaceWith(fixedDecl);
+
+ Node.prototype.replaceWith = function replaceWith(node) {
+ this.parent.insertBefore(this, node);
+ this.removeSelf();
+ return this;
+ };
+
+ // Remove node from current place and put to end of new one.
+ // It will also clean node code styles, but will keep `between` if old
+ // parent and new parent has same root.
+ //
+ // rule.moveTo(atRule);
+
+ Node.prototype.moveTo = function moveTo(container) {
+ this.cleanStyles(this.root() == container.root());
+ this.removeSelf();
+ container.append(this);
+ return this;
+ };
+
+ // Remove node from current place and put to before other node.
+ // It will also clean node code styles, but will keep `between` if old
+ // parent and new parent has same root.
+ //
+ // rule.moveBefore(rule.parent);
+
+ Node.prototype.moveBefore = function moveBefore(node) {
+ this.cleanStyles(this.root() == node.root());
+ this.removeSelf();
+ node.parent.insertBefore(node, this);
+ return this;
+ };
+
+ // Remove node from current place and put to after other node.
+ // It will also clean node code styles, but will keep `between` if old
+ // parent and new parent has same root.
+ //
+ // rule.moveAfter(rule.parent);
+
+ Node.prototype.moveAfter = function moveAfter(node) {
+ this.cleanStyles(this.root() == node.root());
+ this.removeSelf();
+ node.parent.insertAfter(node, this);
+ return this;
+ };
+
+ // Return next node in parent. If current node is last one,
+ // method will return `undefined`.
+ //
+ // var next = decl.next();
+ // if ( next && next.prop == removePrefix(decl.prop) ) {
+ // decl.removeSelf();
+ // }
+
+ Node.prototype.next = function next() {
+ var index = this.parent.index(this);
+ return this.parent.nodes[index + 1];
+ };
+
+ // Return previous node in parent. If current node is first one,
+ // method will return `undefined`.
+ //
+ // var prev = decl.prev();
+ // if ( prev && removePrefix(prev.prop) == decl.prop) ) {
+ // prev.removeSelf();
+ // }
+
+ Node.prototype.prev = function prev() {
+ var index = this.parent.index(this);
+ return this.parent.nodes[index - 1];
+ };
+
+ // Remove `parent` node on cloning to fix circular structures
+
+ Node.prototype.toJSON = function toJSON() {
+ var fixed = {};
+
+ for (var name in this) {
+ if (!this.hasOwnProperty(name)) continue;
+ if (name == "parent") continue;
+ var value = this[name];
+
+ if (value instanceof Array) {
+ fixed[name] = value.map(function (i) {
+ return typeof i == "object" && i.toJSON ? i.toJSON() : i;
+ });
+ } else if (typeof value == "object" && value.toJSON) {
+ fixed[name] = value.toJSON();
+ } else {
+ fixed[name] = value;
+ }
+ }
+
+ return fixed;
+ };
+
+ // Copy code style from first node with same type
+
+ Node.prototype.style = function style(own, detect) {
+ var value;
+ if (!detect) detect = own;
+
+ // Already had
+ if (own) {
+ value = this[own];
+ if (typeof value != "undefined") {
+ return value;
+ }
+ }
+
+ var parent = this.parent;
+
+ // Hack for first rule in CSS
+ if (detect == "before") {
+ if (!parent || parent.type == "root" && parent.first == this) {
+ return "";
+ }
+ }
+
+ // Floating child without parent
+ if (!parent) {
+ return defaultStyle[detect];
+ } // Detect style by other nodes
+ var root = this.root();
+ if (!root.styleCache) root.styleCache = {};
+ if (typeof root.styleCache[detect] != "undefined") {
+ return root.styleCache[detect];
+ }
+
+ if (detect == "semicolon") {
+ root.eachInside(function (i) {
+ if (i.nodes && i.nodes.length && i.last.type == "decl") {
+ value = i.semicolon;
+ if (typeof value != "undefined") return false;
+ }
+ });
+ } else if (detect == "emptyBody") {
+ root.eachInside(function (i) {
+ if (i.nodes && i.nodes.length === 0) {
+ value = i.after;
+ if (typeof value != "undefined") return false;
+ }
+ });
+ } else if (detect == "indent") {
+ root.eachInside(function (i) {
+ var p = i.parent;
+ if (p && p != root && p.parent && p.parent == root) {
+ if (typeof i.before != "undefined") {
+ var parts = i.before.split("\n");
+ value = parts[parts.length - 1];
+ value = value.replace(/[^\s]/g, "");
+ return false;
+ }
+ }
+ });
+ } else if (detect == "beforeComment") {
+ root.eachComment(function (i) {
+ if (typeof i.before != "undefined") {
+ value = i.before;
+ if (value.indexOf("\n") != -1) {
+ value = value.replace(/[^\n]+$/, "");
+ }
+ return false;
+ }
+ });
+ if (typeof value == "undefined") {
+ value = this.style(null, "beforeDecl");
+ }
+ } else if (detect == "beforeDecl") {
+ root.eachDecl(function (i) {
+ if (typeof i.before != "undefined") {
+ value = i.before;
+ if (value.indexOf("\n") != -1) {
+ value = value.replace(/[^\n]+$/, "");
+ }
+ return false;
+ }
+ });
+ if (typeof value == "undefined") {
+ value = this.style(null, "beforeRule");
+ }
+ } else if (detect == "beforeRule") {
+ root.eachInside(function (i) {
+ if (i.nodes && (i.parent != root || root.first != i)) {
+ if (typeof i.before != "undefined") {
+ value = i.before;
+ if (value.indexOf("\n") != -1) {
+ value = value.replace(/[^\n]+$/, "");
+ }
+ return false;
+ }
+ }
+ });
+ } else if (detect == "beforeClose") {
+ root.eachInside(function (i) {
+ if (i.nodes && i.nodes.length > 0) {
+ if (typeof i.after != "undefined") {
+ value = i.after;
+ if (value.indexOf("\n") != -1) {
+ value = value.replace(/[^\n]+$/, "");
+ }
+ return false;
+ }
+ }
+ });
+ } else if (detect == "before" || detect == "after") {
+ if (this.type == "decl") {
+ value = this.style(null, "beforeDecl");
+ } else if (this.type == "comment") {
+ value = this.style(null, "beforeComment");
+ } else if (detect == "before") {
+ value = this.style(null, "beforeRule");
+ } else {
+ value = this.style(null, "beforeClose");
+ }
+
+ var node = this.parent;
+ var depth = 0;
+ while (node && node.type != "root") {
+ depth += 1;
+ node = node.parent;
+ }
+
+ if (value.indexOf("\n") != -1) {
+ var indent = this.style(null, "indent");
+ if (indent.length) {
+ for (var step = 0; step < depth; step++) value += indent;
+ }
+ }
+
+ return value;
+ } else if (detect == "colon") {
+ root.eachDecl(function (i) {
+ if (typeof i.between != "undefined") {
+ value = i.between.replace(/[^\s:]/g, "");
+ return false;
+ }
+ });
+ } else if (detect == "beforeOpen") {
+ root.eachInside(function (i) {
+ if (i.type != "decl") {
+ value = i.between;
+ if (typeof value != "undefined") return false;
+ }
+ });
+ } else {
+ root.eachInside(function (i) {
+ value = i[own];
+ if (typeof value != "undefined") return false;
+ });
+ }
+
+ if (typeof value == "undefined") value = defaultStyle[detect];
+
+ root.styleCache[detect] = value;
+ return value;
+ };
+
+ // Return top parent , parent of parents.
+
+ Node.prototype.root = function root() {
+ var result = this;
+ while (result.parent) result = result.parent;
+ return result;
+ };
+
+ // Recursivelly remove all code style properties (`before` and `between`).
+
+ Node.prototype.cleanStyles = function cleanStyles(keepBetween) {
+ delete this.before;
+ delete this.after;
+ if (!keepBetween) delete this.between;
+
+ if (this.nodes) {
+ for (var _iterator = this.nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ node.cleanStyles(keepBetween);
+ }
+ }
+ };
+
+ // Use raw value if origin was not changed
+
+ Node.prototype.stringifyRaw = function stringifyRaw(prop) {
+ var value = this[prop];
+ var raw = this["_" + prop];
+ if (raw && raw.value === value) {
+ return raw.raw;
+ } else {
+ return value;
+ }
+ };
+
+ return Node;
+})();
+
+module.exports = Node;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/parse.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/parse.js
new file mode 100644
index 0000000..d53be35
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/parse.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var Parser = _interopRequire(require("./parser"));
+
+var Input = _interopRequire(require("./input"));
+
+module.exports = function (css, opts) {
+ var input = new Input(css, opts);
+
+ var parser = new Parser(input);
+ parser.tokenize();
+ parser.loop();
+
+ return parser.root;
+};
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/parser.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/parser.js
new file mode 100644
index 0000000..d2420ce
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/parser.js
@@ -0,0 +1,499 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var tokenizer = _interopRequire(require("./tokenize"));
+
+var Comment = _interopRequire(require("./comment"));
+
+var AtRule = _interopRequire(require("./at-rule"));
+
+var Root = _interopRequire(require("./root"));
+
+var Rule = _interopRequire(require("./rule"));
+
+// CSS parser
+
+var Parser = (function () {
+ function Parser(input) {
+ _classCallCheck(this, Parser);
+
+ this.input = input;
+
+ this.pos = 0;
+ this.root = new Root();
+ this.current = this.root;
+ this.spaces = "";
+ this.semicolon = false;
+
+ this.root.source = { input: input };
+ if (input.map) this.root.prevMap = input.map;
+ }
+
+ Parser.prototype.tokenize = function tokenize() {
+ this.tokens = tokenizer(this.input);
+ };
+
+ Parser.prototype.loop = function loop() {
+ var token;
+ while (this.pos < this.tokens.length) {
+ token = this.tokens[this.pos];
+
+ switch (token[0]) {
+ case "word":
+ case ":":
+ this.word(token);
+ break;
+
+ case "}":
+ this.end(token);
+ break;
+
+ case "comment":
+ this.comment(token);
+ break;
+
+ case "at-word":
+ this.atrule(token);
+ break;
+
+ case "{":
+ this.emptyRule(token);
+ break;
+
+ default:
+ this.spaces += token[1];
+ break;
+ }
+
+ this.pos += 1;
+ }
+ this.endFile();
+ };
+
+ Parser.prototype.comment = function comment(token) {
+ var node = new Comment();
+ this.init(node, token[2], token[3]);
+ node.source.end = { line: token[4], column: token[5] };
+
+ var text = token[1].slice(2, -2);
+ if (text.match(/^\s*$/)) {
+ node.left = text;
+ node.text = "";
+ node.right = "";
+ } else {
+ var match = text.match(/^(\s*)([^]*[^\s])(\s*)$/);
+ node.left = match[1];
+ node.text = match[2];
+ node.right = match[3];
+ }
+ };
+
+ Parser.prototype.emptyRule = function emptyRule(token) {
+ var node = new Rule();
+ this.init(node, token[2], token[3]);
+ node.between = "";
+ node.selector = "";
+ this.current = node;
+ };
+
+ Parser.prototype.word = function word() {
+ var token;
+ var end = false;
+ var type = null;
+ var colon = false;
+ var bracket = null;
+ var brackets = 0;
+
+ var start = this.pos;
+ this.pos += 1;
+ while (true) {
+ token = this.tokens[this.pos];
+ if (!token) {
+ this.pos -= 1;
+ end = true;
+ break;
+ }
+
+ type = token[0];
+ if (type == "(") {
+ if (!bracket) bracket = token;
+ brackets += 1;
+ } else if (type == ")") {
+ brackets -= 1;
+ if (brackets === 0) bracket = null;
+ } else if (brackets === 0) {
+ if (type == ";") {
+ if (colon) {
+ this.decl(this.tokens.slice(start, this.pos + 1));
+ return;
+ } else {
+ break;
+ }
+ } else if (type == "{") {
+ this.rule(this.tokens.slice(start, this.pos + 1));
+ return;
+ } else if (type == "}") {
+ this.pos -= 1;
+ end = true;
+ break;
+ } else if (type == "at-word") {
+ this.pos -= 1;
+ break;
+ } else {
+ if (type == ":") colon = true;
+ }
+ }
+
+ this.pos += 1;
+ }
+
+ if (brackets > 0 && !this.input.safe) {
+ throw this.input.error("Unclosed bracket", bracket[2], bracket[3]);
+ }
+
+ if (end && colon) {
+ while (this.pos > start) {
+ token = this.tokens[this.pos][0];
+ if (token != "space" && token != "comment") break;
+ this.pos -= 1;
+ }
+ this.decl(this.tokens.slice(start, this.pos + 1));
+ return;
+ }
+
+ if (this.input.safe) {
+ var buffer = this.tokens.slice(start, this.pos + 1);
+ this.spaces += buffer.map(function (i) {
+ return i[1];
+ }).join("");
+ } else {
+ token = this.tokens[start];
+ throw this.input.error("Unknown word", token[2], token[3]);
+ }
+ };
+
+ Parser.prototype.rule = function rule(tokens) {
+ tokens.pop();
+
+ var node = new Rule();
+ this.init(node, tokens[0][2], tokens[0][3]);
+
+ node.between = this.spacesFromEnd(tokens);
+ this.raw(node, "selector", tokens);
+ this.current = node;
+ };
+
+ Parser.prototype.decl = function decl(tokens) {
+ var node = new Declaration();
+ this.init(node);
+
+ var last = tokens[tokens.length - 1];
+ if (last[0] == ";") {
+ this.semicolon = true;
+ tokens.pop();
+ }
+ if (last[4]) {
+ node.source.end = { line: last[4], column: last[5] };
+ } else {
+ node.source.end = { line: last[2], column: last[3] };
+ }
+
+ while (tokens[0][0] != "word") {
+ node.before += tokens.shift()[1];
+ }
+ node.source.start = { line: tokens[0][2], column: tokens[0][3] };
+
+ node.prop = tokens.shift()[1];
+ node.between = "";
+
+ var token;
+ while (tokens.length) {
+ token = tokens.shift();
+
+ if (token[0] == ":") {
+ node.between += token[1];
+ break;
+ } else if (token[0] != "space" && token[0] != "comment") {
+ this.unknownWord(node, token, tokens);
+ } else {
+ node.between += token[1];
+ }
+ }
+
+ if (node.prop[0] == "_" || node.prop[0] == "*") {
+ node.before += node.prop[0];
+ node.prop = node.prop.slice(1);
+ }
+ node.between += this.spacesFromStart(tokens);
+
+ if (this.input.safe) this.checkMissedSemicolon(tokens);
+
+ for (var i = tokens.length - 1; i > 0; i--) {
+ token = tokens[i];
+ if (token[1] == "!important") {
+ node.important = true;
+ var string = this.stringFrom(tokens, i);
+ string = this.spacesFromEnd(tokens) + string;
+ if (string != " !important") node._important = string;
+ break;
+ } else if (token[0] != "space" && token[0] != "comment") {
+ break;
+ }
+ }
+
+ this.raw(node, "value", tokens);
+
+ if (node.value.indexOf(":") != -1 && !this.input.safe) {
+ this.checkMissedSemicolon(tokens);
+ }
+ };
+
+ Parser.prototype.atrule = function atrule(token) {
+ var node = new AtRule();
+ node.name = token[1].slice(1);
+ if (node.name === "") {
+ if (this.input.safe) {
+ node.name = "";
+ } else {
+ throw this.input.error("At-rule without name", token[2], token[3]);
+ }
+ }
+ this.init(node, token[2], token[3]);
+
+ var next;
+ var last = false;
+ var open = false;
+ var params = [];
+ while (true) {
+ this.pos += 1;
+ token = this.tokens[this.pos];
+
+ if (!token) {
+ last = true;
+ break;
+ } else if (token[0] == ";") {
+ node.source.end = { line: token[2], column: token[3] };
+ this.semicolon = true;
+ break;
+ } else if (token[0] == "{") {
+ open = true;
+ break;
+ } else {
+ params.push(token);
+ }
+ }
+
+ node.between = this.spacesFromEnd(params);
+ if (params.length) {
+ node.afterName = this.spacesFromStart(params);
+ this.raw(node, "params", params);
+ if (last) {
+ token = params[params.length - 1];
+ node.source.end = { line: token[4], column: token[5] };
+ this.spaces = node.between;
+ node.between = "";
+ }
+ } else {
+ node.afterName = "";
+ node.params = "";
+ }
+
+ if (open) {
+ node.nodes = [];
+ this.current = node;
+ }
+ };
+
+ Parser.prototype.end = function end(token) {
+ if (this.current.nodes && this.current.nodes.length) {
+ this.current.semicolon = this.semicolon;
+ }
+ this.semicolon = false;
+
+ this.current.after = (this.current.after || "") + this.spaces;
+ this.spaces = "";
+
+ if (this.current.parent) {
+ this.current.source.end = { line: token[2], column: token[3] };
+ this.current = this.current.parent;
+ } else if (!this.input.safe) {
+ throw this.input.error("Unexpected }", token[2], token[3]);
+ } else {
+ this.current.after += "}";
+ }
+ };
+
+ Parser.prototype.endFile = function endFile() {
+ if (this.current.parent && !this.input.safe) {
+ var pos = this.current.source.start;
+ throw this.input.error("Unclosed block", pos.line, pos.column);
+ }
+
+ if (this.current.nodes && this.current.nodes.length) {
+ this.current.semicolon = this.semicolon;
+ }
+ this.current.after = (this.current.after || "") + this.spaces;
+
+ while (this.current.parent) {
+ this.current = this.current.parent;
+ this.current.after = "";
+ }
+ };
+
+ Parser.prototype.unknownWord = function unknownWord(node, token) {
+ if (this.input.safe) {
+ node.source.start = { line: token[2], column: token[3] };
+ node.before += node.prop + node.between;
+ node.prop = token[1];
+ node.between = "";
+ } else {
+ throw this.input.error("Unknown word", token[2], token[3]);
+ }
+ };
+
+ Parser.prototype.checkMissedSemicolon = function checkMissedSemicolon(tokens) {
+ var prev = null;
+ var colon = false;
+ var brackets = 0;
+ var type, token;
+ for (var i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ type = token[0];
+
+ if (type == "(") {
+ brackets += 1;
+ } else if (type == ")") {
+ brackets -= 0;
+ } else if (brackets === 0 && type == ":") {
+ if (!prev && this.input.safe) {
+ continue;
+ } else if (!prev) {
+ throw this.input.error("Double colon", token[2], token[3]);
+ } else if (prev[0] == "word" && prev[1] == "progid") {
+ continue;
+ } else {
+ colon = i;
+ break;
+ }
+ }
+
+ prev = token;
+ }
+
+ if (colon === false) {
+ return;
+ }if (this.input.safe) {
+ var split;
+ for (split = colon - 1; split >= 0; split--) {
+ if (tokens[split][0] == "word") break;
+ }
+ for (split -= 1; split >= 0; split--) {
+ if (tokens[split][0] != "space") {
+ split += 1;
+ break;
+ }
+ }
+ var other = tokens.splice(split, tokens.length - split);
+ this.decl(other);
+ } else {
+ var founded = 0;
+ for (var j = colon - 1; j >= 0; j--) {
+ token = tokens[j];
+ if (token[0] != "space") {
+ founded += 1;
+ if (founded == 2) break;
+ }
+ }
+ throw this.input.error("Missed semicolon", token[4], token[5]);
+ }
+ };
+
+ // Helpers
+
+ Parser.prototype.init = function init(node, line, column) {
+ this.current.push(node);
+
+ node.source = { start: { line: line, column: column }, input: this.input };
+ node.before = this.spaces;
+ this.spaces = "";
+ if (node.type != "comment") this.semicolon = false;
+ };
+
+ Parser.prototype.raw = function raw(node, prop, tokens) {
+ var token;
+ var value = "";
+ var clean = true;
+ for (var _iterator = tokens, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ token = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ token = _i.value;
+ }
+
+ if (token[0] == "comment") {
+ clean = false;
+ } else {
+ value += token[1];
+ }
+ }
+ if (!clean) {
+ var origin = "";
+ for (var _iterator2 = tokens, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+ if (_isArray2) {
+ if (_i2 >= _iterator2.length) break;
+ token = _iterator2[_i2++];
+ } else {
+ _i2 = _iterator2.next();
+ if (_i2.done) break;
+ token = _i2.value;
+ }
+
+ origin += token[1];
+ }node["_" + prop] = { value: value, raw: origin };
+ }
+ node[prop] = value;
+ };
+
+ Parser.prototype.spacesFromEnd = function spacesFromEnd(tokens) {
+ var next;
+ var spaces = "";
+ while (tokens.length) {
+ next = tokens[tokens.length - 1][0];
+ if (next != "space" && next != "comment") break;
+ spaces += tokens.pop()[1];
+ }
+ return spaces;
+ };
+
+ Parser.prototype.spacesFromStart = function spacesFromStart(tokens) {
+ var next;
+ var spaces = "";
+ while (tokens.length) {
+ next = tokens[0][0];
+ if (next != "space" && next != "comment") break;
+ spaces += tokens.shift()[1];
+ }
+ return spaces;
+ };
+
+ Parser.prototype.stringFrom = function stringFrom(tokens, from) {
+ var result = "";
+ for (var i = from; i < tokens.length; i++) {
+ result += tokens[i][1];
+ }
+ tokens.splice(from, tokens.length - from);
+ return result;
+ };
+
+ return Parser;
+})();
+
+module.exports = Parser;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/postcss.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/postcss.js
new file mode 100644
index 0000000..8a81290
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/postcss.js
@@ -0,0 +1,137 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var Comment = _interopRequire(require("./comment"));
+
+var AtRule = _interopRequire(require("./at-rule"));
+
+var Result = _interopRequire(require("./result"));
+
+var parse = _interopRequire(require("./parse"));
+
+var Rule = _interopRequire(require("./rule"));
+
+var Root = _interopRequire(require("./root"));
+
+// List of functions to process CSS
+
+var PostCSS = (function () {
+ function PostCSS() {
+ var _this = this;
+
+ var plugins = arguments[0] === undefined ? [] : arguments[0];
+
+ _classCallCheck(this, PostCSS);
+
+ this.plugins = plugins.map(function (i) {
+ return _this.normalize(i);
+ });
+ }
+
+ // Add function as PostCSS plugins
+
+ PostCSS.prototype.use = function use(plugin) {
+ plugin = this.normalize(plugin);
+ if (typeof plugin == "object" && Array.isArray(plugin.plugins)) {
+ this.plugins = this.plugins.concat(plugin.plugins);
+ } else {
+ this.plugins.push(plugin);
+ }
+ return this;
+ };
+
+ // Process CSS throw installed plugins
+
+ PostCSS.prototype.process = function process(css) {
+ var opts = arguments[1] === undefined ? {} : arguments[1];
+
+ var parsed;
+ if (css instanceof Root) {
+ parsed = css;
+ } else if (css instanceof Result) {
+ parsed = css.root;
+ if (css.map && typeof opts.map == "undefined") {
+ opts.map = { prev: css.map };
+ }
+ } else {
+ parsed = postcss.parse(css, opts);
+ }
+
+ for (var _iterator = this.plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var plugin = _ref;
+
+ var returned = plugin(parsed, opts);
+ if (returned instanceof Root) parsed = returned;
+ }
+
+ return parsed.toResult(opts);
+ };
+
+ // Return plugin function
+
+ PostCSS.prototype.normalize = function normalize(plugin) {
+ var type = typeof plugin;
+ if ((type == "object" || type == "function") && plugin.postcss) {
+ return plugin.postcss;
+ } else {
+ return plugin;
+ }
+ };
+
+ return PostCSS;
+})();
+
+// Framework for CSS postprocessors
+//
+// var processor = postcss(function (css) {
+// // Change nodes in css
+// });
+// processor.process(css)
+var postcss = function postcss() {
+ for (var _len = arguments.length, plugins = Array(_len), _key = 0; _key < _len; _key++) {
+ plugins[_key] = arguments[_key];
+ }
+
+ if (plugins.length == 1 && Array.isArray(plugins[0])) {
+ plugins = plugins[0];
+ }
+ return new PostCSS(plugins);
+};
+
+// Compile CSS to nodes
+postcss.parse = parse;
+
+// Nodes shortcuts
+postcss.comment = function (defaults) {
+ return new Comment(defaults);
+};
+postcss.atRule = function (defaults) {
+ return new AtRule(defaults);
+};
+postcss.decl = function (defaults) {
+ return new Declaration(defaults);
+};
+postcss.rule = function (defaults) {
+ return new Rule(defaults);
+};
+postcss.root = function (defaults) {
+ return new Root(defaults);
+};
+
+module.exports = postcss;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/previous-map.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/previous-map.js
new file mode 100644
index 0000000..9a66f56
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/previous-map.js
@@ -0,0 +1,108 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Base64 = require("js-base64").Base64;
+
+var mozilla = _interopRequire(require("source-map"));
+
+var path = _interopRequire(require("path"));
+
+var fs = _interopRequire(require("fs"));
+
+// Detect previous map
+
+var PreviousMap = (function () {
+ function PreviousMap(css, opts) {
+ _classCallCheck(this, PreviousMap);
+
+ this.loadAnnotation(css);
+ this.inline = this.startWith(this.annotation, "data:");
+
+ var prev = opts.map ? opts.map.prev : undefined;
+ var text = this.loadMap(opts.from, prev);
+ if (text) this.text = text;
+ }
+
+ // Return SourceMapConsumer object to read map
+
+ PreviousMap.prototype.consumer = function consumer() {
+ if (!this.consumerCache) {
+ this.consumerCache = new mozilla.SourceMapConsumer(this.text);
+ }
+ return this.consumerCache;
+ };
+
+ // Is map has sources content
+
+ PreviousMap.prototype.withContent = function withContent() {
+ return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
+ };
+
+ // Is `string` is starting with `start`
+
+ PreviousMap.prototype.startWith = function startWith(string, start) {
+ if (!string) {
+ return false;
+ }return string.substr(0, start.length) == start;
+ };
+
+ // Load for annotation comment from previous compilation step
+
+ PreviousMap.prototype.loadAnnotation = function loadAnnotation(css) {
+ var match = css.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//);
+ if (match) this.annotation = match[1].trim();
+ };
+
+ // Encode different type of inline
+
+ PreviousMap.prototype.decodeInline = function decodeInline(text) {
+ var uri = "data:application/json,";
+ var base64 = "data:application/json;base64,";
+
+ if (this.startWith(text, uri)) {
+ return decodeURIComponent(text.substr(uri.length));
+ } else if (this.startWith(text, base64)) {
+ return Base64.decode(text.substr(base64.length));
+ } else {
+ var encoding = text.match(/data:application\/json;([^,]+),/)[1];
+ throw new Error("Unsupported source map encoding " + encoding);
+ }
+ };
+
+ // Load previous map
+
+ PreviousMap.prototype.loadMap = function loadMap(file, prev) {
+ if (prev === false) {
+ return;
+ }if (prev) {
+ if (typeof prev == "string") {
+ return prev;
+ } else if (prev instanceof mozilla.SourceMapConsumer) {
+ return mozilla.SourceMapGenerator.fromSourceMap(prev).toString();
+ } else if (prev instanceof mozilla.SourceMapGenerator) {
+ return prev.toString();
+ } else if (typeof prev == "object" && prev.mappings) {
+ return JSON.stringify(prev);
+ } else {
+ throw new Error("Unsupported previous source map format: " + prev.toString());
+ }
+ } else if (this.inline) {
+ return this.decodeInline(this.annotation);
+ } else if (this.annotation) {
+ var map = this.annotation;
+ if (file) map = path.join(path.dirname(file), map);
+
+ this.root = path.dirname(map);
+ if (fs.existsSync && fs.existsSync(map)) {
+ return fs.readFileSync(map, "utf-8").toString().trim();
+ }
+ }
+ };
+
+ return PreviousMap;
+})();
+
+module.exports = PreviousMap;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/result.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/result.js
new file mode 100644
index 0000000..e33e5f3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/result.js
@@ -0,0 +1,64 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var MapGenerator = _interopRequire(require("./map-generator"));
+
+// Object with processed CSS
+
+var Result = (function () {
+ function Result(root) {
+ var opts = arguments[1] === undefined ? {} : arguments[1];
+
+ _classCallCheck(this, Result);
+
+ this.root = root;
+ this.opts = opts;
+ }
+
+ // Return CSS string on any try to print
+
+ Result.prototype.toString = function toString() {
+ return this.css;
+ };
+
+ // Generate CSS and map
+
+ Result.prototype.stringify = function stringify() {
+ var map = new MapGenerator(this.root, this.opts);
+ var generated = map.generate();
+ this.cssCached = generated[0];
+ this.mapCached = generated[1];
+ };
+
+ _prototypeProperties(Result, null, {
+ map: {
+
+ // Lazy method to return source map
+
+ get: function () {
+ if (!this.cssCached) this.stringify();
+ return this.mapCached;
+ },
+ configurable: true
+ },
+ css: {
+
+ // Lazy method to return CSS string
+
+ get: function () {
+ if (!this.cssCached) this.stringify();
+ return this.cssCached;
+ },
+ configurable: true
+ }
+ });
+
+ return Result;
+})();
+
+module.exports = Result;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/root.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/root.js
new file mode 100644
index 0000000..10e8398
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/root.js
@@ -0,0 +1,99 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var Container = _interopRequire(require("./container"));
+
+var Comment = _interopRequire(require("./comment"));
+
+var AtRule = _interopRequire(require("./at-rule"));
+
+var Result = _interopRequire(require("./result"));
+
+var Rule = _interopRequire(require("./rule"));
+
+// Root of CSS
+
+var Root = (function (Container) {
+ function Root(defaults) {
+ _classCallCheck(this, Root);
+
+ this.type = "root";
+ this.nodes = [];
+ Container.call(this, defaults);
+ }
+
+ _inherits(Root, Container);
+
+ // Fix space when we remove first child
+
+ Root.prototype.remove = function remove(child) {
+ child = this.index(child);
+
+ if (child === 0 && this.nodes.length > 1) {
+ this.nodes[1].before = this.nodes[child].before;
+ }
+
+ return Container.prototype.remove.call(this, child);
+ };
+
+ // Fix spaces on insert before first rule
+
+ Root.prototype.normalize = function normalize(child, sample, type) {
+ var nodes = Container.prototype.normalize.call(this, child);
+
+ if (sample) {
+ if (type == "prepend") {
+ if (this.nodes.length > 1) {
+ sample.before = this.nodes[1].before;
+ } else {
+ delete sample.before;
+ }
+ } else {
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+
+ if (this.first != sample) node.before = sample.before;
+ }
+ }
+ }
+
+ return nodes;
+ };
+
+ // Stringify styles
+
+ Root.prototype.stringify = function stringify(builder) {
+ this.stringifyContent(builder);
+ if (this.after) builder(this.after);
+ };
+
+ // Generate processing result with optional source map
+
+ Root.prototype.toResult = function toResult() {
+ var opts = arguments[0] === undefined ? {} : arguments[0];
+
+ return new Result(this, opts);
+ };
+
+ return Root;
+})(Container);
+
+module.exports = Root;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/rule.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/rule.js
new file mode 100644
index 0000000..c2bcb11
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/rule.js
@@ -0,0 +1,54 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var Container = _interopRequire(require("./container"));
+
+var list = _interopRequire(require("./list"));
+
+// CSS rule like “a { }”
+
+var Rule = (function (Container) {
+ function Rule(defaults) {
+ _classCallCheck(this, Rule);
+
+ this.type = "rule";
+ this.nodes = [];
+ Container.call(this, defaults);
+ }
+
+ _inherits(Rule, Container);
+
+ // Stringify rule
+
+ Rule.prototype.stringify = function stringify(builder) {
+ this.stringifyBlock(builder, this.stringifyRaw("selector"));
+ };
+
+ _prototypeProperties(Rule, null, {
+ selectors: {
+
+ // Shortcut to get selectors as array
+
+ get: function () {
+ return list.comma(this.selector);
+ },
+ set: function (values) {
+ this.selector = values.join(", ");
+ },
+ configurable: true
+ }
+ });
+
+ return Rule;
+})(Container);
+
+module.exports = Rule;
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/tokenize.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/tokenize.js
new file mode 100644
index 0000000..5f7d350
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/tokenize.js
@@ -0,0 +1,193 @@
+"use strict";
+
+var singleQuote = "'".charCodeAt(0),
+ doubleQuote = "\"".charCodeAt(0),
+ backslash = "\\".charCodeAt(0),
+ slash = "/".charCodeAt(0),
+ newline = "\n".charCodeAt(0),
+ space = " ".charCodeAt(0),
+ feed = "\f".charCodeAt(0),
+ tab = "\t".charCodeAt(0),
+ cr = "\r".charCodeAt(0),
+ openBracket = "(".charCodeAt(0),
+ closeBracket = ")".charCodeAt(0),
+ openCurly = "{".charCodeAt(0),
+ closeCurly = "}".charCodeAt(0),
+ semicolon = ";".charCodeAt(0),
+ asterisk = "*".charCodeAt(0),
+ colon = ":".charCodeAt(0),
+ at = "@".charCodeAt(0),
+ atEnd = /[ \n\t\r\{\(\)'"\\/]/g,
+ wordEnd = /[ \n\t\r\(\)\{\}:;@!'"\\]|\/(?=\*)/g,
+ badBracket = /.[\\\/\("'\n]/;
+
+module.exports = function (input) {
+ var tokens = [];
+ var css = input.css.valueOf();
+
+ var code, next, quote, lines, last, content, escape, nextLine, nextOffset, escaped, escapePos, bad;
+
+ var length = css.length;
+ var offset = -1;
+ var line = 1;
+ var pos = 0;
+
+ var unclosed = function unclosed(what, end) {
+ if (input.safe) {
+ css += end;
+ next = css.length - 1;
+ } else {
+ throw input.error("Unclosed " + what, line, pos - offset);
+ }
+ };
+
+ while (pos < length) {
+ code = css.charCodeAt(pos);
+
+ if (code == newline) {
+ offset = pos;
+ line += 1;
+ }
+
+ switch (code) {
+ case newline:
+ case space:
+ case tab:
+ case cr:
+ case feed:
+ next = pos;
+ do {
+ next += 1;
+ code = css.charCodeAt(next);
+ if (code == newline) {
+ offset = next;
+ line += 1;
+ }
+ } while (code == space || code == newline || code == tab || code == cr || code == feed);
+
+ tokens.push(["space", css.slice(pos, next)]);
+ pos = next - 1;
+ break;
+
+ case openCurly:
+ tokens.push(["{", "{", line, pos - offset]);
+ break;
+
+ case closeCurly:
+ tokens.push(["}", "}", line, pos - offset]);
+ break;
+
+ case colon:
+ tokens.push([":", ":", line, pos - offset]);
+ break;
+
+ case semicolon:
+ tokens.push([";", ";", line, pos - offset]);
+ break;
+
+ case openBracket:
+ next = css.indexOf(")", pos + 1);
+ content = css.slice(pos, next + 1);
+
+ if (next == -1 || badBracket.test(content)) {
+ tokens.push(["(", "(", line, pos - offset]);
+ } else {
+ tokens.push(["brackets", content, line, pos - offset, line, next - offset]);
+ pos = next;
+ }
+
+ break;
+
+ case closeBracket:
+ tokens.push([")", ")", line, pos - offset]);
+ break;
+
+ case singleQuote:
+ case doubleQuote:
+ quote = code == singleQuote ? "'" : "\"";
+ next = pos;
+ do {
+ escaped = false;
+ next = css.indexOf(quote, next + 1);
+ if (next == -1) unclosed("quote", quote);
+ escapePos = next;
+ while (css.charCodeAt(escapePos - 1) == backslash) {
+ escapePos -= 1;
+ escaped = !escaped;
+ }
+ } while (escaped);
+
+ tokens.push(["string", css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ case at:
+ atEnd.lastIndex = pos + 1;
+ atEnd.test(css);
+ if (atEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = atEnd.lastIndex - 2;
+ }
+ tokens.push(["at-word", css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ case backslash:
+ next = pos;
+ escape = true;
+ while (css.charCodeAt(next + 1) == backslash) {
+ next += 1;
+ escape = !escape;
+ }
+ code = css.charCodeAt(next + 1);
+ if (escape && (code != slash && code != space && code != newline && code != tab && code != cr && code != feed)) {
+ next += 1;
+ }
+ tokens.push(["word", css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ default:
+ if (code == slash && css.charCodeAt(pos + 1) == asterisk) {
+ next = css.indexOf("*/", pos + 2) + 1;
+ if (next === 0) unclosed("comment", "*/");
+
+ content = css.slice(pos, next + 1);
+ lines = content.split("\n");
+ last = lines.length - 1;
+
+ if (last > 0) {
+ nextLine = line + last;
+ nextOffset = next - lines[last].length;
+ } else {
+ nextLine = line;
+ nextOffset = offset;
+ }
+
+ tokens.push(["comment", content, line, pos - offset, nextLine, next - nextOffset]);
+
+ offset = nextOffset;
+ line = nextLine;
+ pos = next;
+ } else {
+ wordEnd.lastIndex = pos + 1;
+ wordEnd.test(css);
+ if (wordEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = wordEnd.lastIndex - 2;
+ }
+
+ tokens.push(["word", css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ }
+
+ break;
+ }
+
+ pos++;
+ }
+
+ return tokens;
+};
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/lib/vendor.js b/node_modules/autoprefixer-core/node_modules/postcss/lib/vendor.js
new file mode 100644
index 0000000..6f4d01b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/lib/vendor.js
@@ -0,0 +1,32 @@
+"use strict";
+
+// Methods to work with vendor prefixes
+module.exports = {
+
+ // Return vendor prefix from property name, if it exists
+ //
+ // vendor.prefix('-moz-box-sizing') #=> '-moz-'
+ // vendor.prefix('box-sizing') #=> ''
+ prefix: function prefix(prop) {
+ if (prop[0] == "-") {
+ var sep = prop.indexOf("-", 1);
+ return prop.substr(0, sep + 1);
+ } else {
+ return "";
+ }
+ },
+
+ // Remove prefix from property name
+ //
+ // vendor.prefix('-moz-box-sizing') #=> 'box-sizing'
+ // vendor.prefix('box-sizing') #=> 'box-sizing'
+ unprefixed: function unprefixed(prop) {
+ if (prop[0] == "-") {
+ var sep = prop.indexOf("-", 1);
+ return prop.substr(sep + 1);
+ } else {
+ return prop;
+ }
+ }
+
+};
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/.npmignore b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/.npmignore
new file mode 100644
index 0000000..6000925
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/.npmignore
@@ -0,0 +1,4 @@
+*,v
+attic/**/*
+node_modules/**/*
+tmp/**/*
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/.travis.yml b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/.travis.yml
new file mode 100644
index 0000000..85fc71b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+ - "0.10"
+ - "0.8"
+
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/LICENSE.md b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/LICENSE.md
new file mode 100644
index 0000000..fd579a4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/LICENSE.md
@@ -0,0 +1,27 @@
+Copyright (c) 2014, Dan Kogai
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of {{{project}}} nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/README.md b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/README.md
new file mode 100644
index 0000000..d3039bf
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/README.md
@@ -0,0 +1,51 @@
+[](http://travis-ci.org/dankogai/js-base64)
+
+# base64.js
+
+Yet another Base64 transcoder
+
+## Usage
+
+### In Browser
+````html
+
+````
+### node.js
+````javascript
+var Base64 = require('./base64.js').Base64;
+````
+
+
+## SYNOPSIS
+
+````javascript
+Base64.encode('dankogai'); // ZGFua29nYWk=
+Base64.encode('小飼弾'); // 5bCP6aO85by+
+Base64.encodeURI('小飼弾'); // 5bCP6aO85by-
+
+Base64.decode('ZGFua29nYWk='); // dankogai
+Base64.decode('5bCP6aO85by+'); // 小飼弾
+// note .decodeURI() is unnecessary since it accepts both flavors
+Base64.decode('5bCP6aO85by-'); // 小飼弾
+````
+
+### String Extension for ES5
+
+````javascript
+if (Base64.extendString) {
+ // you have to explicitly extend String.prototype
+ Base64.extendString();
+ // once extended, you can do the following
+ 'dankogai'.toBase64(); // ZGFua29nYWk=
+ '小飼弾'.toBase64(); // 5bCP6aO85by+
+ '小飼弾'.toBase64(true); // 5bCP6aO85by-
+ '小飼弾'.toBase64URI(); // 5bCP6aO85by-
+ 'ZGFua29nYWk='.fromBase64(); // dankogai
+ '5bCP6aO85by+'.fromBase64(); // 小飼弾
+ '5bCP6aO85by-'.fromBase64(); // 小飼弾
+}
+````
+
+## SEE ALSO
+
++ http://en.wikipedia.org/wiki/Base64
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.html b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.html
new file mode 100644
index 0000000..64b56e0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+Test for base64.js
+
+
+Test for base64.js
+$Id: base64.html,v 1.1 2009/03/01 22:00:28 dankogai Exp dankogai $
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.js
new file mode 100644
index 0000000..f395cb2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.js
@@ -0,0 +1,193 @@
+/*
+ * $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $
+ *
+ * Licensed under the MIT license.
+ * http://opensource.org/licenses/mit-license
+ *
+ * References:
+ * http://en.wikipedia.org/wiki/Base64
+ */
+
+(function(global) {
+ 'use strict';
+ // existing version for noConflict()
+ var _Base64 = global.Base64;
+ var version = "2.1.7";
+ // if node.js, we use Buffer
+ var buffer;
+ if (typeof module !== 'undefined' && module.exports) {
+ buffer = require('buffer').Buffer;
+ }
+ // constants
+ var b64chars
+ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+ var b64tab = function(bin) {
+ var t = {};
+ for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
+ return t;
+ }(b64chars);
+ var fromCharCode = String.fromCharCode;
+ // encoder stuff
+ var cb_utob = function(c) {
+ if (c.length < 2) {
+ var cc = c.charCodeAt(0);
+ return cc < 0x80 ? c
+ : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
+ + fromCharCode(0x80 | (cc & 0x3f)))
+ : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ + fromCharCode(0x80 | ( cc & 0x3f)));
+ } else {
+ var cc = 0x10000
+ + (c.charCodeAt(0) - 0xD800) * 0x400
+ + (c.charCodeAt(1) - 0xDC00);
+ return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
+ + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ + fromCharCode(0x80 | ( cc & 0x3f)));
+ }
+ };
+ var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
+ var utob = function(u) {
+ return u.replace(re_utob, cb_utob);
+ };
+ var cb_encode = function(ccc) {
+ var padlen = [0, 2, 1][ccc.length % 3],
+ ord = ccc.charCodeAt(0) << 16
+ | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
+ | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
+ chars = [
+ b64chars.charAt( ord >>> 18),
+ b64chars.charAt((ord >>> 12) & 63),
+ padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
+ padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
+ ];
+ return chars.join('');
+ };
+ var btoa = global.btoa ? function(b) {
+ return global.btoa(b);
+ } : function(b) {
+ return b.replace(/[\s\S]{1,3}/g, cb_encode);
+ };
+ var _encode = buffer ? function (u) {
+ return (u.constructor === buffer.constructor ? u : new buffer(u))
+ .toString('base64')
+ }
+ : function (u) { return btoa(utob(u)) }
+ ;
+ var encode = function(u, urisafe) {
+ return !urisafe
+ ? _encode(String(u))
+ : _encode(String(u)).replace(/[+\/]/g, function(m0) {
+ return m0 == '+' ? '-' : '_';
+ }).replace(/=/g, '');
+ };
+ var encodeURI = function(u) { return encode(u, true) };
+ // decoder stuff
+ var re_btou = new RegExp([
+ '[\xC0-\xDF][\x80-\xBF]',
+ '[\xE0-\xEF][\x80-\xBF]{2}',
+ '[\xF0-\xF7][\x80-\xBF]{3}'
+ ].join('|'), 'g');
+ var cb_btou = function(cccc) {
+ switch(cccc.length) {
+ case 4:
+ var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
+ | ((0x3f & cccc.charCodeAt(1)) << 12)
+ | ((0x3f & cccc.charCodeAt(2)) << 6)
+ | (0x3f & cccc.charCodeAt(3)),
+ offset = cp - 0x10000;
+ return (fromCharCode((offset >>> 10) + 0xD800)
+ + fromCharCode((offset & 0x3FF) + 0xDC00));
+ case 3:
+ return fromCharCode(
+ ((0x0f & cccc.charCodeAt(0)) << 12)
+ | ((0x3f & cccc.charCodeAt(1)) << 6)
+ | (0x3f & cccc.charCodeAt(2))
+ );
+ default:
+ return fromCharCode(
+ ((0x1f & cccc.charCodeAt(0)) << 6)
+ | (0x3f & cccc.charCodeAt(1))
+ );
+ }
+ };
+ var btou = function(b) {
+ return b.replace(re_btou, cb_btou);
+ };
+ var cb_decode = function(cccc) {
+ var len = cccc.length,
+ padlen = len % 4,
+ n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
+ | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
+ | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
+ | (len > 3 ? b64tab[cccc.charAt(3)] : 0),
+ chars = [
+ fromCharCode( n >>> 16),
+ fromCharCode((n >>> 8) & 0xff),
+ fromCharCode( n & 0xff)
+ ];
+ chars.length -= [0, 0, 2, 1][padlen];
+ return chars.join('');
+ };
+ var atob = global.atob ? function(a) {
+ return global.atob(a);
+ } : function(a){
+ return a.replace(/[\s\S]{1,4}/g, cb_decode);
+ };
+ var _decode = buffer ? function(a) {
+ return (a.constructor === buffer.constructor
+ ? a : new buffer(a, 'base64')).toString();
+ }
+ : function(a) { return btou(atob(a)) };
+ var decode = function(a){
+ return _decode(
+ String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
+ .replace(/[^A-Za-z0-9\+\/]/g, '')
+ );
+ };
+ var noConflict = function() {
+ var Base64 = global.Base64;
+ global.Base64 = _Base64;
+ return Base64;
+ };
+ // export Base64
+ global.Base64 = {
+ VERSION: version,
+ atob: atob,
+ btoa: btoa,
+ fromBase64: decode,
+ toBase64: encode,
+ utob: utob,
+ encode: encode,
+ encodeURI: encodeURI,
+ btou: btou,
+ decode: decode,
+ noConflict: noConflict
+ };
+ // if ES5 is available, make Base64.extendString() available
+ if (typeof Object.defineProperty === 'function') {
+ var noEnum = function(v){
+ return {value:v,enumerable:false,writable:true,configurable:true};
+ };
+ global.Base64.extendString = function () {
+ Object.defineProperty(
+ String.prototype, 'fromBase64', noEnum(function () {
+ return decode(this)
+ }));
+ Object.defineProperty(
+ String.prototype, 'toBase64', noEnum(function (urisafe) {
+ return encode(this, urisafe)
+ }));
+ Object.defineProperty(
+ String.prototype, 'toBase64URI', noEnum(function () {
+ return encode(this, true)
+ }));
+ };
+ }
+ // that's it!
+})(this);
+
+if (this['Meteor']) {
+ Base64 = global.Base64; // for normal export in Meteor.js
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.min.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.min.js
new file mode 100644
index 0000000..b2f1377
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64.min.js
@@ -0,0 +1 @@
+(function(global){"use strict";var _Base64=global.Base64;var version="2.1.7";var buffer;if(typeof module!=="undefined"&&module.exports){buffer=require("buffer").Buffer}var b64chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64tab=function(bin){var t={};for(var i=0,l=bin.length;i>>6)+fromCharCode(128|cc&63):fromCharCode(224|cc>>>12&15)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}else{var cc=65536+(c.charCodeAt(0)-55296)*1024+(c.charCodeAt(1)-56320);return fromCharCode(240|cc>>>18&7)+fromCharCode(128|cc>>>12&63)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}};var re_utob=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var utob=function(u){return u.replace(re_utob,cb_utob)};var cb_encode=function(ccc){var padlen=[0,2,1][ccc.length%3],ord=ccc.charCodeAt(0)<<16|(ccc.length>1?ccc.charCodeAt(1):0)<<8|(ccc.length>2?ccc.charCodeAt(2):0),chars=[b64chars.charAt(ord>>>18),b64chars.charAt(ord>>>12&63),padlen>=2?"=":b64chars.charAt(ord>>>6&63),padlen>=1?"=":b64chars.charAt(ord&63)];return chars.join("")};var btoa=global.btoa?function(b){return global.btoa(b)}:function(b){return b.replace(/[\s\S]{1,3}/g,cb_encode)};var _encode=buffer?function(u){return(u.constructor===buffer.constructor?u:new buffer(u)).toString("base64")}:function(u){return btoa(utob(u))};var encode=function(u,urisafe){return!urisafe?_encode(String(u)):_encode(String(u)).replace(/[+\/]/g,function(m0){return m0=="+"?"-":"_"}).replace(/=/g,"")};var encodeURI=function(u){return encode(u,true)};var re_btou=new RegExp(["[À-ß][-¿]","[à-ï][-¿]{2}","[ð-÷][-¿]{3}"].join("|"),"g");var cb_btou=function(cccc){switch(cccc.length){case 4:var cp=(7&cccc.charCodeAt(0))<<18|(63&cccc.charCodeAt(1))<<12|(63&cccc.charCodeAt(2))<<6|63&cccc.charCodeAt(3),offset=cp-65536;return fromCharCode((offset>>>10)+55296)+fromCharCode((offset&1023)+56320);case 3:return fromCharCode((15&cccc.charCodeAt(0))<<12|(63&cccc.charCodeAt(1))<<6|63&cccc.charCodeAt(2));default:return fromCharCode((31&cccc.charCodeAt(0))<<6|63&cccc.charCodeAt(1))}};var btou=function(b){return b.replace(re_btou,cb_btou)};var cb_decode=function(cccc){var len=cccc.length,padlen=len%4,n=(len>0?b64tab[cccc.charAt(0)]<<18:0)|(len>1?b64tab[cccc.charAt(1)]<<12:0)|(len>2?b64tab[cccc.charAt(2)]<<6:0)|(len>3?b64tab[cccc.charAt(3)]:0),chars=[fromCharCode(n>>>16),fromCharCode(n>>>8&255),fromCharCode(n&255)];chars.length-=[0,0,2,1][padlen];return chars.join("")};var atob=global.atob?function(a){return global.atob(a)}:function(a){return a.replace(/[\s\S]{1,4}/g,cb_decode)};var _decode=buffer?function(a){return(a.constructor===buffer.constructor?a:new buffer(a,"base64")).toString()}:function(a){return btou(atob(a))};var decode=function(a){return _decode(String(a).replace(/[-_]/g,function(m0){return m0=="-"?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))};var noConflict=function(){var Base64=global.Base64;global.Base64=_Base64;return Base64};global.Base64={VERSION:version,atob:atob,btoa:btoa,fromBase64:decode,toBase64:encode,utob:utob,encode:encode,encodeURI:encodeURI,btou:btou,decode:decode,noConflict:noConflict};if(typeof Object.defineProperty==="function"){var noEnum=function(v){return{value:v,enumerable:false,writable:true,configurable:true}};global.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",noEnum(function(){return decode(this)}));Object.defineProperty(String.prototype,"toBase64",noEnum(function(urisafe){return encode(this,urisafe)}));Object.defineProperty(String.prototype,"toBase64URI",noEnum(function(){return encode(this,true)}))}}})(this);if(this["Meteor"]){Base64=global.Base64}
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64_utf8 b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64_utf8
new file mode 100644
index 0000000..07b46d3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/base64_utf8
@@ -0,0 +1,219 @@
+(function(global) {
+ 'use strict';
+ if (global.Base64) return;
+ var version = "2.1.1";
+ // if node.js, we use Buffer
+ var buffer;
+ if (typeof module !== 'undefined' && module.exports) {
+ buffer = require('buffer').Buffer;
+ }
+ // constants
+ var b64chars
+ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+ var b64tab = function(bin) {
+ var t = {};
+ for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
+ return t;
+ }(b64chars);
+ var fromCharCode = String.fromCharCode;
+ // encoder stuff
+ var cb_utob = function(c) {
+ if (c.length < 2) {
+ var cc = c.charCodeAt(0);
+ return cc < 0x80 ? c
+ : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
+ + fromCharCode(0x80 | (cc & 0x3f)))
+ : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ + fromCharCode(0x80 | ( cc & 0x3f)));
+ } else {
+ var cc = 0x10000
+ + (c.charCodeAt(0) - 0xD800) * 0x400
+ + (c.charCodeAt(1) - 0xDC00);
+ return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
+ + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ + fromCharCode(0x80 | ( cc & 0x3f)));
+ }
+ };
+ var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
+ var utob = function(u) {
+ return u.replace(re_utob, cb_utob);
+ };
+ var cb_encode = function(ccc) {
+ var padlen = [0, 2, 1][ccc.length % 3],
+ ord = ccc.charCodeAt(0) << 16
+ | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
+ | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
+ chars = [
+ b64chars.charAt( ord >>> 18),
+ b64chars.charAt((ord >>> 12) & 63),
+ padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
+ padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
+ ];
+ return chars.join('');
+ };
+ var btoa = global.btoa || function(b) {
+ return b.replace(/[\s\S]{1,3}/g, cb_encode);
+ };
+ var _encode = buffer
+ ? function (u) { return _utf8_encode((new buffer(u)).toString('base64')) }
+ : function (u) { return _utf8_encode(btoa(utob(u))) }
+ ;
+ var encode = function(u, urisafe) {
+ return !urisafe
+ ? _encode(u)
+ : _encode(u).replace(/[+\/]/g, function(m0) {
+ return m0 == '+' ? '-' : '_';
+ }).replace(/=/g, '');
+ };
+ var encodeURI = function(u) { return encode(u, true) };
+ // decoder stuff
+ var re_btou = new RegExp([
+ '[\xC0-\xDF][\x80-\xBF]',
+ '[\xE0-\xEF][\x80-\xBF]{2}',
+ '[\xF0-\xF7][\x80-\xBF]{3}'
+ ].join('|'), 'g');
+ var cb_btou = function(cccc) {
+ switch(cccc.length) {
+ case 4:
+ var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
+ | ((0x3f & cccc.charCodeAt(1)) << 12)
+ | ((0x3f & cccc.charCodeAt(2)) << 6)
+ | (0x3f & cccc.charCodeAt(3)),
+ offset = cp - 0x10000;
+ return (fromCharCode((offset >>> 10) + 0xD800)
+ + fromCharCode((offset & 0x3FF) + 0xDC00));
+ case 3:
+ return fromCharCode(
+ ((0x0f & cccc.charCodeAt(0)) << 12)
+ | ((0x3f & cccc.charCodeAt(1)) << 6)
+ | (0x3f & cccc.charCodeAt(2))
+ );
+ default:
+ return fromCharCode(
+ ((0x1f & cccc.charCodeAt(0)) << 6)
+ | (0x3f & cccc.charCodeAt(1))
+ );
+ }
+ };
+ var _utf8_encode = function ( string ) {
+ string = string.replace(/\r\n/g,"\n");
+ var utftext = "";
+
+ for (var n = 0; n < string.length; n++) {
+
+ var c = string.charCodeAt(n);
+
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ }
+ else if((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+
+ }
+
+ return utftext;
+ };
+ var _utf8_decode = function (utftext) {
+ var string = "";
+ var i = 0;
+ var c = c1 = c2 = 0;
+
+ while ( i < utftext.length ) {
+
+ c = utftext.charCodeAt(i);
+
+ if (c < 128) {
+ string += String.fromCharCode(c);
+ i++;
+ }
+ else if((c > 191) && (c < 224)) {
+ c2 = utftext.charCodeAt(i+1);
+ string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+ i += 2;
+ }
+ else {
+ c2 = utftext.charCodeAt(i+1);
+ c3 = utftext.charCodeAt(i+2);
+ string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 3;
+ }
+
+ }
+
+ return string;
+ };
+ var btou = function(b) {
+ return b.replace(re_btou, cb_btou);
+ };
+ var cb_decode = function(cccc) {
+ var len = cccc.length,
+ padlen = len % 4,
+ n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
+ | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
+ | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
+ | (len > 3 ? b64tab[cccc.charAt(3)] : 0),
+ chars = [
+ fromCharCode( n >>> 16),
+ fromCharCode((n >>> 8) & 0xff),
+ fromCharCode( n & 0xff)
+ ];
+ chars.length -= [0, 0, 2, 1][padlen];
+ return chars.join('');
+ };
+ var atob = global.atob || function(a){
+ return a.replace(/[\s\S]{1,4}/g, cb_decode);
+ };
+ var _decode = buffer
+ ? function(a) { return (new buffer(a, 'base64')).toString() }
+ : function(a) { return btou(atob(a)) };
+ var decode = function(a){
+ a = _utf8_decode( a );
+ return _decode(
+ a.replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
+ .replace(/[^A-Za-z0-9\+\/]/g, '')
+ );
+ };
+ // export Base64
+ global.Base64 = {
+ VERSION: version,
+ atob: atob,
+ btoa: btoa,
+ fromBase64: decode,
+ toBase64: encode,
+ utob: utob,
+ encode: encode,
+ encodeURI: encodeURI,
+ btou: btou,
+ decode: decode
+ };
+ // if ES5 is available, make Base64.extendString() available
+ if (typeof Object.defineProperty === 'function') {
+ var noEnum = function(v){
+ return {value:v,enumerable:false,writable:true,configurable:true};
+ };
+ global.Base64.extendString = function () {
+ Object.defineProperty(
+ String.prototype, 'fromBase64', noEnum(function () {
+ return decode(this)
+ }));
+ Object.defineProperty(
+ String.prototype, 'toBase64', noEnum(function (urisafe) {
+ return encode(this, urisafe)
+ }));
+ Object.defineProperty(
+ String.prototype, 'toBase64URI', noEnum(function () {
+ return encode(this, true)
+ }));
+ };
+ }
+ // that's it!
+})(this);
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/bower.json b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/bower.json
new file mode 100644
index 0000000..bd798db
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/bower.json
@@ -0,0 +1,17 @@
+{
+ "name": "js-base64",
+ "version": "2.1.7",
+ "main": [
+ "./base64.js"
+ ],
+ "ignore": [
+ "old",
+ "test",
+ ".gitignore",
+ ".travis.yml",
+ "base64.html",
+ "package.json"
+ ],
+ "dependencies": {
+ }
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/old/base64-1.7.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/old/base64-1.7.js
new file mode 100644
index 0000000..27784eb
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/old/base64-1.7.js
@@ -0,0 +1,237 @@
+/*
+ * $Id: base64.js,v 1.7 2012/08/23 10:30:18 dankogai Exp dankogai $
+ *
+ * Licensed under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * References:
+ * http://en.wikipedia.org/wiki/Base64
+ */
+
+(function(global){
+
+var b64chars
+ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+var b64charcodes = function(){
+ var a = [];
+ var codeA = 'A'.charCodeAt(0);
+ var codea = 'a'.charCodeAt(0);
+ var code0 = '0'.charCodeAt(0);
+ for (var i = 0; i < 26; i ++) a.push(codeA + i);
+ for (var i = 0; i < 26; i ++) a.push(codea + i);
+ for (var i = 0; i < 10; i ++) a.push(code0 + i);
+ a.push('+'.charCodeAt(0));
+ a.push('/'.charCodeAt(0));
+ return a;
+}();
+
+var b64tab = function(bin){
+ var t = {};
+ for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
+ return t;
+}(b64chars);
+
+var stringToArray = function(s){
+ var a = [];
+ for (var i = 0, l = s.length; i < l; i ++) a[i] = s.charCodeAt(i);
+ return a;
+};
+
+var convertUTF8ArrayToBase64 = function(bin){
+ var padlen = 0;
+ while (bin.length % 3){
+ bin.push(0);
+ padlen++;
+ };
+ var b64 = [];
+ for (var i = 0, l = bin.length; i < l; i += 3){
+ var c0 = bin[i], c1 = bin[i+1], c2 = bin[i+2];
+ if (c0 >= 256 || c1 >= 256 || c2 >= 256)
+ throw 'unsupported character found';
+ var n = (c0 << 16) | (c1 << 8) | c2;
+ b64.push(
+ b64charcodes[ n >>> 18],
+ b64charcodes[(n >>> 12) & 63],
+ b64charcodes[(n >>> 6) & 63],
+ b64charcodes[ n & 63]
+ );
+ }
+ while (padlen--) b64[b64.length - padlen - 1] = '='.charCodeAt(0);
+ return chunkStringFromCharCodeApply(b64);
+};
+
+var convertBase64ToUTF8Array = function(b64){
+ b64 = b64.replace(/[^A-Za-z0-9+\/]+/g, '');
+ var bin = [];
+ var padlen = b64.length % 4;
+ for (var i = 0, l = b64.length; i < l; i += 4){
+ var n = ((b64tab[b64.charAt(i )] || 0) << 18)
+ | ((b64tab[b64.charAt(i+1)] || 0) << 12)
+ | ((b64tab[b64.charAt(i+2)] || 0) << 6)
+ | ((b64tab[b64.charAt(i+3)] || 0));
+ bin.push(
+ ( n >> 16 ),
+ ( (n >> 8) & 0xff ),
+ ( n & 0xff )
+ );
+ }
+ bin.length -= [0,0,2,1][padlen];
+ return bin;
+};
+
+var convertUTF16ArrayToUTF8Array = function(uni){
+ var bin = [];
+ for (var i = 0, l = uni.length; i < l; i++){
+ var n = uni[i];
+ if (n < 0x80)
+ bin.push(n);
+ else if (n < 0x800)
+ bin.push(
+ 0xc0 | (n >>> 6),
+ 0x80 | (n & 0x3f));
+ else
+ bin.push(
+ 0xe0 | ((n >>> 12) & 0x0f),
+ 0x80 | ((n >>> 6) & 0x3f),
+ 0x80 | (n & 0x3f));
+ }
+ return bin;
+};
+
+var convertUTF8ArrayToUTF16Array = function(bin){
+ var uni = [];
+ for (var i = 0, l = bin.length; i < l; i++){
+ var c0 = bin[i];
+ if (c0 < 0x80){
+ uni.push(c0);
+ }else{
+ var c1 = bin[++i];
+ if (c0 < 0xe0){
+ uni.push(((c0 & 0x1f) << 6) | (c1 & 0x3f));
+ }else{
+ var c2 = bin[++i];
+ uni.push(
+ ((c0 & 0x0f) << 12) | ((c1 & 0x3f) << 6) | (c2 & 0x3f)
+ );
+ }
+ }
+ }
+ return uni;
+};
+
+var convertUTF8StringToBase64 = function(bin){
+ return convertUTF8ArrayToBase64(stringToArray(bin));
+};
+
+var convertBase64ToUTF8String = function(b64){
+ return chunkStringFromCharCodeApply(convertBase64ToUTF8Array(b64));
+};
+
+var convertUTF8StringToUTF16Array = function(bin){
+ return convertUTF8ArrayToUTF16Array(stringToArray(bin));
+};
+
+var convertUTF8ArrayToUTF16String = function(bin){
+ return chunkStringFromCharCodeApply(convertUTF8ArrayToUTF16Array(bin));
+};
+
+var convertUTF8StringToUTF16String = function(bin){
+ return chunkStringFromCharCodeApply(
+ convertUTF8ArrayToUTF16Array(stringToArray(bin))
+ );
+};
+
+var convertUTF16StringToUTF8Array = function(uni){
+ return convertUTF16ArrayToUTF8Array(stringToArray(uni));
+};
+
+var convertUTF16ArrayToUTF8String = function(uni){
+ return chunkStringFromCharCodeApply(convertUTF16ArrayToUTF8Array(uni));
+};
+
+var convertUTF16StringToUTF8String = function(uni){
+ return chunkStringFromCharCodeApply(
+ convertUTF16ArrayToUTF8Array(stringToArray(uni))
+ );
+};
+
+/*
+ * String.fromCharCode.apply will only handle arrays as big as 65536,
+ * after that it'll return a truncated string with no warning.
+ */
+var chunkStringFromCharCodeApply = function(arr){
+ var strs = [], i;
+ for (i = 0; i < arr.length; i += 65536){
+ strs.push(String.fromCharCode.apply(String, arr.slice(i, i+65536)));
+ }
+ return strs.join('');
+};
+
+if (global.btoa){
+ var btoa = global.btoa;
+ var convertUTF16StringToBase64 = function (uni){
+ return btoa(convertUTF16StringToUTF8String(uni));
+ };
+}
+else {
+ var btoa = convertUTF8StringToBase64;
+ var convertUTF16StringToBase64 = function (uni){
+ return convertUTF8ArrayToBase64(convertUTF16StringToUTF8Array(uni));
+ };
+}
+
+if (global.atob){
+ var atob = global.atob;
+ var convertBase64ToUTF16String = function (b64){
+ return convertUTF8StringToUTF16String(atob(b64));
+ };
+}
+else {
+ var atob = convertBase64ToUTF8String;
+ var convertBase64ToUTF16String = function (b64){
+ return convertUTF8ArrayToUTF16String(convertBase64ToUTF8Array(b64));
+ };
+}
+
+global.Base64 = {
+ convertUTF8ArrayToBase64:convertUTF8ArrayToBase64,
+ convertByteArrayToBase64:convertUTF8ArrayToBase64,
+ convertBase64ToUTF8Array:convertBase64ToUTF8Array,
+ convertBase64ToByteArray:convertBase64ToUTF8Array,
+ convertUTF16ArrayToUTF8Array:convertUTF16ArrayToUTF8Array,
+ convertUTF16ArrayToByteArray:convertUTF16ArrayToUTF8Array,
+ convertUTF8ArrayToUTF16Array:convertUTF8ArrayToUTF16Array,
+ convertByteArrayToUTF16Array:convertUTF8ArrayToUTF16Array,
+ convertUTF8StringToBase64:convertUTF8StringToBase64,
+ convertBase64ToUTF8String:convertBase64ToUTF8String,
+ convertUTF8StringToUTF16Array:convertUTF8StringToUTF16Array,
+ convertUTF8ArrayToUTF16String:convertUTF8ArrayToUTF16String,
+ convertByteArrayToUTF16String:convertUTF8ArrayToUTF16String,
+ convertUTF8StringToUTF16String:convertUTF8StringToUTF16String,
+ convertUTF16StringToUTF8Array:convertUTF16StringToUTF8Array,
+ convertUTF16StringToByteArray:convertUTF16StringToUTF8Array,
+ convertUTF16ArrayToUTF8String:convertUTF16ArrayToUTF8String,
+ convertUTF16StringToUTF8String:convertUTF16StringToUTF8String,
+ convertUTF16StringToBase64:convertUTF16StringToBase64,
+ convertBase64ToUTF16String:convertBase64ToUTF16String,
+ fromBase64:convertBase64ToUTF8String,
+ toBase64:convertUTF8StringToBase64,
+ atob:atob,
+ btoa:btoa,
+ utob:convertUTF16StringToUTF8String,
+ btou:convertUTF8StringToUTF16String,
+ encode:convertUTF16StringToBase64,
+ encodeURI:function(u){
+ return convertUTF16StringToBase64(u).replace(/[+\/]/g, function(m0){
+ return m0 == '+' ? '-' : '_';
+ }).replace(/=+$/, '');
+ },
+ decode:function(a){
+ return convertBase64ToUTF16String(a.replace(/[-_]/g, function(m0){
+ return m0 == '-' ? '+' : '/';
+ }));
+ }
+};
+
+})(this);
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/package.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/package.js
new file mode 100644
index 0000000..5b56425
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/package.js
@@ -0,0 +1,9 @@
+Package.describe({
+ summary: "Yet another Base64 transcoder"
+})
+
+Package.on_use(function(api){
+ api.export('Base64');
+
+ api.add_files(['base64.js'], 'server');
+});
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/package.json b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/package.json
new file mode 100644
index 0000000..df73bc3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "js-base64",
+ "version": "2.1.7",
+ "description": "Yet another Base64 transcoder in pure-JS",
+ "main": "base64.js",
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "mocha": "*"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/dankogai/js-base64.git"
+ },
+ "keywords": [
+ "base64"
+ ],
+ "author": {
+ "name": "Dan Kogai"
+ },
+ "license": "BSD",
+ "gitHead": "8bfa436f733bec60c95c720e1d720c28b43ae0b2",
+ "bugs": {
+ "url": "https://github.com/dankogai/js-base64/issues"
+ },
+ "homepage": "https://github.com/dankogai/js-base64",
+ "_id": "js-base64@2.1.7",
+ "_shasum": "aa9c941ceff1567ea9ed8bea8319191f3541e4e8",
+ "_from": "js-base64@~2.1.7",
+ "_npmVersion": "2.1.18",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "dankogai",
+ "email": "dankogai+github@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "dankogai",
+ "email": "dankogai+github@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "aa9c941ceff1567ea9ed8bea8319191f3541e4e8",
+ "tarball": "http://registry.npmjs.org/js-base64/-/js-base64-2.1.7.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.7.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/dankogai.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/dankogai.js
new file mode 100644
index 0000000..3e7b12f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/dankogai.js
@@ -0,0 +1,47 @@
+/*
+ * $Id: dankogai.js,v 0.4 2012/08/24 05:23:18 dankogai Exp dankogai $
+ *
+ * use mocha to test me
+ * http://visionmedia.github.com/mocha/
+ */
+var assert, Base64;
+if (this['window'] !== this) {
+ assert = require("assert");
+ Base64 = require('../base64.js').Base64;
+}
+var is = function (a, e, m) {
+ return function () {
+ assert.equal(a, e, m)
+ }
+};
+
+describe('basic', function () {
+ it('d', is(Base64.encode('d'), 'ZA=='));
+ it('da', is(Base64.encode('da'), 'ZGE='));
+ it('dan', is(Base64.encode('dan'), 'ZGFu'));
+ it('ZA==', is(Base64.decode('ZA=='), 'd' ));
+ it('ZGE=', is(Base64.decode('ZGE='), 'da' ));
+ it('ZGFu', is(Base64.decode('ZGFu'), 'dan' ));
+});
+
+describe('whitespace', function () {
+ it('Z A==', is(Base64.decode('ZA =='), 'd' ));
+ it('ZG E=', is(Base64.decode('ZG E='), 'da' ));
+ it('ZGF u', is(Base64.decode('ZGF u'), 'dan' ));
+});
+
+describe('null', function () {
+ it('\\0', is(Base64.encode('\0'), 'AA=='));
+ it('\\0\\0', is(Base64.encode('\0\0'), 'AAA='));
+ it('\\0\\0\\0', is(Base64.encode('\0\0\0'), 'AAAA'));
+ it('AA==', is(Base64.decode('AA=='), '\0' ));
+ it('AAA=', is(Base64.decode('AAA='), '\0\0' ));
+ it('AAAA', is(Base64.decode('AAAA'), '\0\0\0'));
+});
+
+describe('Base64', function () {
+ it('.encode', is(Base64.encode('小飼弾'), '5bCP6aO85by+'));
+ it('.encodeURI', is(Base64.encodeURI('小飼弾'), '5bCP6aO85by-'));
+ it('.decode', is(Base64.decode('5bCP6aO85by+'), '小飼弾'));
+ it('.decode', is(Base64.decode('5bCP6aO85by-'), '小飼弾'));
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/es5.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/es5.js
new file mode 100644
index 0000000..6414399
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/es5.js
@@ -0,0 +1,27 @@
+/*
+ * $Id: es5.js,v 0.1 2012/08/23 19:43:17 dankogai Exp dankogai $
+ *
+ * use mocha to test me
+ * http://visionmedia.github.com/mocha/
+ */
+var assert, Base64;
+if (this['window'] !== this) {
+ assert = require("assert");
+ Base64 = require('../base64.js').Base64;
+}
+var is = function (a, e, m) {
+ return function () {
+ assert.equal(a, e, m)
+ }
+};
+
+if ('extendString' in Base64){
+ Base64.extendString();
+ describe('String', function () {
+ it('.toBase64', is('小飼弾'.toBase64(), '5bCP6aO85by+'));
+ it('.toBase64', is('小飼弾'.toBase64(true), '5bCP6aO85by-'));
+ it('.toBase64URI', is('小飼弾'.toBase64URI(), '5bCP6aO85by-'));
+ it('.fromBase64', is('5bCP6aO85by+'.fromBase64(), '小飼弾'));
+ it('.fromBase64', is('5bCP6aO85by-'.fromBase64(), '小飼弾'));
+ });
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/index.html b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/index.html
new file mode 100644
index 0000000..0ca1387
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/index.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $Id: browser.html,v 0.2 2012/08/23 19:44:32 dankogai Exp dankogai $
+
+
+
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/large.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/large.js
new file mode 100644
index 0000000..acd4ebf
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/large.js
@@ -0,0 +1,28 @@
+/*
+ * $Id: large.js,v 0.3 2012/08/23 19:14:37 dankogai Exp dankogai $
+ *
+ * use mocha to test me
+ * http://visionmedia.github.com/mocha/
+ */
+var assert, Base64;
+if (this['window'] !== this) {
+ assert = require("assert");
+ Base64 = require('../base64.js').Base64;
+}
+var is = function (a, e, m) {
+ return function () {
+ assert.equal(a, e, m)
+ }
+};
+var seed = function () {
+ var a, i;
+ for (a = [], i = 0; i < 256; i++) {
+ a.push(String.fromCharCode(i));
+ }
+ return a.join('');
+}();
+describe('Base64', function () {
+ for (var i = 0, str = seed; i < 16; str += str, i++) {
+ it(str.length, is(Base64.decode(Base64.encode(str)), str));
+ }
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/yoshinoya.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/yoshinoya.js
new file mode 100644
index 0000000..d21cead
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/js-base64/test/yoshinoya.js
@@ -0,0 +1,22 @@
+/*
+ * use mocha to test me
+ * http://visionmedia.github.com/mocha/
+ */
+var assert, Base64;
+if (this['window'] !== this) {
+ assert = require("assert");
+ Base64 = require('../base64.js').Base64;
+}
+var is = function (a, e, m) {
+ return function () {
+ assert.equal(a, e, m)
+ }
+};
+
+describe('Yoshinoya', function () {
+ it('.encode', is(Base64.encode('𠮷野家'), '8KCut+mHjuWutg=='));
+ it('.encodeURI', is(Base64.encodeURI('𠮷野家'), '8KCut-mHjuWutg'));
+ it('.decode', is(Base64.decode('8KCut+mHjuWutg=='), '𠮷野家'));
+ it('.decode', is(Base64.decode('8KCut-mHjuWutg'), '𠮷野家'));
+ it('.decode', is(Base64.decode('7aGC7b636YeO5a62'), '𠮷野家'));
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/.npmignore b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/.npmignore
new file mode 100644
index 0000000..3dddf3f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/.npmignore
@@ -0,0 +1,2 @@
+dist/*
+node_modules/*
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/.travis.yml b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/.travis.yml
new file mode 100644
index 0000000..ddc9c4f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.8
+ - "0.10"
\ No newline at end of file
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/CHANGELOG.md b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/CHANGELOG.md
new file mode 100644
index 0000000..2ce9d80
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/CHANGELOG.md
@@ -0,0 +1,201 @@
+# Change Log
+
+## 0.2.0
+
+* Support for consuming "indexed" source maps which do not have any remote
+ sections. See pull request #127. This introduces a minor backwards
+ incompatibility if you are monkey patching `SourceMapConsumer.prototype`
+ methods.
+
+## 0.1.43
+
+* Performance improvements for `SourceMapGenerator` and `SourceNode`. See issue
+ #148 for some discussion and issues #150, #151, and #152 for implementations.
+
+## 0.1.42
+
+* Fix an issue where `SourceNode`s from different versions of the source-map
+ library couldn't be used in conjunction with each other. See issue #142.
+
+## 0.1.41
+
+* Fix a bug with getting the source content of relative sources with a "./"
+ prefix. See issue #145 and [Bug 1090768](bugzil.la/1090768).
+
+* Add the `SourceMapConsumer.prototype.computeColumnSpans` method to compute the
+ column span of each mapping.
+
+* Add the `SourceMapConsumer.prototype.allGeneratedPositionsFor` method to find
+ all generated positions associated with a given original source and line.
+
+## 0.1.40
+
+* Performance improvements for parsing source maps in SourceMapConsumer.
+
+## 0.1.39
+
+* Fix a bug where setting a source's contents to null before any source content
+ had been set before threw a TypeError. See issue #131.
+
+## 0.1.38
+
+* Fix a bug where finding relative paths from an empty path were creating
+ absolute paths. See issue #129.
+
+## 0.1.37
+
+* Fix a bug where if the source root was an empty string, relative source paths
+ would turn into absolute source paths. Issue #124.
+
+## 0.1.36
+
+* Allow the `names` mapping property to be an empty string. Issue #121.
+
+## 0.1.35
+
+* A third optional parameter was added to `SourceNode.fromStringWithSourceMap`
+ to specify a path that relative sources in the second parameter should be
+ relative to. Issue #105.
+
+* If no file property is given to a `SourceMapGenerator`, then the resulting
+ source map will no longer have a `null` file property. The property will
+ simply not exist. Issue #104.
+
+* Fixed a bug where consecutive newlines were ignored in `SourceNode`s.
+ Issue #116.
+
+## 0.1.34
+
+* Make `SourceNode` work with windows style ("\r\n") newlines. Issue #103.
+
+* Fix bug involving source contents and the
+ `SourceMapGenerator.prototype.applySourceMap`. Issue #100.
+
+## 0.1.33
+
+* Fix some edge cases surrounding path joining and URL resolution.
+
+* Add a third parameter for relative path to
+ `SourceMapGenerator.prototype.applySourceMap`.
+
+* Fix issues with mappings and EOLs.
+
+## 0.1.32
+
+* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns
+ (issue 92).
+
+* Fixed test runner to actually report number of failed tests as its process
+ exit code.
+
+* Fixed a typo when reporting bad mappings (issue 87).
+
+## 0.1.31
+
+* Delay parsing the mappings in SourceMapConsumer until queried for a source
+ location.
+
+* Support Sass source maps (which at the time of writing deviate from the spec
+ in small ways) in SourceMapConsumer.
+
+## 0.1.30
+
+* Do not join source root with a source, when the source is a data URI.
+
+* Extend the test runner to allow running single specific test files at a time.
+
+* Performance improvements in `SourceNode.prototype.walk` and
+ `SourceMapConsumer.prototype.eachMapping`.
+
+* Source map browser builds will now work inside Workers.
+
+* Better error messages when attempting to add an invalid mapping to a
+ `SourceMapGenerator`.
+
+## 0.1.29
+
+* Allow duplicate entries in the `names` and `sources` arrays of source maps
+ (usually from TypeScript) we are parsing. Fixes github issue 72.
+
+## 0.1.28
+
+* Skip duplicate mappings when creating source maps from SourceNode; github
+ issue 75.
+
+## 0.1.27
+
+* Don't throw an error when the `file` property is missing in SourceMapConsumer,
+ we don't use it anyway.
+
+## 0.1.26
+
+* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70.
+
+## 0.1.25
+
+* Make compatible with browserify
+
+## 0.1.24
+
+* Fix issue with absolute paths and `file://` URIs. See
+ https://bugzilla.mozilla.org/show_bug.cgi?id=885597
+
+## 0.1.23
+
+* Fix issue with absolute paths and sourcesContent, github issue 64.
+
+## 0.1.22
+
+* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21.
+
+## 0.1.21
+
+* Fixed handling of sources that start with a slash so that they are relative to
+ the source root's host.
+
+## 0.1.20
+
+* Fixed github issue #43: absolute URLs aren't joined with the source root
+ anymore.
+
+## 0.1.19
+
+* Using Travis CI to run tests.
+
+## 0.1.18
+
+* Fixed a bug in the handling of sourceRoot.
+
+## 0.1.17
+
+* Added SourceNode.fromStringWithSourceMap.
+
+## 0.1.16
+
+* Added missing documentation.
+
+* Fixed the generating of empty mappings in SourceNode.
+
+## 0.1.15
+
+* Added SourceMapGenerator.applySourceMap.
+
+## 0.1.14
+
+* The sourceRoot is now handled consistently.
+
+## 0.1.13
+
+* Added SourceMapGenerator.fromSourceMap.
+
+## 0.1.12
+
+* SourceNode now generates empty mappings too.
+
+## 0.1.11
+
+* Added name support to SourceNode.
+
+## 0.1.10
+
+* Added sourcesContent support to the customer and generator.
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/LICENSE b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/LICENSE
new file mode 100644
index 0000000..ed1b7cf
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/LICENSE
@@ -0,0 +1,28 @@
+
+Copyright (c) 2009-2011, Mozilla Foundation and contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the names of the Mozilla Foundation nor the names of project
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/Makefile.dryice.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/Makefile.dryice.js
new file mode 100644
index 0000000..d6fc26a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/Makefile.dryice.js
@@ -0,0 +1,166 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+var path = require('path');
+var fs = require('fs');
+var copy = require('dryice').copy;
+
+function removeAmdefine(src) {
+ src = String(src).replace(
+ /if\s*\(typeof\s*define\s*!==\s*'function'\)\s*{\s*var\s*define\s*=\s*require\('amdefine'\)\(module,\s*require\);\s*}\s*/g,
+ '');
+ src = src.replace(
+ /\b(define\(.*)('amdefine',?)/gm,
+ '$1');
+ return src;
+}
+removeAmdefine.onRead = true;
+
+function makeNonRelative(src) {
+ return src
+ .replace(/require\('.\//g, 'require(\'source-map/')
+ .replace(/\.\.\/\.\.\/lib\//g, '');
+}
+makeNonRelative.onRead = true;
+
+function buildBrowser() {
+ console.log('\nCreating dist/source-map.js');
+
+ var project = copy.createCommonJsProject({
+ roots: [ path.join(__dirname, 'lib') ]
+ });
+
+ copy({
+ source: [
+ 'build/mini-require.js',
+ {
+ project: project,
+ require: [ 'source-map/source-map-generator',
+ 'source-map/source-map-consumer',
+ 'source-map/source-node']
+ },
+ 'build/suffix-browser.js'
+ ],
+ filter: [
+ copy.filter.moduleDefines,
+ removeAmdefine
+ ],
+ dest: 'dist/source-map.js'
+ });
+}
+
+function buildBrowserMin() {
+ console.log('\nCreating dist/source-map.min.js');
+
+ copy({
+ source: 'dist/source-map.js',
+ filter: copy.filter.uglifyjs,
+ dest: 'dist/source-map.min.js'
+ });
+}
+
+function buildFirefox() {
+ console.log('\nCreating dist/SourceMap.jsm');
+
+ var project = copy.createCommonJsProject({
+ roots: [ path.join(__dirname, 'lib') ]
+ });
+
+ copy({
+ source: [
+ 'build/prefix-source-map.jsm',
+ {
+ project: project,
+ require: [ 'source-map/source-map-consumer',
+ 'source-map/source-map-generator',
+ 'source-map/source-node' ]
+ },
+ 'build/suffix-source-map.jsm'
+ ],
+ filter: [
+ copy.filter.moduleDefines,
+ removeAmdefine,
+ makeNonRelative
+ ],
+ dest: 'dist/SourceMap.jsm'
+ });
+
+ // Create dist/test/Utils.jsm
+ console.log('\nCreating dist/test/Utils.jsm');
+
+ project = copy.createCommonJsProject({
+ roots: [ __dirname, path.join(__dirname, 'lib') ]
+ });
+
+ copy({
+ source: [
+ 'build/prefix-utils.jsm',
+ 'build/assert-shim.js',
+ {
+ project: project,
+ require: [ 'test/source-map/util' ]
+ },
+ 'build/suffix-utils.jsm'
+ ],
+ filter: [
+ copy.filter.moduleDefines,
+ removeAmdefine,
+ makeNonRelative
+ ],
+ dest: 'dist/test/Utils.jsm'
+ });
+
+ function isTestFile(f) {
+ return /^test\-.*?\.js/.test(f);
+ }
+
+ var testFiles = fs.readdirSync(path.join(__dirname, 'test', 'source-map')).filter(isTestFile);
+
+ testFiles.forEach(function (testFile) {
+ console.log('\nCreating', path.join('dist', 'test', testFile.replace(/\-/g, '_')));
+
+ copy({
+ source: [
+ 'build/test-prefix.js',
+ path.join('test', 'source-map', testFile),
+ 'build/test-suffix.js'
+ ],
+ filter: [
+ removeAmdefine,
+ makeNonRelative,
+ function (input, source) {
+ return input.replace('define(',
+ 'define("'
+ + path.join('test', 'source-map', testFile.replace(/\.js$/, ''))
+ + '", ["require", "exports", "module"], ');
+ },
+ function (input, source) {
+ return input.replace('{THIS_MODULE}', function () {
+ return "test/source-map/" + testFile.replace(/\.js$/, '');
+ });
+ }
+ ],
+ dest: path.join('dist', 'test', testFile.replace(/\-/g, '_'))
+ });
+ });
+}
+
+function ensureDir(name) {
+ var dirExists = false;
+ try {
+ dirExists = fs.statSync(name).isDirectory();
+ } catch (err) {}
+
+ if (!dirExists) {
+ fs.mkdirSync(name, 0777);
+ }
+}
+
+ensureDir("dist");
+ensureDir("dist/test");
+buildFirefox();
+buildBrowser();
+buildBrowserMin();
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/README.md b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/README.md
new file mode 100644
index 0000000..450b514
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/README.md
@@ -0,0 +1,479 @@
+# Source Map
+
+This is a library to generate and consume the source map format
+[described here][format].
+
+This library is written in the Asynchronous Module Definition format, and works
+in the following environments:
+
+* Modern Browsers supporting ECMAScript 5 (either after the build, or with an
+ AMD loader such as RequireJS)
+
+* Inside Firefox (as a JSM file, after the build)
+
+* With NodeJS versions 0.8.X and higher
+
+## Node
+
+ $ npm install source-map
+
+## Building from Source (for everywhere else)
+
+Install Node and then run
+
+ $ git clone https://fitzgen@github.com/mozilla/source-map.git
+ $ cd source-map
+ $ npm link .
+
+Next, run
+
+ $ node Makefile.dryice.js
+
+This should spew a bunch of stuff to stdout, and create the following files:
+
+* `dist/source-map.js` - The unminified browser version.
+
+* `dist/source-map.min.js` - The minified browser version.
+
+* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source.
+
+## Examples
+
+### Consuming a source map
+
+ var rawSourceMap = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ sourceRoot: 'http://example.com/www/js/',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+
+ var smc = new SourceMapConsumer(rawSourceMap);
+
+ console.log(smc.sources);
+ // [ 'http://example.com/www/js/one.js',
+ // 'http://example.com/www/js/two.js' ]
+
+ console.log(smc.originalPositionFor({
+ line: 2,
+ column: 28
+ }));
+ // { source: 'http://example.com/www/js/two.js',
+ // line: 2,
+ // column: 10,
+ // name: 'n' }
+
+ console.log(smc.generatedPositionFor({
+ source: 'http://example.com/www/js/two.js',
+ line: 2,
+ column: 10
+ }));
+ // { line: 2, column: 28 }
+
+ smc.eachMapping(function (m) {
+ // ...
+ });
+
+### Generating a source map
+
+In depth guide:
+[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
+
+#### With SourceNode (high level API)
+
+ function compile(ast) {
+ switch (ast.type) {
+ case 'BinaryExpression':
+ return new SourceNode(
+ ast.location.line,
+ ast.location.column,
+ ast.location.source,
+ [compile(ast.left), " + ", compile(ast.right)]
+ );
+ case 'Literal':
+ return new SourceNode(
+ ast.location.line,
+ ast.location.column,
+ ast.location.source,
+ String(ast.value)
+ );
+ // ...
+ default:
+ throw new Error("Bad AST");
+ }
+ }
+
+ var ast = parse("40 + 2", "add.js");
+ console.log(compile(ast).toStringWithSourceMap({
+ file: 'add.js'
+ }));
+ // { code: '40 + 2',
+ // map: [object SourceMapGenerator] }
+
+#### With SourceMapGenerator (low level API)
+
+ var map = new SourceMapGenerator({
+ file: "source-mapped.js"
+ });
+
+ map.addMapping({
+ generated: {
+ line: 10,
+ column: 35
+ },
+ source: "foo.js",
+ original: {
+ line: 33,
+ column: 2
+ },
+ name: "christopher"
+ });
+
+ console.log(map.toString());
+ // '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
+
+## API
+
+Get a reference to the module:
+
+ // NodeJS
+ var sourceMap = require('source-map');
+
+ // Browser builds
+ var sourceMap = window.sourceMap;
+
+ // Inside Firefox
+ let sourceMap = {};
+ Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
+
+### SourceMapConsumer
+
+A SourceMapConsumer instance represents a parsed source map which we can query
+for information about the original file positions by giving it a file position
+in the generated source.
+
+#### new SourceMapConsumer(rawSourceMap)
+
+The only parameter is the raw source map (either as a string which can be
+`JSON.parse`'d, or an object). According to the spec, source maps have the
+following attributes:
+
+* `version`: Which version of the source map spec this map is following.
+
+* `sources`: An array of URLs to the original source files.
+
+* `names`: An array of identifiers which can be referrenced by individual
+ mappings.
+
+* `sourceRoot`: Optional. The URL root from which all sources are relative.
+
+* `sourcesContent`: Optional. An array of contents of the original source files.
+
+* `mappings`: A string of base64 VLQs which contain the actual mappings.
+
+* `file`: Optional. The generated filename this source map is associated with.
+
+#### SourceMapConsumer.prototype.computeColumnSpans()
+
+Compute the last column for each generated mapping. The last column is
+inclusive.
+
+#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
+
+Returns the original source, line, and column information for the generated
+source's line and column positions provided. The only argument is an object with
+the following properties:
+
+* `line`: The line number in the generated source.
+
+* `column`: The column number in the generated source.
+
+and an object is returned with the following properties:
+
+* `source`: The original source file, or null if this information is not
+ available.
+
+* `line`: The line number in the original source, or null if this information is
+ not available.
+
+* `column`: The column number in the original source, or null or null if this
+ information is not available.
+
+* `name`: The original identifier, or null if this information is not available.
+
+#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
+
+Returns the generated line and column information for the original source,
+line, and column positions provided. The only argument is an object with
+the following properties:
+
+* `source`: The filename of the original source.
+
+* `line`: The line number in the original source.
+
+* `column`: The column number in the original source.
+
+and an object is returned with the following properties:
+
+* `line`: The line number in the generated source, or null.
+
+* `column`: The column number in the generated source, or null.
+
+#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
+
+Returns all generated line and column information for the original source
+and line provided. The only argument is an object with the following
+properties:
+
+* `source`: The filename of the original source.
+
+* `line`: The line number in the original source.
+
+and an array of objects is returned, each with the following properties:
+
+* `line`: The line number in the generated source, or null.
+
+* `column`: The column number in the generated source, or null.
+
+#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
+
+Returns the original source content for the source provided. The only
+argument is the URL of the original source file.
+
+If the source content for the given source is not found, then an error is
+thrown. Optionally, pass `true` as the second param to have `null` returned
+instead.
+
+#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
+
+Iterate over each mapping between an original source/line/column and a
+generated line/column in this source map.
+
+* `callback`: The function that is called with each mapping. Mappings have the
+ form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
+ name }`
+
+* `context`: Optional. If specified, this object will be the value of `this`
+ every time that `callback` is called.
+
+* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or
+ `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over
+ the mappings sorted by the generated file's line/column order or the
+ original's source/line/column order, respectively. Defaults to
+ `SourceMapConsumer.GENERATED_ORDER`.
+
+### SourceMapGenerator
+
+An instance of the SourceMapGenerator represents a source map which is being
+built incrementally.
+
+#### new SourceMapGenerator([startOfSourceMap])
+
+You may pass an object with the following properties:
+
+* `file`: The filename of the generated source that this source map is
+ associated with.
+
+* `sourceRoot`: A root for all relative URLs in this source map.
+
+* `skipValidation`: Optional. When `true`, disables validation of mappings as
+ they are added. This can improve performance but should be used with
+ discretion, as a last resort. Even then, one should avoid using this flag when
+ running tests, if possible.
+
+#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)
+
+Creates a new SourceMapGenerator based on a SourceMapConsumer
+
+* `sourceMapConsumer` The SourceMap.
+
+#### SourceMapGenerator.prototype.addMapping(mapping)
+
+Add a single mapping from original source line and column to the generated
+source's line and column for this source map being created. The mapping object
+should have the following properties:
+
+* `generated`: An object with the generated line and column positions.
+
+* `original`: An object with the original line and column positions.
+
+* `source`: The original source file (relative to the sourceRoot).
+
+* `name`: An optional original token name for this mapping.
+
+#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
+
+Set the source content for an original source file.
+
+* `sourceFile` the URL of the original source file.
+
+* `sourceContent` the content of the source file.
+
+#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
+
+Applies a SourceMap for a source file to the SourceMap.
+Each mapping to the supplied source file is rewritten using the
+supplied SourceMap. Note: The resolution for the resulting mappings
+is the minimium of this map and the supplied map.
+
+* `sourceMapConsumer`: The SourceMap to be applied.
+
+* `sourceFile`: Optional. The filename of the source file.
+ If omitted, sourceMapConsumer.file will be used, if it exists.
+ Otherwise an error will be thrown.
+
+* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
+ to be applied. If relative, it is relative to the SourceMap.
+
+ This parameter is needed when the two SourceMaps aren't in the same
+ directory, and the SourceMap to be applied contains relative source
+ paths. If so, those relative source paths need to be rewritten
+ relative to the SourceMap.
+
+ If omitted, it is assumed that both SourceMaps are in the same directory,
+ thus not needing any rewriting. (Supplying `'.'` has the same effect.)
+
+#### SourceMapGenerator.prototype.toString()
+
+Renders the source map being generated to a string.
+
+### SourceNode
+
+SourceNodes provide a way to abstract over interpolating and/or concatenating
+snippets of generated JavaScript source code, while maintaining the line and
+column information associated between those snippets and the original source
+code. This is useful as the final intermediate representation a compiler might
+use before outputting the generated JS and source map.
+
+#### new SourceNode([line, column, source[, chunk[, name]]])
+
+* `line`: The original line number associated with this source node, or null if
+ it isn't associated with an original line.
+
+* `column`: The original column number associated with this source node, or null
+ if it isn't associated with an original column.
+
+* `source`: The original source's filename; null if no filename is provided.
+
+* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
+ below.
+
+* `name`: Optional. The original identifier.
+
+#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
+
+Creates a SourceNode from generated code and a SourceMapConsumer.
+
+* `code`: The generated code
+
+* `sourceMapConsumer` The SourceMap for the generated code
+
+* `relativePath` The optional path that relative sources in `sourceMapConsumer`
+ should be relative to.
+
+#### SourceNode.prototype.add(chunk)
+
+Add a chunk of generated JS to this source node.
+
+* `chunk`: A string snippet of generated JS code, another instance of
+ `SourceNode`, or an array where each member is one of those things.
+
+#### SourceNode.prototype.prepend(chunk)
+
+Prepend a chunk of generated JS to this source node.
+
+* `chunk`: A string snippet of generated JS code, another instance of
+ `SourceNode`, or an array where each member is one of those things.
+
+#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
+
+Set the source content for a source file. This will be added to the
+`SourceMap` in the `sourcesContent` field.
+
+* `sourceFile`: The filename of the source file
+
+* `sourceContent`: The content of the source file
+
+#### SourceNode.prototype.walk(fn)
+
+Walk over the tree of JS snippets in this node and its children. The walking
+function is called once for each snippet of JS and is passed that snippet and
+the its original associated source's line/column location.
+
+* `fn`: The traversal function.
+
+#### SourceNode.prototype.walkSourceContents(fn)
+
+Walk over the tree of SourceNodes. The walking function is called for each
+source file content and is passed the filename and source content.
+
+* `fn`: The traversal function.
+
+#### SourceNode.prototype.join(sep)
+
+Like `Array.prototype.join` except for SourceNodes. Inserts the separator
+between each of this source node's children.
+
+* `sep`: The separator.
+
+#### SourceNode.prototype.replaceRight(pattern, replacement)
+
+Call `String.prototype.replace` on the very right-most source snippet. Useful
+for trimming whitespace from the end of a source node, etc.
+
+* `pattern`: The pattern to replace.
+
+* `replacement`: The thing to replace the pattern with.
+
+#### SourceNode.prototype.toString()
+
+Return the string representation of this source node. Walks over the tree and
+concatenates all the various snippets together to one string.
+
+#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
+
+Returns the string representation of this tree of source nodes, plus a
+SourceMapGenerator which contains all the mappings between the generated and
+original sources.
+
+The arguments are the same as those to `new SourceMapGenerator`.
+
+## Tests
+
+[](https://travis-ci.org/mozilla/source-map)
+
+Install NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`.
+
+To add new tests, create a new file named `test/test-.js`
+and export your test functions with names that start with "test", for example
+
+ exports["test doing the foo bar"] = function (assert, util) {
+ ...
+ };
+
+The new test will be located automatically when you run the suite.
+
+The `util` argument is the test utility module located at `test/source-map/util`.
+
+The `assert` argument is a cut down version of node's assert module. You have
+access to the following assertion functions:
+
+* `doesNotThrow`
+
+* `equal`
+
+* `ok`
+
+* `strictEqual`
+
+* `throws`
+
+(The reason for the restricted set of test functions is because we need the
+tests to run inside Firefox's test suite as well and so the assert module is
+shimmed in that environment. See `build/assert-shim.js`.)
+
+[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
+[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap
+[Dryice]: https://github.com/mozilla/dryice
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/assert-shim.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/assert-shim.js
new file mode 100644
index 0000000..daa1a62
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/assert-shim.js
@@ -0,0 +1,56 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+define('test/source-map/assert', ['exports'], function (exports) {
+
+ let do_throw = function (msg) {
+ throw new Error(msg);
+ };
+
+ exports.init = function (throw_fn) {
+ do_throw = throw_fn;
+ };
+
+ exports.doesNotThrow = function (fn) {
+ try {
+ fn();
+ }
+ catch (e) {
+ do_throw(e.message);
+ }
+ };
+
+ exports.equal = function (actual, expected, msg) {
+ msg = msg || String(actual) + ' != ' + String(expected);
+ if (actual != expected) {
+ do_throw(msg);
+ }
+ };
+
+ exports.ok = function (val, msg) {
+ msg = msg || String(val) + ' is falsey';
+ if (!Boolean(val)) {
+ do_throw(msg);
+ }
+ };
+
+ exports.strictEqual = function (actual, expected, msg) {
+ msg = msg || String(actual) + ' !== ' + String(expected);
+ if (actual !== expected) {
+ do_throw(msg);
+ }
+ };
+
+ exports.throws = function (fn) {
+ try {
+ fn();
+ do_throw('Expected an error to be thrown, but it wasn\'t.');
+ }
+ catch (e) {
+ }
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/mini-require.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/mini-require.js
new file mode 100644
index 0000000..0daf453
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/mini-require.js
@@ -0,0 +1,152 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/**
+ * Define a module along with a payload.
+ * @param {string} moduleName Name for the payload
+ * @param {ignored} deps Ignored. For compatibility with CommonJS AMD Spec
+ * @param {function} payload Function with (require, exports, module) params
+ */
+function define(moduleName, deps, payload) {
+ if (typeof moduleName != "string") {
+ throw new TypeError('Expected string, got: ' + moduleName);
+ }
+
+ if (arguments.length == 2) {
+ payload = deps;
+ }
+
+ if (moduleName in define.modules) {
+ throw new Error("Module already defined: " + moduleName);
+ }
+ define.modules[moduleName] = payload;
+};
+
+/**
+ * The global store of un-instantiated modules
+ */
+define.modules = {};
+
+
+/**
+ * We invoke require() in the context of a Domain so we can have multiple
+ * sets of modules running separate from each other.
+ * This contrasts with JSMs which are singletons, Domains allows us to
+ * optionally load a CommonJS module twice with separate data each time.
+ * Perhaps you want 2 command lines with a different set of commands in each,
+ * for example.
+ */
+function Domain() {
+ this.modules = {};
+ this._currentModule = null;
+}
+
+(function () {
+
+ /**
+ * Lookup module names and resolve them by calling the definition function if
+ * needed.
+ * There are 2 ways to call this, either with an array of dependencies and a
+ * callback to call when the dependencies are found (which can happen
+ * asynchronously in an in-page context) or with a single string an no callback
+ * where the dependency is resolved synchronously and returned.
+ * The API is designed to be compatible with the CommonJS AMD spec and
+ * RequireJS.
+ * @param {string[]|string} deps A name, or names for the payload
+ * @param {function|undefined} callback Function to call when the dependencies
+ * are resolved
+ * @return {undefined|object} The module required or undefined for
+ * array/callback method
+ */
+ Domain.prototype.require = function(deps, callback) {
+ if (Array.isArray(deps)) {
+ var params = deps.map(function(dep) {
+ return this.lookup(dep);
+ }, this);
+ if (callback) {
+ callback.apply(null, params);
+ }
+ return undefined;
+ }
+ else {
+ return this.lookup(deps);
+ }
+ };
+
+ function normalize(path) {
+ var bits = path.split('/');
+ var i = 1;
+ while (i < bits.length) {
+ if (bits[i] === '..') {
+ bits.splice(i-1, 1);
+ } else if (bits[i] === '.') {
+ bits.splice(i, 1);
+ } else {
+ i++;
+ }
+ }
+ return bits.join('/');
+ }
+
+ function join(a, b) {
+ a = a.trim();
+ b = b.trim();
+ if (/^\//.test(b)) {
+ return b;
+ } else {
+ return a.replace(/\/*$/, '/') + b;
+ }
+ }
+
+ function dirname(path) {
+ var bits = path.split('/');
+ bits.pop();
+ return bits.join('/');
+ }
+
+ /**
+ * Lookup module names and resolve them by calling the definition function if
+ * needed.
+ * @param {string} moduleName A name for the payload to lookup
+ * @return {object} The module specified by aModuleName or null if not found.
+ */
+ Domain.prototype.lookup = function(moduleName) {
+ if (/^\./.test(moduleName)) {
+ moduleName = normalize(join(dirname(this._currentModule), moduleName));
+ }
+
+ if (moduleName in this.modules) {
+ var module = this.modules[moduleName];
+ return module;
+ }
+
+ if (!(moduleName in define.modules)) {
+ throw new Error("Module not defined: " + moduleName);
+ }
+
+ var module = define.modules[moduleName];
+
+ if (typeof module == "function") {
+ var exports = {};
+ var previousModule = this._currentModule;
+ this._currentModule = moduleName;
+ module(this.require.bind(this), exports, { id: moduleName, uri: "" });
+ this._currentModule = previousModule;
+ module = exports;
+ }
+
+ // cache the resulting module object for next time
+ this.modules[moduleName] = module;
+
+ return module;
+ };
+
+}());
+
+define.Domain = Domain;
+define.globalDomain = new Domain();
+var require = define.globalDomain.require.bind(define.globalDomain);
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm
new file mode 100644
index 0000000..ee2539d
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm
@@ -0,0 +1,20 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/*
+ * WARNING!
+ *
+ * Do not edit this file directly, it is built from the sources at
+ * https://github.com/mozilla/source-map/
+ */
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+this.EXPORTED_SYMBOLS = [ "SourceMapConsumer", "SourceMapGenerator", "SourceNode" ];
+
+Components.utils.import('resource://gre/modules/devtools/Require.jsm');
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm
new file mode 100644
index 0000000..80341d4
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm
@@ -0,0 +1,18 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/*
+ * WARNING!
+ *
+ * Do not edit this file directly, it is built from the sources at
+ * https://github.com/mozilla/source-map/
+ */
+
+Components.utils.import('resource://gre/modules/devtools/Require.jsm');
+Components.utils.import('resource://gre/modules/devtools/SourceMap.jsm');
+
+this.EXPORTED_SYMBOLS = [ "define", "runSourceMapTests" ];
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-browser.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-browser.js
new file mode 100644
index 0000000..fb29ff5
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-browser.js
@@ -0,0 +1,8 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+///////////////////////////////////////////////////////////////////////////////
+
+this.sourceMap = {
+ SourceMapConsumer: require('source-map/source-map-consumer').SourceMapConsumer,
+ SourceMapGenerator: require('source-map/source-map-generator').SourceMapGenerator,
+ SourceNode: require('source-map/source-node').SourceNode
+};
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm
new file mode 100644
index 0000000..cf3c2d8
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm
@@ -0,0 +1,6 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+///////////////////////////////////////////////////////////////////////////////
+
+this.SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer;
+this.SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator;
+this.SourceNode = require('source-map/source-node').SourceNode;
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm
new file mode 100644
index 0000000..b31b84c
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm
@@ -0,0 +1,21 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+function runSourceMapTests(modName, do_throw) {
+ let mod = require(modName);
+ let assert = require('test/source-map/assert');
+ let util = require('test/source-map/util');
+
+ assert.init(do_throw);
+
+ for (let k in mod) {
+ if (/^test/.test(k)) {
+ mod[k](assert, util);
+ }
+ }
+
+}
+this.runSourceMapTests = runSourceMapTests;
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/test-prefix.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/test-prefix.js
new file mode 100644
index 0000000..1b13f30
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/test-prefix.js
@@ -0,0 +1,8 @@
+/*
+ * WARNING!
+ *
+ * Do not edit this file directly, it is built from the sources at
+ * https://github.com/mozilla/source-map/
+ */
+
+Components.utils.import('resource://test/Utils.jsm');
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/test-suffix.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/test-suffix.js
new file mode 100644
index 0000000..bec2de3
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/build/test-suffix.js
@@ -0,0 +1,3 @@
+function run_test() {
+ runSourceMapTests('{THIS_MODULE}', do_throw);
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map.js
new file mode 100644
index 0000000..121ad24
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map.js
@@ -0,0 +1,8 @@
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+exports.SourceMapGenerator = require('./source-map/source-map-generator').SourceMapGenerator;
+exports.SourceMapConsumer = require('./source-map/source-map-consumer').SourceMapConsumer;
+exports.SourceNode = require('./source-map/source-node').SourceNode;
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js
new file mode 100644
index 0000000..40f9a18
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js
@@ -0,0 +1,97 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+
+ /**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+ function ArraySet() {
+ this._array = [];
+ this._set = {};
+ }
+
+ /**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+ var set = new ArraySet();
+ for (var i = 0, len = aArray.length; i < len; i++) {
+ set.add(aArray[i], aAllowDuplicates);
+ }
+ return set;
+ };
+
+ /**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+ var isDuplicate = this.has(aStr);
+ var idx = this._array.length;
+ if (!isDuplicate || aAllowDuplicates) {
+ this._array.push(aStr);
+ }
+ if (!isDuplicate) {
+ this._set[util.toSetString(aStr)] = idx;
+ }
+ };
+
+ /**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.has = function ArraySet_has(aStr) {
+ return Object.prototype.hasOwnProperty.call(this._set,
+ util.toSetString(aStr));
+ };
+
+ /**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+ if (this.has(aStr)) {
+ return this._set[util.toSetString(aStr)];
+ }
+ throw new Error('"' + aStr + '" is not in the set.');
+ };
+
+ /**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ ArraySet.prototype.at = function ArraySet_at(aIdx) {
+ if (aIdx >= 0 && aIdx < this._array.length) {
+ return this._array[aIdx];
+ }
+ throw new Error('No element indexed by ' + aIdx);
+ };
+
+ /**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ ArraySet.prototype.toArray = function ArraySet_toArray() {
+ return this._array.slice();
+ };
+
+ exports.ArraySet = ArraySet;
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js
new file mode 100644
index 0000000..e22dcae
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js
@@ -0,0 +1,142 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var base64 = require('./base64');
+
+ // A single base 64 digit can contain 6 bits of data. For the base 64 variable
+ // length quantities we use in the source map spec, the first bit is the sign,
+ // the next four bits are the actual value, and the 6th bit is the
+ // continuation bit. The continuation bit tells us whether there are more
+ // digits in this value following this digit.
+ //
+ // Continuation
+ // | Sign
+ // | |
+ // V V
+ // 101011
+
+ var VLQ_BASE_SHIFT = 5;
+
+ // binary: 100000
+ var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+
+ // binary: 011111
+ var VLQ_BASE_MASK = VLQ_BASE - 1;
+
+ // binary: 100000
+ var VLQ_CONTINUATION_BIT = VLQ_BASE;
+
+ /**
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+ function toVLQSigned(aValue) {
+ return aValue < 0
+ ? ((-aValue) << 1) + 1
+ : (aValue << 1) + 0;
+ }
+
+ /**
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ */
+ function fromVLQSigned(aValue) {
+ var isNegative = (aValue & 1) === 1;
+ var shifted = aValue >> 1;
+ return isNegative
+ ? -shifted
+ : shifted;
+ }
+
+ /**
+ * Returns the base 64 VLQ encoded value.
+ */
+ exports.encode = function base64VLQ_encode(aValue) {
+ var encoded = "";
+ var digit;
+
+ var vlq = toVLQSigned(aValue);
+
+ do {
+ digit = vlq & VLQ_BASE_MASK;
+ vlq >>>= VLQ_BASE_SHIFT;
+ if (vlq > 0) {
+ // There are still more digits in this value, so we must make sure the
+ // continuation bit is marked.
+ digit |= VLQ_CONTINUATION_BIT;
+ }
+ encoded += base64.encode(digit);
+ } while (vlq > 0);
+
+ return encoded;
+ };
+
+ /**
+ * Decodes the next base 64 VLQ value from the given string and returns the
+ * value and the rest of the string via the out parameter.
+ */
+ exports.decode = function base64VLQ_decode(aStr, aOutParam) {
+ var i = 0;
+ var strLen = aStr.length;
+ var result = 0;
+ var shift = 0;
+ var continuation, digit;
+
+ do {
+ if (i >= strLen) {
+ throw new Error("Expected more digits in base 64 VLQ value.");
+ }
+ digit = base64.decode(aStr.charAt(i++));
+ continuation = !!(digit & VLQ_CONTINUATION_BIT);
+ digit &= VLQ_BASE_MASK;
+ result = result + (digit << shift);
+ shift += VLQ_BASE_SHIFT;
+ } while (continuation);
+
+ aOutParam.value = fromVLQSigned(result);
+ aOutParam.rest = aStr.slice(i);
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js
new file mode 100644
index 0000000..863cc46
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js
@@ -0,0 +1,42 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var charToIntMap = {};
+ var intToCharMap = {};
+
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+ .split('')
+ .forEach(function (ch, index) {
+ charToIntMap[ch] = index;
+ intToCharMap[index] = ch;
+ });
+
+ /**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+ exports.encode = function base64_encode(aNumber) {
+ if (aNumber in intToCharMap) {
+ return intToCharMap[aNumber];
+ }
+ throw new TypeError("Must be between 0 and 63: " + aNumber);
+ };
+
+ /**
+ * Decode a single base 64 digit to an integer.
+ */
+ exports.decode = function base64_decode(aChar) {
+ if (aChar in charToIntMap) {
+ return charToIntMap[aChar];
+ }
+ throw new TypeError("Not a valid base 64 digit: " + aChar);
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/basic-source-map-consumer.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/basic-source-map-consumer.js
new file mode 100644
index 0000000..f2dfb3e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/basic-source-map-consumer.js
@@ -0,0 +1,420 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+ var binarySearch = require('./binary-search');
+ var ArraySet = require('./array-set').ArraySet;
+ var base64VLQ = require('./base64-vlq');
+ var SourceMapConsumer = require('./source-map-consumer').SourceMapConsumer;
+
+ /**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The only parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - sources: An array of URLs to the original source files.
+ * - names: An array of identifiers which can be referrenced by individual mappings.
+ * - sourceRoot: Optional. The URL root from which all sources are relative.
+ * - sourcesContent: Optional. An array of contents of the original source files.
+ * - mappings: A string of base64 VLQs which contain the actual mappings.
+ * - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ * {
+ * version : 3,
+ * file: "out.js",
+ * sourceRoot : "",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AA,AB;;ABCDE;"
+ * }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ */
+ function BasicSourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sources = util.getArg(sourceMap, 'sources');
+ // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+ // requires the array) to play nice here.
+ var names = util.getArg(sourceMap, 'names', []);
+ var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+ var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+ var mappings = util.getArg(sourceMap, 'mappings');
+ var file = util.getArg(sourceMap, 'file', null);
+
+ // Once again, Sass deviates from the spec and supplies the version as a
+ // string rather than a number, so we use loose equality checking here.
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ // Some source maps produce relative source paths like "./foo.js" instead of
+ // "foo.js". Normalize these first so that future comparisons will succeed.
+ // See bugzil.la/1090768.
+ sources = sources.map(util.normalize);
+
+ // Pass `true` below to allow duplicate names and sources. While source maps
+ // are intended to be compressed and deduplicated, the TypeScript compiler
+ // sometimes generates source maps with duplicates in them. See Github issue
+ // #72 and bugzil.la/889492.
+ this._names = ArraySet.fromArray(names, true);
+ this._sources = ArraySet.fromArray(sources, true);
+
+ this.sourceRoot = sourceRoot;
+ this.sourcesContent = sourcesContent;
+ this._mappings = mappings;
+ this.file = file;
+ }
+
+ BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+ BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+
+ /**
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+ *
+ * @param SourceMapGenerator aSourceMap
+ * The source map that will be consumed.
+ * @returns BasicSourceMapConsumer
+ */
+ BasicSourceMapConsumer.fromSourceMap =
+ function SourceMapConsumer_fromSourceMap(aSourceMap) {
+ var smc = Object.create(BasicSourceMapConsumer.prototype);
+
+ smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+ smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+ smc.sourceRoot = aSourceMap._sourceRoot;
+ smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+ smc.sourceRoot);
+ smc.file = aSourceMap._file;
+
+ smc.__generatedMappings = aSourceMap._mappings.toArray().slice();
+ smc.__originalMappings = aSourceMap._mappings.toArray().slice()
+ .sort(util.compareByOriginalPositions);
+
+ return smc;
+ };
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ BasicSourceMapConsumer.prototype._version = 3;
+
+ /**
+ * The list of original sources.
+ */
+ Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ return this._sources.toArray().map(function (s) {
+ return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
+ }, this);
+ }
+ });
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ BasicSourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ var generatedLine = 1;
+ var previousGeneratedColumn = 0;
+ var previousOriginalLine = 0;
+ var previousOriginalColumn = 0;
+ var previousSource = 0;
+ var previousName = 0;
+ var str = aStr;
+ var temp = {};
+ var mapping;
+
+ while (str.length > 0) {
+ if (str.charAt(0) === ';') {
+ generatedLine++;
+ str = str.slice(1);
+ previousGeneratedColumn = 0;
+ }
+ else if (str.charAt(0) === ',') {
+ str = str.slice(1);
+ }
+ else {
+ mapping = {};
+ mapping.generatedLine = generatedLine;
+
+ // Generated column.
+ base64VLQ.decode(str, temp);
+ mapping.generatedColumn = previousGeneratedColumn + temp.value;
+ previousGeneratedColumn = mapping.generatedColumn;
+ str = temp.rest;
+
+ if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) {
+ // Original source.
+ base64VLQ.decode(str, temp);
+ mapping.source = this._sources.at(previousSource + temp.value);
+ previousSource += temp.value;
+ str = temp.rest;
+ if (str.length === 0 || this._nextCharIsMappingSeparator(str)) {
+ throw new Error('Found a source, but no line and column');
+ }
+
+ // Original line.
+ base64VLQ.decode(str, temp);
+ mapping.originalLine = previousOriginalLine + temp.value;
+ previousOriginalLine = mapping.originalLine;
+ // Lines are stored 0-based
+ mapping.originalLine += 1;
+ str = temp.rest;
+ if (str.length === 0 || this._nextCharIsMappingSeparator(str)) {
+ throw new Error('Found a source and line, but no column');
+ }
+
+ // Original column.
+ base64VLQ.decode(str, temp);
+ mapping.originalColumn = previousOriginalColumn + temp.value;
+ previousOriginalColumn = mapping.originalColumn;
+ str = temp.rest;
+
+ if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) {
+ // Original name.
+ base64VLQ.decode(str, temp);
+ mapping.name = this._names.at(previousName + temp.value);
+ previousName += temp.value;
+ str = temp.rest;
+ }
+ }
+
+ this.__generatedMappings.push(mapping);
+ if (typeof mapping.originalLine === 'number') {
+ this.__originalMappings.push(mapping);
+ }
+ }
+ }
+
+ this.__generatedMappings.sort(util.compareByGeneratedPositions);
+ this.__originalMappings.sort(util.compareByOriginalPositions);
+ };
+
+ /**
+ * Find the mapping that best matches the hypothetical "needle" mapping that
+ * we are searching for in the given "haystack" of mappings.
+ */
+ BasicSourceMapConsumer.prototype._findMapping =
+ function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+ aColumnName, aComparator) {
+ // To return the position we are searching for, we must first find the
+ // mapping for the given position and then return the opposite position it
+ // points to. Because the mappings are sorted, we can use binary search to
+ // find the best mapping.
+
+ if (aNeedle[aLineName] <= 0) {
+ throw new TypeError('Line must be greater than or equal to 1, got '
+ + aNeedle[aLineName]);
+ }
+ if (aNeedle[aColumnName] < 0) {
+ throw new TypeError('Column must be greater than or equal to 0, got '
+ + aNeedle[aColumnName]);
+ }
+
+ return binarySearch.search(aNeedle, aMappings, aComparator);
+ };
+
+ /**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+ BasicSourceMapConsumer.prototype.computeColumnSpans =
+ function SourceMapConsumer_computeColumnSpans() {
+ for (var index = 0; index < this._generatedMappings.length; ++index) {
+ var mapping = this._generatedMappings[index];
+
+ // Mappings do not contain a field for the last generated columnt. We
+ // can come up with an optimistic estimate, however, by assuming that
+ // mappings are contiguous (i.e. given two consecutive mappings, the
+ // first mapping ends where the second one starts).
+ if (index + 1 < this._generatedMappings.length) {
+ var nextMapping = this._generatedMappings[index + 1];
+
+ if (mapping.generatedLine === nextMapping.generatedLine) {
+ mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+ continue;
+ }
+ }
+
+ // The last mapping for each line spans the entire line.
+ mapping.lastGeneratedColumn = Infinity;
+ }
+ };
+
+ /**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source.
+ * - column: The column number in the generated source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null.
+ * - column: The column number in the original source, or null.
+ * - name: The original identifier, or null.
+ */
+ BasicSourceMapConsumer.prototype.originalPositionFor =
+ function SourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ var index = this._findMapping(needle,
+ this._generatedMappings,
+ "generatedLine",
+ "generatedColumn",
+ util.compareByGeneratedPositions);
+
+ if (index >= 0) {
+ var mapping = this._generatedMappings[index];
+
+ if (mapping.generatedLine === needle.generatedLine) {
+ var source = util.getArg(mapping, 'source', null);
+ if (source != null && this.sourceRoot != null) {
+ source = util.join(this.sourceRoot, source);
+ }
+ return {
+ source: source,
+ line: util.getArg(mapping, 'originalLine', null),
+ column: util.getArg(mapping, 'originalColumn', null),
+ name: util.getArg(mapping, 'name', null)
+ };
+ }
+ }
+
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ };
+
+ /**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * availible.
+ */
+ BasicSourceMapConsumer.prototype.sourceContentFor =
+ function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ if (!this.sourcesContent) {
+ return null;
+ }
+
+ if (this.sourceRoot != null) {
+ aSource = util.relative(this.sourceRoot, aSource);
+ }
+
+ if (this._sources.has(aSource)) {
+ return this.sourcesContent[this._sources.indexOf(aSource)];
+ }
+
+ var url;
+ if (this.sourceRoot != null
+ && (url = util.urlParse(this.sourceRoot))) {
+ // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+ // many users. We can help them out when they expect file:// URIs to
+ // behave like it would if they were running a local HTTP server. See
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+ var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
+ if (url.scheme == "file"
+ && this._sources.has(fileUriAbsPath)) {
+ return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+ }
+
+ if ((!url.path || url.path == "/")
+ && this._sources.has("/" + aSource)) {
+ return this.sourcesContent[this._sources.indexOf("/" + aSource)];
+ }
+ }
+
+ // This function is used recursively from
+ // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+ // don't want to throw if we can't find the source - we just want to
+ // return null, so we provide a flag to exit gracefully.
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+ /**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: The column number in the original source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ BasicSourceMapConsumer.prototype.generatedPositionFor =
+ function SourceMapConsumer_generatedPositionFor(aArgs) {
+ var needle = {
+ source: util.getArg(aArgs, 'source'),
+ originalLine: util.getArg(aArgs, 'line'),
+ originalColumn: util.getArg(aArgs, 'column')
+ };
+
+ if (this.sourceRoot != null) {
+ needle.source = util.relative(this.sourceRoot, needle.source);
+ }
+
+ var index = this._findMapping(needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions);
+
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ return {
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ };
+ }
+
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ };
+
+ exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js
new file mode 100644
index 0000000..e085f81
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js
@@ -0,0 +1,80 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ /**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ */
+ function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) {
+ // This function terminates when one of the following is true:
+ //
+ // 1. We find the exact element we are looking for.
+ //
+ // 2. We did not find the exact element, but we can return the index of
+ // the next closest element that is less than that element.
+ //
+ // 3. We did not find the exact element, and there is no next-closest
+ // element which is less than the one we are searching for, so we
+ // return -1.
+ var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+ var cmp = aCompare(aNeedle, aHaystack[mid], true);
+ if (cmp === 0) {
+ // Found the element we are looking for.
+ return mid;
+ }
+ else if (cmp > 0) {
+ // aHaystack[mid] is greater than our needle.
+ if (aHigh - mid > 1) {
+ // The element is in the upper half.
+ return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare);
+ }
+ // We did not find an exact match, return the next closest one
+ // (termination case 2).
+ return mid;
+ }
+ else {
+ // aHaystack[mid] is less than our needle.
+ if (mid - aLow > 1) {
+ // The element is in the lower half.
+ return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare);
+ }
+ // The exact needle element was not found in this haystack. Determine if
+ // we are in termination case (2) or (3) and return the appropriate thing.
+ return aLow < 0 ? -1 : aLow;
+ }
+ }
+
+ /**
+ * This is an implementation of binary search which will always try and return
+ * the index of next lowest value checked if there is no exact hit. This is
+ * because mappings between original and generated line/col pairs are single
+ * points, and there is an implicit region between each of them, so a miss
+ * just means that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ * array and returns -1, 0, or 1 depending on whether the needle is less
+ * than, equal to, or greater than the element, respectively.
+ */
+ exports.search = function search(aNeedle, aHaystack, aCompare) {
+ if (aHaystack.length === 0) {
+ return -1;
+ }
+ return recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare)
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/indexed-source-map-consumer.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/indexed-source-map-consumer.js
new file mode 100644
index 0000000..c6449cd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/indexed-source-map-consumer.js
@@ -0,0 +1,303 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+ var binarySearch = require('./binary-search');
+ var SourceMapConsumer = require('./source-map-consumer').SourceMapConsumer;
+ var BasicSourceMapConsumer = require('./basic-source-map-consumer').BasicSourceMapConsumer;
+
+ /**
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The only parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - file: Optional. The generated file this source map is associated with.
+ * - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ * - offset: The offset into the original specified at which this section
+ * begins to apply, defined as an object with a "line" and "column"
+ * field.
+ * - map: A source map definition. This source map could also be indexed,
+ * but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ * {
+ * version : 3,
+ * file: "app.js",
+ * sections: [{
+ * offset: {line:100, column:10},
+ * map: {
+ * version : 3,
+ * file: "section.js",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AAAA,E;;ABCDE;"
+ * }
+ * }],
+ * }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+ function IndexedSourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sections = util.getArg(sourceMap, 'sections');
+
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ var lastOffset = {
+ line: -1,
+ column: 0
+ };
+ this._sections = sections.map(function (s) {
+ if (s.url) {
+ // The url field will require support for asynchronicity.
+ // See https://github.com/mozilla/source-map/issues/16
+ throw new Error('Support for url field in sections not implemented.');
+ }
+ var offset = util.getArg(s, 'offset');
+ var offsetLine = util.getArg(offset, 'line');
+ var offsetColumn = util.getArg(offset, 'column');
+
+ if (offsetLine < lastOffset.line ||
+ (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+ throw new Error('Section offsets must be ordered and non-overlapping.');
+ }
+ lastOffset = offset;
+
+ return {
+ generatedOffset: {
+ // The offset fields are 0-based, but we use 1-based indices when
+ // encoding/decoding from VLQ.
+ generatedLine: offsetLine + 1,
+ generatedColumn: offsetColumn + 1
+ },
+ consumer: new SourceMapConsumer(util.getArg(s, 'map'))
+ }
+ });
+ }
+
+ IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+ IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ IndexedSourceMapConsumer.prototype._version = 3;
+
+ /**
+ * The list of original sources.
+ */
+ Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ var sources = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+ sources.push(this._sections[i].consumer.sources[j]);
+ }
+ };
+ return sources;
+ }
+ });
+
+ /**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source.
+ * - column: The column number in the generated source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null.
+ * - column: The column number in the original source, or null.
+ * - name: The original identifier, or null.
+ */
+ IndexedSourceMapConsumer.prototype.originalPositionFor =
+ function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ // Find the section containing the generated position we're trying to map
+ // to an original position.
+ var sectionIndex = binarySearch.search(needle, this._sections,
+ function(needle, section) {
+ var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ return (needle.generatedColumn -
+ section.generatedOffset.generatedColumn);
+ });
+ var section = this._sections[sectionIndex];
+
+ if (!section) {
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ }
+
+ return section.consumer.originalPositionFor({
+ line: needle.generatedLine -
+ (section.generatedOffset.generatedLine - 1),
+ column: needle.generatedColumn -
+ (section.generatedOffset.generatedLine === needle.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0)
+ });
+ };
+
+ /**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+ IndexedSourceMapConsumer.prototype.sourceContentFor =
+ function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ var content = section.consumer.sourceContentFor(aSource, true);
+ if (content) {
+ return content;
+ }
+ }
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+ /**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: The column number in the original source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ IndexedSourceMapConsumer.prototype.generatedPositionFor =
+ function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ // Only consider this section if the requested source is in the list of
+ // sources of the consumer.
+ if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
+ continue;
+ }
+ var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+ if (generatedPosition) {
+ var ret = {
+ line: generatedPosition.line +
+ (section.generatedOffset.generatedLine - 1),
+ column: generatedPosition.column +
+ (section.generatedOffset.generatedLine === generatedPosition.line
+ ? section.generatedOffset.generatedColumn - 1
+ : 0)
+ };
+ return ret;
+ }
+ }
+
+ return {
+ line: null,
+ column: null
+ };
+ };
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ IndexedSourceMapConsumer.prototype._parseMappings =
+ function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+ var sectionMappings = section.consumer._generatedMappings;
+ for (var j = 0; j < sectionMappings.length; j++) {
+ var mapping = sectionMappings[i];
+
+ var source = mapping.source;
+ var sourceRoot = section.consumer.sourceRoot;
+
+ if (source != null && sourceRoot != null) {
+ source = util.join(sourceRoot, source);
+ }
+
+ // The mappings coming from the consumer for the section have
+ // generated positions relative to the start of the section, so we
+ // need to offset them to be relative to the start of the concatenated
+ // generated file.
+ var adjustedMapping = {
+ source: source,
+ generatedLine: mapping.generatedLine +
+ (section.generatedOffset.generatedLine - 1),
+ generatedColumn: mapping.column +
+ (section.generatedOffset.generatedLine === mapping.generatedLine)
+ ? section.generatedOffset.generatedColumn - 1
+ : 0,
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: mapping.name
+ };
+
+ this.__generatedMappings.push(adjustedMapping);
+ if (typeof adjustedMapping.originalLine === 'number') {
+ this.__originalMappings.push(adjustedMapping);
+ }
+ };
+ };
+
+ this.__generatedMappings.sort(util.compareByGeneratedPositions);
+ this.__originalMappings.sort(util.compareByOriginalPositions);
+ };
+
+ exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/mapping-list.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/mapping-list.js
new file mode 100644
index 0000000..2a4eb61
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/mapping-list.js
@@ -0,0 +1,86 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+
+ /**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+ function generatedPositionAfter(mappingA, mappingB) {
+ // Optimized for most common case
+ var lineA = mappingA.generatedLine;
+ var lineB = mappingB.generatedLine;
+ var columnA = mappingA.generatedColumn;
+ var columnB = mappingB.generatedColumn;
+ return lineB > lineA || lineB == lineA && columnB >= columnA ||
+ util.compareByGeneratedPositions(mappingA, mappingB) <= 0;
+ }
+
+ /**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a neglibable overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+ function MappingList() {
+ this._array = [];
+ this._sorted = true;
+ // Serves as infimum
+ this._last = {generatedLine: -1, generatedColumn: 0};
+ }
+
+ /**
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
+ */
+ MappingList.prototype.unsortedForEach =
+ function MappingList_forEach(aCallback, aThisArg) {
+ this._array.forEach(aCallback, aThisArg);
+ };
+
+ /**
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
+ */
+ MappingList.prototype.add = function MappingList_add(aMapping) {
+ var mapping;
+ if (generatedPositionAfter(this._last, aMapping)) {
+ this._last = aMapping;
+ this._array.push(aMapping);
+ } else {
+ this._sorted = false;
+ this._array.push(aMapping);
+ }
+ };
+
+ /**
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
+ *
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
+ */
+ MappingList.prototype.toArray = function MappingList_toArray() {
+ if (!this._sorted) {
+ this._array.sort(util.compareByGeneratedPositions);
+ this._sorted = true;
+ }
+ return this._array;
+ };
+
+ exports.MappingList = MappingList;
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js
new file mode 100644
index 0000000..f3abade
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js
@@ -0,0 +1,222 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+
+ function SourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ // We do late requires because the subclasses require() this file.
+ if (sourceMap.sections != null) {
+ var indexedSourceMapConsumer = require('./indexed-source-map-consumer');
+ return new indexedSourceMapConsumer.IndexedSourceMapConsumer(sourceMap);
+ } else {
+ var basicSourceMapConsumer = require('./basic-source-map-consumer');
+ return new basicSourceMapConsumer.BasicSourceMapConsumer(sourceMap);
+ }
+ }
+
+ SourceMapConsumer.fromSourceMap = function(aSourceMap) {
+ var basicSourceMapConsumer = require('./basic-source-map-consumer');
+ return basicSourceMapConsumer.BasicSourceMapConsumer
+ .fromSourceMap(aSourceMap);
+ }
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ SourceMapConsumer.prototype._version = 3;
+
+
+ // `__generatedMappings` and `__originalMappings` are arrays that hold the
+ // parsed mapping coordinates from the source map's "mappings" attribute. They
+ // are lazily instantiated, accessed via the `_generatedMappings` and
+ // `_originalMappings` getters respectively, and we only parse the mappings
+ // and create these arrays once queried for a source location. We jump through
+ // these hoops because there can be many thousands of mappings, and parsing
+ // them is expensive, so we only want to do it if we must.
+ //
+ // Each object in the arrays is of the form:
+ //
+ // {
+ // generatedLine: The line number in the generated code,
+ // generatedColumn: The column number in the generated code,
+ // source: The path to the original source file that generated this
+ // chunk of code,
+ // originalLine: The line number in the original source that
+ // corresponds to this chunk of generated code,
+ // originalColumn: The column number in the original source that
+ // corresponds to this chunk of generated code,
+ // name: The name of the original symbol which generated this chunk of
+ // code.
+ // }
+ //
+ // All properties except for `generatedLine` and `generatedColumn` can be
+ // `null`.
+ //
+ // `_generatedMappings` is ordered by the generated positions.
+ //
+ // `_originalMappings` is ordered by the original positions.
+
+ SourceMapConsumer.prototype.__generatedMappings = null;
+ Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+ get: function () {
+ if (!this.__generatedMappings) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__generatedMappings;
+ }
+ });
+
+ SourceMapConsumer.prototype.__originalMappings = null;
+ Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+ get: function () {
+ if (!this.__originalMappings) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__originalMappings;
+ }
+ });
+
+ SourceMapConsumer.prototype._nextCharIsMappingSeparator =
+ function SourceMapConsumer_nextCharIsMappingSeparator(aStr) {
+ var c = aStr.charAt(0);
+ return c === ";" || c === ",";
+ };
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ SourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ throw new Error("Subclasses must implement _parseMappings");
+ };
+
+ SourceMapConsumer.GENERATED_ORDER = 1;
+ SourceMapConsumer.ORIGINAL_ORDER = 2;
+
+ /**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ * The function that is called with each mapping.
+ * @param Object aContext
+ * Optional. If specified, this object will be the value of `this` every
+ * time that `aCallback` is called.
+ * @param aOrder
+ * Either `SourceMapConsumer.GENERATED_ORDER` or
+ * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ * iterate over the mappings sorted by the generated file's line/column
+ * order or the original's source/line/column order, respectively. Defaults to
+ * `SourceMapConsumer.GENERATED_ORDER`.
+ */
+ SourceMapConsumer.prototype.eachMapping =
+ function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+ var context = aContext || null;
+ var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+ var mappings;
+ switch (order) {
+ case SourceMapConsumer.GENERATED_ORDER:
+ mappings = this._generatedMappings;
+ break;
+ case SourceMapConsumer.ORIGINAL_ORDER:
+ mappings = this._originalMappings;
+ break;
+ default:
+ throw new Error("Unknown order of iteration.");
+ }
+
+ var sourceRoot = this.sourceRoot;
+ mappings.map(function (mapping) {
+ var source = mapping.source;
+ if (source != null && sourceRoot != null) {
+ source = util.join(sourceRoot, source);
+ }
+ return {
+ source: source,
+ generatedLine: mapping.generatedLine,
+ generatedColumn: mapping.generatedColumn,
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: mapping.name
+ };
+ }).forEach(aCallback, context);
+ };
+
+ /**
+ * Returns all generated line and column information for the original source
+ * and line provided. The only argument is an object with the following
+ * properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ SourceMapConsumer.prototype.allGeneratedPositionsFor =
+ function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+ // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+ // returns the index of the closest mapping less than the needle. By
+ // setting needle.originalColumn to Infinity, we thus find the last
+ // mapping for the given line, provided such a mapping exists.
+ var needle = {
+ source: util.getArg(aArgs, 'source'),
+ originalLine: util.getArg(aArgs, 'line'),
+ originalColumn: Infinity
+ };
+
+ if (this.sourceRoot != null) {
+ needle.source = util.relative(this.sourceRoot, needle.source);
+ }
+
+ var mappings = [];
+
+ var index = this._findMapping(needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions);
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ while (mapping && mapping.originalLine === needle.originalLine) {
+ mappings.push({
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ });
+
+ mapping = this._originalMappings[--index];
+ }
+ }
+
+ return mappings.reverse();
+ };
+
+ exports.SourceMapConsumer = SourceMapConsumer;
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js
new file mode 100644
index 0000000..1ab7a47
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js
@@ -0,0 +1,400 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var base64VLQ = require('./base64-vlq');
+ var util = require('./util');
+ var ArraySet = require('./array-set').ArraySet;
+ var MappingList = require('./mapping-list').MappingList;
+
+ /**
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ * - file: The filename of the generated source.
+ * - sourceRoot: A root for all relative URLs in this source map.
+ */
+ function SourceMapGenerator(aArgs) {
+ if (!aArgs) {
+ aArgs = {};
+ }
+ this._file = util.getArg(aArgs, 'file', null);
+ this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+ this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+ this._mappings = new MappingList();
+ this._sourcesContents = null;
+ }
+
+ SourceMapGenerator.prototype._version = 3;
+
+ /**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+ SourceMapGenerator.fromSourceMap =
+ function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+ var sourceRoot = aSourceMapConsumer.sourceRoot;
+ var generator = new SourceMapGenerator({
+ file: aSourceMapConsumer.file,
+ sourceRoot: sourceRoot
+ });
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ var newMapping = {
+ generated: {
+ line: mapping.generatedLine,
+ column: mapping.generatedColumn
+ }
+ };
+
+ if (mapping.source != null) {
+ newMapping.source = mapping.source;
+ if (sourceRoot != null) {
+ newMapping.source = util.relative(sourceRoot, newMapping.source);
+ }
+
+ newMapping.original = {
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ };
+
+ if (mapping.name != null) {
+ newMapping.name = mapping.name;
+ }
+ }
+
+ generator.addMapping(newMapping);
+ });
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ generator.setSourceContent(sourceFile, content);
+ }
+ });
+ return generator;
+ };
+
+ /**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ * - generated: An object with the generated line and column positions.
+ * - original: An object with the original line and column positions.
+ * - source: The original source file (relative to the sourceRoot).
+ * - name: An optional original token name for this mapping.
+ */
+ SourceMapGenerator.prototype.addMapping =
+ function SourceMapGenerator_addMapping(aArgs) {
+ var generated = util.getArg(aArgs, 'generated');
+ var original = util.getArg(aArgs, 'original', null);
+ var source = util.getArg(aArgs, 'source', null);
+ var name = util.getArg(aArgs, 'name', null);
+
+ if (!this._skipValidation) {
+ this._validateMapping(generated, original, source, name);
+ }
+
+ if (source != null && !this._sources.has(source)) {
+ this._sources.add(source);
+ }
+
+ if (name != null && !this._names.has(name)) {
+ this._names.add(name);
+ }
+
+ this._mappings.add({
+ generatedLine: generated.line,
+ generatedColumn: generated.column,
+ originalLine: original != null && original.line,
+ originalColumn: original != null && original.column,
+ source: source,
+ name: name
+ });
+ };
+
+ /**
+ * Set the source content for a source file.
+ */
+ SourceMapGenerator.prototype.setSourceContent =
+ function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+ var source = aSourceFile;
+ if (this._sourceRoot != null) {
+ source = util.relative(this._sourceRoot, source);
+ }
+
+ if (aSourceContent != null) {
+ // Add the source content to the _sourcesContents map.
+ // Create a new _sourcesContents map if the property is null.
+ if (!this._sourcesContents) {
+ this._sourcesContents = {};
+ }
+ this._sourcesContents[util.toSetString(source)] = aSourceContent;
+ } else if (this._sourcesContents) {
+ // Remove the source file from the _sourcesContents map.
+ // If the _sourcesContents map is empty, set the property to null.
+ delete this._sourcesContents[util.toSetString(source)];
+ if (Object.keys(this._sourcesContents).length === 0) {
+ this._sourcesContents = null;
+ }
+ }
+ };
+
+ /**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ * If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ * to be applied. If relative, it is relative to the SourceMapConsumer.
+ * This parameter is needed when the two source maps aren't in the same
+ * directory, and the source map to be applied contains relative source
+ * paths. If so, those relative source paths need to be rewritten
+ * relative to the SourceMapGenerator.
+ */
+ SourceMapGenerator.prototype.applySourceMap =
+ function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+ var sourceFile = aSourceFile;
+ // If aSourceFile is omitted, we will use the file property of the SourceMap
+ if (aSourceFile == null) {
+ if (aSourceMapConsumer.file == null) {
+ throw new Error(
+ 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+ 'or the source map\'s "file" property. Both were omitted.'
+ );
+ }
+ sourceFile = aSourceMapConsumer.file;
+ }
+ var sourceRoot = this._sourceRoot;
+ // Make "sourceFile" relative if an absolute Url is passed.
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ // Applying the SourceMap can add and remove items from the sources and
+ // the names array.
+ var newSources = new ArraySet();
+ var newNames = new ArraySet();
+
+ // Find mappings for the "sourceFile"
+ this._mappings.unsortedForEach(function (mapping) {
+ if (mapping.source === sourceFile && mapping.originalLine != null) {
+ // Check if it can be mapped by the source map, then update the mapping.
+ var original = aSourceMapConsumer.originalPositionFor({
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ });
+ if (original.source != null) {
+ // Copy mapping
+ mapping.source = original.source;
+ if (aSourceMapPath != null) {
+ mapping.source = util.join(aSourceMapPath, mapping.source)
+ }
+ if (sourceRoot != null) {
+ mapping.source = util.relative(sourceRoot, mapping.source);
+ }
+ mapping.originalLine = original.line;
+ mapping.originalColumn = original.column;
+ if (original.name != null) {
+ mapping.name = original.name;
+ }
+ }
+ }
+
+ var source = mapping.source;
+ if (source != null && !newSources.has(source)) {
+ newSources.add(source);
+ }
+
+ var name = mapping.name;
+ if (name != null && !newNames.has(name)) {
+ newNames.add(name);
+ }
+
+ }, this);
+ this._sources = newSources;
+ this._names = newNames;
+
+ // Copy sourcesContents of applied map.
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aSourceMapPath != null) {
+ sourceFile = util.join(aSourceMapPath, sourceFile);
+ }
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ this.setSourceContent(sourceFile, content);
+ }
+ }, this);
+ };
+
+ /**
+ * A mapping can have one of the three levels of data:
+ *
+ * 1. Just the generated position.
+ * 2. The Generated position, original position, and original source.
+ * 3. Generated and original position, original source, as well as a name
+ * token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+ SourceMapGenerator.prototype._validateMapping =
+ function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+ aName) {
+ if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && !aOriginal && !aSource && !aName) {
+ // Case 1.
+ return;
+ }
+ else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && aOriginal.line > 0 && aOriginal.column >= 0
+ && aSource) {
+ // Cases 2 and 3.
+ return;
+ }
+ else {
+ throw new Error('Invalid mapping: ' + JSON.stringify({
+ generated: aGenerated,
+ source: aSource,
+ original: aOriginal,
+ name: aName
+ }));
+ }
+ };
+
+ /**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+ SourceMapGenerator.prototype._serializeMappings =
+ function SourceMapGenerator_serializeMappings() {
+ var previousGeneratedColumn = 0;
+ var previousGeneratedLine = 1;
+ var previousOriginalColumn = 0;
+ var previousOriginalLine = 0;
+ var previousName = 0;
+ var previousSource = 0;
+ var result = '';
+ var mapping;
+
+ var mappings = this._mappings.toArray();
+
+ for (var i = 0, len = mappings.length; i < len; i++) {
+ mapping = mappings[i];
+
+ if (mapping.generatedLine !== previousGeneratedLine) {
+ previousGeneratedColumn = 0;
+ while (mapping.generatedLine !== previousGeneratedLine) {
+ result += ';';
+ previousGeneratedLine++;
+ }
+ }
+ else {
+ if (i > 0) {
+ if (!util.compareByGeneratedPositions(mapping, mappings[i - 1])) {
+ continue;
+ }
+ result += ',';
+ }
+ }
+
+ result += base64VLQ.encode(mapping.generatedColumn
+ - previousGeneratedColumn);
+ previousGeneratedColumn = mapping.generatedColumn;
+
+ if (mapping.source != null) {
+ result += base64VLQ.encode(this._sources.indexOf(mapping.source)
+ - previousSource);
+ previousSource = this._sources.indexOf(mapping.source);
+
+ // lines are stored 0-based in SourceMap spec version 3
+ result += base64VLQ.encode(mapping.originalLine - 1
+ - previousOriginalLine);
+ previousOriginalLine = mapping.originalLine - 1;
+
+ result += base64VLQ.encode(mapping.originalColumn
+ - previousOriginalColumn);
+ previousOriginalColumn = mapping.originalColumn;
+
+ if (mapping.name != null) {
+ result += base64VLQ.encode(this._names.indexOf(mapping.name)
+ - previousName);
+ previousName = this._names.indexOf(mapping.name);
+ }
+ }
+ }
+
+ return result;
+ };
+
+ SourceMapGenerator.prototype._generateSourcesContent =
+ function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+ return aSources.map(function (source) {
+ if (!this._sourcesContents) {
+ return null;
+ }
+ if (aSourceRoot != null) {
+ source = util.relative(aSourceRoot, source);
+ }
+ var key = util.toSetString(source);
+ return Object.prototype.hasOwnProperty.call(this._sourcesContents,
+ key)
+ ? this._sourcesContents[key]
+ : null;
+ }, this);
+ };
+
+ /**
+ * Externalize the source map.
+ */
+ SourceMapGenerator.prototype.toJSON =
+ function SourceMapGenerator_toJSON() {
+ var map = {
+ version: this._version,
+ sources: this._sources.toArray(),
+ names: this._names.toArray(),
+ mappings: this._serializeMappings()
+ };
+ if (this._file != null) {
+ map.file = this._file;
+ }
+ if (this._sourceRoot != null) {
+ map.sourceRoot = this._sourceRoot;
+ }
+ if (this._sourcesContents) {
+ map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+ }
+
+ return map;
+ };
+
+ /**
+ * Render the source map being generated to a string.
+ */
+ SourceMapGenerator.prototype.toString =
+ function SourceMapGenerator_toString() {
+ return JSON.stringify(this);
+ };
+
+ exports.SourceMapGenerator = SourceMapGenerator;
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js
new file mode 100644
index 0000000..9ee90bd
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js
@@ -0,0 +1,414 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
+ var util = require('./util');
+
+ // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+ // operating systems these days (capturing the result).
+ var REGEX_NEWLINE = /(\r?\n)/;
+
+ // Newline character code for charCodeAt() comparisons
+ var NEWLINE_CODE = 10;
+
+ // Private symbol for identifying `SourceNode`s when multiple versions of
+ // the source-map library are loaded. This MUST NOT CHANGE across
+ // versions!
+ var isSourceNode = "$$$isSourceNode$$$";
+
+ /**
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ * generated JS, or other SourceNodes.
+ * @param aName The original identifier.
+ */
+ function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+ this.children = [];
+ this.sourceContents = {};
+ this.line = aLine == null ? null : aLine;
+ this.column = aColumn == null ? null : aColumn;
+ this.source = aSource == null ? null : aSource;
+ this.name = aName == null ? null : aName;
+ this[isSourceNode] = true;
+ if (aChunks != null) this.add(aChunks);
+ }
+
+ /**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ * SourceMapConsumer should be relative to.
+ */
+ SourceNode.fromStringWithSourceMap =
+ function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+ // The SourceNode we want to fill with the generated code
+ // and the SourceMap
+ var node = new SourceNode();
+
+ // All even indices of this array are one line of the generated code,
+ // while all odd indices are the newlines between two adjacent lines
+ // (since `REGEX_NEWLINE` captures its match).
+ // Processed fragments are removed from this array, by calling `shiftNextLine`.
+ var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+ var shiftNextLine = function() {
+ var lineContents = remainingLines.shift();
+ // The last line of a file might not have a newline.
+ var newLine = remainingLines.shift() || "";
+ return lineContents + newLine;
+ };
+
+ // We need to remember the position of "remainingLines"
+ var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+
+ // The generate SourceNodes we need a code range.
+ // To extract it current and last mapping is used.
+ // Here we store the last mapping.
+ var lastMapping = null;
+
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ if (lastMapping !== null) {
+ // We add the code from "lastMapping" to "mapping":
+ // First check if there is a new line in between.
+ if (lastGeneratedLine < mapping.generatedLine) {
+ var code = "";
+ // Associate first line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ lastGeneratedLine++;
+ lastGeneratedColumn = 0;
+ // The remaining code is added without mapping
+ } else {
+ // There is no new line in between.
+ // Associate the code between "lastGeneratedColumn" and
+ // "mapping.generatedColumn" with "lastMapping"
+ var nextLine = remainingLines[0];
+ var code = nextLine.substr(0, mapping.generatedColumn -
+ lastGeneratedColumn);
+ remainingLines[0] = nextLine.substr(mapping.generatedColumn -
+ lastGeneratedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ addMappingWithCode(lastMapping, code);
+ // No more remaining code, continue
+ lastMapping = mapping;
+ return;
+ }
+ }
+ // We add the generated code until the first mapping
+ // to the SourceNode without any mapping.
+ // Each line is added as separate string.
+ while (lastGeneratedLine < mapping.generatedLine) {
+ node.add(shiftNextLine());
+ lastGeneratedLine++;
+ }
+ if (lastGeneratedColumn < mapping.generatedColumn) {
+ var nextLine = remainingLines[0];
+ node.add(nextLine.substr(0, mapping.generatedColumn));
+ remainingLines[0] = nextLine.substr(mapping.generatedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ }
+ lastMapping = mapping;
+ }, this);
+ // We have processed all mappings.
+ if (remainingLines.length > 0) {
+ if (lastMapping) {
+ // Associate the remaining code in the current line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ }
+ // and add the remaining lines without any mapping
+ node.add(remainingLines.join(""));
+ }
+
+ // Copy sourcesContent into SourceNode
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aRelativePath != null) {
+ sourceFile = util.join(aRelativePath, sourceFile);
+ }
+ node.setSourceContent(sourceFile, content);
+ }
+ });
+
+ return node;
+
+ function addMappingWithCode(mapping, code) {
+ if (mapping === null || mapping.source === undefined) {
+ node.add(code);
+ } else {
+ var source = aRelativePath
+ ? util.join(aRelativePath, mapping.source)
+ : mapping.source;
+ node.add(new SourceNode(mapping.originalLine,
+ mapping.originalColumn,
+ source,
+ code,
+ mapping.name));
+ }
+ }
+ };
+
+ /**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+ SourceNode.prototype.add = function SourceNode_add(aChunk) {
+ if (Array.isArray(aChunk)) {
+ aChunk.forEach(function (chunk) {
+ this.add(chunk);
+ }, this);
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ if (aChunk) {
+ this.children.push(aChunk);
+ }
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+ };
+
+ /**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+ SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+ if (Array.isArray(aChunk)) {
+ for (var i = aChunk.length-1; i >= 0; i--) {
+ this.prepend(aChunk[i]);
+ }
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ this.children.unshift(aChunk);
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+ };
+
+ /**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+ SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+ var chunk;
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ chunk = this.children[i];
+ if (chunk[isSourceNode]) {
+ chunk.walk(aFn);
+ }
+ else {
+ if (chunk !== '') {
+ aFn(chunk, { source: this.source,
+ line: this.line,
+ column: this.column,
+ name: this.name });
+ }
+ }
+ }
+ };
+
+ /**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+ SourceNode.prototype.join = function SourceNode_join(aSep) {
+ var newChildren;
+ var i;
+ var len = this.children.length;
+ if (len > 0) {
+ newChildren = [];
+ for (i = 0; i < len-1; i++) {
+ newChildren.push(this.children[i]);
+ newChildren.push(aSep);
+ }
+ newChildren.push(this.children[i]);
+ this.children = newChildren;
+ }
+ return this;
+ };
+
+ /**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+ SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+ var lastChild = this.children[this.children.length - 1];
+ if (lastChild[isSourceNode]) {
+ lastChild.replaceRight(aPattern, aReplacement);
+ }
+ else if (typeof lastChild === 'string') {
+ this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+ }
+ else {
+ this.children.push(''.replace(aPattern, aReplacement));
+ }
+ return this;
+ };
+
+ /**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+ SourceNode.prototype.setSourceContent =
+ function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+ this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+ };
+
+ /**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+ SourceNode.prototype.walkSourceContents =
+ function SourceNode_walkSourceContents(aFn) {
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ if (this.children[i][isSourceNode]) {
+ this.children[i].walkSourceContents(aFn);
+ }
+ }
+
+ var sources = Object.keys(this.sourceContents);
+ for (var i = 0, len = sources.length; i < len; i++) {
+ aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+ }
+ };
+
+ /**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+ SourceNode.prototype.toString = function SourceNode_toString() {
+ var str = "";
+ this.walk(function (chunk) {
+ str += chunk;
+ });
+ return str;
+ };
+
+ /**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+ SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+ var generated = {
+ code: "",
+ line: 1,
+ column: 0
+ };
+ var map = new SourceMapGenerator(aArgs);
+ var sourceMappingActive = false;
+ var lastOriginalSource = null;
+ var lastOriginalLine = null;
+ var lastOriginalColumn = null;
+ var lastOriginalName = null;
+ this.walk(function (chunk, original) {
+ generated.code += chunk;
+ if (original.source !== null
+ && original.line !== null
+ && original.column !== null) {
+ if(lastOriginalSource !== original.source
+ || lastOriginalLine !== original.line
+ || lastOriginalColumn !== original.column
+ || lastOriginalName !== original.name) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ lastOriginalSource = original.source;
+ lastOriginalLine = original.line;
+ lastOriginalColumn = original.column;
+ lastOriginalName = original.name;
+ sourceMappingActive = true;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ generated: {
+ line: generated.line,
+ column: generated.column
+ }
+ });
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ }
+ for (var idx = 0, length = chunk.length; idx < length; idx++) {
+ if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+ generated.line++;
+ generated.column = 0;
+ // Mappings end at eol
+ if (idx + 1 === length) {
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ } else {
+ generated.column++;
+ }
+ }
+ });
+ this.walkSourceContents(function (sourceFile, sourceContent) {
+ map.setSourceContent(sourceFile, sourceContent);
+ });
+
+ return { code: generated.code, map: map };
+ };
+
+ exports.SourceNode = SourceNode;
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/util.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/util.js
new file mode 100644
index 0000000..976f6ca
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/lib/source-map/util.js
@@ -0,0 +1,319 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ /**
+ * This is a helper function for getting values from parameter/options
+ * objects.
+ *
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
+ */
+ function getArg(aArgs, aName, aDefaultValue) {
+ if (aName in aArgs) {
+ return aArgs[aName];
+ } else if (arguments.length === 3) {
+ return aDefaultValue;
+ } else {
+ throw new Error('"' + aName + '" is a required argument.');
+ }
+ }
+ exports.getArg = getArg;
+
+ var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
+ var dataUrlRegexp = /^data:.+\,.+$/;
+
+ function urlParse(aUrl) {
+ var match = aUrl.match(urlRegexp);
+ if (!match) {
+ return null;
+ }
+ return {
+ scheme: match[1],
+ auth: match[2],
+ host: match[3],
+ port: match[4],
+ path: match[5]
+ };
+ }
+ exports.urlParse = urlParse;
+
+ function urlGenerate(aParsedUrl) {
+ var url = '';
+ if (aParsedUrl.scheme) {
+ url += aParsedUrl.scheme + ':';
+ }
+ url += '//';
+ if (aParsedUrl.auth) {
+ url += aParsedUrl.auth + '@';
+ }
+ if (aParsedUrl.host) {
+ url += aParsedUrl.host;
+ }
+ if (aParsedUrl.port) {
+ url += ":" + aParsedUrl.port
+ }
+ if (aParsedUrl.path) {
+ url += aParsedUrl.path;
+ }
+ return url;
+ }
+ exports.urlGenerate = urlGenerate;
+
+ /**
+ * Normalizes a path, or the path portion of a URL:
+ *
+ * - Replaces consequtive slashes with one slash.
+ * - Removes unnecessary '.' parts.
+ * - Removes unnecessary '/..' parts.
+ *
+ * Based on code in the Node.js 'path' core module.
+ *
+ * @param aPath The path or url to normalize.
+ */
+ function normalize(aPath) {
+ var path = aPath;
+ var url = urlParse(aPath);
+ if (url) {
+ if (!url.path) {
+ return aPath;
+ }
+ path = url.path;
+ }
+ var isAbsolute = (path.charAt(0) === '/');
+
+ var parts = path.split(/\/+/);
+ for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+ part = parts[i];
+ if (part === '.') {
+ parts.splice(i, 1);
+ } else if (part === '..') {
+ up++;
+ } else if (up > 0) {
+ if (part === '') {
+ // The first part is blank if the path is absolute. Trying to go
+ // above the root is a no-op. Therefore we can remove all '..' parts
+ // directly after the root.
+ parts.splice(i + 1, up);
+ up = 0;
+ } else {
+ parts.splice(i, 2);
+ up--;
+ }
+ }
+ }
+ path = parts.join('/');
+
+ if (path === '') {
+ path = isAbsolute ? '/' : '.';
+ }
+
+ if (url) {
+ url.path = path;
+ return urlGenerate(url);
+ }
+ return path;
+ }
+ exports.normalize = normalize;
+
+ /**
+ * Joins two paths/URLs.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be joined with the root.
+ *
+ * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+ * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+ * first.
+ * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+ * is updated with the result and aRoot is returned. Otherwise the result
+ * is returned.
+ * - If aPath is absolute, the result is aPath.
+ * - Otherwise the two paths are joined with a slash.
+ * - Joining for example 'http://' and 'www.example.com' is also supported.
+ */
+ function join(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+ if (aPath === "") {
+ aPath = ".";
+ }
+ var aPathUrl = urlParse(aPath);
+ var aRootUrl = urlParse(aRoot);
+ if (aRootUrl) {
+ aRoot = aRootUrl.path || '/';
+ }
+
+ // `join(foo, '//www.example.org')`
+ if (aPathUrl && !aPathUrl.scheme) {
+ if (aRootUrl) {
+ aPathUrl.scheme = aRootUrl.scheme;
+ }
+ return urlGenerate(aPathUrl);
+ }
+
+ if (aPathUrl || aPath.match(dataUrlRegexp)) {
+ return aPath;
+ }
+
+ // `join('http://', 'www.example.com')`
+ if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+ aRootUrl.host = aPath;
+ return urlGenerate(aRootUrl);
+ }
+
+ var joined = aPath.charAt(0) === '/'
+ ? aPath
+ : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+
+ if (aRootUrl) {
+ aRootUrl.path = joined;
+ return urlGenerate(aRootUrl);
+ }
+ return joined;
+ }
+ exports.join = join;
+
+ /**
+ * Make a path relative to a URL or another path.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ */
+ function relative(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+
+ aRoot = aRoot.replace(/\/$/, '');
+
+ // XXX: It is possible to remove this block, and the tests still pass!
+ var url = urlParse(aRoot);
+ if (aPath.charAt(0) == "/" && url && url.path == "/") {
+ return aPath.slice(1);
+ }
+
+ return aPath.indexOf(aRoot + '/') === 0
+ ? aPath.substr(aRoot.length + 1)
+ : aPath;
+ }
+ exports.relative = relative;
+
+ /**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+ function toSetString(aStr) {
+ return '$' + aStr;
+ }
+ exports.toSetString = toSetString;
+
+ function fromSetString(aStr) {
+ return aStr.substr(1);
+ }
+ exports.fromSetString = fromSetString;
+
+ function strcmp(aStr1, aStr2) {
+ var s1 = aStr1 || "";
+ var s2 = aStr2 || "";
+ return (s1 > s2) - (s1 < s2);
+ }
+
+ /**
+ * Comparator between two mappings where the original positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same original source/line/column, but different generated
+ * line and column the same. Useful when searching for a mapping with a
+ * stubbed out mapping.
+ */
+ function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+ var cmp;
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp || onlyCompareOriginal) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.name, mappingB.name);
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ return mappingA.generatedColumn - mappingB.generatedColumn;
+ };
+ exports.compareByOriginalPositions = compareByOriginalPositions;
+
+ /**
+ * Comparator between two mappings where the generated positions are
+ * compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same generated line and column, but different
+ * source/name/original line and column the same. Useful when searching for a
+ * mapping with a stubbed out mapping.
+ */
+ function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) {
+ var cmp;
+
+ cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp || onlyCompareGenerated) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+ };
+ exports.compareByGeneratedPositions = compareByGeneratedPositions;
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE
new file mode 100644
index 0000000..f33d665
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE
@@ -0,0 +1,58 @@
+amdefine is released under two licenses: new BSD, and MIT. You may pick the
+license that best suits your development needs. The text of both licenses are
+provided below.
+
+
+The "New" BSD License:
+----------------------
+
+Copyright (c) 2011, The Dojo Foundation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the Dojo Foundation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+MIT License
+-----------
+
+Copyright (c) 2011, The Dojo Foundation
+
+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/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md
new file mode 100644
index 0000000..c6995c0
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md
@@ -0,0 +1,171 @@
+# amdefine
+
+A module that can be used to implement AMD's define() in Node. This allows you
+to code to the AMD API and have the module work in node programs without
+requiring those other programs to use AMD.
+
+## Usage
+
+**1)** Update your package.json to indicate amdefine as a dependency:
+
+```javascript
+ "dependencies": {
+ "amdefine": ">=0.1.0"
+ }
+```
+
+Then run `npm install` to get amdefine into your project.
+
+**2)** At the top of each module that uses define(), place this code:
+
+```javascript
+if (typeof define !== 'function') { var define = require('amdefine')(module) }
+```
+
+**Only use these snippets** when loading amdefine. If you preserve the basic structure,
+with the braces, it will be stripped out when using the [RequireJS optimizer](#optimizer).
+
+You can add spaces, line breaks and even require amdefine with a local path, but
+keep the rest of the structure to get the stripping behavior.
+
+As you may know, because `if` statements in JavaScript don't have their own scope, the var
+declaration in the above snippet is made whether the `if` expression is truthy or not. If
+RequireJS is loaded then the declaration is superfluous because `define` is already already
+declared in the same scope in RequireJS. Fortunately JavaScript handles multiple `var`
+declarations of the same variable in the same scope gracefully.
+
+If you want to deliver amdefine.js with your code rather than specifying it as a dependency
+with npm, then just download the latest release and refer to it using a relative path:
+
+[Latest Version](https://github.com/jrburke/amdefine/raw/latest/amdefine.js)
+
+### amdefine/intercept
+
+Consider this very experimental.
+
+Instead of pasting the piece of text for the amdefine setup of a `define`
+variable in each module you create or consume, you can use `amdefine/intercept`
+instead. It will automatically insert the above snippet in each .js file loaded
+by Node.
+
+**Warning**: you should only use this if you are creating an application that
+is consuming AMD style defined()'d modules that are distributed via npm and want
+to run that code in Node.
+
+For library code where you are not sure if it will be used by others in Node or
+in the browser, then explicitly depending on amdefine and placing the code
+snippet above is suggested path, instead of using `amdefine/intercept`. The
+intercept module affects all .js files loaded in the Node app, and it is
+inconsiderate to modify global state like that unless you are also controlling
+the top level app.
+
+#### Why distribute AMD-style nodes via npm?
+
+npm has a lot of weaknesses for front-end use (installed layout is not great,
+should have better support for the `baseUrl + moduleID + '.js' style of loading,
+single file JS installs), but some people want a JS package manager and are
+willing to live with those constraints. If that is you, but still want to author
+in AMD style modules to get dynamic require([]), better direct source usage and
+powerful loader plugin support in the browser, then this tool can help.
+
+#### amdefine/intercept usage
+
+Just require it in your top level app module (for example index.js, server.js):
+
+```javascript
+require('amdefine/intercept');
+```
+
+The module does not return a value, so no need to assign the result to a local
+variable.
+
+Then just require() code as you normally would with Node's require(). Any .js
+loaded after the intercept require will have the amdefine check injected in
+the .js source as it is loaded. It does not modify the source on disk, just
+prepends some content to the text of the module as it is loaded by Node.
+
+#### How amdefine/intercept works
+
+It overrides the `Module._extensions['.js']` in Node to automatically prepend
+the amdefine snippet above. So, it will affect any .js file loaded by your
+app.
+
+## define() usage
+
+It is best if you use the anonymous forms of define() in your module:
+
+```javascript
+define(function (require) {
+ var dependency = require('dependency');
+});
+```
+
+or
+
+```javascript
+define(['dependency'], function (dependency) {
+
+});
+```
+
+## RequireJS optimizer integration.
+
+Version 1.0.3 of the [RequireJS optimizer](http://requirejs.org/docs/optimization.html)
+will have support for stripping the `if (typeof define !== 'function')` check
+mentioned above, so you can include this snippet for code that runs in the
+browser, but avoid taking the cost of the if() statement once the code is
+optimized for deployment.
+
+## Node 0.4 Support
+
+If you want to support Node 0.4, then add `require` as the second parameter to amdefine:
+
+```javascript
+//Only if you want Node 0.4. If using 0.5 or later, use the above snippet.
+if (typeof define !== 'function') { var define = require('amdefine')(module, require) }
+```
+
+## Limitations
+
+### Synchronous vs Asynchronous
+
+amdefine creates a define() function that is callable by your code. It will
+execute and trace dependencies and call the factory function *synchronously*,
+to keep the behavior in line with Node's synchronous dependency tracing.
+
+The exception: calling AMD's callback-style require() from inside a factory
+function. The require callback is called on process.nextTick():
+
+```javascript
+define(function (require) {
+ require(['a'], function(a) {
+ //'a' is loaded synchronously, but
+ //this callback is called on process.nextTick().
+ });
+});
+```
+
+### Loader Plugins
+
+Loader plugins are supported as long as they call their load() callbacks
+synchronously. So ones that do network requests will not work. However plugins
+like [text](http://requirejs.org/docs/api.html#text) can load text files locally.
+
+The plugin API's `load.fromText()` is **not supported** in amdefine, so this means
+transpiler plugins like the [CoffeeScript loader plugin](https://github.com/jrburke/require-cs)
+will not work. This may be fixable, but it is a bit complex, and I do not have
+enough node-fu to figure it out yet. See the source for amdefine.js if you want
+to get an idea of the issues involved.
+
+## Tests
+
+To run the tests, cd to **tests** and run:
+
+```
+node all.js
+node all-intercept.js
+```
+
+## License
+
+New BSD and MIT. Check the LICENSE file for all the details.
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js
new file mode 100644
index 0000000..53bf5a6
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js
@@ -0,0 +1,299 @@
+/** vim: et:ts=4:sw=4:sts=4
+ * @license amdefine 0.1.0 Copyright (c) 2011, The Dojo Foundation All Rights Reserved.
+ * Available via the MIT or new BSD license.
+ * see: http://github.com/jrburke/amdefine for details
+ */
+
+/*jslint node: true */
+/*global module, process */
+'use strict';
+
+/**
+ * Creates a define for node.
+ * @param {Object} module the "module" object that is defined by Node for the
+ * current module.
+ * @param {Function} [requireFn]. Node's require function for the current module.
+ * It only needs to be passed in Node versions before 0.5, when module.require
+ * did not exist.
+ * @returns {Function} a define function that is usable for the current node
+ * module.
+ */
+function amdefine(module, requireFn) {
+ 'use strict';
+ var defineCache = {},
+ loaderCache = {},
+ alreadyCalled = false,
+ path = require('path'),
+ makeRequire, stringRequire;
+
+ /**
+ * Trims the . and .. from an array of path segments.
+ * It will keep a leading path segment if a .. will become
+ * the first path segment, to help with module name lookups,
+ * which act like paths, but can be remapped. But the end result,
+ * all paths that use this function should look normalized.
+ * NOTE: this method MODIFIES the input array.
+ * @param {Array} ary the array of path segments.
+ */
+ function trimDots(ary) {
+ var i, part;
+ for (i = 0; ary[i]; i+= 1) {
+ part = ary[i];
+ if (part === '.') {
+ ary.splice(i, 1);
+ i -= 1;
+ } else if (part === '..') {
+ if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
+ //End of the line. Keep at least one non-dot
+ //path segment at the front so it can be mapped
+ //correctly to disk. Otherwise, there is likely
+ //no path mapping for a path starting with '..'.
+ //This can still fail, but catches the most reasonable
+ //uses of ..
+ break;
+ } else if (i > 0) {
+ ary.splice(i - 1, 2);
+ i -= 2;
+ }
+ }
+ }
+ }
+
+ function normalize(name, baseName) {
+ var baseParts;
+
+ //Adjust any relative paths.
+ if (name && name.charAt(0) === '.') {
+ //If have a base name, try to normalize against it,
+ //otherwise, assume it is a top-level require that will
+ //be relative to baseUrl in the end.
+ if (baseName) {
+ baseParts = baseName.split('/');
+ baseParts = baseParts.slice(0, baseParts.length - 1);
+ baseParts = baseParts.concat(name.split('/'));
+ trimDots(baseParts);
+ name = baseParts.join('/');
+ }
+ }
+
+ return name;
+ }
+
+ /**
+ * Create the normalize() function passed to a loader plugin's
+ * normalize method.
+ */
+ function makeNormalize(relName) {
+ return function (name) {
+ return normalize(name, relName);
+ };
+ }
+
+ function makeLoad(id) {
+ function load(value) {
+ loaderCache[id] = value;
+ }
+
+ load.fromText = function (id, text) {
+ //This one is difficult because the text can/probably uses
+ //define, and any relative paths and requires should be relative
+ //to that id was it would be found on disk. But this would require
+ //bootstrapping a module/require fairly deeply from node core.
+ //Not sure how best to go about that yet.
+ throw new Error('amdefine does not implement load.fromText');
+ };
+
+ return load;
+ }
+
+ makeRequire = function (systemRequire, exports, module, relId) {
+ function amdRequire(deps, callback) {
+ if (typeof deps === 'string') {
+ //Synchronous, single module require('')
+ return stringRequire(systemRequire, exports, module, deps, relId);
+ } else {
+ //Array of dependencies with a callback.
+
+ //Convert the dependencies to modules.
+ deps = deps.map(function (depName) {
+ return stringRequire(systemRequire, exports, module, depName, relId);
+ });
+
+ //Wait for next tick to call back the require call.
+ process.nextTick(function () {
+ callback.apply(null, deps);
+ });
+ }
+ }
+
+ amdRequire.toUrl = function (filePath) {
+ if (filePath.indexOf('.') === 0) {
+ return normalize(filePath, path.dirname(module.filename));
+ } else {
+ return filePath;
+ }
+ };
+
+ return amdRequire;
+ };
+
+ //Favor explicit value, passed in if the module wants to support Node 0.4.
+ requireFn = requireFn || function req() {
+ return module.require.apply(module, arguments);
+ };
+
+ function runFactory(id, deps, factory) {
+ var r, e, m, result;
+
+ if (id) {
+ e = loaderCache[id] = {};
+ m = {
+ id: id,
+ uri: __filename,
+ exports: e
+ };
+ r = makeRequire(requireFn, e, m, id);
+ } else {
+ //Only support one define call per file
+ if (alreadyCalled) {
+ throw new Error('amdefine with no module ID cannot be called more than once per file.');
+ }
+ alreadyCalled = true;
+
+ //Use the real variables from node
+ //Use module.exports for exports, since
+ //the exports in here is amdefine exports.
+ e = module.exports;
+ m = module;
+ r = makeRequire(requireFn, e, m, module.id);
+ }
+
+ //If there are dependencies, they are strings, so need
+ //to convert them to dependency values.
+ if (deps) {
+ deps = deps.map(function (depName) {
+ return r(depName);
+ });
+ }
+
+ //Call the factory with the right dependencies.
+ if (typeof factory === 'function') {
+ result = factory.apply(m.exports, deps);
+ } else {
+ result = factory;
+ }
+
+ if (result !== undefined) {
+ m.exports = result;
+ if (id) {
+ loaderCache[id] = m.exports;
+ }
+ }
+ }
+
+ stringRequire = function (systemRequire, exports, module, id, relId) {
+ //Split the ID by a ! so that
+ var index = id.indexOf('!'),
+ originalId = id,
+ prefix, plugin;
+
+ if (index === -1) {
+ id = normalize(id, relId);
+
+ //Straight module lookup. If it is one of the special dependencies,
+ //deal with it, otherwise, delegate to node.
+ if (id === 'require') {
+ return makeRequire(systemRequire, exports, module, relId);
+ } else if (id === 'exports') {
+ return exports;
+ } else if (id === 'module') {
+ return module;
+ } else if (loaderCache.hasOwnProperty(id)) {
+ return loaderCache[id];
+ } else if (defineCache[id]) {
+ runFactory.apply(null, defineCache[id]);
+ return loaderCache[id];
+ } else {
+ if(systemRequire) {
+ return systemRequire(originalId);
+ } else {
+ throw new Error('No module with ID: ' + id);
+ }
+ }
+ } else {
+ //There is a plugin in play.
+ prefix = id.substring(0, index);
+ id = id.substring(index + 1, id.length);
+
+ plugin = stringRequire(systemRequire, exports, module, prefix, relId);
+
+ if (plugin.normalize) {
+ id = plugin.normalize(id, makeNormalize(relId));
+ } else {
+ //Normalize the ID normally.
+ id = normalize(id, relId);
+ }
+
+ if (loaderCache[id]) {
+ return loaderCache[id];
+ } else {
+ plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {});
+
+ return loaderCache[id];
+ }
+ }
+ };
+
+ //Create a define function specific to the module asking for amdefine.
+ function define(id, deps, factory) {
+ if (Array.isArray(id)) {
+ factory = deps;
+ deps = id;
+ id = undefined;
+ } else if (typeof id !== 'string') {
+ factory = id;
+ id = deps = undefined;
+ }
+
+ if (deps && !Array.isArray(deps)) {
+ factory = deps;
+ deps = undefined;
+ }
+
+ if (!deps) {
+ deps = ['require', 'exports', 'module'];
+ }
+
+ //Set up properties for this module. If an ID, then use
+ //internal cache. If no ID, then use the external variables
+ //for this node module.
+ if (id) {
+ //Put the module in deep freeze until there is a
+ //require call for it.
+ defineCache[id] = [id, deps, factory];
+ } else {
+ runFactory(id, deps, factory);
+ }
+ }
+
+ //define.require, which has access to all the values in the
+ //cache. Useful for AMD modules that all have IDs in the file,
+ //but need to finally export a value to node based on one of those
+ //IDs.
+ define.require = function (id) {
+ if (loaderCache[id]) {
+ return loaderCache[id];
+ }
+
+ if (defineCache[id]) {
+ runFactory.apply(null, defineCache[id]);
+ return loaderCache[id];
+ }
+ };
+
+ define.amd = {};
+
+ return define;
+}
+
+module.exports = amdefine;
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js
new file mode 100644
index 0000000..771a983
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js
@@ -0,0 +1,36 @@
+/*jshint node: true */
+var inserted,
+ Module = require('module'),
+ fs = require('fs'),
+ existingExtFn = Module._extensions['.js'],
+ amdefineRegExp = /amdefine\.js/;
+
+inserted = "if (typeof define !== 'function') {var define = require('amdefine')(module)}";
+
+//From the node/lib/module.js source:
+function stripBOM(content) {
+ // Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
+ // because the buffer-to-string conversion in `fs.readFileSync()`
+ // translates it to FEFF, the UTF-16 BOM.
+ if (content.charCodeAt(0) === 0xFEFF) {
+ content = content.slice(1);
+ }
+ return content;
+}
+
+//Also adapted from the node/lib/module.js source:
+function intercept(module, filename) {
+ var content = stripBOM(fs.readFileSync(filename, 'utf8'));
+
+ if (!amdefineRegExp.test(module.id)) {
+ content = inserted + content;
+ }
+
+ module._compile(content, filename);
+}
+
+intercept._id = 'amdefine/intercept';
+
+if (!existingExtFn._id || existingExtFn._id !== intercept._id) {
+ Module._extensions['.js'] = intercept;
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json
new file mode 100644
index 0000000..880c134
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "amdefine",
+ "description": "Provide AMD's define() API for declaring modules in the AMD format",
+ "version": "0.1.0",
+ "homepage": "http://github.com/jrburke/amdefine",
+ "author": {
+ "name": "James Burke",
+ "email": "jrburke@gmail.com",
+ "url": "http://github.com/jrburke"
+ },
+ "licenses": [
+ {
+ "type": "BSD",
+ "url": "https://github.com/jrburke/amdefine/blob/master/LICENSE"
+ },
+ {
+ "type": "MIT",
+ "url": "https://github.com/jrburke/amdefine/blob/master/LICENSE"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jrburke/amdefine.git"
+ },
+ "main": "./amdefine.js",
+ "engines": {
+ "node": ">=0.4.2"
+ },
+ "readme": "# amdefine\n\nA module that can be used to implement AMD's define() in Node. This allows you\nto code to the AMD API and have the module work in node programs without\nrequiring those other programs to use AMD.\n\n## Usage\n\n**1)** Update your package.json to indicate amdefine as a dependency:\n\n```javascript\n \"dependencies\": {\n \"amdefine\": \">=0.1.0\"\n }\n```\n\nThen run `npm install` to get amdefine into your project.\n\n**2)** At the top of each module that uses define(), place this code:\n\n```javascript\nif (typeof define !== 'function') { var define = require('amdefine')(module) }\n```\n\n**Only use these snippets** when loading amdefine. If you preserve the basic structure,\nwith the braces, it will be stripped out when using the [RequireJS optimizer](#optimizer).\n\nYou can add spaces, line breaks and even require amdefine with a local path, but\nkeep the rest of the structure to get the stripping behavior.\n\nAs you may know, because `if` statements in JavaScript don't have their own scope, the var\ndeclaration in the above snippet is made whether the `if` expression is truthy or not. If\nRequireJS is loaded then the declaration is superfluous because `define` is already already\ndeclared in the same scope in RequireJS. Fortunately JavaScript handles multiple `var`\ndeclarations of the same variable in the same scope gracefully.\n\nIf you want to deliver amdefine.js with your code rather than specifying it as a dependency\nwith npm, then just download the latest release and refer to it using a relative path:\n\n[Latest Version](https://github.com/jrburke/amdefine/raw/latest/amdefine.js)\n\n### amdefine/intercept\n\nConsider this very experimental.\n\nInstead of pasting the piece of text for the amdefine setup of a `define`\nvariable in each module you create or consume, you can use `amdefine/intercept`\ninstead. It will automatically insert the above snippet in each .js file loaded\nby Node.\n\n**Warning**: you should only use this if you are creating an application that\nis consuming AMD style defined()'d modules that are distributed via npm and want\nto run that code in Node.\n\nFor library code where you are not sure if it will be used by others in Node or\nin the browser, then explicitly depending on amdefine and placing the code\nsnippet above is suggested path, instead of using `amdefine/intercept`. The\nintercept module affects all .js files loaded in the Node app, and it is\ninconsiderate to modify global state like that unless you are also controlling\nthe top level app.\n\n#### Why distribute AMD-style nodes via npm?\n\nnpm has a lot of weaknesses for front-end use (installed layout is not great,\nshould have better support for the `baseUrl + moduleID + '.js' style of loading,\nsingle file JS installs), but some people want a JS package manager and are\nwilling to live with those constraints. If that is you, but still want to author\nin AMD style modules to get dynamic require([]), better direct source usage and\npowerful loader plugin support in the browser, then this tool can help.\n\n#### amdefine/intercept usage\n\nJust require it in your top level app module (for example index.js, server.js):\n\n```javascript\nrequire('amdefine/intercept');\n```\n\nThe module does not return a value, so no need to assign the result to a local\nvariable.\n\nThen just require() code as you normally would with Node's require(). Any .js\nloaded after the intercept require will have the amdefine check injected in\nthe .js source as it is loaded. It does not modify the source on disk, just\nprepends some content to the text of the module as it is loaded by Node.\n\n#### How amdefine/intercept works\n\nIt overrides the `Module._extensions['.js']` in Node to automatically prepend\nthe amdefine snippet above. So, it will affect any .js file loaded by your\napp.\n\n## define() usage\n\nIt is best if you use the anonymous forms of define() in your module:\n\n```javascript\ndefine(function (require) {\n var dependency = require('dependency');\n});\n```\n\nor\n\n```javascript\ndefine(['dependency'], function (dependency) {\n\n});\n```\n\n## RequireJS optimizer integration. \n\nVersion 1.0.3 of the [RequireJS optimizer](http://requirejs.org/docs/optimization.html)\nwill have support for stripping the `if (typeof define !== 'function')` check\nmentioned above, so you can include this snippet for code that runs in the\nbrowser, but avoid taking the cost of the if() statement once the code is\noptimized for deployment.\n\n## Node 0.4 Support\n\nIf you want to support Node 0.4, then add `require` as the second parameter to amdefine:\n\n```javascript\n//Only if you want Node 0.4. If using 0.5 or later, use the above snippet.\nif (typeof define !== 'function') { var define = require('amdefine')(module, require) }\n```\n\n## Limitations\n\n### Synchronous vs Asynchronous\n\namdefine creates a define() function that is callable by your code. It will\nexecute and trace dependencies and call the factory function *synchronously*,\nto keep the behavior in line with Node's synchronous dependency tracing.\n\nThe exception: calling AMD's callback-style require() from inside a factory\nfunction. The require callback is called on process.nextTick():\n\n```javascript\ndefine(function (require) {\n require(['a'], function(a) {\n //'a' is loaded synchronously, but\n //this callback is called on process.nextTick().\n });\n});\n```\n\n### Loader Plugins\n\nLoader plugins are supported as long as they call their load() callbacks\nsynchronously. So ones that do network requests will not work. However plugins\nlike [text](http://requirejs.org/docs/api.html#text) can load text files locally.\n\nThe plugin API's `load.fromText()` is **not supported** in amdefine, so this means\ntranspiler plugins like the [CoffeeScript loader plugin](https://github.com/jrburke/require-cs)\nwill not work. This may be fixable, but it is a bit complex, and I do not have\nenough node-fu to figure it out yet. See the source for amdefine.js if you want\nto get an idea of the issues involved.\n\n## Tests\n\nTo run the tests, cd to **tests** and run:\n\n```\nnode all.js\nnode all-intercept.js\n```\n\n## License\n\nNew BSD and MIT. Check the LICENSE file for all the details.\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/jrburke/amdefine/issues"
+ },
+ "_id": "amdefine@0.1.0",
+ "dist": {
+ "shasum": "3ca9735cf1dde0edf7a4bf6641709c8024f9b227",
+ "tarball": "http://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+ },
+ "_from": "amdefine@>=0.0.4",
+ "_npmVersion": "1.3.8",
+ "_npmUser": {
+ "name": "jrburke",
+ "email": "jrburke@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jrburke",
+ "email": "jrburke@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_shasum": "3ca9735cf1dde0edf7a4bf6641709c8024f9b227",
+ "_resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz",
+ "scripts": {}
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/package.json b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/package.json
new file mode 100644
index 0000000..9bcc2d9
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/package.json
@@ -0,0 +1,190 @@
+{
+ "name": "source-map",
+ "description": "Generates and consumes source maps",
+ "version": "0.2.0",
+ "homepage": "https://github.com/mozilla/source-map",
+ "author": {
+ "name": "Nick Fitzgerald",
+ "email": "nfitzgerald@mozilla.com"
+ },
+ "contributors": [
+ {
+ "name": "Tobias Koppers",
+ "email": "tobias.koppers@googlemail.com"
+ },
+ {
+ "name": "Duncan Beevers",
+ "email": "duncan@dweebd.com"
+ },
+ {
+ "name": "Stephen Crane",
+ "email": "scrane@mozilla.com"
+ },
+ {
+ "name": "Ryan Seddon",
+ "email": "seddon.ryan@gmail.com"
+ },
+ {
+ "name": "Miles Elam",
+ "email": "miles.elam@deem.com"
+ },
+ {
+ "name": "Mihai Bazon",
+ "email": "mihai.bazon@gmail.com"
+ },
+ {
+ "name": "Michael Ficarra",
+ "email": "github.public.email@michael.ficarra.me"
+ },
+ {
+ "name": "Todd Wolfson",
+ "email": "todd@twolfson.com"
+ },
+ {
+ "name": "Alexander Solovyov",
+ "email": "alexander@solovyov.net"
+ },
+ {
+ "name": "Felix Gnass",
+ "email": "fgnass@gmail.com"
+ },
+ {
+ "name": "Conrad Irwin",
+ "email": "conrad.irwin@gmail.com"
+ },
+ {
+ "name": "usrbincc",
+ "email": "usrbincc@yahoo.com"
+ },
+ {
+ "name": "David Glasser",
+ "email": "glasser@davidglasser.net"
+ },
+ {
+ "name": "Chase Douglas",
+ "email": "chase@newrelic.com"
+ },
+ {
+ "name": "Evan Wallace",
+ "email": "evan.exe@gmail.com"
+ },
+ {
+ "name": "Heather Arthur",
+ "email": "fayearthur@gmail.com"
+ },
+ {
+ "name": "Hugh Kennedy",
+ "email": "hughskennedy@gmail.com"
+ },
+ {
+ "name": "David Glasser",
+ "email": "glasser@davidglasser.net"
+ },
+ {
+ "name": "Simon Lydell",
+ "email": "simon.lydell@gmail.com"
+ },
+ {
+ "name": "Jmeas Smith",
+ "email": "jellyes2@gmail.com"
+ },
+ {
+ "name": "Michael Z Goddard",
+ "email": "mzgoddard@gmail.com"
+ },
+ {
+ "name": "azu",
+ "email": "azu@users.noreply.github.com"
+ },
+ {
+ "name": "John Gozde",
+ "email": "john@gozde.ca"
+ },
+ {
+ "name": "Adam Kirkton",
+ "email": "akirkton@truefitinnovation.com"
+ },
+ {
+ "name": "Chris Montgomery",
+ "email": "christopher.montgomery@dowjones.com"
+ },
+ {
+ "name": "J. Ryan Stinnett",
+ "email": "jryans@gmail.com"
+ },
+ {
+ "name": "Jack Herrington",
+ "email": "jherrington@walmartlabs.com"
+ },
+ {
+ "name": "Chris Truter",
+ "email": "jeffpalentine@gmail.com"
+ },
+ {
+ "name": "Daniel Espeset",
+ "email": "daniel@danielespeset.com"
+ },
+ {
+ "name": "Jamie Wong",
+ "email": "jamie.lf.wong@gmail.com"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "http://github.com/mozilla/source-map.git"
+ },
+ "directories": {
+ "lib": "./lib"
+ },
+ "main": "./lib/source-map.js",
+ "engines": {
+ "node": ">=0.8.0"
+ },
+ "licenses": [
+ {
+ "type": "BSD",
+ "url": "http://opensource.org/licenses/BSD-3-Clause"
+ }
+ ],
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "devDependencies": {
+ "dryice": ">=0.4.8"
+ },
+ "scripts": {
+ "test": "node test/run-tests.js",
+ "build": "node Makefile.dryice.js"
+ },
+ "bugs": {
+ "url": "https://github.com/mozilla/source-map/issues"
+ },
+ "_id": "source-map@0.2.0",
+ "_shasum": "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d",
+ "_from": "source-map@~0.2.0",
+ "_npmVersion": "1.4.9",
+ "_npmUser": {
+ "name": "nickfitzgerald",
+ "email": "fitzgen@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "mozilla-devtools",
+ "email": "mozilla-developer-tools@googlegroups.com"
+ },
+ {
+ "name": "mozilla",
+ "email": "dherman@mozilla.com"
+ },
+ {
+ "name": "nickfitzgerald",
+ "email": "fitzgen@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d",
+ "tarball": "http://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/run-tests.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/run-tests.js
new file mode 100755
index 0000000..64a7c3a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/run-tests.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+var assert = require('assert');
+var fs = require('fs');
+var path = require('path');
+var util = require('./source-map/util');
+
+function run(tests) {
+ var total = 0;
+ var passed = 0;
+
+ for (var i = 0; i < tests.length; i++) {
+ for (var k in tests[i].testCase) {
+ if (/^test/.test(k)) {
+ total++;
+ try {
+ tests[i].testCase[k](assert, util);
+ passed++;
+ }
+ catch (e) {
+ console.log('FAILED ' + tests[i].name + ': ' + k + '!');
+ console.log(e.stack);
+ }
+ }
+ }
+ }
+
+ console.log('');
+ console.log(passed + ' / ' + total + ' tests passed.');
+ console.log('');
+
+ return total - passed;
+}
+
+function isTestFile(f) {
+ var testToRun = process.argv[2];
+ return testToRun
+ ? path.basename(testToRun) === f
+ : /^test\-.*?\.js/.test(f);
+}
+
+function toModule(f) {
+ return './source-map/' + f.replace(/\.js$/, '');
+}
+
+var requires = fs.readdirSync(path.join(__dirname, 'source-map'))
+ .filter(isTestFile)
+ .map(toModule);
+
+var code = run(requires.map(require).map(function (mod, i) {
+ return {
+ name: requires[i],
+ testCase: mod
+ };
+}));
+
+process.exit(code);
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js
new file mode 100644
index 0000000..3801233
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js
@@ -0,0 +1,26 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2012 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var sourceMap;
+ try {
+ sourceMap = require('../../lib/source-map');
+ } catch (e) {
+ sourceMap = {};
+ Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
+ }
+
+ exports['test that the api is properly exposed in the top level'] = function (assert, util) {
+ assert.equal(typeof sourceMap.SourceMapGenerator, "function");
+ assert.equal(typeof sourceMap.SourceMapConsumer, "function");
+ assert.equal(typeof sourceMap.SourceNode, "function");
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js
new file mode 100644
index 0000000..b5797ed
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js
@@ -0,0 +1,104 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var ArraySet = require('../../lib/source-map/array-set').ArraySet;
+
+ function makeTestSet() {
+ var set = new ArraySet();
+ for (var i = 0; i < 100; i++) {
+ set.add(String(i));
+ }
+ return set;
+ }
+
+ exports['test .has() membership'] = function (assert, util) {
+ var set = makeTestSet();
+ for (var i = 0; i < 100; i++) {
+ assert.ok(set.has(String(i)));
+ }
+ };
+
+ exports['test .indexOf() elements'] = function (assert, util) {
+ var set = makeTestSet();
+ for (var i = 0; i < 100; i++) {
+ assert.strictEqual(set.indexOf(String(i)), i);
+ }
+ };
+
+ exports['test .at() indexing'] = function (assert, util) {
+ var set = makeTestSet();
+ for (var i = 0; i < 100; i++) {
+ assert.strictEqual(set.at(i), String(i));
+ }
+ };
+
+ exports['test creating from an array'] = function (assert, util) {
+ var set = ArraySet.fromArray(['foo', 'bar', 'baz', 'quux', 'hasOwnProperty']);
+
+ assert.ok(set.has('foo'));
+ assert.ok(set.has('bar'));
+ assert.ok(set.has('baz'));
+ assert.ok(set.has('quux'));
+ assert.ok(set.has('hasOwnProperty'));
+
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.indexOf('bar'), 1);
+ assert.strictEqual(set.indexOf('baz'), 2);
+ assert.strictEqual(set.indexOf('quux'), 3);
+
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.at(1), 'bar');
+ assert.strictEqual(set.at(2), 'baz');
+ assert.strictEqual(set.at(3), 'quux');
+ };
+
+ exports['test that you can add __proto__; see github issue #30'] = function (assert, util) {
+ var set = new ArraySet();
+ set.add('__proto__');
+ assert.ok(set.has('__proto__'));
+ assert.strictEqual(set.at(0), '__proto__');
+ assert.strictEqual(set.indexOf('__proto__'), 0);
+ };
+
+ exports['test .fromArray() with duplicates'] = function (assert, util) {
+ var set = ArraySet.fromArray(['foo', 'foo']);
+ assert.ok(set.has('foo'));
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.toArray().length, 1);
+
+ set = ArraySet.fromArray(['foo', 'foo'], true);
+ assert.ok(set.has('foo'));
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.at(1), 'foo');
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.toArray().length, 2);
+ };
+
+ exports['test .add() with duplicates'] = function (assert, util) {
+ var set = new ArraySet();
+ set.add('foo');
+
+ set.add('foo');
+ assert.ok(set.has('foo'));
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.toArray().length, 1);
+
+ set.add('foo', true);
+ assert.ok(set.has('foo'));
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.at(1), 'foo');
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.toArray().length, 2);
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js
new file mode 100644
index 0000000..6fd0d99
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js
@@ -0,0 +1,23 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var base64VLQ = require('../../lib/source-map/base64-vlq');
+
+ exports['test normal encoding and decoding'] = function (assert, util) {
+ var result = {};
+ for (var i = -255; i < 256; i++) {
+ base64VLQ.decode(base64VLQ.encode(i), result);
+ assert.equal(result.value, i);
+ assert.equal(result.rest, "");
+ }
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js
new file mode 100644
index 0000000..ff3a244
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js
@@ -0,0 +1,35 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var base64 = require('../../lib/source-map/base64');
+
+ exports['test out of range encoding'] = function (assert, util) {
+ assert.throws(function () {
+ base64.encode(-1);
+ });
+ assert.throws(function () {
+ base64.encode(64);
+ });
+ };
+
+ exports['test out of range decoding'] = function (assert, util) {
+ assert.throws(function () {
+ base64.decode('=');
+ });
+ };
+
+ exports['test normal encoding and decoding'] = function (assert, util) {
+ for (var i = 0; i < 64; i++) {
+ assert.equal(base64.decode(base64.encode(i)), i);
+ }
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js
new file mode 100644
index 0000000..f1c9e0f
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js
@@ -0,0 +1,54 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var binarySearch = require('../../lib/source-map/binary-search');
+
+ function numberCompare(a, b) {
+ return a - b;
+ }
+
+ exports['test too high'] = function (assert, util) {
+ var needle = 30;
+ var haystack = [2,4,6,8,10,12,14,16,18,20];
+
+ assert.doesNotThrow(function () {
+ binarySearch.search(needle, haystack, numberCompare);
+ });
+
+ assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 20);
+ };
+
+ exports['test too low'] = function (assert, util) {
+ var needle = 1;
+ var haystack = [2,4,6,8,10,12,14,16,18,20];
+
+ assert.doesNotThrow(function () {
+ binarySearch.search(needle, haystack, numberCompare);
+ });
+
+ assert.equal(binarySearch.search(needle, haystack, numberCompare), -1);
+ };
+
+ exports['test exact search'] = function (assert, util) {
+ var needle = 4;
+ var haystack = [2,4,6,8,10,12,14,16,18,20];
+
+ assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 4);
+ };
+
+ exports['test fuzzy search'] = function (assert, util) {
+ var needle = 19;
+ var haystack = [2,4,6,8,10,12,14,16,18,20];
+
+ assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 18);
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js
new file mode 100644
index 0000000..26757b2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js
@@ -0,0 +1,84 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
+ var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
+
+ exports['test eating our own dog food'] = function (assert, util) {
+ var smg = new SourceMapGenerator({
+ file: 'testing.js',
+ sourceRoot: '/wu/tang'
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 1, column: 0 },
+ generated: { line: 2, column: 2 }
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 2, column: 0 },
+ generated: { line: 3, column: 2 }
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 3, column: 0 },
+ generated: { line: 4, column: 2 }
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 4, column: 0 },
+ generated: { line: 5, column: 2 }
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 5, column: 10 },
+ generated: { line: 6, column: 12 }
+ });
+
+ var smc = new SourceMapConsumer(smg.toString());
+
+ // Exact
+ util.assertMapping(2, 2, '/wu/tang/gza.coffee', 1, 0, null, smc, assert);
+ util.assertMapping(3, 2, '/wu/tang/gza.coffee', 2, 0, null, smc, assert);
+ util.assertMapping(4, 2, '/wu/tang/gza.coffee', 3, 0, null, smc, assert);
+ util.assertMapping(5, 2, '/wu/tang/gza.coffee', 4, 0, null, smc, assert);
+ util.assertMapping(6, 12, '/wu/tang/gza.coffee', 5, 10, null, smc, assert);
+
+ // Fuzzy
+
+ // Generated to original
+ util.assertMapping(2, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(2, 9, '/wu/tang/gza.coffee', 1, 0, null, smc, assert, true);
+ util.assertMapping(3, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(3, 9, '/wu/tang/gza.coffee', 2, 0, null, smc, assert, true);
+ util.assertMapping(4, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(4, 9, '/wu/tang/gza.coffee', 3, 0, null, smc, assert, true);
+ util.assertMapping(5, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(5, 9, '/wu/tang/gza.coffee', 4, 0, null, smc, assert, true);
+ util.assertMapping(6, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(6, 9, null, null, null, null, smc, assert, true);
+ util.assertMapping(6, 13, '/wu/tang/gza.coffee', 5, 10, null, smc, assert, true);
+
+ // Original to generated
+ util.assertMapping(2, 2, '/wu/tang/gza.coffee', 1, 1, null, smc, assert, null, true);
+ util.assertMapping(3, 2, '/wu/tang/gza.coffee', 2, 3, null, smc, assert, null, true);
+ util.assertMapping(4, 2, '/wu/tang/gza.coffee', 3, 6, null, smc, assert, null, true);
+ util.assertMapping(5, 2, '/wu/tang/gza.coffee', 4, 9, null, smc, assert, null, true);
+ util.assertMapping(5, 2, '/wu/tang/gza.coffee', 5, 9, null, smc, assert, null, true);
+ util.assertMapping(6, 12, '/wu/tang/gza.coffee', 6, 19, null, smc, assert, null, true);
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js
new file mode 100644
index 0000000..4a4842a
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js
@@ -0,0 +1,874 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
+ var IndexedSourceMapConsumer = require('../../lib/source-map/indexed-source-map-consumer').IndexedSourceMapConsumer;
+ var BasicSourceMapConsumer = require('../../lib/source-map/basic-source-map-consumer').BasicSourceMapConsumer;
+ var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
+
+ exports['test that we can instantiate with a string or an object'] = function (assert, util) {
+ assert.doesNotThrow(function () {
+ var map = new SourceMapConsumer(util.testMap);
+ });
+ assert.doesNotThrow(function () {
+ var map = new SourceMapConsumer(JSON.stringify(util.testMap));
+ });
+ };
+
+ exports['test that the object returned from new SourceMapConsumer inherits from SourceMapConsumer'] = function (assert, util) {
+ assert.ok(new SourceMapConsumer(util.testMap) instanceof SourceMapConsumer);
+ }
+
+ exports['test that a BasicSourceMapConsumer is returned for sourcemaps without sections'] = function(assert, util) {
+ assert.ok(new SourceMapConsumer(util.testMap) instanceof BasicSourceMapConsumer);
+ };
+
+ exports['test that an IndexedSourceMapConsumer is returned for sourcemaps with sections'] = function(assert, util) {
+ assert.ok(new SourceMapConsumer(util.indexedTestMap) instanceof IndexedSourceMapConsumer);
+ };
+
+ exports['test that the `sources` field has the original sources'] = function (assert, util) {
+ var map;
+ var sources;
+
+ map = new SourceMapConsumer(util.testMap);
+ sources = map.sources;
+ assert.equal(sources[0], '/the/root/one.js');
+ assert.equal(sources[1], '/the/root/two.js');
+ assert.equal(sources.length, 2);
+
+ map = new SourceMapConsumer(util.indexedTestMap);
+ sources = map.sources;
+ assert.equal(sources[0], '/the/root/one.js');
+ assert.equal(sources[1], '/the/root/two.js');
+ assert.equal(sources.length, 2);
+
+ map = new SourceMapConsumer(util.indexedTestMapDifferentSourceRoots);
+ sources = map.sources;
+ assert.equal(sources[0], '/the/root/one.js');
+ assert.equal(sources[1], '/different/root/two.js');
+ assert.equal(sources.length, 2);
+
+ map = new SourceMapConsumer(util.testMapNoSourceRoot);
+ sources = map.sources;
+ assert.equal(sources[0], 'one.js');
+ assert.equal(sources[1], 'two.js');
+ assert.equal(sources.length, 2);
+
+ map = new SourceMapConsumer(util.testMapEmptySourceRoot);
+ sources = map.sources;
+ assert.equal(sources[0], 'one.js');
+ assert.equal(sources[1], 'two.js');
+ assert.equal(sources.length, 2);
+ };
+
+ exports['test that the source root is reflected in a mapping\'s source field'] = function (assert, util) {
+ var map;
+ var mapping;
+
+ map = new SourceMapConsumer(util.testMap);
+
+ mapping = map.originalPositionFor({
+ line: 2,
+ column: 1
+ });
+ assert.equal(mapping.source, '/the/root/two.js');
+
+ mapping = map.originalPositionFor({
+ line: 1,
+ column: 1
+ });
+ assert.equal(mapping.source, '/the/root/one.js');
+
+
+ map = new SourceMapConsumer(util.testMapNoSourceRoot);
+
+ mapping = map.originalPositionFor({
+ line: 2,
+ column: 1
+ });
+ assert.equal(mapping.source, 'two.js');
+
+ mapping = map.originalPositionFor({
+ line: 1,
+ column: 1
+ });
+ assert.equal(mapping.source, 'one.js');
+
+
+ map = new SourceMapConsumer(util.testMapEmptySourceRoot);
+
+ mapping = map.originalPositionFor({
+ line: 2,
+ column: 1
+ });
+ assert.equal(mapping.source, 'two.js');
+
+ mapping = map.originalPositionFor({
+ line: 1,
+ column: 1
+ });
+ assert.equal(mapping.source, 'one.js');
+ };
+
+ exports['test mapping tokens back exactly'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+
+ util.assertMapping(1, 1, '/the/root/one.js', 1, 1, null, map, assert);
+ util.assertMapping(1, 5, '/the/root/one.js', 1, 5, null, map, assert);
+ util.assertMapping(1, 9, '/the/root/one.js', 1, 11, null, map, assert);
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 21, 'bar', map, assert);
+ util.assertMapping(1, 21, '/the/root/one.js', 2, 3, null, map, assert);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 10, 'baz', map, assert);
+ util.assertMapping(1, 32, '/the/root/one.js', 2, 14, 'bar', map, assert);
+
+ util.assertMapping(2, 1, '/the/root/two.js', 1, 1, null, map, assert);
+ util.assertMapping(2, 5, '/the/root/two.js', 1, 5, null, map, assert);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 11, null, map, assert);
+ util.assertMapping(2, 18, '/the/root/two.js', 1, 21, 'n', map, assert);
+ util.assertMapping(2, 21, '/the/root/two.js', 2, 3, null, map, assert);
+ util.assertMapping(2, 28, '/the/root/two.js', 2, 10, 'n', map, assert);
+ };
+
+ exports['test mapping tokens back exactly in indexed source map'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+
+ util.assertMapping(1, 1, '/the/root/one.js', 1, 1, null, map, assert);
+ util.assertMapping(1, 5, '/the/root/one.js', 1, 5, null, map, assert);
+ util.assertMapping(1, 9, '/the/root/one.js', 1, 11, null, map, assert);
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 21, 'bar', map, assert);
+ util.assertMapping(1, 21, '/the/root/one.js', 2, 3, null, map, assert);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 10, 'baz', map, assert);
+ util.assertMapping(1, 32, '/the/root/one.js', 2, 14, 'bar', map, assert);
+
+ util.assertMapping(2, 1, '/the/root/two.js', 1, 1, null, map, assert);
+ util.assertMapping(2, 5, '/the/root/two.js', 1, 5, null, map, assert);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 11, null, map, assert);
+ util.assertMapping(2, 18, '/the/root/two.js', 1, 21, 'n', map, assert);
+ util.assertMapping(2, 21, '/the/root/two.js', 2, 3, null, map, assert);
+ util.assertMapping(2, 28, '/the/root/two.js', 2, 10, 'n', map, assert);
+ };
+
+
+ exports['test mapping tokens back exactly'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+
+ util.assertMapping(1, 1, '/the/root/one.js', 1, 1, null, map, assert);
+ util.assertMapping(1, 5, '/the/root/one.js', 1, 5, null, map, assert);
+ util.assertMapping(1, 9, '/the/root/one.js', 1, 11, null, map, assert);
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 21, 'bar', map, assert);
+ util.assertMapping(1, 21, '/the/root/one.js', 2, 3, null, map, assert);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 10, 'baz', map, assert);
+ util.assertMapping(1, 32, '/the/root/one.js', 2, 14, 'bar', map, assert);
+
+ util.assertMapping(2, 1, '/the/root/two.js', 1, 1, null, map, assert);
+ util.assertMapping(2, 5, '/the/root/two.js', 1, 5, null, map, assert);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 11, null, map, assert);
+ util.assertMapping(2, 18, '/the/root/two.js', 1, 21, 'n', map, assert);
+ util.assertMapping(2, 21, '/the/root/two.js', 2, 3, null, map, assert);
+ util.assertMapping(2, 28, '/the/root/two.js', 2, 10, 'n', map, assert);
+ };
+
+ exports['test mapping tokens fuzzy'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+
+ // Finding original positions
+ util.assertMapping(1, 20, '/the/root/one.js', 1, 21, 'bar', map, assert, true);
+ util.assertMapping(1, 30, '/the/root/one.js', 2, 10, 'baz', map, assert, true);
+ util.assertMapping(2, 12, '/the/root/two.js', 1, 11, null, map, assert, true);
+
+ // Finding generated positions
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 22, 'bar', map, assert, null, true);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 13, 'baz', map, assert, null, true);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 16, null, map, assert, null, true);
+ };
+
+ exports['test mapping tokens fuzzy in indexed source map'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+
+ // Finding original positions
+ util.assertMapping(1, 20, '/the/root/one.js', 1, 21, 'bar', map, assert, true);
+ util.assertMapping(1, 30, '/the/root/one.js', 2, 10, 'baz', map, assert, true);
+ util.assertMapping(2, 12, '/the/root/two.js', 1, 11, null, map, assert, true);
+
+ // Finding generated positions
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 22, 'bar', map, assert, null, true);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 13, 'baz', map, assert, null, true);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 16, null, map, assert, null, true);
+ };
+
+ exports['test mappings and end of lines'] = function (assert, util) {
+ var smg = new SourceMapGenerator({
+ file: 'foo.js'
+ });
+ smg.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 1, column: 1 },
+ source: 'bar.js'
+ });
+ smg.addMapping({
+ original: { line: 2, column: 2 },
+ generated: { line: 2, column: 2 },
+ source: 'bar.js'
+ });
+
+ var map = SourceMapConsumer.fromSourceMap(smg);
+
+ // When finding original positions, mappings end at the end of the line.
+ util.assertMapping(2, 1, null, null, null, null, map, assert, true)
+
+ // When finding generated positions, mappings do not end at the end of the line.
+ util.assertMapping(1, 1, 'bar.js', 2, 1, null, map, assert, null, true);
+ };
+
+ exports['test creating source map consumers with )]}\' prefix'] = function (assert, util) {
+ assert.doesNotThrow(function () {
+ var map = new SourceMapConsumer(")]}'" + JSON.stringify(util.testMap));
+ });
+ };
+
+ exports['test eachMapping'] = function (assert, util) {
+ var map;
+
+ map = new SourceMapConsumer(util.testMap);
+ var previousLine = -Infinity;
+ var previousColumn = -Infinity;
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.generatedLine >= previousLine);
+
+ assert.ok(mapping.source === '/the/root/one.js' || mapping.source === '/the/root/two.js');
+
+ if (mapping.generatedLine === previousLine) {
+ assert.ok(mapping.generatedColumn >= previousColumn);
+ previousColumn = mapping.generatedColumn;
+ }
+ else {
+ previousLine = mapping.generatedLine;
+ previousColumn = -Infinity;
+ }
+ });
+
+ map = new SourceMapConsumer(util.testMapNoSourceRoot);
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.source === 'one.js' || mapping.source === 'two.js');
+ });
+
+ map = new SourceMapConsumer(util.testMapEmptySourceRoot);
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.source === 'one.js' || mapping.source === 'two.js');
+ });
+ };
+
+ exports['test eachMapping for indexed source maps'] = function(assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+ var previousLine = -Infinity;
+ var previousColumn = -Infinity;
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.generatedLine >= previousLine);
+
+ if (mapping.source) {
+ assert.equal(mapping.source.indexOf(util.testMap.sourceRoot), 0);
+ }
+
+ if (mapping.generatedLine === previousLine) {
+ assert.ok(mapping.generatedColumn >= previousColumn);
+ previousColumn = mapping.generatedColumn;
+ }
+ else {
+ previousLine = mapping.generatedLine;
+ previousColumn = -Infinity;
+ }
+ });
+ };
+
+
+ exports['test iterating over mappings in a different order'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+ var previousLine = -Infinity;
+ var previousColumn = -Infinity;
+ var previousSource = "";
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.source >= previousSource);
+
+ if (mapping.source === previousSource) {
+ assert.ok(mapping.originalLine >= previousLine);
+
+ if (mapping.originalLine === previousLine) {
+ assert.ok(mapping.originalColumn >= previousColumn);
+ previousColumn = mapping.originalColumn;
+ }
+ else {
+ previousLine = mapping.originalLine;
+ previousColumn = -Infinity;
+ }
+ }
+ else {
+ previousSource = mapping.source;
+ previousLine = -Infinity;
+ previousColumn = -Infinity;
+ }
+ }, null, SourceMapConsumer.ORIGINAL_ORDER);
+ };
+
+ exports['test iterating over mappings in a different order in indexed source maps'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+ var previousLine = -Infinity;
+ var previousColumn = -Infinity;
+ var previousSource = "";
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.source >= previousSource);
+
+ if (mapping.source === previousSource) {
+ assert.ok(mapping.originalLine >= previousLine);
+
+ if (mapping.originalLine === previousLine) {
+ assert.ok(mapping.originalColumn >= previousColumn);
+ previousColumn = mapping.originalColumn;
+ }
+ else {
+ previousLine = mapping.originalLine;
+ previousColumn = -Infinity;
+ }
+ }
+ else {
+ previousSource = mapping.source;
+ previousLine = -Infinity;
+ previousColumn = -Infinity;
+ }
+ }, null, SourceMapConsumer.ORIGINAL_ORDER);
+ };
+
+ exports['test that we can set the context for `this` in eachMapping'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+ var context = {};
+ map.eachMapping(function () {
+ assert.equal(this, context);
+ }, context);
+ };
+
+ exports['test that we can set the context for `this` in eachMapping in indexed source maps'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+ var context = {};
+ map.eachMapping(function () {
+ assert.equal(this, context);
+ }, context);
+ };
+
+ exports['test that the `sourcesContent` field has the original sources'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMapWithSourcesContent);
+ var sourcesContent = map.sourcesContent;
+
+ assert.equal(sourcesContent[0], ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(sourcesContent[1], ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.equal(sourcesContent.length, 2);
+ };
+
+ exports['test that we can get the original sources for the sources'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMapWithSourcesContent);
+ var sources = map.sources;
+
+ assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.throws(function () {
+ map.sourceContentFor("");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("/the/root/three.js");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("three.js");
+ }, Error);
+ };
+
+ exports['test that we can get the original source content with relative source paths'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMapRelativeSources);
+ var sources = map.sources;
+
+ assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.throws(function () {
+ map.sourceContentFor("");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("/the/root/three.js");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("three.js");
+ }, Error);
+ };
+
+ exports['test that we can get the original source content for the sources on an indexed source map'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+ var sources = map.sources;
+
+ assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.throws(function () {
+ map.sourceContentFor("");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("/the/root/three.js");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("three.js");
+ }, Error);
+ };
+
+
+ exports['test sourceRoot + generatedPositionFor'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'foo/bar',
+ file: 'baz.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bang.coffee'
+ });
+ map.addMapping({
+ original: { line: 5, column: 5 },
+ generated: { line: 6, column: 6 },
+ source: 'bang.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ // Should handle without sourceRoot.
+ var pos = map.generatedPositionFor({
+ line: 1,
+ column: 1,
+ source: 'bang.coffee'
+ });
+
+ assert.equal(pos.line, 2);
+ assert.equal(pos.column, 2);
+
+ // Should handle with sourceRoot.
+ var pos = map.generatedPositionFor({
+ line: 1,
+ column: 1,
+ source: 'foo/bar/bang.coffee'
+ });
+
+ assert.equal(pos.line, 2);
+ assert.equal(pos.column, 2);
+ };
+
+ exports['test allGeneratedPositionsFor'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bar.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 1 },
+ generated: { line: 3, column: 2 },
+ source: 'bar.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 2 },
+ generated: { line: 3, column: 3 },
+ source: 'bar.coffee'
+ });
+ map.addMapping({
+ original: { line: 3, column: 1 },
+ generated: { line: 4, column: 2 },
+ source: 'bar.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 2,
+ source: 'bar.coffee'
+ });
+
+ assert.equal(mappings.length, 2);
+ assert.equal(mappings[0].line, 3);
+ assert.equal(mappings[0].column, 2);
+ assert.equal(mappings[1].line, 3);
+ assert.equal(mappings[1].column, 3);
+ };
+
+ exports['test allGeneratedPositionsFor for line with no mappings'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bar.coffee'
+ });
+ map.addMapping({
+ original: { line: 3, column: 1 },
+ generated: { line: 4, column: 2 },
+ source: 'bar.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 2,
+ source: 'bar.coffee'
+ });
+
+ assert.equal(mappings.length, 0);
+ };
+
+ exports['test allGeneratedPositionsFor source map with no mappings'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated.js'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 2,
+ source: 'bar.coffee'
+ });
+
+ assert.equal(mappings.length, 0);
+ };
+
+ exports['test computeColumnSpans'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 1, column: 1 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 1 },
+ generated: { line: 2, column: 1 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 2 },
+ generated: { line: 2, column: 10 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 3 },
+ generated: { line: 2, column: 20 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 3, column: 1 },
+ generated: { line: 3, column: 1 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 3, column: 2 },
+ generated: { line: 3, column: 2 },
+ source: 'foo.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ map.computeColumnSpans();
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 1,
+ source: 'foo.coffee'
+ });
+
+ assert.equal(mappings.length, 1);
+ assert.equal(mappings[0].lastColumn, Infinity);
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 2,
+ source: 'foo.coffee'
+ });
+
+ assert.equal(mappings.length, 3);
+ assert.equal(mappings[0].lastColumn, 9);
+ assert.equal(mappings[1].lastColumn, 19);
+ assert.equal(mappings[2].lastColumn, Infinity);
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 3,
+ source: 'foo.coffee'
+ });
+
+ assert.equal(mappings.length, 2);
+ assert.equal(mappings[0].lastColumn, 1);
+ assert.equal(mappings[1].lastColumn, Infinity);
+ };
+
+ exports['test sourceRoot + originalPositionFor'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'foo/bar',
+ file: 'baz.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bang.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var pos = map.originalPositionFor({
+ line: 2,
+ column: 2,
+ });
+
+ // Should always have the prepended source root
+ assert.equal(pos.source, 'foo/bar/bang.coffee');
+ assert.equal(pos.line, 1);
+ assert.equal(pos.column, 1);
+ };
+
+ exports['test github issue #56'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'http://',
+ file: 'www.example.com/foo.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'www.example.com/original.js'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var sources = map.sources;
+ assert.equal(sources.length, 1);
+ assert.equal(sources[0], 'http://www.example.com/original.js');
+ };
+
+ exports['test github issue #43'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'http://example.com',
+ file: 'foo.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'http://cdn.example.com/original.js'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var sources = map.sources;
+ assert.equal(sources.length, 1,
+ 'Should only be one source.');
+ assert.equal(sources[0], 'http://cdn.example.com/original.js',
+ 'Should not be joined with the sourceRoot.');
+ };
+
+ exports['test absolute path, but same host sources'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'http://example.com/foo/bar',
+ file: 'foo.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: '/original.js'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var sources = map.sources;
+ assert.equal(sources.length, 1,
+ 'Should only be one source.');
+ assert.equal(sources[0], 'http://example.com/original.js',
+ 'Source should be relative the host of the source root.');
+ };
+
+ exports['test indexed source map errors when sections are out of order by line'] = function(assert, util) {
+ // Make a deep copy of the indexedTestMap
+ var misorderedIndexedTestMap = JSON.parse(JSON.stringify(util.indexedTestMap));
+
+ misorderedIndexedTestMap.sections[0].offset = {
+ line: 2,
+ column: 0
+ };
+
+ assert.throws(function() {
+ new SourceMapConsumer(misorderedIndexedTestMap);
+ }, Error);
+ };
+
+ exports['test github issue #64'] = function (assert, util) {
+ var map = new SourceMapConsumer({
+ "version": 3,
+ "file": "foo.js",
+ "sourceRoot": "http://example.com/",
+ "sources": ["/a"],
+ "names": [],
+ "mappings": "AACA",
+ "sourcesContent": ["foo"]
+ });
+
+ assert.equal(map.sourceContentFor("a"), "foo");
+ assert.equal(map.sourceContentFor("/a"), "foo");
+ };
+
+ exports['test bug 885597'] = function (assert, util) {
+ var map = new SourceMapConsumer({
+ "version": 3,
+ "file": "foo.js",
+ "sourceRoot": "file:///Users/AlGore/Invented/The/Internet/",
+ "sources": ["/a"],
+ "names": [],
+ "mappings": "AACA",
+ "sourcesContent": ["foo"]
+ });
+
+ var s = map.sources[0];
+ assert.equal(map.sourceContentFor(s), "foo");
+ };
+
+ exports['test github issue #72, duplicate sources'] = function (assert, util) {
+ var map = new SourceMapConsumer({
+ "version": 3,
+ "file": "foo.js",
+ "sources": ["source1.js", "source1.js", "source3.js"],
+ "names": [],
+ "mappings": ";EAAC;;IAEE;;MEEE",
+ "sourceRoot": "http://example.com"
+ });
+
+ var pos = map.originalPositionFor({
+ line: 2,
+ column: 2
+ });
+ assert.equal(pos.source, 'http://example.com/source1.js');
+ assert.equal(pos.line, 1);
+ assert.equal(pos.column, 1);
+
+ var pos = map.originalPositionFor({
+ line: 4,
+ column: 4
+ });
+ assert.equal(pos.source, 'http://example.com/source1.js');
+ assert.equal(pos.line, 3);
+ assert.equal(pos.column, 3);
+
+ var pos = map.originalPositionFor({
+ line: 6,
+ column: 6
+ });
+ assert.equal(pos.source, 'http://example.com/source3.js');
+ assert.equal(pos.line, 5);
+ assert.equal(pos.column, 5);
+ };
+
+ exports['test github issue #72, duplicate names'] = function (assert, util) {
+ var map = new SourceMapConsumer({
+ "version": 3,
+ "file": "foo.js",
+ "sources": ["source.js"],
+ "names": ["name1", "name1", "name3"],
+ "mappings": ";EAACA;;IAEEA;;MAEEE",
+ "sourceRoot": "http://example.com"
+ });
+
+ var pos = map.originalPositionFor({
+ line: 2,
+ column: 2
+ });
+ assert.equal(pos.name, 'name1');
+ assert.equal(pos.line, 1);
+ assert.equal(pos.column, 1);
+
+ var pos = map.originalPositionFor({
+ line: 4,
+ column: 4
+ });
+ assert.equal(pos.name, 'name1');
+ assert.equal(pos.line, 3);
+ assert.equal(pos.column, 3);
+
+ var pos = map.originalPositionFor({
+ line: 6,
+ column: 6
+ });
+ assert.equal(pos.name, 'name3');
+ assert.equal(pos.line, 5);
+ assert.equal(pos.column, 5);
+ };
+
+ exports['test SourceMapConsumer.fromSourceMap'] = function (assert, util) {
+ var smg = new SourceMapGenerator({
+ sourceRoot: 'http://example.com/',
+ file: 'foo.js'
+ });
+ smg.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bar.js'
+ });
+ smg.addMapping({
+ original: { line: 2, column: 2 },
+ generated: { line: 4, column: 4 },
+ source: 'baz.js',
+ name: 'dirtMcGirt'
+ });
+ smg.setSourceContent('baz.js', 'baz.js content');
+
+ var smc = SourceMapConsumer.fromSourceMap(smg);
+ assert.equal(smc.file, 'foo.js');
+ assert.equal(smc.sourceRoot, 'http://example.com/');
+ assert.equal(smc.sources.length, 2);
+ assert.equal(smc.sources[0], 'http://example.com/bar.js');
+ assert.equal(smc.sources[1], 'http://example.com/baz.js');
+ assert.equal(smc.sourceContentFor('baz.js'), 'baz.js content');
+
+ var pos = smc.originalPositionFor({
+ line: 2,
+ column: 2
+ });
+ assert.equal(pos.line, 1);
+ assert.equal(pos.column, 1);
+ assert.equal(pos.source, 'http://example.com/bar.js');
+ assert.equal(pos.name, null);
+
+ pos = smc.generatedPositionFor({
+ line: 1,
+ column: 1,
+ source: 'http://example.com/bar.js'
+ });
+ assert.equal(pos.line, 2);
+ assert.equal(pos.column, 2);
+
+ pos = smc.originalPositionFor({
+ line: 4,
+ column: 4
+ });
+ assert.equal(pos.line, 2);
+ assert.equal(pos.column, 2);
+ assert.equal(pos.source, 'http://example.com/baz.js');
+ assert.equal(pos.name, 'dirtMcGirt');
+
+ pos = smc.generatedPositionFor({
+ line: 2,
+ column: 2,
+ source: 'http://example.com/baz.js'
+ });
+ assert.equal(pos.line, 4);
+ assert.equal(pos.column, 4);
+ };
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js
new file mode 100644
index 0000000..d748bb1
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js
@@ -0,0 +1,679 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
+ var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
+ var SourceNode = require('../../lib/source-map/source-node').SourceNode;
+ var util = require('./util');
+
+ exports['test some simple stuff'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'foo.js',
+ sourceRoot: '.'
+ });
+ assert.ok(true);
+
+ var map = new SourceMapGenerator().toJSON();
+ assert.ok(!('file' in map));
+ assert.ok(!('sourceRoot' in map));
+ };
+
+ exports['test JSON serialization'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'foo.js',
+ sourceRoot: '.'
+ });
+ assert.equal(map.toString(), JSON.stringify(map));
+ };
+
+ exports['test adding mappings (case 1)'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ assert.doesNotThrow(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 }
+ });
+ });
+ };
+
+ exports['test adding mappings (case 2)'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ assert.doesNotThrow(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ source: 'bar.js',
+ original: { line: 1, column: 1 }
+ });
+ });
+ };
+
+ exports['test adding mappings (case 3)'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ assert.doesNotThrow(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ source: 'bar.js',
+ original: { line: 1, column: 1 },
+ name: 'someToken'
+ });
+ });
+ };
+
+ exports['test adding mappings (invalid)'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ // Not enough info.
+ assert.throws(function () {
+ map.addMapping({});
+ });
+
+ // Original file position, but no source.
+ assert.throws(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 1, column: 1 }
+ });
+ });
+ };
+
+ exports['test adding mappings with skipValidation'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.',
+ skipValidation: true
+ });
+
+ // Not enough info, caught by `util.getArgs`
+ assert.throws(function () {
+ map.addMapping({});
+ });
+
+ // Original file position, but no source. Not checked.
+ assert.doesNotThrow(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 1, column: 1 }
+ });
+ });
+ };
+
+ exports['test that the correct mappings are being generated'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'min.js',
+ sourceRoot: '/the/root'
+ });
+
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 1, column: 1 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 5 },
+ original: { line: 1, column: 5 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 9 },
+ original: { line: 1, column: 11 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 18 },
+ original: { line: 1, column: 21 },
+ source: 'one.js',
+ name: 'bar'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 21 },
+ original: { line: 2, column: 3 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 28 },
+ original: { line: 2, column: 10 },
+ source: 'one.js',
+ name: 'baz'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 32 },
+ original: { line: 2, column: 14 },
+ source: 'one.js',
+ name: 'bar'
+ });
+
+ map.addMapping({
+ generated: { line: 2, column: 1 },
+ original: { line: 1, column: 1 },
+ source: 'two.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 5 },
+ original: { line: 1, column: 5 },
+ source: 'two.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 9 },
+ original: { line: 1, column: 11 },
+ source: 'two.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 18 },
+ original: { line: 1, column: 21 },
+ source: 'two.js',
+ name: 'n'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 21 },
+ original: { line: 2, column: 3 },
+ source: 'two.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 28 },
+ original: { line: 2, column: 10 },
+ source: 'two.js',
+ name: 'n'
+ });
+
+ map = JSON.parse(map.toString());
+
+ util.assertEqualMaps(assert, map, util.testMap);
+ };
+
+ exports['test that adding a mapping with an empty string name does not break generation'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ source: 'bar.js',
+ original: { line: 1, column: 1 },
+ name: ''
+ });
+
+ assert.doesNotThrow(function () {
+ JSON.parse(map.toString());
+ });
+ };
+
+ exports['test that source content can be set'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'min.js',
+ sourceRoot: '/the/root'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 1, column: 1 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 1 },
+ original: { line: 1, column: 1 },
+ source: 'two.js'
+ });
+ map.setSourceContent('one.js', 'one file content');
+
+ map = JSON.parse(map.toString());
+ assert.equal(map.sources[0], 'one.js');
+ assert.equal(map.sources[1], 'two.js');
+ assert.equal(map.sourcesContent[0], 'one file content');
+ assert.equal(map.sourcesContent[1], null);
+ };
+
+ exports['test .fromSourceMap'] = function (assert, util) {
+ var map = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(util.testMap));
+ util.assertEqualMaps(assert, map.toJSON(), util.testMap);
+ };
+
+ exports['test .fromSourceMap with sourcesContent'] = function (assert, util) {
+ var map = SourceMapGenerator.fromSourceMap(
+ new SourceMapConsumer(util.testMapWithSourcesContent));
+ util.assertEqualMaps(assert, map.toJSON(), util.testMapWithSourcesContent);
+ };
+
+ exports['test applySourceMap'] = function (assert, util) {
+ var node = new SourceNode(null, null, null, [
+ new SourceNode(2, 0, 'fileX', 'lineX2\n'),
+ 'genA1\n',
+ new SourceNode(2, 0, 'fileY', 'lineY2\n'),
+ 'genA2\n',
+ new SourceNode(1, 0, 'fileX', 'lineX1\n'),
+ 'genA3\n',
+ new SourceNode(1, 0, 'fileY', 'lineY1\n')
+ ]);
+ var mapStep1 = node.toStringWithSourceMap({
+ file: 'fileA'
+ }).map;
+ mapStep1.setSourceContent('fileX', 'lineX1\nlineX2\n');
+ mapStep1 = mapStep1.toJSON();
+
+ node = new SourceNode(null, null, null, [
+ 'gen1\n',
+ new SourceNode(1, 0, 'fileA', 'lineA1\n'),
+ new SourceNode(2, 0, 'fileA', 'lineA2\n'),
+ new SourceNode(3, 0, 'fileA', 'lineA3\n'),
+ new SourceNode(4, 0, 'fileA', 'lineA4\n'),
+ new SourceNode(1, 0, 'fileB', 'lineB1\n'),
+ new SourceNode(2, 0, 'fileB', 'lineB2\n'),
+ 'gen2\n'
+ ]);
+ var mapStep2 = node.toStringWithSourceMap({
+ file: 'fileGen'
+ }).map;
+ mapStep2.setSourceContent('fileB', 'lineB1\nlineB2\n');
+ mapStep2 = mapStep2.toJSON();
+
+ node = new SourceNode(null, null, null, [
+ 'gen1\n',
+ new SourceNode(2, 0, 'fileX', 'lineA1\n'),
+ new SourceNode(2, 0, 'fileA', 'lineA2\n'),
+ new SourceNode(2, 0, 'fileY', 'lineA3\n'),
+ new SourceNode(4, 0, 'fileA', 'lineA4\n'),
+ new SourceNode(1, 0, 'fileB', 'lineB1\n'),
+ new SourceNode(2, 0, 'fileB', 'lineB2\n'),
+ 'gen2\n'
+ ]);
+ var expectedMap = node.toStringWithSourceMap({
+ file: 'fileGen'
+ }).map;
+ expectedMap.setSourceContent('fileX', 'lineX1\nlineX2\n');
+ expectedMap.setSourceContent('fileB', 'lineB1\nlineB2\n');
+ expectedMap = expectedMap.toJSON();
+
+ // apply source map "mapStep1" to "mapStep2"
+ var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(mapStep2));
+ generator.applySourceMap(new SourceMapConsumer(mapStep1));
+ var actualMap = generator.toJSON();
+
+ util.assertEqualMaps(assert, actualMap, expectedMap);
+ };
+
+ exports['test applySourceMap throws when file is missing'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'test.js'
+ });
+ var map2 = new SourceMapGenerator();
+ assert.throws(function() {
+ map.applySourceMap(new SourceMapConsumer(map2.toJSON()));
+ });
+ };
+
+ exports['test the two additional parameters of applySourceMap'] = function (assert, util) {
+ // Assume the following directory structure:
+ //
+ // http://foo.org/
+ // bar.coffee
+ // app/
+ // coffee/
+ // foo.coffee
+ // temp/
+ // bundle.js
+ // temp_maps/
+ // bundle.js.map
+ // public/
+ // bundle.min.js
+ // bundle.min.js.map
+ //
+ // http://www.example.com/
+ // baz.coffee
+
+ var bundleMap = new SourceMapGenerator({
+ file: 'bundle.js'
+ });
+ bundleMap.addMapping({
+ generated: { line: 3, column: 3 },
+ original: { line: 2, column: 2 },
+ source: '../../coffee/foo.coffee'
+ });
+ bundleMap.setSourceContent('../../coffee/foo.coffee', 'foo coffee');
+ bundleMap.addMapping({
+ generated: { line: 13, column: 13 },
+ original: { line: 12, column: 12 },
+ source: '/bar.coffee'
+ });
+ bundleMap.setSourceContent('/bar.coffee', 'bar coffee');
+ bundleMap.addMapping({
+ generated: { line: 23, column: 23 },
+ original: { line: 22, column: 22 },
+ source: 'http://www.example.com/baz.coffee'
+ });
+ bundleMap.setSourceContent(
+ 'http://www.example.com/baz.coffee',
+ 'baz coffee'
+ );
+ bundleMap = new SourceMapConsumer(bundleMap.toJSON());
+
+ var minifiedMap = new SourceMapGenerator({
+ file: 'bundle.min.js',
+ sourceRoot: '..'
+ });
+ minifiedMap.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 3, column: 3 },
+ source: 'temp/bundle.js'
+ });
+ minifiedMap.addMapping({
+ generated: { line: 11, column: 11 },
+ original: { line: 13, column: 13 },
+ source: 'temp/bundle.js'
+ });
+ minifiedMap.addMapping({
+ generated: { line: 21, column: 21 },
+ original: { line: 23, column: 23 },
+ source: 'temp/bundle.js'
+ });
+ minifiedMap = new SourceMapConsumer(minifiedMap.toJSON());
+
+ var expectedMap = function (sources) {
+ var map = new SourceMapGenerator({
+ file: 'bundle.min.js',
+ sourceRoot: '..'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 2, column: 2 },
+ source: sources[0]
+ });
+ map.setSourceContent(sources[0], 'foo coffee');
+ map.addMapping({
+ generated: { line: 11, column: 11 },
+ original: { line: 12, column: 12 },
+ source: sources[1]
+ });
+ map.setSourceContent(sources[1], 'bar coffee');
+ map.addMapping({
+ generated: { line: 21, column: 21 },
+ original: { line: 22, column: 22 },
+ source: sources[2]
+ });
+ map.setSourceContent(sources[2], 'baz coffee');
+ return map.toJSON();
+ }
+
+ var actualMap = function (aSourceMapPath) {
+ var map = SourceMapGenerator.fromSourceMap(minifiedMap);
+ // Note that relying on `bundleMap.file` (which is simply 'bundle.js')
+ // instead of supplying the second parameter wouldn't work here.
+ map.applySourceMap(bundleMap, '../temp/bundle.js', aSourceMapPath);
+ return map.toJSON();
+ }
+
+ util.assertEqualMaps(assert, actualMap('../temp/temp_maps'), expectedMap([
+ 'coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap('/app/temp/temp_maps'), expectedMap([
+ '/app/coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap('http://foo.org/app/temp/temp_maps'), expectedMap([
+ 'http://foo.org/app/coffee/foo.coffee',
+ 'http://foo.org/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ // If the third parameter is omitted or set to the current working
+ // directory we get incorrect source paths:
+
+ util.assertEqualMaps(assert, actualMap(), expectedMap([
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap(''), expectedMap([
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap('.'), expectedMap([
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap('./'), expectedMap([
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+ };
+
+ exports['test applySourceMap name handling'] = function (assert, util) {
+ // Imagine some CoffeeScript code being compiled into JavaScript and then
+ // minified.
+
+ var assertName = function(coffeeName, jsName, expectedName) {
+ var minifiedMap = new SourceMapGenerator({
+ file: 'test.js.min'
+ });
+ minifiedMap.addMapping({
+ generated: { line: 1, column: 4 },
+ original: { line: 1, column: 4 },
+ source: 'test.js',
+ name: jsName
+ });
+
+ var coffeeMap = new SourceMapGenerator({
+ file: 'test.js'
+ });
+ coffeeMap.addMapping({
+ generated: { line: 1, column: 4 },
+ original: { line: 1, column: 0 },
+ source: 'test.coffee',
+ name: coffeeName
+ });
+
+ minifiedMap.applySourceMap(new SourceMapConsumer(coffeeMap.toJSON()));
+
+ new SourceMapConsumer(minifiedMap.toJSON()).eachMapping(function(mapping) {
+ assert.equal(mapping.name, expectedName);
+ });
+ };
+
+ // `foo = 1` -> `var foo = 1;` -> `var a=1`
+ // CoffeeScript doesn’t rename variables, so there’s no need for it to
+ // provide names in its source maps. Minifiers do rename variables and
+ // therefore do provide names in their source maps. So that name should be
+ // retained if the original map lacks names.
+ assertName(null, 'foo', 'foo');
+
+ // `foo = 1` -> `var coffee$foo = 1;` -> `var a=1`
+ // Imagine that CoffeeScript prefixed all variables with `coffee$`. Even
+ // though the minifier then also provides a name, the original name is
+ // what corresponds to the source.
+ assertName('foo', 'coffee$foo', 'foo');
+
+ // `foo = 1` -> `var coffee$foo = 1;` -> `var coffee$foo=1`
+ // Minifiers can turn off variable mangling. Then there’s no need to
+ // provide names in the source map, but the names from the original map are
+ // still needed.
+ assertName('foo', null, 'foo');
+
+ // `foo = 1` -> `var foo = 1;` -> `var foo=1`
+ // No renaming at all.
+ assertName(null, null, null);
+ };
+
+ exports['test sorting with duplicate generated mappings'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'test.js'
+ });
+ map.addMapping({
+ generated: { line: 3, column: 0 },
+ original: { line: 2, column: 0 },
+ source: 'a.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 0 }
+ });
+ map.addMapping({
+ generated: { line: 2, column: 0 }
+ });
+ map.addMapping({
+ generated: { line: 1, column: 0 },
+ original: { line: 1, column: 0 },
+ source: 'a.js'
+ });
+
+ util.assertEqualMaps(assert, map.toJSON(), {
+ version: 3,
+ file: 'test.js',
+ sources: ['a.js'],
+ names: [],
+ mappings: 'AAAA;A;AACA'
+ });
+ };
+
+ exports['test ignore duplicate mappings.'] = function (assert, util) {
+ var init = { file: 'min.js', sourceRoot: '/the/root' };
+ var map1, map2;
+
+ // null original source location
+ var nullMapping1 = {
+ generated: { line: 1, column: 0 }
+ };
+ var nullMapping2 = {
+ generated: { line: 2, column: 2 }
+ };
+
+ map1 = new SourceMapGenerator(init);
+ map2 = new SourceMapGenerator(init);
+
+ map1.addMapping(nullMapping1);
+ map1.addMapping(nullMapping1);
+
+ map2.addMapping(nullMapping1);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ map1.addMapping(nullMapping2);
+ map1.addMapping(nullMapping1);
+
+ map2.addMapping(nullMapping2);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ // original source location
+ var srcMapping1 = {
+ generated: { line: 1, column: 0 },
+ original: { line: 11, column: 0 },
+ source: 'srcMapping1.js'
+ };
+ var srcMapping2 = {
+ generated: { line: 2, column: 2 },
+ original: { line: 11, column: 0 },
+ source: 'srcMapping2.js'
+ };
+
+ map1 = new SourceMapGenerator(init);
+ map2 = new SourceMapGenerator(init);
+
+ map1.addMapping(srcMapping1);
+ map1.addMapping(srcMapping1);
+
+ map2.addMapping(srcMapping1);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ map1.addMapping(srcMapping2);
+ map1.addMapping(srcMapping1);
+
+ map2.addMapping(srcMapping2);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ // full original source and name information
+ var fullMapping1 = {
+ generated: { line: 1, column: 0 },
+ original: { line: 11, column: 0 },
+ source: 'fullMapping1.js',
+ name: 'fullMapping1'
+ };
+ var fullMapping2 = {
+ generated: { line: 2, column: 2 },
+ original: { line: 11, column: 0 },
+ source: 'fullMapping2.js',
+ name: 'fullMapping2'
+ };
+
+ map1 = new SourceMapGenerator(init);
+ map2 = new SourceMapGenerator(init);
+
+ map1.addMapping(fullMapping1);
+ map1.addMapping(fullMapping1);
+
+ map2.addMapping(fullMapping1);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ map1.addMapping(fullMapping2);
+ map1.addMapping(fullMapping1);
+
+ map2.addMapping(fullMapping2);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+ };
+
+ exports['test github issue #72, check for duplicate names or sources'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'test.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 2, column: 2 },
+ source: 'a.js',
+ name: 'foo'
+ });
+ map.addMapping({
+ generated: { line: 3, column: 3 },
+ original: { line: 4, column: 4 },
+ source: 'a.js',
+ name: 'foo'
+ });
+ util.assertEqualMaps(assert, map.toJSON(), {
+ version: 3,
+ file: 'test.js',
+ sources: ['a.js'],
+ names: ['foo'],
+ mappings: 'CACEA;;GAEEA'
+ });
+ };
+
+ exports['test setting sourcesContent to null when already null'] = function (assert, util) {
+ var smg = new SourceMapGenerator({ file: "foo.js" });
+ assert.doesNotThrow(function() {
+ smg.setSourceContent("bar.js", null);
+ });
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js
new file mode 100644
index 0000000..139af4e
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js
@@ -0,0 +1,612 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
+ var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
+ var SourceNode = require('../../lib/source-map/source-node').SourceNode;
+
+ function forEachNewline(fn) {
+ return function (assert, util) {
+ ['\n', '\r\n'].forEach(fn.bind(null, assert, util));
+ }
+ }
+
+ exports['test .add()'] = function (assert, util) {
+ var node = new SourceNode(null, null, null);
+
+ // Adding a string works.
+ node.add('function noop() {}');
+
+ // Adding another source node works.
+ node.add(new SourceNode(null, null, null));
+
+ // Adding an array works.
+ node.add(['function foo() {',
+ new SourceNode(null, null, null,
+ 'return 10;'),
+ '}']);
+
+ // Adding other stuff doesn't.
+ assert.throws(function () {
+ node.add({});
+ });
+ assert.throws(function () {
+ node.add(function () {});
+ });
+ };
+
+ exports['test .prepend()'] = function (assert, util) {
+ var node = new SourceNode(null, null, null);
+
+ // Prepending a string works.
+ node.prepend('function noop() {}');
+ assert.equal(node.children[0], 'function noop() {}');
+ assert.equal(node.children.length, 1);
+
+ // Prepending another source node works.
+ node.prepend(new SourceNode(null, null, null));
+ assert.equal(node.children[0], '');
+ assert.equal(node.children[1], 'function noop() {}');
+ assert.equal(node.children.length, 2);
+
+ // Prepending an array works.
+ node.prepend(['function foo() {',
+ new SourceNode(null, null, null,
+ 'return 10;'),
+ '}']);
+ assert.equal(node.children[0], 'function foo() {');
+ assert.equal(node.children[1], 'return 10;');
+ assert.equal(node.children[2], '}');
+ assert.equal(node.children[3], '');
+ assert.equal(node.children[4], 'function noop() {}');
+ assert.equal(node.children.length, 5);
+
+ // Prepending other stuff doesn't.
+ assert.throws(function () {
+ node.prepend({});
+ });
+ assert.throws(function () {
+ node.prepend(function () {});
+ });
+ };
+
+ exports['test .toString()'] = function (assert, util) {
+ assert.equal((new SourceNode(null, null, null,
+ ['function foo() {',
+ new SourceNode(null, null, null, 'return 10;'),
+ '}'])).toString(),
+ 'function foo() {return 10;}');
+ };
+
+ exports['test .join()'] = function (assert, util) {
+ assert.equal((new SourceNode(null, null, null,
+ ['a', 'b', 'c', 'd'])).join(', ').toString(),
+ 'a, b, c, d');
+ };
+
+ exports['test .walk()'] = function (assert, util) {
+ var node = new SourceNode(null, null, null,
+ ['(function () {\n',
+ ' ', new SourceNode(1, 0, 'a.js', ['someCall()']), ';\n',
+ ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n',
+ '}());']);
+ var expected = [
+ { str: '(function () {\n', source: null, line: null, column: null },
+ { str: ' ', source: null, line: null, column: null },
+ { str: 'someCall()', source: 'a.js', line: 1, column: 0 },
+ { str: ';\n', source: null, line: null, column: null },
+ { str: ' ', source: null, line: null, column: null },
+ { str: 'if (foo) bar()', source: 'b.js', line: 2, column: 0 },
+ { str: ';\n', source: null, line: null, column: null },
+ { str: '}());', source: null, line: null, column: null },
+ ];
+ var i = 0;
+ node.walk(function (chunk, loc) {
+ assert.equal(expected[i].str, chunk);
+ assert.equal(expected[i].source, loc.source);
+ assert.equal(expected[i].line, loc.line);
+ assert.equal(expected[i].column, loc.column);
+ i++;
+ });
+ };
+
+ exports['test .replaceRight'] = function (assert, util) {
+ var node;
+
+ // Not nested
+ node = new SourceNode(null, null, null, 'hello world');
+ node.replaceRight(/world/, 'universe');
+ assert.equal(node.toString(), 'hello universe');
+
+ // Nested
+ node = new SourceNode(null, null, null,
+ [new SourceNode(null, null, null, 'hey sexy mama, '),
+ new SourceNode(null, null, null, 'want to kill all humans?')]);
+ node.replaceRight(/kill all humans/, 'watch Futurama');
+ assert.equal(node.toString(), 'hey sexy mama, want to watch Futurama?');
+ };
+
+ exports['test .toStringWithSourceMap()'] = forEachNewline(function (assert, util, nl) {
+ var node = new SourceNode(null, null, null,
+ ['(function () {' + nl,
+ ' ',
+ new SourceNode(1, 0, 'a.js', 'someCall', 'originalCall'),
+ new SourceNode(1, 8, 'a.js', '()'),
+ ';' + nl,
+ ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';' + nl,
+ '}());']);
+ var result = node.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ assert.equal(result.code, [
+ '(function () {',
+ ' someCall();',
+ ' if (foo) bar();',
+ '}());'
+ ].join(nl));
+
+ var map = result.map;
+ var mapWithoutOptions = node.toStringWithSourceMap().map;
+
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ assert.ok(mapWithoutOptions instanceof SourceMapGenerator, 'mapWithoutOptions instanceof SourceMapGenerator');
+ assert.ok(!('file' in mapWithoutOptions));
+ mapWithoutOptions._file = 'foo.js';
+ util.assertEqualMaps(assert, map.toJSON(), mapWithoutOptions.toJSON());
+
+ map = new SourceMapConsumer(map.toString());
+
+ var actual;
+
+ actual = map.originalPositionFor({
+ line: 1,
+ column: 4
+ });
+ assert.equal(actual.source, null);
+ assert.equal(actual.line, null);
+ assert.equal(actual.column, null);
+
+ actual = map.originalPositionFor({
+ line: 2,
+ column: 2
+ });
+ assert.equal(actual.source, 'a.js');
+ assert.equal(actual.line, 1);
+ assert.equal(actual.column, 0);
+ assert.equal(actual.name, 'originalCall');
+
+ actual = map.originalPositionFor({
+ line: 3,
+ column: 2
+ });
+ assert.equal(actual.source, 'b.js');
+ assert.equal(actual.line, 2);
+ assert.equal(actual.column, 0);
+
+ actual = map.originalPositionFor({
+ line: 3,
+ column: 16
+ });
+ assert.equal(actual.source, null);
+ assert.equal(actual.line, null);
+ assert.equal(actual.column, null);
+
+ actual = map.originalPositionFor({
+ line: 4,
+ column: 2
+ });
+ assert.equal(actual.source, null);
+ assert.equal(actual.line, null);
+ assert.equal(actual.column, null);
+ });
+
+ exports['test .fromStringWithSourceMap()'] = forEachNewline(function (assert, util, nl) {
+ var testCode = util.testGeneratedCode.replace(/\n/g, nl);
+ var node = SourceNode.fromStringWithSourceMap(
+ testCode,
+ new SourceMapConsumer(util.testMap));
+
+ var result = node.toStringWithSourceMap({
+ file: 'min.js'
+ });
+ var map = result.map;
+ var code = result.code;
+
+ assert.equal(code, testCode);
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ map = map.toJSON();
+ assert.equal(map.version, util.testMap.version);
+ assert.equal(map.file, util.testMap.file);
+ assert.equal(map.mappings, util.testMap.mappings);
+ });
+
+ exports['test .fromStringWithSourceMap() empty map'] = forEachNewline(function (assert, util, nl) {
+ var node = SourceNode.fromStringWithSourceMap(
+ util.testGeneratedCode.replace(/\n/g, nl),
+ new SourceMapConsumer(util.emptyMap));
+ var result = node.toStringWithSourceMap({
+ file: 'min.js'
+ });
+ var map = result.map;
+ var code = result.code;
+
+ assert.equal(code, util.testGeneratedCode.replace(/\n/g, nl));
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ map = map.toJSON();
+ assert.equal(map.version, util.emptyMap.version);
+ assert.equal(map.file, util.emptyMap.file);
+ assert.equal(map.mappings.length, util.emptyMap.mappings.length);
+ assert.equal(map.mappings, util.emptyMap.mappings);
+ });
+
+ exports['test .fromStringWithSourceMap() complex version'] = forEachNewline(function (assert, util, nl) {
+ var input = new SourceNode(null, null, null, [
+ "(function() {" + nl,
+ " var Test = {};" + nl,
+ " ", new SourceNode(1, 0, "a.js", "Test.A = { value: 1234 };" + nl),
+ " ", new SourceNode(2, 0, "a.js", "Test.A.x = 'xyz';"), nl,
+ "}());" + nl,
+ "/* Generated Source */"]);
+ input = input.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ var node = SourceNode.fromStringWithSourceMap(
+ input.code,
+ new SourceMapConsumer(input.map.toString()));
+
+ var result = node.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+ var map = result.map;
+ var code = result.code;
+
+ assert.equal(code, input.code);
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ map = map.toJSON();
+ var inputMap = input.map.toJSON();
+ util.assertEqualMaps(assert, map, inputMap);
+ });
+
+ exports['test .fromStringWithSourceMap() third argument'] = function (assert, util) {
+ // Assume the following directory structure:
+ //
+ // http://foo.org/
+ // bar.coffee
+ // app/
+ // coffee/
+ // foo.coffee
+ // coffeeBundle.js # Made from {foo,bar,baz}.coffee
+ // maps/
+ // coffeeBundle.js.map
+ // js/
+ // foo.js
+ // public/
+ // app.js # Made from {foo,coffeeBundle}.js
+ // app.js.map
+ //
+ // http://www.example.com/
+ // baz.coffee
+
+ var coffeeBundle = new SourceNode(1, 0, 'foo.coffee', 'foo(coffee);\n');
+ coffeeBundle.setSourceContent('foo.coffee', 'foo coffee');
+ coffeeBundle.add(new SourceNode(2, 0, '/bar.coffee', 'bar(coffee);\n'));
+ coffeeBundle.add(new SourceNode(3, 0, 'http://www.example.com/baz.coffee', 'baz(coffee);'));
+ coffeeBundle = coffeeBundle.toStringWithSourceMap({
+ file: 'foo.js',
+ sourceRoot: '..'
+ });
+
+ var foo = new SourceNode(1, 0, 'foo.js', 'foo(js);');
+
+ var test = function(relativePath, expectedSources) {
+ var app = new SourceNode();
+ app.add(SourceNode.fromStringWithSourceMap(
+ coffeeBundle.code,
+ new SourceMapConsumer(coffeeBundle.map.toString()),
+ relativePath));
+ app.add(foo);
+ var i = 0;
+ app.walk(function (chunk, loc) {
+ assert.equal(loc.source, expectedSources[i]);
+ i++;
+ });
+ app.walkSourceContents(function (sourceFile, sourceContent) {
+ assert.equal(sourceFile, expectedSources[0]);
+ assert.equal(sourceContent, 'foo coffee');
+ })
+ };
+
+ test('../coffee/maps', [
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+
+ // If the third parameter is omitted or set to the current working
+ // directory we get incorrect source paths:
+
+ test(undefined, [
+ '../foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+
+ test('', [
+ '../foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+
+ test('.', [
+ '../foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+
+ test('./', [
+ '../foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+ };
+
+ exports['test .toStringWithSourceMap() merging duplicate mappings'] = forEachNewline(function (assert, util, nl) {
+ var input = new SourceNode(null, null, null, [
+ new SourceNode(1, 0, "a.js", "(function"),
+ new SourceNode(1, 0, "a.js", "() {" + nl),
+ " ",
+ new SourceNode(1, 0, "a.js", "var Test = "),
+ new SourceNode(1, 0, "b.js", "{};" + nl),
+ new SourceNode(2, 0, "b.js", "Test"),
+ new SourceNode(2, 0, "b.js", ".A", "A"),
+ new SourceNode(2, 20, "b.js", " = { value: ", "A"),
+ "1234",
+ new SourceNode(2, 40, "b.js", " };" + nl, "A"),
+ "}());" + nl,
+ "/* Generated Source */"
+ ]);
+ input = input.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ assert.equal(input.code, [
+ "(function() {",
+ " var Test = {};",
+ "Test.A = { value: 1234 };",
+ "}());",
+ "/* Generated Source */"
+ ].join(nl))
+
+ var correctMap = new SourceMapGenerator({
+ file: 'foo.js'
+ });
+ correctMap.addMapping({
+ generated: { line: 1, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ // Here is no need for a empty mapping,
+ // because mappings ends at eol
+ correctMap.addMapping({
+ generated: { line: 2, column: 2 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 2, column: 13 },
+ source: 'b.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 0 },
+ source: 'b.js',
+ original: { line: 2, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 4 },
+ source: 'b.js',
+ name: 'A',
+ original: { line: 2, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 6 },
+ source: 'b.js',
+ name: 'A',
+ original: { line: 2, column: 20 }
+ });
+ // This empty mapping is required,
+ // because there is a hole in the middle of the line
+ correctMap.addMapping({
+ generated: { line: 3, column: 18 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 22 },
+ source: 'b.js',
+ name: 'A',
+ original: { line: 2, column: 40 }
+ });
+ // Here is no need for a empty mapping,
+ // because mappings ends at eol
+
+ var inputMap = input.map.toJSON();
+ correctMap = correctMap.toJSON();
+ util.assertEqualMaps(assert, inputMap, correctMap);
+ });
+
+ exports['test .toStringWithSourceMap() multi-line SourceNodes'] = forEachNewline(function (assert, util, nl) {
+ var input = new SourceNode(null, null, null, [
+ new SourceNode(1, 0, "a.js", "(function() {" + nl + "var nextLine = 1;" + nl + "anotherLine();" + nl),
+ new SourceNode(2, 2, "b.js", "Test.call(this, 123);" + nl),
+ new SourceNode(2, 2, "b.js", "this['stuff'] = 'v';" + nl),
+ new SourceNode(2, 2, "b.js", "anotherLine();" + nl),
+ "/*" + nl + "Generated" + nl + "Source" + nl + "*/" + nl,
+ new SourceNode(3, 4, "c.js", "anotherLine();" + nl),
+ "/*" + nl + "Generated" + nl + "Source" + nl + "*/"
+ ]);
+ input = input.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ assert.equal(input.code, [
+ "(function() {",
+ "var nextLine = 1;",
+ "anotherLine();",
+ "Test.call(this, 123);",
+ "this['stuff'] = 'v';",
+ "anotherLine();",
+ "/*",
+ "Generated",
+ "Source",
+ "*/",
+ "anotherLine();",
+ "/*",
+ "Generated",
+ "Source",
+ "*/"
+ ].join(nl));
+
+ var correctMap = new SourceMapGenerator({
+ file: 'foo.js'
+ });
+ correctMap.addMapping({
+ generated: { line: 1, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 2, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 4, column: 0 },
+ source: 'b.js',
+ original: { line: 2, column: 2 }
+ });
+ correctMap.addMapping({
+ generated: { line: 5, column: 0 },
+ source: 'b.js',
+ original: { line: 2, column: 2 }
+ });
+ correctMap.addMapping({
+ generated: { line: 6, column: 0 },
+ source: 'b.js',
+ original: { line: 2, column: 2 }
+ });
+ correctMap.addMapping({
+ generated: { line: 11, column: 0 },
+ source: 'c.js',
+ original: { line: 3, column: 4 }
+ });
+
+ var inputMap = input.map.toJSON();
+ correctMap = correctMap.toJSON();
+ util.assertEqualMaps(assert, inputMap, correctMap);
+ });
+
+ exports['test .toStringWithSourceMap() with empty string'] = function (assert, util) {
+ var node = new SourceNode(1, 0, 'empty.js', '');
+ var result = node.toStringWithSourceMap();
+ assert.equal(result.code, '');
+ };
+
+ exports['test .toStringWithSourceMap() with consecutive newlines'] = forEachNewline(function (assert, util, nl) {
+ var input = new SourceNode(null, null, null, [
+ "/***/" + nl + nl,
+ new SourceNode(1, 0, "a.js", "'use strict';" + nl),
+ new SourceNode(2, 0, "a.js", "a();"),
+ ]);
+ input = input.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ assert.equal(input.code, [
+ "/***/",
+ "",
+ "'use strict';",
+ "a();",
+ ].join(nl));
+
+ var correctMap = new SourceMapGenerator({
+ file: 'foo.js'
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 4, column: 0 },
+ source: 'a.js',
+ original: { line: 2, column: 0 }
+ });
+
+ var inputMap = input.map.toJSON();
+ correctMap = correctMap.toJSON();
+ util.assertEqualMaps(assert, inputMap, correctMap);
+ });
+
+ exports['test setSourceContent with toStringWithSourceMap'] = function (assert, util) {
+ var aNode = new SourceNode(1, 1, 'a.js', 'a');
+ aNode.setSourceContent('a.js', 'someContent');
+ var node = new SourceNode(null, null, null,
+ ['(function () {\n',
+ ' ', aNode,
+ ' ', new SourceNode(1, 1, 'b.js', 'b'),
+ '}());']);
+ node.setSourceContent('b.js', 'otherContent');
+ var map = node.toStringWithSourceMap({
+ file: 'foo.js'
+ }).map;
+
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ map = new SourceMapConsumer(map.toString());
+
+ assert.equal(map.sources.length, 2);
+ assert.equal(map.sources[0], 'a.js');
+ assert.equal(map.sources[1], 'b.js');
+ assert.equal(map.sourcesContent.length, 2);
+ assert.equal(map.sourcesContent[0], 'someContent');
+ assert.equal(map.sourcesContent[1], 'otherContent');
+ };
+
+ exports['test walkSourceContents'] = function (assert, util) {
+ var aNode = new SourceNode(1, 1, 'a.js', 'a');
+ aNode.setSourceContent('a.js', 'someContent');
+ var node = new SourceNode(null, null, null,
+ ['(function () {\n',
+ ' ', aNode,
+ ' ', new SourceNode(1, 1, 'b.js', 'b'),
+ '}());']);
+ node.setSourceContent('b.js', 'otherContent');
+ var results = [];
+ node.walkSourceContents(function (sourceFile, sourceContent) {
+ results.push([sourceFile, sourceContent]);
+ });
+ assert.equal(results.length, 2);
+ assert.equal(results[0][0], 'a.js');
+ assert.equal(results[0][1], 'someContent');
+ assert.equal(results[1][0], 'b.js');
+ assert.equal(results[1][1], 'otherContent');
+ };
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js
new file mode 100644
index 0000000..997d1a2
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js
@@ -0,0 +1,216 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var libUtil = require('../../lib/source-map/util');
+
+ exports['test urls'] = function (assert, util) {
+ var assertUrl = function (url) {
+ assert.equal(url, libUtil.urlGenerate(libUtil.urlParse(url)));
+ };
+ assertUrl('http://');
+ assertUrl('http://www.example.com');
+ assertUrl('http://user:pass@www.example.com');
+ assertUrl('http://www.example.com:80');
+ assertUrl('http://www.example.com/');
+ assertUrl('http://www.example.com/foo/bar');
+ assertUrl('http://www.example.com/foo/bar/');
+ assertUrl('http://user:pass@www.example.com:80/foo/bar/');
+
+ assertUrl('//');
+ assertUrl('//www.example.com');
+ assertUrl('file:///www.example.com');
+
+ assert.equal(libUtil.urlParse(''), null);
+ assert.equal(libUtil.urlParse('.'), null);
+ assert.equal(libUtil.urlParse('..'), null);
+ assert.equal(libUtil.urlParse('a'), null);
+ assert.equal(libUtil.urlParse('a/b'), null);
+ assert.equal(libUtil.urlParse('a//b'), null);
+ assert.equal(libUtil.urlParse('/a'), null);
+ assert.equal(libUtil.urlParse('data:foo,bar'), null);
+ };
+
+ exports['test normalize()'] = function (assert, util) {
+ assert.equal(libUtil.normalize('/..'), '/');
+ assert.equal(libUtil.normalize('/../'), '/');
+ assert.equal(libUtil.normalize('/../../../..'), '/');
+ assert.equal(libUtil.normalize('/../../../../a/b/c'), '/a/b/c');
+ assert.equal(libUtil.normalize('/a/b/c/../../../d/../../e'), '/e');
+
+ assert.equal(libUtil.normalize('..'), '..');
+ assert.equal(libUtil.normalize('../'), '../');
+ assert.equal(libUtil.normalize('../../a/'), '../../a/');
+ assert.equal(libUtil.normalize('a/..'), '.');
+ assert.equal(libUtil.normalize('a/../../..'), '../..');
+
+ assert.equal(libUtil.normalize('/.'), '/');
+ assert.equal(libUtil.normalize('/./'), '/');
+ assert.equal(libUtil.normalize('/./././.'), '/');
+ assert.equal(libUtil.normalize('/././././a/b/c'), '/a/b/c');
+ assert.equal(libUtil.normalize('/a/b/c/./././d/././e'), '/a/b/c/d/e');
+
+ assert.equal(libUtil.normalize(''), '.');
+ assert.equal(libUtil.normalize('.'), '.');
+ assert.equal(libUtil.normalize('./'), '.');
+ assert.equal(libUtil.normalize('././a'), 'a');
+ assert.equal(libUtil.normalize('a/./'), 'a/');
+ assert.equal(libUtil.normalize('a/././.'), 'a');
+
+ assert.equal(libUtil.normalize('/a/b//c////d/////'), '/a/b/c/d/');
+ assert.equal(libUtil.normalize('///a/b//c////d/////'), '///a/b/c/d/');
+ assert.equal(libUtil.normalize('a/b//c////d'), 'a/b/c/d');
+
+ assert.equal(libUtil.normalize('.///.././../a/b//./..'), '../../a')
+
+ assert.equal(libUtil.normalize('http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.normalize('http://www.example.com/'), 'http://www.example.com/');
+ assert.equal(libUtil.normalize('http://www.example.com/./..//a/b/c/.././d//'), 'http://www.example.com/a/b/d/');
+ };
+
+ exports['test join()'] = function (assert, util) {
+ assert.equal(libUtil.join('a', 'b'), 'a/b');
+ assert.equal(libUtil.join('a/', 'b'), 'a/b');
+ assert.equal(libUtil.join('a//', 'b'), 'a/b');
+ assert.equal(libUtil.join('a', 'b/'), 'a/b/');
+ assert.equal(libUtil.join('a', 'b//'), 'a/b/');
+ assert.equal(libUtil.join('a/', '/b'), '/b');
+ assert.equal(libUtil.join('a//', '//b'), '//b');
+
+ assert.equal(libUtil.join('a', '..'), '.');
+ assert.equal(libUtil.join('a', '../b'), 'b');
+ assert.equal(libUtil.join('a/b', '../c'), 'a/c');
+
+ assert.equal(libUtil.join('a', '.'), 'a');
+ assert.equal(libUtil.join('a', './b'), 'a/b');
+ assert.equal(libUtil.join('a/b', './c'), 'a/b/c');
+
+ assert.equal(libUtil.join('a', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('a', 'data:foo,bar'), 'data:foo,bar');
+
+
+ assert.equal(libUtil.join('', 'b'), 'b');
+ assert.equal(libUtil.join('.', 'b'), 'b');
+ assert.equal(libUtil.join('', 'b/'), 'b/');
+ assert.equal(libUtil.join('.', 'b/'), 'b/');
+ assert.equal(libUtil.join('', 'b//'), 'b/');
+ assert.equal(libUtil.join('.', 'b//'), 'b/');
+
+ assert.equal(libUtil.join('', '..'), '..');
+ assert.equal(libUtil.join('.', '..'), '..');
+ assert.equal(libUtil.join('', '../b'), '../b');
+ assert.equal(libUtil.join('.', '../b'), '../b');
+
+ assert.equal(libUtil.join('', '.'), '.');
+ assert.equal(libUtil.join('.', '.'), '.');
+ assert.equal(libUtil.join('', './b'), 'b');
+ assert.equal(libUtil.join('.', './b'), 'b');
+
+ assert.equal(libUtil.join('', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('.', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('', 'data:foo,bar'), 'data:foo,bar');
+ assert.equal(libUtil.join('.', 'data:foo,bar'), 'data:foo,bar');
+
+
+ assert.equal(libUtil.join('..', 'b'), '../b');
+ assert.equal(libUtil.join('..', 'b/'), '../b/');
+ assert.equal(libUtil.join('..', 'b//'), '../b/');
+
+ assert.equal(libUtil.join('..', '..'), '../..');
+ assert.equal(libUtil.join('..', '../b'), '../../b');
+
+ assert.equal(libUtil.join('..', '.'), '..');
+ assert.equal(libUtil.join('..', './b'), '../b');
+
+ assert.equal(libUtil.join('..', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('..', 'data:foo,bar'), 'data:foo,bar');
+
+
+ assert.equal(libUtil.join('a', ''), 'a');
+ assert.equal(libUtil.join('a', '.'), 'a');
+ assert.equal(libUtil.join('a/', ''), 'a');
+ assert.equal(libUtil.join('a/', '.'), 'a');
+ assert.equal(libUtil.join('a//', ''), 'a');
+ assert.equal(libUtil.join('a//', '.'), 'a');
+ assert.equal(libUtil.join('/a', ''), '/a');
+ assert.equal(libUtil.join('/a', '.'), '/a');
+ assert.equal(libUtil.join('', ''), '.');
+ assert.equal(libUtil.join('.', ''), '.');
+ assert.equal(libUtil.join('.', ''), '.');
+ assert.equal(libUtil.join('.', '.'), '.');
+ assert.equal(libUtil.join('..', ''), '..');
+ assert.equal(libUtil.join('..', '.'), '..');
+ assert.equal(libUtil.join('http://foo.org/a', ''), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a', '.'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a/', ''), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a/', '.'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a//', ''), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a//', '.'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org', ''), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org', '.'), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org/', ''), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org/', '.'), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org//', ''), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org//', '.'), 'http://foo.org/');
+ assert.equal(libUtil.join('//www.example.com', ''), '//www.example.com/');
+ assert.equal(libUtil.join('//www.example.com', '.'), '//www.example.com/');
+
+
+ assert.equal(libUtil.join('http://foo.org/a', 'b'), 'http://foo.org/a/b');
+ assert.equal(libUtil.join('http://foo.org/a/', 'b'), 'http://foo.org/a/b');
+ assert.equal(libUtil.join('http://foo.org/a//', 'b'), 'http://foo.org/a/b');
+ assert.equal(libUtil.join('http://foo.org/a', 'b/'), 'http://foo.org/a/b/');
+ assert.equal(libUtil.join('http://foo.org/a', 'b//'), 'http://foo.org/a/b/');
+ assert.equal(libUtil.join('http://foo.org/a/', '/b'), 'http://foo.org/b');
+ assert.equal(libUtil.join('http://foo.org/a//', '//b'), 'http://b');
+
+ assert.equal(libUtil.join('http://foo.org/a', '..'), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org/a', '../b'), 'http://foo.org/b');
+ assert.equal(libUtil.join('http://foo.org/a/b', '../c'), 'http://foo.org/a/c');
+
+ assert.equal(libUtil.join('http://foo.org/a', '.'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a', './b'), 'http://foo.org/a/b');
+ assert.equal(libUtil.join('http://foo.org/a/b', './c'), 'http://foo.org/a/b/c');
+
+ assert.equal(libUtil.join('http://foo.org/a', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('http://foo.org/a', 'data:foo,bar'), 'data:foo,bar');
+
+
+ assert.equal(libUtil.join('http://foo.org', 'a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/', 'a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org//', 'a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org', '/a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/', '/a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org//', '/a'), 'http://foo.org/a');
+
+
+ assert.equal(libUtil.join('http://', 'www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('file:///', 'www.example.com'), 'file:///www.example.com');
+ assert.equal(libUtil.join('http://', 'ftp://example.com'), 'ftp://example.com');
+
+ assert.equal(libUtil.join('http://www.example.com', '//foo.org/bar'), 'http://foo.org/bar');
+ assert.equal(libUtil.join('//www.example.com', '//foo.org/bar'), '//foo.org/bar');
+ };
+
+ // TODO Issue #128: Define and test this function properly.
+ exports['test relative()'] = function (assert, util) {
+ assert.equal(libUtil.relative('/the/root', '/the/root/one.js'), 'one.js');
+ assert.equal(libUtil.relative('/the/root', '/the/rootone.js'), '/the/rootone.js');
+
+ assert.equal(libUtil.relative('', '/the/root/one.js'), '/the/root/one.js');
+ assert.equal(libUtil.relative('.', '/the/root/one.js'), '/the/root/one.js');
+ assert.equal(libUtil.relative('', 'the/root/one.js'), 'the/root/one.js');
+ assert.equal(libUtil.relative('.', 'the/root/one.js'), 'the/root/one.js');
+
+ assert.equal(libUtil.relative('/', '/the/root/one.js'), 'the/root/one.js');
+ assert.equal(libUtil.relative('/', 'the/root/one.js'), 'the/root/one.js');
+ };
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/util.js b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/util.js
new file mode 100644
index 0000000..c1a7388
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/node_modules/source-map/test/source-map/util.js
@@ -0,0 +1,299 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('../../lib/source-map/util');
+
+ // This is a test mapping which maps functions from two different files
+ // (one.js and two.js) to a minified generated source.
+ //
+ // Here is one.js:
+ //
+ // ONE.foo = function (bar) {
+ // return baz(bar);
+ // };
+ //
+ // Here is two.js:
+ //
+ // TWO.inc = function (n) {
+ // return n + 1;
+ // };
+ //
+ // And here is the generated code (min.js):
+ //
+ // ONE.foo=function(a){return baz(a);};
+ // TWO.inc=function(a){return a+1;};
+ exports.testGeneratedCode = " ONE.foo=function(a){return baz(a);};\n"+
+ " TWO.inc=function(a){return a+1;};";
+ exports.testMap = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ sourceRoot: '/the/root',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ exports.testMapNoSourceRoot = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ exports.testMapEmptySourceRoot = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ sourceRoot: '',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ // This mapping is identical to above, but uses the indexed format instead.
+ exports.indexedTestMap = {
+ version: 3,
+ file: 'min.js',
+ sections: [
+ {
+ offset: {
+ line: 0,
+ column: 0
+ },
+ map: {
+ version: 3,
+ sources: [
+ "one.js"
+ ],
+ sourcesContent: [
+ ' ONE.foo = function (bar) {\n' +
+ ' return baz(bar);\n' +
+ ' };',
+ ],
+ names: [
+ "bar",
+ "baz"
+ ],
+ mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID",
+ file: "min.js",
+ sourceRoot: "/the/root"
+ }
+ },
+ {
+ offset: {
+ line: 1,
+ column: 0
+ },
+ map: {
+ version: 3,
+ sources: [
+ "two.js"
+ ],
+ sourcesContent: [
+ ' TWO.inc = function (n) {\n' +
+ ' return n + 1;\n' +
+ ' };'
+ ],
+ names: [
+ "n"
+ ],
+ mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOA",
+ file: "min.js",
+ sourceRoot: "/the/root"
+ }
+ }
+ ]
+ };
+ exports.indexedTestMapDifferentSourceRoots = {
+ version: 3,
+ file: 'min.js',
+ sections: [
+ {
+ offset: {
+ line: 0,
+ column: 0
+ },
+ map: {
+ version: 3,
+ sources: [
+ "one.js"
+ ],
+ sourcesContent: [
+ ' ONE.foo = function (bar) {\n' +
+ ' return baz(bar);\n' +
+ ' };',
+ ],
+ names: [
+ "bar",
+ "baz"
+ ],
+ mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID",
+ file: "min.js",
+ sourceRoot: "/the/root"
+ }
+ },
+ {
+ offset: {
+ line: 1,
+ column: 0
+ },
+ map: {
+ version: 3,
+ sources: [
+ "two.js"
+ ],
+ sourcesContent: [
+ ' TWO.inc = function (n) {\n' +
+ ' return n + 1;\n' +
+ ' };'
+ ],
+ names: [
+ "n"
+ ],
+ mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOA",
+ file: "min.js",
+ sourceRoot: "/different/root"
+ }
+ }
+ ]
+ };
+ exports.testMapWithSourcesContent = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ sourcesContent: [
+ ' ONE.foo = function (bar) {\n' +
+ ' return baz(bar);\n' +
+ ' };',
+ ' TWO.inc = function (n) {\n' +
+ ' return n + 1;\n' +
+ ' };'
+ ],
+ sourceRoot: '/the/root',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ exports.testMapRelativeSources = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['./one.js', './two.js'],
+ sourcesContent: [
+ ' ONE.foo = function (bar) {\n' +
+ ' return baz(bar);\n' +
+ ' };',
+ ' TWO.inc = function (n) {\n' +
+ ' return n + 1;\n' +
+ ' };'
+ ],
+ sourceRoot: '/the/root',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ exports.emptyMap = {
+ version: 3,
+ file: 'min.js',
+ names: [],
+ sources: [],
+ mappings: ''
+ };
+
+
+ function assertMapping(generatedLine, generatedColumn, originalSource,
+ originalLine, originalColumn, name, map, assert,
+ dontTestGenerated, dontTestOriginal) {
+ if (!dontTestOriginal) {
+ var origMapping = map.originalPositionFor({
+ line: generatedLine,
+ column: generatedColumn
+ });
+ assert.equal(origMapping.name, name,
+ 'Incorrect name, expected ' + JSON.stringify(name)
+ + ', got ' + JSON.stringify(origMapping.name));
+ assert.equal(origMapping.line, originalLine,
+ 'Incorrect line, expected ' + JSON.stringify(originalLine)
+ + ', got ' + JSON.stringify(origMapping.line));
+ assert.equal(origMapping.column, originalColumn,
+ 'Incorrect column, expected ' + JSON.stringify(originalColumn)
+ + ', got ' + JSON.stringify(origMapping.column));
+
+ var expectedSource;
+
+ if (originalSource && map.sourceRoot && originalSource.indexOf(map.sourceRoot) === 0) {
+ expectedSource = originalSource;
+ } else if (originalSource) {
+ expectedSource = map.sourceRoot
+ ? util.join(map.sourceRoot, originalSource)
+ : originalSource;
+ } else {
+ expectedSource = null;
+ }
+
+ assert.equal(origMapping.source, expectedSource,
+ 'Incorrect source, expected ' + JSON.stringify(expectedSource)
+ + ', got ' + JSON.stringify(origMapping.source));
+ }
+
+ if (!dontTestGenerated) {
+ var genMapping = map.generatedPositionFor({
+ source: originalSource,
+ line: originalLine,
+ column: originalColumn
+ });
+ assert.equal(genMapping.line, generatedLine,
+ 'Incorrect line, expected ' + JSON.stringify(generatedLine)
+ + ', got ' + JSON.stringify(genMapping.line));
+ assert.equal(genMapping.column, generatedColumn,
+ 'Incorrect column, expected ' + JSON.stringify(generatedColumn)
+ + ', got ' + JSON.stringify(genMapping.column));
+ }
+ }
+ exports.assertMapping = assertMapping;
+
+ function assertEqualMaps(assert, actualMap, expectedMap) {
+ assert.equal(actualMap.version, expectedMap.version, "version mismatch");
+ assert.equal(actualMap.file, expectedMap.file, "file mismatch");
+ assert.equal(actualMap.names.length,
+ expectedMap.names.length,
+ "names length mismatch: " +
+ actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
+ for (var i = 0; i < actualMap.names.length; i++) {
+ assert.equal(actualMap.names[i],
+ expectedMap.names[i],
+ "names[" + i + "] mismatch: " +
+ actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
+ }
+ assert.equal(actualMap.sources.length,
+ expectedMap.sources.length,
+ "sources length mismatch: " +
+ actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
+ for (var i = 0; i < actualMap.sources.length; i++) {
+ assert.equal(actualMap.sources[i],
+ expectedMap.sources[i],
+ "sources[" + i + "] length mismatch: " +
+ actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
+ }
+ assert.equal(actualMap.sourceRoot,
+ expectedMap.sourceRoot,
+ "sourceRoot mismatch: " +
+ actualMap.sourceRoot + " != " + expectedMap.sourceRoot);
+ assert.equal(actualMap.mappings, expectedMap.mappings,
+ "mappings mismatch:\nActual: " + actualMap.mappings + "\nExpected: " + expectedMap.mappings);
+ if (actualMap.sourcesContent) {
+ assert.equal(actualMap.sourcesContent.length,
+ expectedMap.sourcesContent.length,
+ "sourcesContent length mismatch");
+ for (var i = 0; i < actualMap.sourcesContent.length; i++) {
+ assert.equal(actualMap.sourcesContent[i],
+ expectedMap.sourcesContent[i],
+ "sourcesContent[" + i + "] mismatch");
+ }
+ }
+ }
+ exports.assertEqualMaps = assertEqualMaps;
+
+});
diff --git a/node_modules/autoprefixer-core/node_modules/postcss/package.json b/node_modules/autoprefixer-core/node_modules/postcss/package.json
new file mode 100644
index 0000000..3cbec1b
--- /dev/null
+++ b/node_modules/autoprefixer-core/node_modules/postcss/package.json
@@ -0,0 +1,88 @@
+{
+ "name": "postcss",
+ "version": "4.0.6",
+ "description": "Tool for transforming CSS with JS plugins",
+ "keywords": [
+ "css",
+ "postproccessor",
+ "parser",
+ "source map",
+ "transform",
+ "manipulation",
+ "preprocess",
+ "transpiler"
+ ],
+ "author": {
+ "name": "Andrey Sitnik",
+ "email": "andrey@sitnik.ru"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/postcss/postcss.git"
+ },
+ "dependencies": {
+ "source-map": "~0.2.0",
+ "js-base64": "~2.1.7"
+ },
+ "devDependencies": {
+ "concat-with-sourcemaps": "1.0.0",
+ "gulp-bench-summary": "0.1.0",
+ "gulp-json-editor": "2.2.1",
+ "jshint-stylish": "1.0.0",
+ "gulp-jshint": "1.9.2",
+ "gonzales-pe": "3.0.0-26",
+ "browserify": "9.0.3",
+ "gulp-babel": "4.0.0",
+ "gulp-bench": "1.1.0",
+ "gulp-mocha": "2.0.0",
+ "node-sass": "2.0.1",
+ "gulp-util": "3.0.3",
+ "execSync": "1.0.2",
+ "fs-extra": "0.16.3",
+ "gonzales": "1.0.7",
+ "through2": "0.6.3",
+ "stylecow": "4.2.4",
+ "request": "2.53.0",
+ "cssnext": "1.0.1",
+ "rework": "1.0.1",
+ "mensch": "0.3.1",
+ "stylus": "0.50.0",
+ "mocha": "2.1.0",
+ "cssom": "0.3.0",
+ "gulp": "3.8.11",
+ "less": "2.4.0",
+ "chai": "2.1.0",
+ "babel": "4.4.6"
+ },
+ "scripts": {
+ "test": "gulp"
+ },
+ "main": "lib/postcss",
+ "bugs": {
+ "url": "https://github.com/postcss/postcss/issues"
+ },
+ "homepage": "https://github.com/postcss/postcss",
+ "_id": "postcss@4.0.6",
+ "_shasum": "1bd1e8a99f73efdb46d11bf5c206079e2d306538",
+ "_from": "postcss@~4.0.6",
+ "_npmVersion": "2.5.0",
+ "_nodeVersion": "1.3.0",
+ "_npmUser": {
+ "name": "ai",
+ "email": "andrey@sitnik.ru"
+ },
+ "maintainers": [
+ {
+ "name": "ai",
+ "email": "andrey@sitnik.ru"
+ }
+ ],
+ "dist": {
+ "shasum": "1bd1e8a99f73efdb46d11bf5c206079e2d306538",
+ "tarball": "http://registry.npmjs.org/postcss/-/postcss-4.0.6.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/postcss/-/postcss-4.0.6.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/autoprefixer-core/package.json b/node_modules/autoprefixer-core/package.json
new file mode 100644
index 0000000..0a2209c
--- /dev/null
+++ b/node_modules/autoprefixer-core/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "autoprefixer-core",
+ "version": "5.1.8",
+ "description": "CLI-less core of Autoprefixer to use in plugins",
+ "keywords": [
+ "autoprefixer",
+ "css",
+ "prefix",
+ "postprocessor",
+ "postcss"
+ ],
+ "author": {
+ "name": "Andrey Sitnik",
+ "email": "andrey@sitnik.ru"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/postcss/autoprefixer-core.git"
+ },
+ "dependencies": {
+ "browserslist": "~0.2.0",
+ "num2fraction": "~1.0.1",
+ "caniuse-db": "^1.0.30000106",
+ "postcss": "~4.0.6"
+ },
+ "devDependencies": {
+ "vinyl-source-stream": "1.1.0",
+ "gulp-json-editor": "2.2.1",
+ "jshint-stylish": "1.0.1",
+ "gulp-replace": "0.5.3",
+ "gulp-jshint": "1.9.4",
+ "gulp-coffee": "2.3.1",
+ "gulp-mocha": "2.0.0",
+ "browserify": "9.0.3",
+ "fs-extra": "0.16.5",
+ "should": "5.2.0",
+ "mocha": "2.2.1",
+ "gulp": "3.8.11",
+ "coffee-script": "1.9.1"
+ },
+ "scripts": {
+ "test": "gulp"
+ },
+ "main": "lib/autoprefixer",
+ "bugs": {
+ "url": "https://github.com/postcss/autoprefixer-core/issues"
+ },
+ "homepage": "https://github.com/postcss/autoprefixer-core",
+ "_id": "autoprefixer-core@5.1.8",
+ "_shasum": "19224f57d77bf3953dc026bbd1c3b8907319f049",
+ "_from": "autoprefixer-core@",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.6.1",
+ "_npmUser": {
+ "name": "ai",
+ "email": "andrey@sitnik.ru"
+ },
+ "maintainers": [
+ {
+ "name": "ai",
+ "email": "andrey@sitnik.ru"
+ }
+ ],
+ "dist": {
+ "shasum": "19224f57d77bf3953dc026bbd1c3b8907319f049",
+ "tarball": "http://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.1.8.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.1.8.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/README.md b/node_modules/csswring/README.md
new file mode 100644
index 0000000..cf6866a
--- /dev/null
+++ b/node_modules/csswring/README.md
@@ -0,0 +1,185 @@
+CSSWring
+========
+
+Minify CSS file with source maps. That's only.
+
+Written with [PostCSS][1].
+
+
+INSTALLATION
+------------
+
+ $ npm install csswring
+
+
+QUICK USAGE
+-----------
+
+ #!/usr/bin/env node
+
+ 'use strict';
+
+ var fs = require('fs');
+ var csswring = require('csswring');
+
+ var css = fs.readFileSync('test.css', 'utf8');
+ fs.writeFileSync('test.min.css', csswring.wring(css).css);
+
+
+MINIFICATIONS
+-------------
+
+CSSWring doesn't remove only white spaces or comments, but also remove an
+unnecessary parts of CSS. See [minification details][2] in our GitHub Wiki.
+
+
+OPTIONS
+-------
+
+### preserveHacks
+
+By default, CSSWring removes all unknown portion of CSS declaration that
+includes some CSS hacks (e.g., underscore hacks and star hacks). If you want to
+preserve these hacks, pass `preserveHacks: true` to this module.
+
+ csswring({
+ preserveHacks: true
+ }).wring(css);
+
+
+### removeAllComments
+
+By default, CSSWring keeps a comment that start with `/*!`. If you want to
+remove all comments, pass `removeAllComments: true` to this module.
+
+ csswring({
+ removeAllComments: true
+ }).wring(css);
+
+
+API
+---
+
+### wring(css, [options])
+
+Wring `css` with specified `options`.
+
+The second argument is optional. The `options` is same as the second argument of
+PostCSS's `process()` method. This is useful for generating source map.
+
+ var fs = require('fs');
+ var csswring = require('csswring');
+
+ var css = fs.readFileSync('from.css', 'utf8');
+ var result = csswring.wring(css, {
+ map: {
+ inline: false
+ },
+ from: 'from.css',
+ to: 'to.css'
+ });
+ fs.writeFileSync('to.css', result.css);
+ fs.writeFileSync('to.css.map', result.map);
+
+See also [Source Map section][3] in PostCSS document for more about this
+`options`.
+
+You can also merge CSSWring options mentioned above to the second argument:
+
+ var result = csswring.wring(css, {
+ map: true,
+ preserveHacks: true
+ });
+
+
+### postcss
+
+Returns a [PostCSS processor][4].
+
+You can use this property for combining with other PostCSS processors/plugins
+such as [Autoprefixer][5] or [postcss-url][6].
+
+ var fs = require('fs');
+ var postcss = require('postcss');
+ var autoprefixer = require('autoprefixer');
+ var csswring = require('csswring');
+
+ var css = fs.readFileSync('test.css', 'utf8');
+ postcss().use(
+ autoprefixer.postcss
+ ).use(
+ csswring.postcss
+ ).process(css);
+
+
+CLI USAGE
+---------
+
+This package also installs a command line interface.
+
+ $ node ./node_modules/.bin/csswring --help
+ Usage: csswring [options] INPUT [OUTPUT]
+
+ Description:
+ Minify CSS file with source maps. That's only.
+
+ Options:
+ --sourcemap Create source map file.
+ --preserve-hacks Preserve some CSS hacks.
+ --remove-all-comments Remove all comments.
+ -h, --help Show this message.
+ -v, --version Print version information.
+
+ Use a single dash for INPUT to read CSS from standard input.
+
+
+GRUNT PLUGIN USAGE
+------------------
+
+This package also installs a Grunt plugin. You can enable this plugin in
+`Gruntfile.js` of your project like that:
+
+ grunt.loadNpmTasks('csswring');
+
+This was not tested. I suggest using [`grunt-postcss`][7].
+
+
+### Example Config
+
+To minify `src/css/**/*.css` to `build/css/**/*.min.css` with source map:
+
+ grunt.initConfig({
+ csswring: {
+ options: {
+ map: true
+ },
+
+ main: {
+ cwd: 'src/css/',
+ dest: 'build/css/',
+ expand: true,
+ ext: 'min.css',
+ src: [
+ '**/*.css'
+ ]
+ }
+ }
+ });
+
+The `options` is completely same as [this package options][8].
+
+
+LICENSE
+-------
+
+MIT: http://hail2u.mit-license.org/2014
+
+
+[1]: https://github.com/postcss/postcss
+[2]: https://github.com/hail2u/node-csswring/wiki
+[3]: https://github.com/postcss/postcss#source-map-1
+[4]: https://github.com/postcss/postcss#processor
+[5]: https://github.com/postcss/autoprefixer-core
+[6]: https://github.com/postcss/postcss-url
+[7]: https://github.com/nDmitry/grunt-postcss
+[8]: #options
diff --git a/node_modules/csswring/bin/csswring b/node_modules/csswring/bin/csswring
new file mode 100755
index 0000000..271100f
--- /dev/null
+++ b/node_modules/csswring/bin/csswring
@@ -0,0 +1,124 @@
+#!/usr/bin/env node
+
+'use strict';
+
+var csswring = require('../index');
+var fs = require('fs');
+var minimist = require('minimist');
+var pkg = require('../package.json');
+
+var showHelp = function () {
+ console.log('Usage: csswring [options] INPUT [OUTPUT]');
+ console.log('');
+ console.log('Description:');
+ console.log(' ' + pkg.description);
+ console.log('');
+ console.log('Options:');
+ console.log(' --sourcemap Create source map file.');
+ console.log(' --preserve-hacks Preserve some CSS hacks.');
+ console.log(' --remove-all-comments Remove all comments.');
+ console.log(' -h, --help Show this message.');
+ console.log(' -v, --version Print version information.');
+ console.log('');
+ console.log('Use a single dash for INPUT to read CSS from standard input.');
+
+ return;
+};
+var wring = function (s, o) {
+ var wringed = csswring(o.csswring).wring(s, o.postcss);
+
+ if (!o.postcss.to) {
+ process.stdout.write(wringed.css);
+
+ return;
+ }
+
+ fs.writeFileSync(o.postcss.to, wringed.css);
+
+ if (wringed.map) {
+ fs.writeFileSync(o.postcss.to + '.map', wringed.map);
+ }
+};
+var argv = minimist(process.argv.slice(2), {
+ boolean: [
+ 'help',
+ 'preserve-hacks',
+ 'remove-all-comments',
+ 'sourcemap',
+ 'version'
+ ],
+ alias: {
+ 'h': 'help',
+ 'v': 'version'
+ },
+ default: {
+ 'help': false,
+ 'preserve-hacks': false,
+ 'remove-all-comments': false,
+ 'sourcemap': false,
+ 'version': false
+ }
+});
+
+if (argv._.length < 1) {
+ argv.help = true;
+}
+
+switch (true) {
+ case argv.version:
+ console.log('csswring v' + pkg.version);
+
+ break;
+
+ case argv.help:
+ showHelp();
+
+ break;
+
+ default:
+ var options = {
+ csswring: {},
+ postcss: {}
+ };
+
+ if (argv['preserve-hacks']) {
+ options.csswring.preserveHacks = true;
+ }
+
+ if (argv['remove-all-comments']) {
+ options.csswring.removeAllComments = true;
+ }
+
+ if (argv.sourcemap) {
+ options.postcss.map = true;
+ }
+
+ options.postcss.from = argv._[0];
+
+ if (argv._[1]) {
+ options.postcss.to = argv._[1];
+ }
+
+ if (options.postcss.map && options.postcss.to) {
+ options.postcss.map = {
+ inline: false
+ };
+ }
+
+ var css = '';
+
+ if (options.postcss.from !== '-') {
+ css = fs.readFileSync(options.postcss.from, 'utf8');
+ wring(css, options);
+ } else {
+ delete options.postcss.from;
+ var stdin = process.openStdin();
+ stdin.setEncoding('utf-8');
+ stdin.on('data', function (chunk) {
+ css += chunk;
+ });
+ stdin.on('end', function () {
+ wring(css, options);
+ });
+ }
+}
diff --git a/node_modules/csswring/index.js b/node_modules/csswring/index.js
new file mode 100644
index 0000000..8431449
--- /dev/null
+++ b/node_modules/csswring/index.js
@@ -0,0 +1 @@
+module.exports = require('./lib/csswring');
diff --git a/node_modules/csswring/lib/color_keywords.js b/node_modules/csswring/lib/color_keywords.js
new file mode 100644
index 0000000..3b00b96
--- /dev/null
+++ b/node_modules/csswring/lib/color_keywords.js
@@ -0,0 +1,35 @@
+module.exports = {
+ short: {
+ '#f00': 'red',
+ '#000080': 'navy',
+ '#008000': 'green',
+ '#008080': 'teal',
+ '#4b0082': 'indigo',
+ '#800000': 'maroon',
+ '#800080': 'purple',
+ '#808000': 'olive',
+ '#808080': 'gray',
+ '#a0522d': 'sienna',
+ '#a52a2a': 'brown',
+ '#c0c0c0': 'silver',
+ '#cd853f': 'peru',
+ '#d2b48c': 'tan',
+ '#da70d6': 'orchid',
+ '#dda0dd': 'plum',
+ '#ee82ee': 'violet',
+ '#f0e68c': 'khaki',
+ '#f0ffff': 'azure',
+ '#f5deb3': 'wheat',
+ '#f5f5dc': 'beige',
+ '#fa8072': 'salmon',
+ '#faf0e6': 'linen',
+ '#ff6347': 'tomato',
+ '#ff7f50': 'coral',
+ '#ffa500': 'orange',
+ '#ffc0cb': 'pink',
+ '#ffd700': 'gold',
+ '#ffe4c4': 'bisque',
+ '#fffafa': 'snow',
+ '#fffff0': 'ivory'
+ }
+};
diff --git a/node_modules/csswring/lib/csswring.js b/node_modules/csswring/lib/csswring.js
new file mode 100644
index 0000000..81b1140
--- /dev/null
+++ b/node_modules/csswring/lib/csswring.js
@@ -0,0 +1,526 @@
+'use strict';
+
+var csswring;
+
+var list = require('postcss/lib/list');
+var onecolor = require('onecolor');
+var postcss = require('postcss');
+var re = require('./regexp');
+var shortColors = require('./color_keywords').short;
+
+// Set quotation mark
+var setQuote = function (quote) {
+ if (!quote) {
+ quote = '"';
+ }
+
+ return quote;
+};
+
+// Check string can unquote or not
+var canUnquote = function (str) {
+ var firstChar = str.slice(0, 1);
+ var secondChar;
+
+ if (re.number.test(firstChar)) {
+ return false;
+ }
+
+ secondChar = str.slice(1, 2);
+
+ if (
+ firstChar === '-' &&
+ (secondChar === '-' || re.number.test(secondChar))
+ ) {
+ return false;
+ }
+
+ if (/^[\w-]+$/.test(str)) {
+ return true;
+ }
+
+ return false;
+};
+
+// Unquote font family name if possible
+var unquoteFontFamily = function (family) {
+ var quote;
+ family = family.replace(re.quotedString, '$2');
+ quote = setQuote(RegExp.$1);
+
+ if (!list.space(family).every(canUnquote)) {
+ family = quote + family + quote;
+ }
+
+ return family;
+};
+
+// Convert colors to HEX or `rgba()` notation
+var toRGBColor = function (m, leading, color) {
+ color = onecolor(color);
+
+ /* istanbul ignore if */
+ // Return unmodified value when `one.color` failed to parse `color`
+ if (!color) {
+ return m;
+ }
+
+ if (color.alpha() < 1) {
+ return leading + color.cssa();
+ }
+
+ return leading + color.hex() + ' ';
+};
+
+// Convert to shortest color
+var toShortestColor = function (m, leading, r1, r2, g1, g2, b1, b2) {
+ var color = '#' + r1 + r2 + g1 + g2 + b1 + b2;
+
+ if (r1 === r2 && g1 === g2 && b1 === b2) {
+ color = '#' + r1 + g1 + b1;
+ }
+
+ if (shortColors.hasOwnProperty(color)) {
+ color = shortColors[color];
+ }
+
+ return leading + color.toLowerCase();
+};
+
+// Unquote inside `url()` notation if possible
+var unquoteURL = function (m, leading, url) {
+ var quote;
+ url = url.replace(re.quotedString, '$2');
+ quote = setQuote(RegExp.$1);
+
+ if (re.urlNeedQuote.test(url)) {
+ url = quote + url + quote;
+ }
+
+ return leading + 'url(' + url + ')';
+};
+
+// Remove white spaces inside `calc()` notation
+var removeCalcWhiteSpaces = function (m, leading, calc) {
+ calc = calc.replace(/\s([*/])\s/g, '$1');
+
+ return leading + 'calc(' + calc + ')';
+};
+
+// Wring value of declaration
+var wringValue = function (value) {
+ value = value.replace(re.colorFunction, toRGBColor);
+ value = value.replace(re.colorHex, toShortestColor);
+ value = value.replace(re.colorTransparent, '$1transparent ');
+ value = value.trim();
+ value = value.replace(re.whiteSpaces, ' ');
+ value = value.replace(/([(,])\s/g, '$1');
+ value = value.replace(/\s([),])/g, '$1');
+ value = value.replace(re.numberLeadingZeros, '$1$2');
+ value = value.replace(re.zeroValueUnit, '$1$2');
+ value = value.replace(re.decimalWithZeros, '$1$2$3.$4');
+ value = value.replace(re.urlFunction, unquoteURL);
+ value = value.replace(re.calcFunction, removeCalcWhiteSpaces);
+
+ return value;
+};
+
+// Unquote attribute selector if possible
+var unquoteAttributeSelector = function (m, att, con, val) {
+ var quote;
+
+ if (!con || !val) {
+ return '[' + att + ']';
+ }
+
+ val = val.trim();
+ val = val.replace(re.quotedString, '$2');
+ quote = setQuote(RegExp.$1);
+
+ if (!canUnquote(val)) {
+ val = quote + val + quote;
+ }
+
+ return '[' + att + con + val + ']';
+};
+
+// Remove white spaces from string
+var removeWhiteSpaces = function (string) {
+ return string.replace(re.whiteSpaces, '');
+};
+
+// Remove white spaces from both ends of `:not()`
+var trimNegationFunction = function (m, not) {
+ return ':not(' + not.trim() + ')';
+};
+
+// Wring selector of ruleset
+var wringSelector = function (selector) {
+ selector = selector.replace(re.whiteSpaces, ' ');
+ selector = selector.replace(re.selectorAtt, unquoteAttributeSelector);
+ selector = selector.replace(re.selectorFunctions, removeWhiteSpaces);
+ selector = selector.replace(re.selectorNegationFunction, trimNegationFunction);
+ selector = selector.replace(re.selectorCombinators, '$1');
+
+ return selector;
+};
+
+// Check keyframe is valid or not
+var isValidKeyframe = function (keyframe) {
+ if (keyframe === 'from' || keyframe === 'to') {
+ return true;
+ }
+
+ keyframe = parseFloat(keyframe);
+
+ if (!isNaN(keyframe) && keyframe >= 0 && keyframe <= 100) {
+ return true;
+ }
+
+ return false;
+};
+
+// Unique array element
+var uniqueArray = function (array) {
+ var i;
+ var l;
+ var result = [];
+ var value;
+
+ for (i = 0, l = array.length; i < l; i++) {
+ value = array[i];
+
+ if (result.indexOf(value) < 0) {
+ result.push(value);
+ }
+ }
+
+ return result;
+};
+
+// Remove duplicate declaration
+var removeDuplicateDeclaration = function (decl, index) {
+ var d = decl.before + decl.prop + decl.between + decl.value;
+
+ if (this.hasOwnProperty(d)) {
+ decl.parent.remove(this[d]);
+ }
+
+ this[d] = index;
+};
+
+// Check required `@font-face` descriptor or not
+var isRequiredFontFaceDescriptor = function (decl) {
+ var prop = decl.prop;
+
+ return (prop === 'src') || (prop === 'font-family');
+};
+
+// Remove `@font-face` descriptor with default value
+var removeDefaultFontFaceDescriptor = function (decl, index) {
+ var prop = decl.prop;
+ var value = decl.value;
+
+ if (
+ (re.descriptorFontFace.test(prop) && value === 'normal') ||
+ (prop === 'unicode-range' && re.unicodeRangeDefault.test(value)) ||
+ prop + value === 'font-weight400'
+ ) {
+ decl.parent.remove(index);
+ }
+};
+
+// Quote `@import` URL
+var quoteImportURL = function (m, quote, url) {
+ quote = setQuote(quote);
+
+ return quote + url + quote;
+};
+
+// Quote `@namespace` URL
+var quoteNamespaceURL = function (param, index, p) {
+ var quote;
+
+ if (param === p[p.length - 1]) {
+ param = param.replace(re.quotedString, '$2');
+ quote = setQuote(RegExp.$1);
+ param = quote + param + quote;
+ }
+
+ return param;
+};
+
+// Wring comment
+var wringComment = function (removeAllComments, comment) {
+ if (
+ (removeAllComments || comment.text.indexOf('!') !== 0) &&
+ comment.text.indexOf('#') !== 0
+ ) {
+ comment.removeSelf();
+
+ return;
+ }
+
+ comment.before = '';
+};
+
+// Wring declaration
+var wringDecl = function (preserveHacks, decl) {
+ var prop = decl.prop;
+ var value = decl.value;
+ var values;
+ delete decl._value;
+
+ if (preserveHacks && decl.before) {
+ decl.before = decl.before.replace(/[;\s]/g, '');
+ } else {
+ decl.before = '';
+ }
+
+ if (preserveHacks && decl.between) {
+ decl.between = decl.between.replace(re.whiteSpaces, '');
+ } else {
+ decl.between = ':';
+ }
+
+ if (decl.important) {
+ decl._important = '!important';
+ }
+
+ if (prop === 'content') {
+ return;
+ }
+
+ if (prop === 'font-family') {
+ decl.value = list.comma(value).map(unquoteFontFamily).join(',');
+
+ return;
+ }
+
+ values = list.comma(value);
+ value = values.map(wringValue).join(',');
+
+ if (re.propertyMultipleValues.test(prop)) {
+ values = list.space(value);
+
+ if (values.length === 4 && values[1] === values[3]) {
+ values.splice(3, 1);
+ }
+
+ if (values.length === 3 && values[0] === values[2]) {
+ values.splice(2, 1);
+ }
+
+ if (values.length === 2 && values[0] === values[1]) {
+ values.splice(1, 1);
+ }
+
+ value = values.join(' ');
+ }
+
+ if (prop === 'font-weight') {
+ if (value === 'normal') {
+ value = '400';
+ } else if (value === 'bold') {
+ value = '700';
+ }
+ }
+
+ decl.value = value;
+};
+
+// Wring declaration like string
+var wringDeclLike = function (m, prop, value) {
+ var decl = postcss.decl({
+ prop: prop,
+ value: value
+ });
+ wringDecl.call(null, false, decl);
+
+ return '(' + decl.toString() + ')';
+};
+
+// Wring ruleset
+var wringRule = function (rule) {
+ var decls;
+ var parent;
+ var selectors;
+ delete rule._selector;
+ rule.before = '';
+ rule.between = '';
+ rule.semicolon = false;
+ rule.after = '';
+
+ if (rule.nodes.length === 0 || rule.selector === '') {
+ rule.removeSelf();
+
+ return;
+ }
+
+ parent = rule.parent;
+ selectors = rule.selectors.map(wringSelector);
+
+ if (parent.type === 'atrule' && parent.name === 'keyframes') {
+ selectors = selectors.filter(isValidKeyframe);
+
+ if (selectors.length === 0) {
+ rule.removeSelf();
+
+ return;
+ }
+ }
+
+ rule.selector = uniqueArray(selectors).join(',');
+ decls = {};
+ rule.each(removeDuplicateDeclaration.bind(decls));
+};
+
+// Filter at-rule
+var filterAtRule = function (rule) {
+ var name = rule.name;
+ var type = rule.type;
+
+ if (type === 'comment') {
+ return;
+ }
+
+ if (
+ type !== 'atrule' ||
+ (name !== 'charset' && name !== 'import')
+ ) {
+ this.filter = true;
+
+ return;
+ }
+
+ if (name === 'charset' && !this.charset) {
+ this.charset = true;
+
+ return;
+ }
+
+ if (this.filter || (name === 'charset' && this.charset)) {
+ rule.removeSelf();
+
+ return;
+ }
+};
+
+// Wring at-rule
+var wringAtRule = function (atRule) {
+ var params;
+ delete atRule._params;
+ atRule.before = '';
+ atRule.afterName = ' ';
+ atRule.between = '';
+ atRule.semicolon = false;
+ atRule.after = '';
+
+ if (!atRule.params) {
+ atRule.params = '';
+ }
+
+ if (atRule.name === 'charset') {
+ return;
+ }
+
+ if (atRule.name === 'font-face') {
+ if (atRule.nodes.filter(isRequiredFontFaceDescriptor).length < 2) {
+ atRule.removeSelf();
+
+ return;
+ }
+
+ atRule.each(removeDefaultFontFaceDescriptor);
+ }
+
+ if (atRule.nodes && atRule.nodes.length === 0) {
+ atRule.removeSelf();
+
+ return;
+ }
+
+ params = atRule.params;
+ params = params.replace(re.whiteSpaces, ' ');
+ params = params.replace(/([(),:])\s/g, '$1');
+ params = params.replace(/\s([),:])/g, '$1');
+
+ if (atRule.name === 'import') {
+ params = params.replace(re.urlFunction, '$1$2');
+ params = params.replace(re.quotedString, quoteImportURL);
+ }
+
+ if (atRule.name === 'namespace') {
+ params = params.replace(re.urlFunction, '$1$2');
+ params = list.space(params).map(quoteNamespaceURL).join('');
+ }
+
+ if (atRule.name === 'keyframes') {
+ params = params.replace(re.quotedString, '$2');
+ }
+
+ if (atRule.name === 'supports') {
+ params = params.replace(re.declInParentheses, wringDeclLike);
+ params = params.replace(re.supportsConjunctions, ') $1');
+ }
+
+ atRule.params = params;
+
+ if (
+ atRule.params === '' ||
+ params.indexOf('(') === 0 ||
+ params.indexOf('"') === 0 ||
+ params.indexOf('\'') === 0
+ ) {
+ atRule.afterName = '';
+ }
+};
+
+// CSSWring object
+var CSSWring = function (opts) {
+ var preserveHacks = false;
+ var removeAllComments = false;
+
+ if (opts && opts.preserveHacks) {
+ preserveHacks = opts.preserveHacks;
+ }
+
+ if (opts && opts.removeAllComments) {
+ removeAllComments = opts.removeAllComments;
+ }
+
+ this.postcss = this.postcss.bind(null, preserveHacks, removeAllComments);
+};
+
+CSSWring.prototype.postcss = function (preserveHacks, removeAllComments, css) {
+ css.semicolon = false;
+ css.after = '';
+ css.eachComment(wringComment.bind(null, removeAllComments));
+ css.eachDecl(wringDecl.bind(null, preserveHacks));
+ css.eachRule(wringRule);
+ css.each(filterAtRule.bind({}));
+ css.eachAtRule(wringAtRule);
+
+ return css;
+};
+
+CSSWring.prototype.wring = function (css, opts) {
+ return postcss().use(this.postcss).process(css, opts);
+};
+
+// CSSWring instance
+csswring = function (opts) {
+ return new CSSWring(opts);
+};
+
+csswring.postcss = function (css) {
+ return csswring().postcss(css);
+};
+
+csswring.wring = function (css, opts) {
+ return csswring(opts).wring(css, opts);
+};
+
+module.exports = csswring;
+
+/*eslint no-underscore-dangle:0*/
diff --git a/node_modules/csswring/lib/regexp.js b/node_modules/csswring/lib/regexp.js
new file mode 100644
index 0000000..8539ea2
--- /dev/null
+++ b/node_modules/csswring/lib/regexp.js
@@ -0,0 +1,64 @@
+module.exports = {
+ // calc(1 + 1)
+ calcFunction: /(^|\s|\(|,)calc\((([^()]*(\([^()]*\))?)*)\)/,
+
+ // rgb(0, 0, 0), hsl(0, 0%, 0%), rgba(0, 0, 0, 1), hsla(0, 0%, 0%, 1)
+ colorFunction: /(^|\s|\(|,)((?:rgb|hsl)a?\(.*?\))/gi,
+
+ // #000, #000000
+ colorHex: /(^|\s|\(|,)#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])/gi,
+
+ // rgba(0,0,0,0)
+ colorTransparent: /(^|\s|\(|,)rgba\(0,0,0,0\)/gi,
+
+ // 0.1
+ decimalWithZeros: /(^|\s|\(|,)(-)?0*([1-9]\d*)?\.(\d*[1-9])0*/g,
+
+ // (top: 0)
+ declInParentheses: /\(([-a-zA-Z]+):(([^()]*(\([^()]*\))?)*)\)/g,
+
+ // font-style, font-stretch, font-variant, font-feature-settings
+ descriptorFontFace: /^font-(style|stretch|variant|feature-settings)$/i,
+
+ // 0
+ number: /\d/,
+
+ // 01
+ numberLeadingZeros: /(^|\s|\(|,)0+([1-9]\d*(\.\d+)?)/g,
+
+ // margin, padding, border-color, border-radius, border-spacing, border-style, border-width
+ propertyMultipleValues: /^(margin|padding|border-(color|radius|spacing|style|width))$/i,
+
+ // "...", '...'
+ quotedString: /("|')?(.*)\1/,
+
+ // [class = "foo"], [class ~= "foo"], [class |= "foo"], [class ^= "foo"], [class $= "foo"], [class *= "foo"]
+ selectorAtt: /\[\s*(.*?)(?:\s*([~|^$*]?=)\s*(("|').*\4|.*?[^\\]))?\s*\]/g,
+
+ // :lang(ja), :nth-child(0), nth-last-child(0), nth-of-type(1n), nth-last-of-type(1n)
+ selectorFunctions: /:(lang|nth-(?:last-)?(?:child|of-type))\((.*?[^\\])\)/gi,
+
+ // :not(a)
+ selectorNegationFunction: /:not\((([^()]*(\([^()]*\))?)*)\)/gi,
+
+ // p > a, p + a, p ~ a
+ selectorCombinators: /\s*(\\?[>+~])\s*/g,
+
+ // )and, )or
+ supportsConjunctions: /\)(and|or)/g,
+
+ // u0-10ffff, u000000-10ffff
+ unicodeRangeDefault: /u\+0{1,6}-10ffff/i,
+
+ // url(a)
+ urlFunction: /(^|\s|\(|,)url\((.*?[^\\])\)/gi,
+
+ // , (, ), ", '
+ urlNeedQuote: /[\s()"']/,
+
+ // , \t, \r, \n
+ whiteSpaces: /\s+/g,
+
+ // 0%, 0em, 0ex, 0ch, 0rem, 0vw, 0vh, 0vmin, 0vmax, 0cm, 0mm, 0in, 0pt, 0pc, 0px
+ zeroValueUnit: /(^|\s|\(|,)(0)(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px)/gi
+};
diff --git a/node_modules/csswring/node_modules/fs-extra/.npmignore b/node_modules/csswring/node_modules/fs-extra/.npmignore
new file mode 100644
index 0000000..950be15
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/.npmignore
@@ -0,0 +1,3 @@
+coverage/
+test/
+.travis.yml
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/fs-extra/CHANGELOG.md b/node_modules/csswring/node_modules/fs-extra/CHANGELOG.md
new file mode 100644
index 0000000..c964faa
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/CHANGELOG.md
@@ -0,0 +1,191 @@
+0.16.5 / 2015-03-08
+-------------------
+- fixed `fs.move` when `clobber` is `true` and destination is a directory, it should clobber. https://github.com/jprichardson/node-fs-extra/issues/114
+
+0.16.4 / 2015-03-01
+-------------------
+- `fs.mkdirs` fix infinite loop on Windows. See: See https://github.com/substack/node-mkdirp/pull/74 and https://github.com/substack/node-mkdirp/issues/66
+
+0.16.3 / 2015-01-28
+-------------------
+- reverted https://github.com/jprichardson/node-fs-extra/commit/1ee77c8a805eba5b99382a2591ff99667847c9c9
+
+
+0.16.2 / 2015-01-28
+-------------------
+- fixed `fs.copy` for Node v0.8 (support is temporary and will be removed in the near future)
+
+0.16.1 / 2015-01-28
+-------------------
+- if `setImmediate` is not available, fall back to `process.nextTick`
+
+0.16.0 / 2015-01-28
+-------------------
+- bugfix `fs.move()` into itself. Closes #104
+- bugfix `fs.move()` moving directory across device. Closes #108
+- added coveralls support
+- bugfix: nasty multiple callback `fs.copy()` bug. Closes #98
+- misc fs.copy code cleanups
+
+0.15.0 / 2015-01-21
+-------------------
+- dropped `ncp`, imported code in
+- because of previous, now supports `io.js`
+- `graceful-fs` is now a dependency
+
+0.14.0 / 2015-01-05
+-------------------
+- changed `copy`/`copySync` from `fs.copy(src, dest, [filters], callback)` to `fs.copy(src, dest, [options], callback)` https://github.com/jprichardson/node-fs-extra/pull/100
+- removed mockfs tests for mkdirp (this may be temporary, but was getting in the way of other tests)
+
+0.13.0 / 2014-12-10
+-------------------
+- removed `touch` and `touchSync` methods (they didn't handle permissions like UNIX touch)
+- updated `"ncp": "^0.6.0"` to `"ncp": "^1.0.1"`
+- imported `mkdirp` => `minimist` and `mkdirp` are no longer dependences, should now appease people who wanted `mkdirp` to be `--use_strict` safe. See [#59](https://github.com/jprichardson/node-fs-extra/issues/59)
+
+0.12.0 / 2014-09-22
+-------------------
+- copy symlinks in `copySync()` [#85](https://github.com/jprichardson/node-fs-extra/pull/85)
+
+0.11.1 / 2014-09-02
+-------------------
+- bugfix `copySync()` preserve file permissions [#80](https://github.com/jprichardson/node-fs-extra/pull/80)
+
+0.11.0 / 2014-08-11
+-------------------
+- upgraded `"ncp": "^0.5.1"` to `"ncp": "^0.6.0"`
+- upgrade `jsonfile": "^1.2.0"` to `jsonfile": "^2.0.0"` => on write, json files now have `\n` at end. Also adds `options.throws` to `readJsonSync()`
+see https://github.com/jprichardson/node-jsonfile#readfilesyncfilename-options for more details.
+
+0.10.0 / 2014-06-29
+------------------
+* bugfix: upgaded `"jsonfile": "~1.1.0"` to `"jsonfile": "^1.2.0"`, bumped minor because of `jsonfile` dep change
+from `~` to `^`. #67
+
+0.9.1 / 2014-05-22
+------------------
+* removed Node.js `0.8.x` support, `0.9.0` was published moments ago and should have been done there
+
+0.9.0 / 2014-05-22
+------------------
+* upgraded `ncp` from `~0.4.2` to `^0.5.1`, #58
+* upgraded `rimraf` from `~2.2.6` to `^2.2.8`
+* upgraded `mkdirp` from `0.3.x` to `^0.5.0`
+* added methods `ensureFile()`, `ensureFileSync()`
+* added methods `ensureDir()`, `ensureDirSync()` #31
+* added `move()` method. From: https://github.com/andrewrk/node-mv
+
+
+0.8.1 / 2013-10-24
+------------------
+* copy failed to return an error to the callback if a file doesn't exist (ulikoehler #38, #39)
+
+0.8.0 / 2013-10-14
+------------------
+* `filter` implemented on `copy()` and `copySync()`. (Srirangan / #36)
+
+0.7.1 / 2013-10-12
+------------------
+* `copySync()` implemented (Srirangan / #33)
+* updated to the latest `jsonfile` version `1.1.0` which gives `options` params for the JSON methods. Closes #32
+
+0.7.0 / 2013-10-07
+------------------
+* update readme conventions
+* `copy()` now works if destination directory does not exist. Closes #29
+
+0.6.4 / 2013-09-05
+------------------
+* changed `homepage` field in package.json to remove NPM warning
+
+0.6.3 / 2013-06-28
+------------------
+* changed JSON spacing default from `4` to `2` to follow Node conventions
+* updated `jsonfile` dep
+* updated `rimraf` dep
+
+0.6.2 / 2013-06-28
+------------------
+* added .npmignore, #25
+
+0.6.1 / 2013-05-14
+------------------
+* modified for `strict` mode, closes #24
+* added `outputJson()/outputJsonSync()`, closes #23
+
+0.6.0 / 2013-03-18
+------------------
+* removed node 0.6 support
+* added node 0.10 support
+* upgraded to latest `ncp` and `rimraf`.
+* optional `graceful-fs` support. Closes #17
+
+
+0.5.0 / 2013-02-03
+------------------
+* Removed `readTextFile`.
+* Renamed `readJSONFile` to `readJSON` and `readJson`, same with write.
+* Restructured documentation a bit. Added roadmap.
+
+0.4.0 / 2013-01-28
+------------------
+* Set default spaces in `jsonfile` from 4 to 2.
+* Updated `testutil` deps for tests.
+* Renamed `touch()` to `createFile()`
+* Added `outputFile()` and `outputFileSync()`
+* Changed creation of testing diretories so the /tmp dir is not littered.
+* Added `readTextFile()` and `readTextFileSync()`.
+
+0.3.2 / 2012-11-01
+------------------
+* Added `touch()` and `touchSync()` methods.
+
+0.3.1 / 2012-10-11
+------------------
+* Fixed some stray globals.
+
+0.3.0 / 2012-10-09
+------------------
+* Removed all CoffeeScript from tests.
+* Renamed `mkdir` to `mkdirs`/`mkdirp`.
+
+0.2.1 / 2012-09-11
+------------------
+* Updated `rimraf` dep.
+
+0.2.0 / 2012-09-10
+------------------
+* Rewrote module into JavaScript. (Must still rewrite tests into JavaScript)
+* Added all methods of [jsonfile][https://github.com/jprichardson/node-jsonfile]
+* Added Travis-CI.
+
+0.1.3 / 2012-08-13
+------------------
+* Added method `readJSONFile`.
+
+0.1.2 / 2012-06-15
+------------------
+* Bug fix: `deleteSync()` didn't exist.
+* Verified Node v0.8 compatibility.
+
+0.1.1 / 2012-06-15
+------------------
+* Fixed bug in `remove()`/`delete()` that wouldn't execute the function if a callback wasn't passed.
+
+0.1.0 / 2012-05-31
+------------------
+* Renamed `copyFile()` to `copy()`. `copy()` can now copy directories (recursively) too.
+* Renamed `rmrf()` to `remove()`.
+* `remove()` aliased with `delete()`.
+* Added `mkdirp` capabilities. Named: `mkdir()`. Hides Node.js native `mkdir()`.
+* Instead of exporting the native `fs` module with new functions, I now copy over the native methods to a new object and export that instead.
+
+0.0.4 / 2012-03-14
+------------------
+* Removed CoffeeScript dependency
+
+0.0.3 / 2012-01-11
+------------------
+* Added methods rmrf and rmrfSync
+* Moved tests from Jasmine to Mocha
diff --git a/node_modules/csswring/node_modules/fs-extra/LICENSE b/node_modules/csswring/node_modules/fs-extra/LICENSE
new file mode 100644
index 0000000..bc7481c
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/LICENSE
@@ -0,0 +1,15 @@
+(The MIT License)
+
+Copyright (c) 2011-2014 JP Richardson
+
+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/node_modules/csswring/node_modules/fs-extra/README.md b/node_modules/csswring/node_modules/fs-extra/README.md
new file mode 100644
index 0000000..279addf
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/README.md
@@ -0,0 +1,411 @@
+Node.js: fs-extra
+=================
+
+[](http://travis-ci.org/jprichardson/node-fs-extra)
+[](https://www.npmjs.org/package/fs-extra)
+[](https://coveralls.io/r/jprichardson/node-fs-extra)
+
+This module adds a few extra file system methods that aren't included in the native `fs` module. It is a drop in replacement for `fs`.
+
+
+
+Why?
+----
+
+I got tired of including `mkdirp`, `rimraf`, and `cp -r` in most of my projects.
+
+
+
+
+Installation
+------------
+
+ npm install --save fs-extra
+
+
+
+Usage
+-----
+
+`fs-extra` is a drop in replacement for native `fs`. All methods in `fs` are unmodified and attached to `fs-extra`.
+
+You don't ever need to include the original `fs` module again:
+
+```javascript
+var fs = require('fs') //this is no longer necessary
+```
+
+you can now do this:
+
+```javascript
+var fs = require('fs-extra') //var fs = require('fs')
+```
+
+or if you prefer to make it clear that you're using `fs-extra` and not `fs`, you may want
+to do this:
+
+```javascript
+//var fs = require('fs')
+var fse = require('fs-extra')
+```
+
+you can also keep both, but it's redundant:
+
+```javascript
+var fs = require('fs')
+var fse = require('fs-extra')
+```
+
+
+
+Methods
+-------
+
+**NOTE:** You can still use the native Node.js methods. They are copied over to `fs-extra`.
+
+
+### copy(src, dest, [options], callback)
+
+Copy a file or directory. The directory can have contents. Like `cp -r`.
+
+Sync: `copySync()`
+
+
+Examples:
+
+```javascript
+var fs = require('fs-extra')
+
+fs.copy('/tmp/myfile', '/tmp/mynewfile', function(err) {
+ if (err) return console.error(err)
+ console.log("success!")
+}) //copies file
+
+fs.copy('/tmp/mydir', '/tmp/mynewdir', function(err) {
+ if (err) return console.error(err)
+ console.log("success!")
+}) //copies directory, even if it has subdirectories or files
+```
+
+
+### ensureFile(file, callback)
+
+Ensures that the file exists. If the file that is requested to be created is in directories that do not exist, these directories are created. If the file already exists, it is **NOT MODIFIED**.
+
+Alias: `createFile()`
+
+Sync: `createFileSync()`,`ensureFileSync()`
+
+
+Example:
+
+```javascript
+var fs = require('fs-extra')
+
+var file = '/tmp/this/path/does/not/exist/file.txt'
+fs.ensureFile(file, function(err) {
+ console.log(err) // => null
+ //file has now been created, including the directory it is to be placed in
+})
+```
+
+
+### ensureDir(dir, callback)
+
+Ensures that the directory exists. If the directory structure does not exist, it is created.
+
+Sync: `ensureDirSync()`
+
+
+Example:
+
+```javascript
+var fs = require('fs-extra')
+
+var dir = '/tmp/this/path/does/not/exist'
+fs.ensureDir(dir, function(err) {
+ console.log(err) // => null
+ //dir has now been created, including the directory it is to be placed in
+})
+```
+
+
+
+### mkdirs(dir, callback)
+
+Creates a directory. If the parent hierarchy doesn't exist, it's created. Like `mkdir -p`.
+
+Alias: `mkdirp()`
+
+Sync: `mkdirsSync()` / `mkdirpSync()`
+
+
+Examples:
+
+```javascript
+var fs = require('fs-extra')
+
+fs.mkdirs('/tmp/some/long/path/that/prob/doesnt/exist', function(err) {
+ if (err) return console.error(err)
+ console.log("success!")
+})
+
+fs.mkdirsSync('/tmp/another/path')
+```
+
+
+### move(src, dest, [options], callback)
+
+Moves a file or directory, even across devices.
+
+Options:
+clobber (boolean): overwrite existing file or directory
+limit (number): number of concurrent moves, see ncp for more information
+
+Example:
+
+```javascript
+var fs = require('fs-extra')
+
+fs.move('/tmp/somefile', '/tmp/does/not/exist/yet/somefile', function(err) {
+ if (err) return console.error(err)
+ console.log("success!")
+})
+```
+
+
+### outputFile(file, data, callback)
+
+Almost the same as `writeFile` (i.e. it [overwrites](http://pages.citebite.com/v2o5n8l2f5reb)), except that if the parent directory does not exist, it's created.
+
+Sync: `outputFileSync()`
+
+
+Example:
+
+```javascript
+var fs = require('fs-extra')
+var file = '/tmp/this/path/does/not/exist/file.txt'
+
+fs.outputFile(file, 'hello!', function(err) {
+ console.log(err) // => null
+
+ fs.readFile(file, 'utf8', function(err, data) {
+ console.log(data) // => hello!
+ })
+})
+```
+
+
+
+### outputJson(file, data, callback)
+
+Almost the same as `writeJson`, except that if the directory does not exist, it's created.
+
+Alias: `outputJSON()`
+
+Sync: `outputJsonSync()`, `outputJSONSync()`
+
+
+Example:
+
+```javascript
+var fs = require('fs-extra')
+var file = '/tmp/this/path/does/not/exist/file.txt'
+
+fs.outputJson(file, {name: 'JP'}, function(err) {
+ console.log(err) // => null
+
+ fs.readJson(file, function(err, data) {
+ console.log(data.name) // => JP
+ })
+})
+```
+
+
+
+### readJson(file, [options], callback)
+
+Reads a JSON file and then parses it into an object. `options` are the same that you'd pass to `fs.readFile`.
+
+Alias: `readJSON()`
+
+Sync: `readJsonSync()`, `readJSONSync()`
+
+
+Example:
+
+```javascript
+var fs = require('fs-extra')
+
+fs.readJson('./package.json', function(err, packageObj) {
+ console.log(packageObj.version) // => 0.1.3
+})
+```
+
+`readJsonSync()` can take a `throws` option set to `false` and it won't throw if the JSON is invalid. Example:
+
+```js
+var fs = require('fs-extra')
+var file = path.join('/tmp/some-invalid.json')
+var data = "{not valid JSON"
+fs.writeFileSync(file, data)
+
+var obj = fs.readJsonSync(file, {throws: false})
+console.log(obj) // => null
+```
+
+
+### remove(dir, callback)
+
+Removes a file or directory. The directory can have contents. Like `rm -rf`.
+
+Alias: `delete()`
+
+Sync: `removeSync()` / `deleteSync()`
+
+
+Examples:
+
+```javascript
+var fs = require('fs-extra')
+
+fs.remove('/tmp/myfile', function(err) {
+ if (err) return console.error(err)
+
+ console.log("success!")
+})
+
+fs.removeSync('/home/jprichardson') //I just deleted my entire HOME directory.
+```
+
+
+
+### writeJson(file, object, [options], callback)
+
+Writes an object to a JSON file. `options` are the same that you'd pass to `fs.readFile`.
+
+Alias: `writeJSON()`
+
+Sync: `writeJsonSync()`, `writeJSONSync()`
+
+Example:
+
+```javascript
+var fs = require('fs-extra')
+fs.writeJson('./package.json', {name: 'fs-extra'}, function(err) {
+ console.log(err)
+})
+```
+
+
+Third Party
+-----------
+
+### Promises
+
+Use [Bluebird](https://github.com/petkaantonov/bluebird). See https://github.com/petkaantonov/bluebird/blob/master/API.md#promisification. `fs-extra` is
+explicitly listed as supported.
+
+```js
+var Promise = require("bluebird")
+var fs = Promise.promisifyAll(require("fs-extra"))
+```
+
+Or you can use the package [`fs-extra-promise`](https://github.com/overlookmotel/fs-extra-promise) that marries the two together.
+
+
+### TypeScript
+
+If you like TypeScript, you can use `fs-extra` with it: https://github.com/borisyankov/DefinitelyTyped/tree/master/fs-extra
+
+
+### File / Directory Watching
+
+If you want to watch for changes to files or directories, then you should use [chokidar](https://github.com/paulmillr/chokidar).
+
+
+### Misc.
+
+- [mfs](https://github.com/cadorn/mfs) - Monitor your fs-extra calls.
+
+
+
+
+Naming
+------
+
+I put a lot of thought into the naming of these functions. Inspired by @coolaj86's request. So he deserves much of the credit for raising the issue. See discussion(s) here:
+
+* https://github.com/jprichardson/node-fs-extra/issues/2
+* https://github.com/flatiron/utile/issues/11
+* https://github.com/ryanmcgrath/wrench-js/issues/29
+* https://github.com/substack/node-mkdirp/issues/17
+
+First, I believe that in as many cases as possible, the [Node.js naming schemes](http://nodejs.org/api/fs.html) should be chosen. However, there are problems with the Node.js own naming schemes.
+
+For example, `fs.readFile()` and `fs.readdir()`: the **F** is capitalized in *File* and the **d** is not capitalized in *dir*. Perhaps a bit pedantic, but they should still be consistent. Also, Node.js has chosen a lot of POSIX naming schemes, which I believe is great. See: `fs.mkdir()`, `fs.rmdir()`, `fs.chown()`, etc.
+
+We have a dilemma though. How do you consistently name methods that perform the following POSIX commands: `cp`, `cp -r`, `mkdir -p`, and `rm -rf`?
+
+My perspective: when in doubt, err on the side of simplicity. A directory is just a hierarchical grouping of directories and files. Consider that for a moment. So when you want to copy it or remove it, in most cases you'll want to copy or remove all of its contents. When you want to create a directory, if the directory that it's suppose to be contained in does not exist, then in most cases you'll want to create that too.
+
+So, if you want to remove a file or a directory regardless of whether it has contents, just call `fs.remove(path)` or its alias `fs.delete(path)`. If you want to copy a file or a directory whether it has contents, just call `fs.copy(source, destination)`. If you want to create a directory regardless of whether its parent directories exist, just call `fs.mkdirs(path)` or `fs.mkdirp(path)`.
+
+
+Credit
+------
+
+`fs-extra` wouldn't be possible without using the modules from the following authors:
+
+- [Isaac Shlueter](https://github.com/isaacs)
+- [Charlie McConnel](https://github.com/avianflu)
+- [James Halliday](https://github.com/substack)
+- [Andrew Kelley](https://github.com/andrewrk)
+
+
+Contributions
+-------------
+
+If you want to contribute, please add a test. Also, don't change the version in `package.json`.
+
+
+### Contributors
+
+- [*] [JP Richardson](https://github.com/jprichardson)
+- [*] [Mike McNeil](https://github.com/mikermcneil)
+- [*] [Ian Crowther](https://github.com/iancrowther)
+- [*] [Stephen Mathieson](https://github.com/stephenmathieson)
+- [*] [Srirangan](https://github.com/Srirangan)
+- [*] [Uli Köhler](https://github.com/ulikoehler)
+- [2] [Sylvain Cleymans](https://github.com/Ackar)
+- [1] [Jim Higson](https://github.com/jimhigson)
+- [1] [PatrickJS](https://github.com/gdi2290)
+- [1] [Michael Tiller](https://github.com/xogeny)
+- [1] [yibuyisheng](https://github.com/yibuyisheng)
+- [1] [overlookmotel](https://github.com/overlookmotel)
+- ``
+
+
+
+
+License
+-------
+
+
+Licensed under MIT
+
+Copyright (c) 2011-2014 JP Richardson
+
+[1]: http://nodejs.org/docs/latest/api/fs.html
+
+
+[jsonfile]: https://github.com/jprichardson/node-jsonfile
+
+
+
+
+
+
+
+
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/_copy.js b/node_modules/csswring/node_modules/fs-extra/lib/_copy.js
new file mode 100644
index 0000000..c42108e
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/_copy.js
@@ -0,0 +1,250 @@
+// imported from ncp (this is temporary, will rewrite)
+
+var fs = require('graceful-fs')
+var path = require('path')
+
+function ncp (source, dest, options, callback) {
+ var cback = callback
+
+ if (!callback) {
+ cback = options
+ options = {}
+ }
+
+ var basePath = process.cwd()
+ var currentPath = path.resolve(basePath, source)
+ var targetPath = path.resolve(basePath, dest)
+
+ var filter = options.filter
+ var transform = options.transform
+ var clobber = options.clobber !== false
+ var dereference = options.dereference
+
+ var errs = null
+
+ var started = 0
+ var finished = 0
+ var running = 0
+ // this is pretty useless now that we're using graceful-fs
+ // consider removing
+ var limit = options.limit || 512
+
+ startCopy(currentPath)
+
+ function startCopy(source) {
+ started++
+ if (filter) {
+ if (filter instanceof RegExp) {
+ if (!filter.test(source)) {
+ return cb(true)
+ }
+ }
+ else if (typeof filter === 'function') {
+ if (!filter(source)) {
+ return cb(true)
+ }
+ }
+ }
+ return getStats(source)
+ }
+
+ function getStats(source) {
+ var defer = global.setImmediate || process.nextTick
+ var stat = dereference ? fs.stat : fs.lstat
+ if (running >= limit) {
+ return defer(function () {
+ getStats(source)
+ })
+ }
+ running++
+ stat(source, function (err, stats) {
+ var item = {}
+ if (err) {
+ return onError(err)
+ }
+
+ // We need to get the mode from the stats object and preserve it.
+ item.name = source
+ item.mode = stats.mode
+ item.mtime = stats.mtime //modified time
+ item.atime = stats.atime //access time
+
+ if (stats.isDirectory()) {
+ return onDir(item)
+ }
+ else if (stats.isFile()) {
+ return onFile(item)
+ }
+ else if (stats.isSymbolicLink()) {
+ // Symlinks don't really need to know about the mode.
+ return onLink(source)
+ }
+ })
+ }
+
+ function onFile(file) {
+ var target = file.name.replace(currentPath, targetPath)
+ isWritable(target, function (writable) {
+ if (writable) {
+ copyFile(file, target)
+ } else {
+ if(clobber) {
+ rmFile(target, function () {
+ copyFile(file, target)
+ })
+ } else {
+ cb()
+ }
+ }
+ })
+ }
+
+ function copyFile(file, target) {
+ var readStream = fs.createReadStream(file.name),
+ writeStream = fs.createWriteStream(target, { mode: file.mode })
+
+ readStream.on('error', onError)
+ writeStream.on('error', onError)
+
+ if(transform) {
+ transform(readStream, writeStream, file)
+ } else {
+ writeStream.on('open', function() {
+ readStream.pipe(writeStream)
+ })
+ }
+
+ //presumably old node then
+ var eventName = global.setImmediate ? 'finish' : 'close'
+ writeStream.once(eventName, function() {
+ cb()
+ })
+ }
+
+ function rmFile(file, done) {
+ fs.unlink(file, function (err) {
+ if (err) {
+ return onError(err)
+ }
+ return done()
+ })
+ }
+
+ function onDir(dir) {
+ var target = dir.name.replace(currentPath, targetPath)
+ isWritable(target, function (writable) {
+ if (writable) {
+ return mkDir(dir, target)
+ }
+ copyDir(dir.name)
+ })
+ }
+
+ function mkDir(dir, target) {
+ fs.mkdir(target, dir.mode, function (err) {
+ if (err) {
+ return onError(err)
+ }
+ copyDir(dir.name)
+ })
+ }
+
+ function copyDir(dir) {
+ fs.readdir(dir, function (err, items) {
+ if (err) {
+ return onError(err)
+ }
+ items.forEach(function (item) {
+ startCopy(path.join(dir, item))
+ })
+ return cb()
+ })
+ }
+
+ function onLink(link) {
+ var target = link.replace(currentPath, targetPath)
+ fs.readlink(link, function (err, resolvedPath) {
+ if (err) {
+ return onError(err)
+ }
+ checkLink(resolvedPath, target)
+ })
+ }
+
+ function checkLink(resolvedPath, target) {
+ if (dereference) {
+ resolvedPath = path.resolve(basePath, resolvedPath)
+ }
+ isWritable(target, function (writable) {
+ if (writable) {
+ return makeLink(resolvedPath, target)
+ }
+ fs.readlink(target, function (err, targetDest) {
+ if (err) {
+ return onError(err)
+ }
+ if (dereference) {
+ targetDest = path.resolve(basePath, targetDest)
+ }
+ if (targetDest === resolvedPath) {
+ return cb()
+ }
+ return rmFile(target, function () {
+ makeLink(resolvedPath, target)
+ })
+ })
+ })
+ }
+
+ function makeLink(linkPath, target) {
+ fs.symlink(linkPath, target, function (err) {
+ if (err) {
+ return onError(err)
+ }
+ return cb()
+ })
+ }
+
+ function isWritable(path, done) {
+ fs.lstat(path, function (err) {
+ if (err) {
+ if (err.code === 'ENOENT') return done(true)
+ return done(false)
+ }
+ return done(false)
+ })
+ }
+
+ function onError(err) {
+ if (options.stopOnError) {
+ return cback(err)
+ }
+ else if (!errs && options.errs) {
+ errs = fs.createWriteStream(options.errs)
+ }
+ else if (!errs) {
+ errs = []
+ }
+ if (typeof errs.write === 'undefined') {
+ errs.push(err)
+ }
+ else {
+ errs.write(err.stack + '\n\n')
+ }
+ return cb()
+ }
+
+ function cb(skipped) {
+ if (!skipped) running--
+ finished++
+ if ((started === finished) && (running === 0)) {
+ if (cback !== undefined ) {
+ return errs ? cback(errs) : cback(null)
+ }
+ }
+ }
+}
+
+// todo, make this just export ncp
+module.exports.ncp = ncp
+
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/copy.js b/node_modules/csswring/node_modules/fs-extra/lib/copy.js
new file mode 100644
index 0000000..36d13bc
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/copy.js
@@ -0,0 +1,99 @@
+var fs = require('graceful-fs')
+var path = require('path')
+var ncp = require('./_copy').ncp
+var mkdir = require('./mkdir')
+var create = require('./create')
+
+var BUF_LENGTH = 64 * 1024
+var _buff = new Buffer(BUF_LENGTH)
+
+var copyFileSync = function(srcFile, destFile) {
+ var fdr = fs.openSync(srcFile, 'r')
+ var stat = fs.fstatSync(fdr)
+ var fdw = fs.openSync(destFile, 'w', stat.mode)
+ var bytesRead = 1
+ var pos = 0
+
+ while (bytesRead > 0) {
+ bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
+ fs.writeSync(fdw, _buff, 0, bytesRead)
+ pos += bytesRead
+ }
+
+ fs.closeSync(fdr)
+ fs.closeSync(fdw)
+}
+
+function copy(src, dest, options, callback) {
+ if( typeof options == "function" && !callback) {
+ callback = options
+ options = {}
+ } else if (typeof options == "function" || options instanceof RegExp) {
+ options = {filter: options}
+ }
+ callback = callback || function(){}
+
+ fs.lstat(src, function(err, stats) {
+ if (err) return callback(err)
+
+ var dir = null
+ if (stats.isDirectory()) {
+ var parts = dest.split(path.sep)
+ parts.pop()
+ dir = parts.join(path.sep)
+ } else {
+ dir = path.dirname(dest)
+ }
+
+ fs.exists(dir, function(dirExists) {
+ if (dirExists) return ncp(src, dest, options, callback)
+ mkdir.mkdirs(dir, function(err) {
+ if (err) return callback(err)
+ ncp(src, dest, options, callback)
+ })
+ })
+ })
+}
+
+function copySync(src, dest, options) {
+ if (typeof options == "function" || options instanceof RegExp) {
+ options = {filter: options}
+ }
+
+ options = options || {}
+ options.recursive = !!options.recursive
+
+ options.filter = options.filter || function() { return true }
+
+ var stats = options.recursive ? fs.lstatSync(src) : fs.statSync(src)
+ var destFolder = path.dirname(dest)
+ var destFolderExists = fs.existsSync(destFolder)
+ var performCopy = false
+
+ if (stats.isFile()) {
+ if (options.filter instanceof RegExp) performCopy = options.filter.test(src)
+ else if (typeof options.filter == "function") performCopy = options.filter(src)
+
+ if (performCopy) {
+ if (!destFolderExists) mkdir.mkdirsSync(destFolder)
+ copyFileSync(src, dest)
+ }
+ }
+ else if (stats.isDirectory()) {
+ if (!fs.existsSync(dest)) mkdir.mkdirsSync(dest)
+ var contents = fs.readdirSync(src)
+ contents.forEach(function(content) {
+ copySync(path.join(src, content), path.join(dest, content), {filter: options.filter, recursive: true})
+ })
+ }
+ else if (options.recursive && stats.isSymbolicLink()) {
+ var srcPath = fs.readlinkSync(src)
+ fs.symlinkSync(srcPath, dest)
+ }
+}
+
+module.exports = {
+ copy: copy,
+ copySync: copySync
+}
+
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/create.js b/node_modules/csswring/node_modules/fs-extra/lib/create.js
new file mode 100644
index 0000000..68e9582
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/create.js
@@ -0,0 +1,39 @@
+var path = require('path')
+var fs = require('graceful-fs')
+var mkdir = require('./mkdir')
+
+function createFile (file, callback) {
+ function makeFile() {
+ fs.writeFile(file, '', function(err) {
+ if (err) return callback(err)
+ callback()
+ })
+ }
+
+ fs.exists(file, function(fileExists) {
+ if (fileExists) return callback()
+ var dir = path.dirname(file)
+ fs.exists(dir, function(dirExists) {
+ if (dirExists) return makeFile()
+ mkdir.mkdirs(dir, function(err) {
+ if (err) return callback(err)
+ makeFile()
+ })
+ })
+ })
+}
+
+function createFileSync (file) {
+ if (fs.existsSync(file)) return
+
+ var dir = path.dirname(file)
+ if (!fs.existsSync(dir))
+ mkdir.mkdirsSync(dir)
+
+ fs.writeFileSync(file, '')
+}
+
+module.exports = {
+ createFile: createFile,
+ createFileSync: createFileSync
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/index.js b/node_modules/csswring/node_modules/fs-extra/lib/index.js
new file mode 100644
index 0000000..25c73ab
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/index.js
@@ -0,0 +1,90 @@
+var jsonFile = require('jsonfile')
+var json = require('./json')
+
+var fse = {}
+var fs = require("graceful-fs")
+
+//attach fs methods to fse
+Object.keys(fs).forEach(function(key) {
+ var func = fs[key]
+ if (typeof func == 'function')
+ fse[key] = func
+})
+fs = fse
+
+var copy = require('./copy')
+fs.copy = copy.copy
+fs.copySync = copy.copySync
+
+var remove = require('./remove')
+fs.remove = remove.remove
+fs.removeSync = remove.removeSync
+fs['delete'] = fs.remove
+fs.deleteSync = fs.removeSync
+
+var mkdir = require('./mkdir')
+fs.mkdirs = mkdir.mkdirs
+fs.mkdirsSync = mkdir.mkdirsSync
+fs.mkdirp = fs.mkdirs
+fs.mkdirpSync = fs.mkdirsSync
+
+var create = require('./create')
+fs.createFile = create.createFile
+fs.createFileSync = create.createFileSync
+
+fs.ensureFile = create.createFile
+fs.ensureFileSync = create.createFileSync
+fs.ensureDir = mkdir.mkdirs
+fs.ensureDirSync = mkdir.mkdirsSync
+
+
+var move = require('./move')
+fs.move = function(src, dest, opts, callback) {
+ if (typeof opts == 'function') {
+ callback = opts
+ opts = {}
+ }
+
+ if (opts.mkdirp == null) opts.mkdirp = true
+ if (opts.clobber == null) opts.clobber = false
+
+ move(src, dest, opts, callback)
+}
+
+
+var output = require('./output')
+fs.outputFile = output.outputFile
+fs.outputFileSync = output.outputFileSync
+
+
+fs.readJsonFile = jsonFile.readFile
+fs.readJSONFile = jsonFile.readFile
+fs.readJsonFileSync = jsonFile.readFileSync
+fs.readJSONFileSync = jsonFile.readFileSync
+
+fs.readJson = jsonFile.readFile
+fs.readJSON = jsonFile.readFile
+fs.readJsonSync = jsonFile.readFileSync
+fs.readJSONSync = jsonFile.readFileSync
+
+fs.outputJsonSync = json.outputJsonSync
+fs.outputJSONSync = json.outputJsonSync
+fs.outputJson = json.outputJson
+fs.outputJSON = json.outputJson
+
+fs.writeJsonFile = jsonFile.writeFile
+fs.writeJSONFile = jsonFile.writeFile
+fs.writeJsonFileSync = jsonFile.writeFileSync
+fs.writeJSONFileSync = jsonFile.writeFileSync
+
+fs.writeJson = jsonFile.writeFile
+fs.writeJSON = jsonFile.writeFile
+fs.writeJsonSync = jsonFile.writeFileSync
+fs.writeJSONSync = jsonFile.writeFileSync
+
+
+module.exports = fs
+
+jsonFile.spaces = 2 //set to 2
+module.exports.jsonfile = jsonFile //so users of fs-extra can modify jsonFile.spaces
+
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/json.js b/node_modules/csswring/node_modules/fs-extra/lib/json.js
new file mode 100644
index 0000000..8e12498
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/json.js
@@ -0,0 +1,31 @@
+var fs = require('graceful-fs')
+var path = require('path')
+var jsonFile = require('jsonfile')
+var mkdir = require('./mkdir')
+
+function outputJsonSync(file, data) {
+ var dir = path.dirname(file)
+
+ if (!fs.existsSync(dir))
+ mkdir.mkdirsSync(dir)
+
+ jsonFile.writeFileSync(file, data)
+}
+
+function outputJson(file, data, callback) {
+ var dir = path.dirname(file)
+
+ fs.exists(dir, function(itDoes) {
+ if (itDoes) return jsonFile.writeFile(file, data, callback)
+
+ mkdir.mkdirs(dir, function(err) {
+ if (err) return callback(err)
+ jsonFile.writeFile(file, data, callback)
+ })
+ })
+}
+
+module.exports = {
+ outputJsonSync: outputJsonSync,
+ outputJson: outputJson
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/mkdir.js b/node_modules/csswring/node_modules/fs-extra/lib/mkdir.js
new file mode 100644
index 0000000..6ac2e86
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/mkdir.js
@@ -0,0 +1,103 @@
+var fs = require('graceful-fs')
+var path = require('path')
+
+var octal_0777 = parseInt('0777', 8)
+
+function mkdirs(p, opts, f, made) {
+ if (typeof opts === 'function') {
+ f = opts
+ opts = {}
+ }
+ else if (!opts || typeof opts !== 'object') {
+ opts = { mode: opts }
+ }
+
+ var mode = opts.mode
+ var xfs = opts.fs || fs
+
+ if (mode === undefined) {
+ mode = octal_0777 & (~process.umask())
+ }
+ if (!made) made = null
+
+ var cb = f || function () {}
+ p = path.resolve(p)
+
+ xfs.mkdir(p, mode, function (er) {
+ if (!er) {
+ made = made || p
+ return cb(null, made)
+ }
+ switch (er.code) {
+ case 'ENOENT':
+ if (path.dirname(p) == p) return cb(er)
+ mkdirs(path.dirname(p), opts, function (er, made) {
+ if (er) cb(er, made)
+ else mkdirs(p, opts, cb, made)
+ })
+ break
+
+ // In the case of any other error, just see if there's a dir
+ // there already. If so, then hooray! If not, then something
+ // is borked.
+ default:
+ xfs.stat(p, function (er2, stat) {
+ // if the stat fails, then that's super weird.
+ // let the original error be the failure reason.
+ if (er2 || !stat.isDirectory()) cb(er, made)
+ else cb(null, made)
+ })
+ break
+ }
+ })
+}
+
+function mkdirsSync (p, opts, made) {
+ if (!opts || typeof opts !== 'object') {
+ opts = { mode: opts }
+ }
+
+ var mode = opts.mode
+ var xfs = opts.fs || fs
+
+ if (mode === undefined) {
+ mode = octal_0777 & (~process.umask())
+ }
+ if (!made) made = null
+
+ p = path.resolve(p)
+
+ try {
+ xfs.mkdirSync(p, mode)
+ made = made || p
+ }
+ catch (err0) {
+ switch (err0.code) {
+ case 'ENOENT' :
+ made = mkdirsSync(path.dirname(p), opts, made)
+ mkdirsSync(p, opts, made)
+ break
+
+ // In the case of any other error, just see if there's a dir
+ // there already. If so, then hooray! If not, then something
+ // is borked.
+ default:
+ var stat
+ try {
+ stat = xfs.statSync(p)
+ }
+ catch (err1) {
+ throw err0
+ }
+ if (!stat.isDirectory()) throw err0
+ break
+ }
+ }
+
+ return made
+}
+
+module.exports = {
+ mkdirs: mkdirs,
+ mkdirsSync: mkdirsSync
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/move.js b/node_modules/csswring/node_modules/fs-extra/lib/move.js
new file mode 100644
index 0000000..08320fd
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/move.js
@@ -0,0 +1,136 @@
+// most of this code was written by Andrew Kelley
+// licensed under the BSD license: see
+// https://github.com/andrewrk/node-mv/blob/master/package.json
+
+// this needs a cleanup
+
+var fs = require('graceful-fs')
+var ncp = require('./_copy').ncp
+var path = require('path')
+var rimraf = require('rimraf')
+var mkdirp = require('./mkdir').mkdirs
+
+function mv(source, dest, options, callback){
+ if (typeof options === 'function') {
+ callback = options
+ options = {}
+ }
+
+ var shouldMkdirp = !!options.mkdirp
+ var clobber = options.clobber !== false
+ var limit = options.limit || 16
+
+ if (shouldMkdirp) {
+ mkdirs()
+ } else {
+ doRename()
+ }
+
+ function mkdirs() {
+ mkdirp(path.dirname(dest), function(err) {
+ if (err) return callback(err)
+ doRename()
+ })
+ }
+
+ function doRename() {
+ if (clobber) {
+ fs.rename(source, dest, function(err) {
+ if (!err) return callback()
+
+ if (err.code === 'ENOTEMPTY') {
+ rimraf(dest, function(err) {
+ if (err) return callback(err)
+ options.clobber = false // just clobbered it, no need to do it again
+ mv(source, dest, options, callback)
+ })
+ return
+ }
+
+ if (err.code !== 'EXDEV') return callback(err)
+ moveFileAcrossDevice(source, dest, clobber, limit, callback)
+ })
+ } else {
+ fs.link(source, dest, function(err) {
+ if (err) {
+ if (err.code === 'EXDEV') {
+ moveFileAcrossDevice(source, dest, clobber, limit, callback)
+ return
+ }
+ if (err.code === 'EISDIR' || err.code === 'EPERM') {
+ moveDirAcrossDevice(source, dest, clobber, limit, callback)
+ return
+ }
+ callback(err)
+ return
+ }
+ fs.unlink(source, callback)
+ })
+ }
+ }
+}
+
+function moveFileAcrossDevice(source, dest, clobber, limit, callback) {
+ var outFlags = clobber ? 'w' : 'wx'
+ var ins = fs.createReadStream(source)
+ var outs = fs.createWriteStream(dest, {flags: outFlags})
+
+ ins.on('error', function(err) {
+ ins.destroy()
+ outs.destroy()
+ outs.removeListener('close', onClose)
+
+ // may want to create a directory but `out` line above
+ // creates an empty file for us: See #108
+ // don't care about error here
+ fs.unlink(dest, function() {
+ // note: `err` here is from the input stream errror
+ if (err.code === 'EISDIR' || err.code === 'EPERM') {
+ moveDirAcrossDevice(source, dest, clobber, limit, callback)
+ } else {
+ callback(err)
+ }
+ })
+ })
+
+ outs.on('error', function(err) {
+ ins.destroy()
+ outs.destroy()
+ outs.removeListener('close', onClose)
+ callback(err)
+ })
+
+ outs.once('close', onClose)
+ ins.pipe(outs)
+
+ function onClose() {
+ fs.unlink(source, callback)
+ }
+}
+
+function moveDirAcrossDevice(source, dest, clobber, limit, callback) {
+ var options = {
+ stopOnErr: true,
+ clobber: false,
+ limit: limit,
+ }
+
+ function startNcp() {
+ ncp(source, dest, options, function(errList) {
+ if (errList) return callback(errList[0])
+ rimraf(source, callback)
+ })
+ }
+
+ if (clobber) {
+ rimraf(dest, function(err) {
+ if (err) return callback(err)
+ startNcp()
+ })
+ } else {
+ startNcp()
+ }
+}
+
+module.exports = mv
+
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/output.js b/node_modules/csswring/node_modules/fs-extra/lib/output.js
new file mode 100644
index 0000000..eb9ec3c
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/output.js
@@ -0,0 +1,34 @@
+var path = require('path')
+var fs = require('graceful-fs')
+var mkdir = require('./mkdir')
+
+function outputFile (file, data, encoding, callback) {
+ if (typeof encoding === 'function') {
+ callback = encoding
+ encoding = 'utf8'
+ }
+
+ var dir = path.dirname(file)
+ fs.exists(dir, function(itDoes) {
+ if (itDoes) return fs.writeFile(file, data, encoding, callback)
+
+ mkdir.mkdirs(dir, function(err) {
+ if (err) return callback(err)
+
+ fs.writeFile(file, data, encoding, callback)
+ })
+ })
+}
+
+function outputFileSync (file, data, encoding) {
+ var dir = path.dirname(file)
+ if (fs.existsSync(dir))
+ return fs.writeFileSync.apply(fs, arguments)
+ mkdir.mkdirsSync(dir)
+ fs.writeFileSync.apply(fs, arguments)
+}
+
+module.exports = {
+ outputFile: outputFile,
+ outputFileSync: outputFileSync
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/lib/remove.js b/node_modules/csswring/node_modules/fs-extra/lib/remove.js
new file mode 100644
index 0000000..d6e3876
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/lib/remove.js
@@ -0,0 +1,14 @@
+var rimraf = require('rimraf')
+
+function removeSync(dir) {
+ return rimraf.sync(dir)
+}
+
+function remove(dir, callback) {
+ return callback ? rimraf(dir, callback) : rimraf(dir, function(){})
+}
+
+module.exports = {
+ remove: remove,
+ removeSync: removeSync
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/.bin/rimraf b/node_modules/csswring/node_modules/fs-extra/node_modules/.bin/rimraf
new file mode 120000
index 0000000..4cd49a4
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/.bin/rimraf
@@ -0,0 +1 @@
+../rimraf/bin.js
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/.npmignore b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/.npmignore
new file mode 100644
index 0000000..c2658d7
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/.npmignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/LICENSE
new file mode 100644
index 0000000..0c44ae7
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) Isaac Z. Schlueter ("Author")
+All rights reserved.
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/README.md
new file mode 100644
index 0000000..13a2e86
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/README.md
@@ -0,0 +1,36 @@
+# graceful-fs
+
+graceful-fs functions as a drop-in replacement for the fs module,
+making various improvements.
+
+The improvements are meant to normalize behavior across different
+platforms and environments, and to make filesystem access more
+resilient to errors.
+
+## Improvements over [fs module](http://api.nodejs.org/fs.html)
+
+graceful-fs:
+
+* Queues up `open` and `readdir` calls, and retries them once
+ something closes if there is an EMFILE error from too many file
+ descriptors.
+* fixes `lchmod` for Node versions prior to 0.6.2.
+* implements `fs.lutimes` if possible. Otherwise it becomes a noop.
+* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or
+ `lchown` if the user isn't root.
+* makes `lchmod` and `lchown` become noops, if not available.
+* retries reading a file if `read` results in EAGAIN error.
+
+On Windows, it retries renaming a file for up to one second if `EACCESS`
+or `EPERM` error occurs, likely because antivirus software has locked
+the directory.
+
+## USAGE
+
+```javascript
+// use just like fs
+var fs = require('graceful-fs')
+
+// now go and do stuff with it...
+fs.readFileSync('some-file-or-whatever')
+```
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/fs.js b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/fs.js
new file mode 100644
index 0000000..64ad980
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/fs.js
@@ -0,0 +1,11 @@
+// eeeeeevvvvviiiiiiillllll
+// more evil than monkey-patching the native builtin?
+// Not sure.
+
+var mod = require("module")
+var pre = '(function (exports, require, module, __filename, __dirname) { '
+var post = '});'
+var src = pre + process.binding('natives').fs + post
+var vm = require('vm')
+var fn = vm.runInThisContext(src)
+fn(exports, require, module, __filename, __dirname)
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/graceful-fs.js b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/graceful-fs.js
new file mode 100644
index 0000000..77fc702
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/graceful-fs.js
@@ -0,0 +1,158 @@
+// Monkey-patching the fs module.
+// It's ugly, but there is simply no other way to do this.
+var fs = module.exports = require('./fs.js')
+
+var assert = require('assert')
+
+// fix up some busted stuff, mostly on windows and old nodes
+require('./polyfills.js')
+
+var util = require('util')
+
+function noop () {}
+
+var debug = noop
+if (util.debuglog)
+ debug = util.debuglog('gfs')
+else if (/\bgfs\b/i.test(process.env.NODE_DEBUG || ''))
+ debug = function() {
+ var m = util.format.apply(util, arguments)
+ m = 'GFS: ' + m.split(/\n/).join('\nGFS: ')
+ console.error(m)
+ }
+
+if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) {
+ process.on('exit', function() {
+ debug('fds', fds)
+ debug(queue)
+ assert.equal(queue.length, 0)
+ })
+}
+
+
+var originalOpen = fs.open
+fs.open = open
+
+function open(path, flags, mode, cb) {
+ if (typeof mode === "function") cb = mode, mode = null
+ if (typeof cb !== "function") cb = noop
+ new OpenReq(path, flags, mode, cb)
+}
+
+function OpenReq(path, flags, mode, cb) {
+ this.path = path
+ this.flags = flags
+ this.mode = mode
+ this.cb = cb
+ Req.call(this)
+}
+
+util.inherits(OpenReq, Req)
+
+OpenReq.prototype.process = function() {
+ originalOpen.call(fs, this.path, this.flags, this.mode, this.done)
+}
+
+var fds = {}
+OpenReq.prototype.done = function(er, fd) {
+ debug('open done', er, fd)
+ if (fd)
+ fds['fd' + fd] = this.path
+ Req.prototype.done.call(this, er, fd)
+}
+
+
+var originalReaddir = fs.readdir
+fs.readdir = readdir
+
+function readdir(path, cb) {
+ if (typeof cb !== "function") cb = noop
+ new ReaddirReq(path, cb)
+}
+
+function ReaddirReq(path, cb) {
+ this.path = path
+ this.cb = cb
+ Req.call(this)
+}
+
+util.inherits(ReaddirReq, Req)
+
+ReaddirReq.prototype.process = function() {
+ originalReaddir.call(fs, this.path, this.done)
+}
+
+ReaddirReq.prototype.done = function(er, files) {
+ if (files && files.sort)
+ files = files.sort()
+ Req.prototype.done.call(this, er, files)
+ onclose()
+}
+
+
+var originalClose = fs.close
+fs.close = close
+
+function close (fd, cb) {
+ debug('close', fd)
+ if (typeof cb !== "function") cb = noop
+ delete fds['fd' + fd]
+ originalClose.call(fs, fd, function(er) {
+ onclose()
+ cb(er)
+ })
+}
+
+
+var originalCloseSync = fs.closeSync
+fs.closeSync = closeSync
+
+function closeSync (fd) {
+ try {
+ return originalCloseSync(fd)
+ } finally {
+ onclose()
+ }
+}
+
+
+// Req class
+function Req () {
+ // start processing
+ this.done = this.done.bind(this)
+ this.failures = 0
+ this.process()
+}
+
+Req.prototype.done = function (er, result) {
+ var tryAgain = false
+ if (er) {
+ var code = er.code
+ var tryAgain = code === "EMFILE"
+ if (process.platform === "win32")
+ tryAgain = tryAgain || code === "OK"
+ }
+
+ if (tryAgain) {
+ this.failures ++
+ enqueue(this)
+ } else {
+ var cb = this.cb
+ cb(er, result)
+ }
+}
+
+var queue = []
+
+function enqueue(req) {
+ queue.push(req)
+ debug('enqueue %d %s', queue.length, req.constructor.name, req)
+}
+
+function onclose() {
+ var req = queue.shift()
+ if (req) {
+ debug('process', req.constructor.name, req)
+ req.process()
+ }
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/package.json
new file mode 100644
index 0000000..6037e4e
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/package.json
@@ -0,0 +1,72 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me"
+ },
+ "name": "graceful-fs",
+ "description": "A drop-in replacement for fs, making various improvements.",
+ "version": "3.0.6",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-graceful-fs.git"
+ },
+ "main": "graceful-fs.js",
+ "engines": {
+ "node": ">=0.4.0"
+ },
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "keywords": [
+ "fs",
+ "module",
+ "reading",
+ "retry",
+ "retries",
+ "queue",
+ "error",
+ "errors",
+ "handling",
+ "EMFILE",
+ "EAGAIN",
+ "EINVAL",
+ "EPERM",
+ "EACCESS"
+ ],
+ "license": "BSD",
+ "devDependencies": {
+ "mkdirp": "^0.5.0",
+ "rimraf": "^2.2.8",
+ "tap": "^0.4.13"
+ },
+ "gitHead": "8c93aeee947014dafa113dcc8fa04d2e6a6e3e14",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-graceful-fs/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-graceful-fs",
+ "_id": "graceful-fs@3.0.6",
+ "_shasum": "dce3a18351cb94cdc82e688b2e3dd2842d1b09bb",
+ "_from": "graceful-fs@^3.0.5",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "dce3a18351cb94cdc82e688b2e3dd2842d1b09bb",
+ "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/polyfills.js b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/polyfills.js
new file mode 100644
index 0000000..4270539
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/polyfills.js
@@ -0,0 +1,255 @@
+var fs = require('./fs.js')
+var constants = require('constants')
+
+var origCwd = process.cwd
+var cwd = null
+process.cwd = function() {
+ if (!cwd)
+ cwd = origCwd.call(process)
+ return cwd
+}
+var chdir = process.chdir
+process.chdir = function(d) {
+ cwd = null
+ chdir.call(process, d)
+}
+
+// (re-)implement some things that are known busted or missing.
+
+// lchmod, broken prior to 0.6.2
+// back-port the fix here.
+if (constants.hasOwnProperty('O_SYMLINK') &&
+ process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
+ fs.lchmod = function (path, mode, callback) {
+ callback = callback || noop
+ fs.open( path
+ , constants.O_WRONLY | constants.O_SYMLINK
+ , mode
+ , function (err, fd) {
+ if (err) {
+ callback(err)
+ return
+ }
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ fs.fchmod(fd, mode, function (err) {
+ fs.close(fd, function(err2) {
+ callback(err || err2)
+ })
+ })
+ })
+ }
+
+ fs.lchmodSync = function (path, mode) {
+ var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
+
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ var err, err2
+ try {
+ var ret = fs.fchmodSync(fd, mode)
+ } catch (er) {
+ err = er
+ }
+ try {
+ fs.closeSync(fd)
+ } catch (er) {
+ err2 = er
+ }
+ if (err || err2) throw (err || err2)
+ return ret
+ }
+}
+
+
+// lutimes implementation, or no-op
+if (!fs.lutimes) {
+ if (constants.hasOwnProperty("O_SYMLINK")) {
+ fs.lutimes = function (path, at, mt, cb) {
+ fs.open(path, constants.O_SYMLINK, function (er, fd) {
+ cb = cb || noop
+ if (er) return cb(er)
+ fs.futimes(fd, at, mt, function (er) {
+ fs.close(fd, function (er2) {
+ return cb(er || er2)
+ })
+ })
+ })
+ }
+
+ fs.lutimesSync = function (path, at, mt) {
+ var fd = fs.openSync(path, constants.O_SYMLINK)
+ , err
+ , err2
+ , ret
+
+ try {
+ var ret = fs.futimesSync(fd, at, mt)
+ } catch (er) {
+ err = er
+ }
+ try {
+ fs.closeSync(fd)
+ } catch (er) {
+ err2 = er
+ }
+ if (err || err2) throw (err || err2)
+ return ret
+ }
+
+ } else if (fs.utimensat && constants.hasOwnProperty("AT_SYMLINK_NOFOLLOW")) {
+ // maybe utimensat will be bound soonish?
+ fs.lutimes = function (path, at, mt, cb) {
+ fs.utimensat(path, at, mt, constants.AT_SYMLINK_NOFOLLOW, cb)
+ }
+
+ fs.lutimesSync = function (path, at, mt) {
+ return fs.utimensatSync(path, at, mt, constants.AT_SYMLINK_NOFOLLOW)
+ }
+
+ } else {
+ fs.lutimes = function (_a, _b, _c, cb) { process.nextTick(cb) }
+ fs.lutimesSync = function () {}
+ }
+}
+
+
+// https://github.com/isaacs/node-graceful-fs/issues/4
+// Chown should not fail on einval or eperm if non-root.
+// It should not fail on enosys ever, as this just indicates
+// that a fs doesn't support the intended operation.
+
+fs.chown = chownFix(fs.chown)
+fs.fchown = chownFix(fs.fchown)
+fs.lchown = chownFix(fs.lchown)
+
+fs.chmod = chownFix(fs.chmod)
+fs.fchmod = chownFix(fs.fchmod)
+fs.lchmod = chownFix(fs.lchmod)
+
+fs.chownSync = chownFixSync(fs.chownSync)
+fs.fchownSync = chownFixSync(fs.fchownSync)
+fs.lchownSync = chownFixSync(fs.lchownSync)
+
+fs.chmodSync = chownFix(fs.chmodSync)
+fs.fchmodSync = chownFix(fs.fchmodSync)
+fs.lchmodSync = chownFix(fs.lchmodSync)
+
+function chownFix (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid, cb) {
+ return orig.call(fs, target, uid, gid, function (er, res) {
+ if (chownErOk(er)) er = null
+ cb(er, res)
+ })
+ }
+}
+
+function chownFixSync (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid) {
+ try {
+ return orig.call(fs, target, uid, gid)
+ } catch (er) {
+ if (!chownErOk(er)) throw er
+ }
+ }
+}
+
+// ENOSYS means that the fs doesn't support the op. Just ignore
+// that, because it doesn't matter.
+//
+// if there's no getuid, or if getuid() is something other
+// than 0, and the error is EINVAL or EPERM, then just ignore
+// it.
+//
+// This specific case is a silent failure in cp, install, tar,
+// and most other unix tools that manage permissions.
+//
+// When running as root, or if other types of errors are
+// encountered, then it's strict.
+function chownErOk (er) {
+ if (!er)
+ return true
+
+ if (er.code === "ENOSYS")
+ return true
+
+ var nonroot = !process.getuid || process.getuid() !== 0
+ if (nonroot) {
+ if (er.code === "EINVAL" || er.code === "EPERM")
+ return true
+ }
+
+ return false
+}
+
+
+// if lchmod/lchown do not exist, then make them no-ops
+if (!fs.lchmod) {
+ fs.lchmod = function (path, mode, cb) {
+ process.nextTick(cb)
+ }
+ fs.lchmodSync = function () {}
+}
+if (!fs.lchown) {
+ fs.lchown = function (path, uid, gid, cb) {
+ process.nextTick(cb)
+ }
+ fs.lchownSync = function () {}
+}
+
+
+
+// on Windows, A/V software can lock the directory, causing this
+// to fail with an EACCES or EPERM if the directory contains newly
+// created files. Try again on failure, for up to 1 second.
+if (process.platform === "win32") {
+ var rename_ = fs.rename
+ fs.rename = function rename (from, to, cb) {
+ var start = Date.now()
+ rename_(from, to, function CB (er) {
+ if (er
+ && (er.code === "EACCES" || er.code === "EPERM")
+ && Date.now() - start < 1000) {
+ return rename_(from, to, CB)
+ }
+ if(cb) cb(er)
+ })
+ }
+}
+
+
+// if read() returns EAGAIN, then just try it again.
+var read = fs.read
+fs.read = function (fd, buffer, offset, length, position, callback_) {
+ var callback
+ if (callback_ && typeof callback_ === 'function') {
+ var eagCounter = 0
+ callback = function (er, _, __) {
+ if (er && er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ return read.call(fs, fd, buffer, offset, length, position, callback)
+ }
+ callback_.apply(this, arguments)
+ }
+ }
+ return read.call(fs, fd, buffer, offset, length, position, callback)
+}
+
+var readSync = fs.readSync
+fs.readSync = function (fd, buffer, offset, length, position) {
+ var eagCounter = 0
+ while (true) {
+ try {
+ return readSync.call(fs, fd, buffer, offset, length, position)
+ } catch (er) {
+ if (er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ continue
+ }
+ throw er
+ }
+ }
+}
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/max-open.js b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/max-open.js
new file mode 100644
index 0000000..44d5267
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/max-open.js
@@ -0,0 +1,69 @@
+var test = require('tap').test
+var fs = require('../')
+
+test('open lots of stuff', function (t) {
+ // Get around EBADF from libuv by making sure that stderr is opened
+ // Otherwise Darwin will refuse to give us a FD for stderr!
+ process.stderr.write('')
+
+ // How many parallel open()'s to do
+ var n = 1024
+ var opens = 0
+ var fds = []
+ var going = true
+ var closing = false
+ var doneCalled = 0
+
+ for (var i = 0; i < n; i++) {
+ go()
+ }
+
+ function go() {
+ opens++
+ fs.open(__filename, 'r', function (er, fd) {
+ if (er) throw er
+ fds.push(fd)
+ if (going) go()
+ })
+ }
+
+ // should hit ulimit pretty fast
+ setTimeout(function () {
+ going = false
+ t.equal(opens - fds.length, n)
+ done()
+ }, 100)
+
+
+ function done () {
+ if (closing) return
+ doneCalled++
+
+ if (fds.length === 0) {
+ //console.error('done called %d times', doneCalled)
+ // First because of the timeout
+ // Then to close the fd's opened afterwards
+ // Then this time, to complete.
+ // Might take multiple passes, depending on CPU speed
+ // and ulimit, but at least 3 in every case.
+ t.ok(doneCalled >= 3)
+ return t.end()
+ }
+
+ closing = true
+ setTimeout(function () {
+ // console.error('do closing again')
+ closing = false
+ done()
+ }, 100)
+
+ // console.error('closing time')
+ var closes = fds.slice(0)
+ fds.length = 0
+ closes.forEach(function (fd) {
+ fs.close(fd, function (er) {
+ if (er) throw er
+ })
+ })
+ }
+})
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/open.js b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/open.js
new file mode 100644
index 0000000..85732f2
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/open.js
@@ -0,0 +1,39 @@
+var test = require('tap').test
+var fs = require('../graceful-fs.js')
+
+test('graceful fs is monkeypatched fs', function (t) {
+ t.equal(fs, require('../fs.js'))
+ t.end()
+})
+
+test('open an existing file works', function (t) {
+ var fd = fs.openSync(__filename, 'r')
+ fs.closeSync(fd)
+ fs.open(__filename, 'r', function (er, fd) {
+ if (er) throw er
+ fs.close(fd, function (er) {
+ if (er) throw er
+ t.pass('works')
+ t.end()
+ })
+ })
+})
+
+test('open a non-existing file throws', function (t) {
+ var er
+ try {
+ var fd = fs.openSync('this file does not exist', 'r')
+ } catch (x) {
+ er = x
+ }
+ t.ok(er, 'should throw')
+ t.notOk(fd, 'should not get an fd')
+ t.equal(er.code, 'ENOENT')
+
+ fs.open('neither does this file', 'r', function (er, fd) {
+ t.ok(er, 'should throw')
+ t.notOk(fd, 'should not get an fd')
+ t.equal(er.code, 'ENOENT')
+ t.end()
+ })
+})
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/readdir-sort.js b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/readdir-sort.js
new file mode 100644
index 0000000..cb63a68
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/readdir-sort.js
@@ -0,0 +1,20 @@
+var test = require("tap").test
+var fs = require("../fs.js")
+
+var readdir = fs.readdir
+fs.readdir = function(path, cb) {
+ process.nextTick(function() {
+ cb(null, ["b", "z", "a"])
+ })
+}
+
+var g = require("../")
+
+test("readdir reorder", function (t) {
+ g.readdir("whatevers", function (er, files) {
+ if (er)
+ throw er
+ t.same(files, [ "a", "b", "z" ])
+ t.end()
+ })
+})
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/write-then-read.js b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/write-then-read.js
new file mode 100644
index 0000000..3a3db54
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/graceful-fs/test/write-then-read.js
@@ -0,0 +1,45 @@
+var fs = require('../');
+var rimraf = require('rimraf');
+var mkdirp = require('mkdirp');
+var test = require('tap').test;
+var p = require('path').resolve(__dirname, 'files');
+
+// Make sure to reserve the stderr fd
+process.stderr.write('');
+
+var num = 4097;
+var paths = new Array(num);
+
+test('make files', function (t) {
+ rimraf.sync(p);
+ mkdirp.sync(p);
+
+ for (var i = 0; i < num; ++i) {
+ paths[i] = 'files/file-' + i;
+ fs.writeFileSync(paths[i], 'content');
+ }
+
+ t.end();
+})
+
+test('read files', function (t) {
+ // now read them
+ var done = 0;
+ for (var i = 0; i < num; ++i) {
+ fs.readFile(paths[i], function(err, data) {
+ if (err)
+ throw err;
+
+ ++done;
+ if (done === num) {
+ t.pass('success');
+ t.end()
+ }
+ });
+ }
+});
+
+test('cleanup', function (t) {
+ rimraf.sync(p);
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/.npmignore b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/.npmignore
new file mode 100644
index 0000000..cefaa67
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/.npmignore
@@ -0,0 +1,2 @@
+test/
+.travis.yml
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md
new file mode 100644
index 0000000..271739b
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md
@@ -0,0 +1,32 @@
+2.0.0 / 2014-07-28
+------------------
+* added `\n` to end of file on write. [#14](https://github.com/jprichardson/node-jsonfile/pull/14)
+* added `options.throws` to `readFileSync()`
+* dropped support for Node v0.8
+
+1.2.0 / 2014-06-29
+------------------
+* removed semicolons
+* bugfix: passed `options` to `fs.readFile` and `fs.readFileSync`. This technically changes behavior, but
+changes it according to docs. #12
+
+1.1.1 / 2013-11-11
+------------------
+* fixed catching of callback bug (ffissore / #5)
+
+1.1.0 / 2013-10-11
+------------------
+* added `options` param to methods, (seanodell / #4)
+
+1.0.1 / 2013-09-05
+------------------
+* removed `homepage` field from package.json to remove NPM warning
+
+1.0.0 / 2013-06-28
+------------------
+* added `.npmignore`, #1
+* changed spacing default from `4` to `2` to follow Node conventions
+
+0.0.1 / 2012-09-10
+------------------
+* Initial release.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/LICENSE
new file mode 100644
index 0000000..83642bf
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/LICENSE
@@ -0,0 +1,15 @@
+(The MIT License)
+
+Copyright (c) 2012, JP Richardson
+
+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/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/README.md
new file mode 100644
index 0000000..0e67ca3
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/README.md
@@ -0,0 +1,126 @@
+[](http://travis-ci.org/jprichardson/node-jsonfile)
+
+Node.js - jsonfile
+================
+
+Easily read/write JSON files.
+
+
+Why?
+----
+
+Writing `JSON.stringify()` and then `fs.writeFile()` and `JSON.parse()` with `fs.readFile()` enclosed in `try/catch` blocks became annoying.
+
+
+
+Installation
+------------
+
+ npm install jsonfile --save
+
+
+
+API
+---
+
+### readFile(filename, [options], callback)
+
+```javascript
+var jf = require('jsonfile')
+var util = require('util')
+
+var file = '/tmp/data.json'
+jf.readFile(file, function(err, obj) {
+ console.log(util.inspect(obj))
+})
+```
+
+
+### readFileSync(filename, [options])
+
+```javascript
+var jf = require('jsonfile')
+var util = require('util')
+
+var file = '/tmp/data.json'
+
+console.log(util.inspect(jf.readFileSync(file)))
+```
+
+**options**: `throws`. Set to `false` if you don't ever want this method to throw on invalid JSON. Will return `null` instead. Defaults to `true`. Others passed directly to `fs.readFileSync`.
+
+
+### writeFile(filename, [options], callback)
+
+```javascript
+var jf = require('jsonfile')
+
+var file = '/tmp/data.json'
+var obj = {name: 'JP'}
+
+jf.writeFile(file, obj, function(err) {
+ console.log(err)
+})
+```
+
+### writeFileSync(filename, [options])
+
+```javascript
+var jf = require('jsonfile')
+
+var file = '/tmp/data.json'
+var obj = {name: 'JP'}
+
+jf.writeFileSync(file, obj)
+```
+
+
+### spaces
+
+Number of spaces to indent JSON files.
+
+**default:** 2
+
+```
+var jf = require('jsonfile')
+
+jf.spaces = 4;
+
+var file = '/tmp/data.json'
+var obj = {name: 'JP'}
+
+jf.writeFile(file, obj, function(err) { //json file has four space indenting now
+ console.log(err)
+})
+```
+
+
+Contributions
+-------------
+
+If you contribute to this library, please don't change the version numbers in your pull request.
+
+
+### Contributors
+
+(You can add your name, or I'll add it if you forget)
+
+- [*] [JP Richardson](https://github.com/jprichardson)
+- [2] [Sean O'Dell](https://github.com/seanodell)
+- [1] [Federico Fissore](https://github.com/ffissore)
+- [1] [Ivan McCarthy](https://github.com/imcrthy)
+- [1] [Pablo Vallejo](https://github.com/PabloVallejo)
+- [1] [Miroslav Bajtoš](https://github.com/bajtos)
+
+
+License
+-------
+
+(MIT License)
+
+Copyright 2012-2014, JP Richardson
+
+
+
+
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js
new file mode 100644
index 0000000..a18e2c0
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js
@@ -0,0 +1,59 @@
+var fs = require('fs')
+
+var me = module.exports
+
+me.spaces = 2
+
+me.readFile = function(file, options, callback) {
+ if (callback == undefined) {
+ callback = options
+ options = null
+ }
+
+ fs.readFile(file, options, function(err, data) {
+ if (err) return callback(err, null)
+
+ var obj = null
+ try {
+ obj = JSON.parse(data)
+ } catch (err2) {
+ return callback(err2, null)
+ }
+
+ callback(null, obj)
+ })
+}
+
+me.readFileSync = function(file, options) {
+ var noThrow = options && !options.throws
+
+ if (!noThrow) //i.e. throw on invalid JSON
+ return JSON.parse(fs.readFileSync(file, options))
+ else
+ try {
+ return JSON.parse(fs.readFileSync(file, options))
+ } catch (err) {
+ return null
+ }
+}
+
+me.writeFile = function(file, obj, options, callback) {
+ if (callback == undefined) {
+ callback = options
+ options = null
+ }
+
+ var str = ''
+ try {
+ str = JSON.stringify(obj, null, me.spaces) + '\n';
+ } catch (err) {
+ if (callback) return callback(err, null)
+ }
+
+ fs.writeFile(file, str, options, callback)
+}
+
+me.writeFileSync = function(file, obj, options) {
+ var str = JSON.stringify(obj, null, me.spaces) + '\n';
+ return fs.writeFileSync(file, str, options) //not sure if fs.writeFileSync returns anything, but just in case
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/package.json
new file mode 100644
index 0000000..183f342
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/jsonfile/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "jsonfile",
+ "version": "2.0.0",
+ "description": "Easily read/write JSON files.",
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:jprichardson/node-jsonfile.git"
+ },
+ "keywords": [
+ "read",
+ "write",
+ "file",
+ "json"
+ ],
+ "author": {
+ "name": "JP Richardson",
+ "email": "jprichardson@gmail.com"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": ""
+ }
+ ],
+ "dependencies": {},
+ "devDependencies": {
+ "testutil": "^0.7.0",
+ "mocha": "*",
+ "terst": "^0.2.0"
+ },
+ "main": "./lib/jsonfile.js",
+ "scripts": {
+ "test": "mocha test"
+ },
+ "bugs": {
+ "url": "https://github.com/jprichardson/node-jsonfile/issues"
+ },
+ "homepage": "https://github.com/jprichardson/node-jsonfile",
+ "_id": "jsonfile@2.0.0",
+ "dist": {
+ "shasum": "c3944f350bd3c078b392e0aa1633b44662fcf06b",
+ "tarball": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.0.0.tgz"
+ },
+ "_from": "jsonfile@^2.0.0",
+ "_npmVersion": "1.4.3",
+ "_npmUser": {
+ "name": "jp",
+ "email": "jprichardson@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jp",
+ "email": "jprichardson@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_shasum": "c3944f350bd3c078b392e0aa1633b44662fcf06b",
+ "_resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.0.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/LICENSE
new file mode 100644
index 0000000..05a4010
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+All rights reserved.
+
+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/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/README.md
new file mode 100644
index 0000000..58e7ac3
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/README.md
@@ -0,0 +1,36 @@
+The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node.
+
+Install with `npm install rimraf`, or just drop rimraf.js somewhere.
+
+## API
+
+`rimraf(f, callback)`
+
+The callback will be called with an error if there is one. Certain
+errors are handled for you:
+
+* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
+ `opts.maxBusyTries` times before giving up, adding 100ms of wait
+ between each attempt. The default `maxBusyTries` is 3.
+* `ENOENT` - If the file doesn't exist, rimraf will return
+ successfully, since your desired outcome is already the case.
+* `EMFILE` - Since `readdir` requires opening a file descriptor, it's
+ possible to hit `EMFILE` if too many file descriptors are in use.
+ In the sync case, there's nothing to be done for this. But in the
+ async case, rimraf will gradually back off with timeouts up to
+ `opts.emfileWait` ms, which defaults to 1000.
+
+## rimraf.sync
+
+It can remove stuff synchronously, too. But that's not so good. Use
+the async API. It's better.
+
+## CLI
+
+If installed with `npm install rimraf -g` it can be used as a global
+command `rimraf ` which is useful for cross platform support.
+
+## mkdirp
+
+If you need to create a directory recursively, check out
+[mkdirp](https://github.com/substack/node-mkdirp).
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/bin.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/bin.js
new file mode 100755
index 0000000..29bfa8a
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/bin.js
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+
+var rimraf = require('./')
+
+var help = false
+var dashdash = false
+var args = process.argv.slice(2).filter(function(arg) {
+ if (dashdash)
+ return !!arg
+ else if (arg === '--')
+ dashdash = true
+ else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/))
+ help = true
+ else
+ return !!arg
+});
+
+if (help || args.length === 0) {
+ // If they didn't ask for help, then this is not a "success"
+ var log = help ? console.log : console.error
+ log('Usage: rimraf ')
+ log('')
+ log(' Deletes all files and folders at "path" recursively.')
+ log('')
+ log('Options:')
+ log('')
+ log(' -h, --help Display this usage info')
+ process.exit(help ? 0 : 1)
+} else {
+ args.forEach(function(arg) {
+ rimraf.sync(arg)
+ })
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/README.md
new file mode 100644
index 0000000..258257e
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/README.md
@@ -0,0 +1,369 @@
+[](https://travis-ci.org/isaacs/node-glob/) [](https://david-dm.org/isaacs/node-glob) [](https://david-dm.org/isaacs/node-glob#info=devDependencies) [](https://david-dm.org/isaacs/node-glob#info=optionalDependencies)
+
+# Glob
+
+Match files using the patterns the shell uses, like stars and stuff.
+
+This is a glob implementation in JavaScript. It uses the `minimatch`
+library to do its matching.
+
+
+
+## Usage
+
+```javascript
+var glob = require("glob")
+
+// options is optional
+glob("**/*.js", options, function (er, files) {
+ // files is an array of filenames.
+ // If the `nonull` option is set, and nothing
+ // was found, then files is ["**/*.js"]
+ // er is an error object or null.
+})
+```
+
+## Glob Primer
+
+"Globs" are the patterns you type when you do stuff like `ls *.js` on
+the command line, or put `build/*` in a `.gitignore` file.
+
+Before parsing the path part patterns, braced sections are expanded
+into a set. Braced sections start with `{` and end with `}`, with any
+number of comma-delimited sections within. Braced sections may contain
+slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
+
+The following characters have special magic meaning when used in a
+path portion:
+
+* `*` Matches 0 or more characters in a single path portion
+* `?` Matches 1 character
+* `[...]` Matches a range of characters, similar to a RegExp range.
+ If the first character of the range is `!` or `^` then it matches
+ any character not in the range.
+* `!(pattern|pattern|pattern)` Matches anything that does not match
+ any of the patterns provided.
+* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
+ patterns provided.
+* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
+ patterns provided.
+* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
+* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
+ provided
+* `**` If a "globstar" is alone in a path portion, then it matches
+ zero or more directories and subdirectories searching for matches.
+ It does not crawl symlinked directories.
+
+### Dots
+
+If a file or directory path portion has a `.` as the first character,
+then it will not match any glob pattern unless that pattern's
+corresponding path part also has a `.` as its first character.
+
+For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
+However the pattern `a/*/c` would not, because `*` does not start with
+a dot character.
+
+You can make glob treat dots as normal characters by setting
+`dot:true` in the options.
+
+### Basename Matching
+
+If you set `matchBase:true` in the options, and the pattern has no
+slashes in it, then it will seek for any file anywhere in the tree
+with a matching basename. For example, `*.js` would match
+`test/simple/basic.js`.
+
+### Negation
+
+The intent for negation would be for a pattern starting with `!` to
+match everything that *doesn't* match the supplied pattern. However,
+the implementation is weird, and for the time being, this should be
+avoided. The behavior will change or be deprecated in version 5.
+
+### Empty Sets
+
+If no matching files are found, then an empty array is returned. This
+differs from the shell, where the pattern itself is returned. For
+example:
+
+ $ echo a*s*d*f
+ a*s*d*f
+
+To get the bash-style behavior, set the `nonull:true` in the options.
+
+### See Also:
+
+* `man sh`
+* `man bash` (Search for "Pattern Matching")
+* `man 3 fnmatch`
+* `man 5 gitignore`
+* [minimatch documentation](https://github.com/isaacs/minimatch)
+
+## glob.hasMagic(pattern, [options])
+
+Returns `true` if there are any special characters in the pattern, and
+`false` otherwise.
+
+Note that the options affect the results. If `noext:true` is set in
+the options object, then `+(a|b)` will not be considered a magic
+pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`
+then that is considered magical, unless `nobrace:true` is set in the
+options.
+
+## glob(pattern, [options], cb)
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* `cb` {Function}
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array} filenames found matching the pattern
+
+Perform a synchronous glob search.
+
+## Class: glob.Glob
+
+Create a Glob object by instantiating the `glob.Glob` class.
+
+```javascript
+var Glob = require("glob").Glob
+var mg = new Glob(pattern, options, cb)
+```
+
+It's an EventEmitter, and starts walking the filesystem to find matches
+immediately.
+
+### new glob.Glob(pattern, [options], [cb])
+
+* `pattern` {String} pattern to search for
+* `options` {Object}
+* `cb` {Function} Called when an error occurs, or matches are found
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Note that if the `sync` flag is set in the options, then matches will
+be immediately available on the `g.found` member.
+
+### Properties
+
+* `minimatch` The minimatch object that the glob uses.
+* `options` The options object passed in.
+* `aborted` Boolean which is set to true when calling `abort()`. There
+ is no way at this time to continue a glob search after aborting, but
+ you can re-use the statCache to avoid having to duplicate syscalls.
+* `statCache` Collection of all the stat results the glob search
+ performed.
+* `cache` Convenience object. Each field has the following possible
+ values:
+ * `false` - Path does not exist
+ * `true` - Path exists
+ * `'DIR'` - Path exists, and is not a directory
+ * `'FILE'` - Path exists, and is a directory
+ * `[file, entries, ...]` - Path exists, is a directory, and the
+ array value is the results of `fs.readdir`
+* `statCache` Cache of `fs.stat` results, to prevent statting the same
+ path multiple times.
+* `symlinks` A record of which paths are symbolic links, which is
+ relevant in resolving `**` patterns.
+* `realpathCache` An optional object which is passed to `fs.realpath`
+ to minimize unnecessary syscalls. It is stored on the instantiated
+ Glob object, and may be re-used.
+
+### Events
+
+* `end` When the matching is finished, this is emitted with all the
+ matches found. If the `nonull` option is set, and no match was found,
+ then the `matches` list contains the original pattern. The matches
+ are sorted, unless the `nosort` flag is set.
+* `match` Every time a match is found, this is emitted with the matched.
+* `error` Emitted when an unexpected error is encountered, or whenever
+ any fs error occurs if `options.strict` is set.
+* `abort` When `abort()` is called, this event is raised.
+
+### Methods
+
+* `pause` Temporarily stop the search
+* `resume` Resume the search
+* `abort` Stop the search forever
+
+### Options
+
+All the options that can be passed to Minimatch can also be passed to
+Glob to change pattern matching behavior. Also, some have been added,
+or have glob-specific ramifications.
+
+All options are false by default, unless otherwise noted.
+
+All options are added to the Glob object, as well.
+
+If you are running many `glob` operations, you can pass a Glob object
+as the `options` argument to a subsequent operation to shortcut some
+`stat` and `readdir` calls. At the very least, you may pass in shared
+`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
+parallel glob operations will be sped up by sharing information about
+the filesystem.
+
+* `cwd` The current working directory in which to search. Defaults
+ to `process.cwd()`.
+* `root` The place where patterns starting with `/` will be mounted
+ onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
+ systems, and `C:\` or some such on Windows.)
+* `dot` Include `.dot` files in normal matches and `globstar` matches.
+ Note that an explicit dot in a portion of the pattern will always
+ match dot files.
+* `nomount` By default, a pattern starting with a forward-slash will be
+ "mounted" onto the root setting, so that a valid filesystem path is
+ returned. Set this flag to disable that behavior.
+* `mark` Add a `/` character to directory matches. Note that this
+ requires additional stat calls.
+* `nosort` Don't sort the results.
+* `stat` Set to true to stat *all* results. This reduces performance
+ somewhat, and is completely unnecessary, unless `readdir` is presumed
+ to be an untrustworthy indicator of file existence.
+* `silent` When an unusual error is encountered when attempting to
+ read a directory, a warning will be printed to stderr. Set the
+ `silent` option to true to suppress these warnings.
+* `strict` When an unusual error is encountered when attempting to
+ read a directory, the process will just continue on in search of
+ other matches. Set the `strict` option to raise an error in these
+ cases.
+* `cache` See `cache` property above. Pass in a previously generated
+ cache object to save some fs calls.
+* `statCache` A cache of results of filesystem information, to prevent
+ unnecessary stat calls. While it should not normally be necessary
+ to set this, you may pass the statCache from one glob() call to the
+ options object of another, if you know that the filesystem will not
+ change between calls. (See "Race Conditions" below.)
+* `symlinks` A cache of known symbolic links. You may pass in a
+ previously generated `symlinks` object to save `lstat` calls when
+ resolving `**` matches.
+* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
+* `nounique` In some cases, brace-expanded patterns can result in the
+ same file showing up multiple times in the result set. By default,
+ this implementation prevents duplicates in the result set. Set this
+ flag to disable that behavior.
+* `nonull` Set to never return an empty set, instead returning a set
+ containing the pattern itself. This is the default in glob(3).
+* `debug` Set to enable debug logging in minimatch and glob.
+* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
+* `noglobstar` Do not match `**` against multiple filenames. (Ie,
+ treat it as a normal `*` instead.)
+* `noext` Do not match `+(a|b)` "extglob" patterns.
+* `nocase` Perform a case-insensitive match. Note: on
+ case-insensitive filesystems, non-magic patterns will match by
+ default, since `stat` and `readdir` will not raise errors.
+* `matchBase` Perform a basename-only match if the pattern does not
+ contain any slash characters. That is, `*.js` would be treated as
+ equivalent to `**/*.js`, matching all js files in all directories.
+* `nonegate` Suppress `negate` behavior. (See below.)
+* `nocomment` Suppress `comment` behavior. (See below.)
+* `nonull` Return the pattern when no matches are found.
+* `nodir` Do not match directories, only files. (Note: to match
+ *only* directories, simply put a `/` at the end of the pattern.)
+* `ignore` Add a pattern or an array of patterns to exclude matches.
+* `follow` Follow symlinked directories when expanding `**` patterns.
+ Note that this can result in a lot of duplicate references in the
+ presence of cyclic links.
+* `realpath` Set to true to call `fs.realpath` on all of the results.
+ In the case of a symlink that cannot be resolved, the full absolute
+ path to the matched entry is returned (though it will usually be a
+ broken symlink)
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between node-glob and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated. Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally. This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything. Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.3, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+Note that symlinked directories are not crawled as part of a `**`,
+though their contents may match against subsequent portions of the
+pattern. This prevents infinite loops and duplicates and the like.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then glob returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
+
+## Windows
+
+**Please only use forward-slashes in glob expressions.**
+
+Though windows uses either `/` or `\` as its path separator, only `/`
+characters are used by this glob implementation. You must use
+forward-slashes **only** in glob expressions. Back-slashes will always
+be interpreted as escape characters, not path separators.
+
+Results from absolute patterns such as `/foo/*` are mounted onto the
+root setting using `path.join`. On windows, this will by default result
+in `/foo/*` matching `C:\foo\bar.txt`.
+
+## Race Conditions
+
+Glob searching, by its very nature, is susceptible to race conditions,
+since it relies on directory walking and such.
+
+As a result, it is possible that a file that exists when glob looks for
+it may have been deleted or modified by the time it returns the result.
+
+As part of its internal implementation, this program caches all stat
+and readdir calls that it makes, in order to cut down on system
+overhead. However, this also makes it even more susceptible to races,
+especially if the cache or statCache objects are reused between glob
+calls.
+
+Users are thus advised not to use a glob result as a guarantee of
+filesystem state in the face of rapid changes. For the vast majority
+of operations, this is never a problem.
+
+## Contributing
+
+Any change to behavior (including bugfixes) must come with a test.
+
+Patches that fail tests or reduce performance will be rejected.
+
+```
+# to run tests
+npm test
+
+# to re-generate test fixtures
+npm run test-regen
+
+# to benchmark against bash/zsh
+npm run bench
+
+# to profile javascript
+npm run prof
+```
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/common.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/common.js
new file mode 100644
index 0000000..cd7c824
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/common.js
@@ -0,0 +1,237 @@
+exports.alphasort = alphasort
+exports.alphasorti = alphasorti
+exports.isAbsolute = process.platform === "win32" ? absWin : absUnix
+exports.setopts = setopts
+exports.ownProp = ownProp
+exports.makeAbs = makeAbs
+exports.finish = finish
+exports.mark = mark
+exports.isIgnored = isIgnored
+exports.childrenIgnored = childrenIgnored
+
+function ownProp (obj, field) {
+ return Object.prototype.hasOwnProperty.call(obj, field)
+}
+
+var path = require("path")
+var minimatch = require("minimatch")
+var Minimatch = minimatch.Minimatch
+
+function absWin (p) {
+ if (absUnix(p)) return true
+ // pull off the device/UNC bit from a windows path.
+ // from node's lib/path.js
+ var splitDeviceRe =
+ /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
+ var result = splitDeviceRe.exec(p)
+ var device = result[1] || ''
+ var isUnc = device && device.charAt(1) !== ':'
+ var isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
+
+ return isAbsolute
+}
+
+function absUnix (p) {
+ return p.charAt(0) === "/" || p === ""
+}
+
+function alphasorti (a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase())
+}
+
+function alphasort (a, b) {
+ return a.localeCompare(b)
+}
+
+function setupIgnores (self, options) {
+ self.ignore = options.ignore || []
+
+ if (!Array.isArray(self.ignore))
+ self.ignore = [self.ignore]
+
+ if (self.ignore.length) {
+ self.ignore = self.ignore.map(ignoreMap)
+ }
+}
+
+function ignoreMap (pattern) {
+ var gmatcher = null
+ if (pattern.slice(-3) === '/**') {
+ var gpattern = pattern.replace(/(\/\*\*)+$/, '')
+ gmatcher = new Minimatch(gpattern, { nonegate: true })
+ }
+
+ return {
+ matcher: new Minimatch(pattern, { nonegate: true }),
+ gmatcher: gmatcher
+ }
+}
+
+function setopts (self, pattern, options) {
+ if (!options)
+ options = {}
+
+ // base-matching: just use globstar for that.
+ if (options.matchBase && -1 === pattern.indexOf("/")) {
+ if (options.noglobstar) {
+ throw new Error("base matching requires globstar")
+ }
+ pattern = "**/" + pattern
+ }
+
+ self.pattern = pattern
+ self.strict = options.strict !== false
+ self.realpath = !!options.realpath
+ self.realpathCache = options.realpathCache || Object.create(null)
+ self.follow = !!options.follow
+ self.dot = !!options.dot
+ self.mark = !!options.mark
+ self.nodir = !!options.nodir
+ if (self.nodir)
+ self.mark = true
+ self.sync = !!options.sync
+ self.nounique = !!options.nounique
+ self.nonull = !!options.nonull
+ self.nosort = !!options.nosort
+ self.nocase = !!options.nocase
+ self.stat = !!options.stat
+ self.noprocess = !!options.noprocess
+
+ self.maxLength = options.maxLength || Infinity
+ self.cache = options.cache || Object.create(null)
+ self.statCache = options.statCache || Object.create(null)
+ self.symlinks = options.symlinks || Object.create(null)
+
+ setupIgnores(self, options)
+
+ self.changedCwd = false
+ var cwd = process.cwd()
+ if (!ownProp(options, "cwd"))
+ self.cwd = cwd
+ else {
+ self.cwd = options.cwd
+ self.changedCwd = path.resolve(options.cwd) !== cwd
+ }
+
+ self.root = options.root || path.resolve(self.cwd, "/")
+ self.root = path.resolve(self.root)
+ if (process.platform === "win32")
+ self.root = self.root.replace(/\\/g, "/")
+
+ self.nomount = !!options.nomount
+
+ self.minimatch = new Minimatch(pattern, options)
+ self.options = self.minimatch.options
+}
+
+function finish (self) {
+ var nou = self.nounique
+ var all = nou ? [] : Object.create(null)
+
+ for (var i = 0, l = self.matches.length; i < l; i ++) {
+ var matches = self.matches[i]
+ if (!matches || Object.keys(matches).length === 0) {
+ if (self.nonull) {
+ // do like the shell, and spit out the literal glob
+ var literal = self.minimatch.globSet[i]
+ if (nou)
+ all.push(literal)
+ else
+ all[literal] = true
+ }
+ } else {
+ // had matches
+ var m = Object.keys(matches)
+ if (nou)
+ all.push.apply(all, m)
+ else
+ m.forEach(function (m) {
+ all[m] = true
+ })
+ }
+ }
+
+ if (!nou)
+ all = Object.keys(all)
+
+ if (!self.nosort)
+ all = all.sort(self.nocase ? alphasorti : alphasort)
+
+ // at *some* point we statted all of these
+ if (self.mark) {
+ for (var i = 0; i < all.length; i++) {
+ all[i] = self._mark(all[i])
+ }
+ if (self.nodir) {
+ all = all.filter(function (e) {
+ return !(/\/$/.test(e))
+ })
+ }
+ }
+
+ if (self.ignore.length)
+ all = all.filter(function(m) {
+ return !isIgnored(self, m)
+ })
+
+ self.found = all
+}
+
+function mark (self, p) {
+ var abs = makeAbs(self, p)
+ var c = self.cache[abs]
+ var m = p
+ if (c) {
+ var isDir = c === 'DIR' || Array.isArray(c)
+ var slash = p.slice(-1) === '/'
+
+ if (isDir && !slash)
+ m += '/'
+ else if (!isDir && slash)
+ m = m.slice(0, -1)
+
+ if (m !== p) {
+ var mabs = makeAbs(self, m)
+ self.statCache[mabs] = self.statCache[abs]
+ self.cache[mabs] = self.cache[abs]
+ }
+ }
+
+ return m
+}
+
+// lotta situps...
+function makeAbs (self, f) {
+ var abs = f
+ if (f.charAt(0) === '/') {
+ abs = path.join(self.root, f)
+ } else if (exports.isAbsolute(f)) {
+ abs = f
+ } else if (self.changedCwd) {
+ abs = path.resolve(self.cwd, f)
+ } else if (self.realpath) {
+ abs = path.resolve(f)
+ }
+ return abs
+}
+
+
+// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
+// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
+function isIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
+
+function childrenIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/glob.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/glob.js
new file mode 100644
index 0000000..eac0693
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/glob.js
@@ -0,0 +1,740 @@
+// Approach:
+//
+// 1. Get the minimatch set
+// 2. For each pattern in the set, PROCESS(pattern, false)
+// 3. Store matches per-set, then uniq them
+//
+// PROCESS(pattern, inGlobStar)
+// Get the first [n] items from pattern that are all strings
+// Join these together. This is PREFIX.
+// If there is no more remaining, then stat(PREFIX) and
+// add to matches if it succeeds. END.
+//
+// If inGlobStar and PREFIX is symlink and points to dir
+// set ENTRIES = []
+// else readdir(PREFIX) as ENTRIES
+// If fail, END
+//
+// with ENTRIES
+// If pattern[n] is GLOBSTAR
+// // handle the case where the globstar match is empty
+// // by pruning it out, and testing the resulting pattern
+// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
+// // handle other cases.
+// for ENTRY in ENTRIES (not dotfiles)
+// // attach globstar + tail onto the entry
+// // Mark that this entry is a globstar match
+// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
+//
+// else // not globstar
+// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
+// Test ENTRY against pattern[n]
+// If fails, continue
+// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
+//
+// Caveat:
+// Cache all stats and readdirs results to minimize syscall. Since all
+// we ever care about is existence and directory-ness, we can just keep
+// `true` for files, and [children,...] for directories, or `false` for
+// things that don't exist.
+
+module.exports = glob
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var inherits = require('inherits')
+var EE = require('events').EventEmitter
+var path = require('path')
+var assert = require('assert')
+var globSync = require('./sync.js')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var inflight = require('inflight')
+var util = require('util')
+var childrenIgnored = common.childrenIgnored
+
+var once = require('once')
+
+function glob (pattern, options, cb) {
+ if (typeof options === 'function') cb = options, options = {}
+ if (!options) options = {}
+
+ if (options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return globSync(pattern, options)
+ }
+
+ return new Glob(pattern, options, cb)
+}
+
+glob.sync = globSync
+var GlobSync = glob.GlobSync = globSync.GlobSync
+
+// old api surface
+glob.glob = glob
+
+glob.hasMagic = function (pattern, options_) {
+ var options = util._extend({}, options_)
+ options.noprocess = true
+
+ var g = new Glob(pattern, options)
+ var set = g.minimatch.set
+ if (set.length > 1)
+ return true
+
+ for (var j = 0; j < set[0].length; j++) {
+ if (typeof set[0][j] !== 'string')
+ return true
+ }
+
+ return false
+}
+
+glob.Glob = Glob
+inherits(Glob, EE)
+function Glob (pattern, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+
+ if (options && options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return new GlobSync(pattern, options)
+ }
+
+ if (!(this instanceof Glob))
+ return new Glob(pattern, options, cb)
+
+ setopts(this, pattern, options)
+ this._didRealPath = false
+
+ // process each pattern in the minimatch set
+ var n = this.minimatch.set.length
+
+ // The matches are stored as {: true,...} so that
+ // duplicates are automagically pruned.
+ // Later, we do an Object.keys() on these.
+ // Keep them as a list so we can fill in when nonull is set.
+ this.matches = new Array(n)
+
+ if (typeof cb === 'function') {
+ cb = once(cb)
+ this.on('error', cb)
+ this.on('end', function (matches) {
+ cb(null, matches)
+ })
+ }
+
+ var self = this
+ var n = this.minimatch.set.length
+ this._processing = 0
+ this.matches = new Array(n)
+
+ this._emitQueue = []
+ this._processQueue = []
+ this.paused = false
+
+ if (this.noprocess)
+ return this
+
+ if (n === 0)
+ return done()
+
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false, done)
+ }
+
+ function done () {
+ --self._processing
+ if (self._processing <= 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._finish = function () {
+ assert(this instanceof Glob)
+ if (this.aborted)
+ return
+
+ if (this.realpath && !this._didRealpath)
+ return this._realpath()
+
+ common.finish(this)
+ this.emit('end', this.found)
+}
+
+Glob.prototype._realpath = function () {
+ if (this._didRealpath)
+ return
+
+ this._didRealpath = true
+
+ var n = this.matches.length
+ if (n === 0)
+ return this._finish()
+
+ var self = this
+ for (var i = 0; i < this.matches.length; i++)
+ this._realpathSet(i, next)
+
+ function next () {
+ if (--n === 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._realpathSet = function (index, cb) {
+ var matchset = this.matches[index]
+ if (!matchset)
+ return cb()
+
+ var found = Object.keys(matchset)
+ var self = this
+ var n = found.length
+
+ if (n === 0)
+ return cb()
+
+ var set = this.matches[index] = Object.create(null)
+ found.forEach(function (p, i) {
+ // If there's a problem with the stat, then it means that
+ // one or more of the links in the realpath couldn't be
+ // resolved. just return the abs value in that case.
+ p = self._makeAbs(p)
+ fs.realpath(p, self.realpathCache, function (er, real) {
+ if (!er)
+ set[real] = true
+ else if (er.syscall === 'stat')
+ set[p] = true
+ else
+ self.emit('error', er) // srsly wtf right here
+
+ if (--n === 0) {
+ self.matches[index] = set
+ cb()
+ }
+ })
+ })
+}
+
+Glob.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+Glob.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
+
+Glob.prototype.abort = function () {
+ this.aborted = true
+ this.emit('abort')
+}
+
+Glob.prototype.pause = function () {
+ if (!this.paused) {
+ this.paused = true
+ this.emit('pause')
+ }
+}
+
+Glob.prototype.resume = function () {
+ if (this.paused) {
+ this.emit('resume')
+ this.paused = false
+ if (this._emitQueue.length) {
+ var eq = this._emitQueue.slice(0)
+ this._emitQueue.length = 0
+ for (var i = 0; i < eq.length; i ++) {
+ var e = eq[i]
+ this._emitMatch(e[0], e[1])
+ }
+ }
+ if (this._processQueue.length) {
+ var pq = this._processQueue.slice(0)
+ this._processQueue.length = 0
+ for (var i = 0; i < pq.length; i ++) {
+ var p = pq[i]
+ this._processing--
+ this._process(p[0], p[1], p[2], p[3])
+ }
+ }
+ }
+}
+
+Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
+ assert(this instanceof Glob)
+ assert(typeof cb === 'function')
+
+ if (this.aborted)
+ return
+
+ this._processing++
+ if (this.paused) {
+ this._processQueue.push([pattern, index, inGlobStar, cb])
+ return
+ }
+
+ //console.error('PROCESS %d', this._processing, pattern)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // see if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index, cb)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip _processing
+ if (childrenIgnored(this, read))
+ return cb()
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
+}
+
+Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return cb()
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return cb()
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this._emitMatch(index, e)
+ }
+ // This was the last one, and no stats were needed
+ return cb()
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+ this._process([e].concat(remain), index, inGlobStar, cb)
+ }
+ cb()
+}
+
+Glob.prototype._emitMatch = function (index, e) {
+ if (this.aborted)
+ return
+
+ if (this.matches[index][e])
+ return
+
+ if (this.paused) {
+ this._emitQueue.push([index, e])
+ return
+ }
+
+ var abs = this._makeAbs(e)
+
+ if (this.nodir) {
+ var c = this.cache[abs]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ if (this.mark)
+ e = this._mark(e)
+
+ this.matches[index][e] = true
+
+ var st = this.statCache[abs]
+ if (st)
+ this.emit('stat', e, st)
+
+ this.emit('match', e)
+}
+
+Glob.prototype._readdirInGlobStar = function (abs, cb) {
+ if (this.aborted)
+ return
+
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false, cb)
+
+ var lstatkey = 'lstat\0' + abs
+ var self = this
+ var lstatcb = inflight(lstatkey, lstatcb_)
+
+ if (lstatcb)
+ fs.lstat(abs, lstatcb)
+
+ function lstatcb_ (er, lstat) {
+ if (er)
+ return cb()
+
+ var isSym = lstat.isSymbolicLink()
+ self.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory()) {
+ self.cache[abs] = 'FILE'
+ cb()
+ } else
+ self._readdir(abs, false, cb)
+ }
+}
+
+Glob.prototype._readdir = function (abs, inGlobStar, cb) {
+ if (this.aborted)
+ return
+
+ cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
+ if (!cb)
+ return
+
+ //console.error('RD %j %j', +inGlobStar, abs)
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs, cb)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return cb()
+
+ if (Array.isArray(c))
+ return cb(null, c)
+ }
+
+ var self = this
+ fs.readdir(abs, readdirCb(this, abs, cb))
+}
+
+function readdirCb (self, abs, cb) {
+ return function (er, entries) {
+ if (er)
+ self._readdirError(abs, er, cb)
+ else
+ self._readdirEntries(abs, entries, cb)
+ }
+}
+
+Glob.prototype._readdirEntries = function (abs, entries, cb) {
+ if (this.aborted)
+ return
+
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+ return cb(null, entries)
+}
+
+Glob.prototype._readdirError = function (f, er, cb) {
+ if (this.aborted)
+ return
+
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) return this.emit('error', er)
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+ return cb()
+}
+
+Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+
+Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+ //console.error('pgs2', prefix, remain[0], entries)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return cb()
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false, cb)
+
+ var isSym = this.symlinks[abs]
+ var len = entries.length
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return cb()
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true, cb)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true, cb)
+ }
+
+ cb()
+}
+
+Glob.prototype._processSimple = function (prefix, index, cb) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var self = this
+ this._stat(prefix, function (er, exists) {
+ self._processSimple2(prefix, index, er, exists, cb)
+ })
+}
+Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
+
+ //console.error('ps2', prefix, exists)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return cb()
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this._emitMatch(index, prefix)
+ cb()
+}
+
+// Returns either 'DIR', 'FILE', or false
+Glob.prototype._stat = function (f, cb) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return cb()
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return cb(null, c)
+
+ if (needDir && c === 'FILE')
+ return cb()
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (stat !== undefined) {
+ if (stat === false)
+ return cb(null, stat)
+ else {
+ var type = stat.isDirectory() ? 'DIR' : 'FILE'
+ if (needDir && type === 'FILE')
+ return cb()
+ else
+ return cb(null, type, stat)
+ }
+ }
+
+ var self = this
+ var statcb = inflight('stat\0' + abs, lstatcb_)
+ if (statcb)
+ fs.lstat(abs, statcb)
+
+ function lstatcb_ (er, lstat) {
+ if (lstat && lstat.isSymbolicLink()) {
+ // If it's a symlink, then treat it as the target, unless
+ // the target does not exist, then treat it as a file.
+ return fs.stat(abs, function (er, stat) {
+ if (er)
+ self._stat2(f, abs, null, lstat, cb)
+ else
+ self._stat2(f, abs, er, stat, cb)
+ })
+ } else {
+ self._stat2(f, abs, er, lstat, cb)
+ }
+ }
+}
+
+Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
+ if (er) {
+ this.statCache[abs] = false
+ return cb()
+ }
+
+ var needDir = f.slice(-1) === '/'
+ this.statCache[abs] = stat
+
+ if (abs.slice(-1) === '/' && !stat.isDirectory())
+ return cb(null, false, stat)
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return cb()
+
+ return cb(null, c, stat)
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/.eslintrc b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/.eslintrc
new file mode 100644
index 0000000..b7a1550
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "env" : {
+ "node" : true
+ },
+ "rules" : {
+ "semi": [2, "never"],
+ "strict": 0,
+ "quotes": [1, "single", "avoid-escape"],
+ "no-use-before-define": 0,
+ "curly": 0,
+ "no-underscore-dangle": 0,
+ "no-lonely-if": 1,
+ "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}],
+ "no-mixed-requires": 0,
+ "space-infix-ops": 0
+ }
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/LICENSE
new file mode 100644
index 0000000..05eeeb8
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/README.md
new file mode 100644
index 0000000..6dc8929
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/README.md
@@ -0,0 +1,37 @@
+# inflight
+
+Add callbacks to requests in flight to avoid async duplication
+
+## USAGE
+
+```javascript
+var inflight = require('inflight')
+
+// some request that does some stuff
+function req(key, callback) {
+ // key is any random string. like a url or filename or whatever.
+ //
+ // will return either a falsey value, indicating that the
+ // request for this key is already in flight, or a new callback
+ // which when called will call all callbacks passed to inflightk
+ // with the same key
+ callback = inflight(key, callback)
+
+ // If we got a falsey value back, then there's already a req going
+ if (!callback) return
+
+ // this is where you'd fetch the url or whatever
+ // callback is also once()-ified, so it can safely be assigned
+ // to multiple events etc. First call wins.
+ setTimeout(function() {
+ callback(null, key)
+ }, 100)
+}
+
+// only assigns a single setTimeout
+// when it dings, all cbs get called
+req('foo', cb1)
+req('foo', cb2)
+req('foo', cb3)
+req('foo', cb4)
+```
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/inflight.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/inflight.js
new file mode 100644
index 0000000..8bc96cb
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/inflight.js
@@ -0,0 +1,44 @@
+var wrappy = require('wrappy')
+var reqs = Object.create(null)
+var once = require('once')
+
+module.exports = wrappy(inflight)
+
+function inflight (key, cb) {
+ if (reqs[key]) {
+ reqs[key].push(cb)
+ return null
+ } else {
+ reqs[key] = [cb]
+ return makeres(key)
+ }
+}
+
+function makeres (key) {
+ return once(function RES () {
+ var cbs = reqs[key]
+ var len = cbs.length
+ var args = slice(arguments)
+ for (var i = 0; i < len; i++) {
+ cbs[i].apply(null, args)
+ }
+ if (cbs.length > len) {
+ // added more in the interim.
+ // de-zalgo, just in case, but don't call again.
+ cbs.splice(0, len)
+ process.nextTick(function () {
+ RES.apply(null, args)
+ })
+ } else {
+ delete reqs[key]
+ }
+ })
+}
+
+function slice (args) {
+ var length = args.length
+ var array = []
+
+ for (var i = 0; i < length; i++) array[i] = args[i]
+ return array
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md
new file mode 100644
index 0000000..98eab25
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md
@@ -0,0 +1,36 @@
+# wrappy
+
+Callback wrapping utility
+
+## USAGE
+
+```javascript
+var wrappy = require("wrappy")
+
+// var wrapper = wrappy(wrapperFunction)
+
+// make sure a cb is called only once
+// See also: http://npm.im/once for this specific use case
+var once = wrappy(function (cb) {
+ var called = false
+ return function () {
+ if (called) return
+ called = true
+ return cb.apply(this, arguments)
+ }
+})
+
+function printBoo () {
+ console.log('boo')
+}
+// has some rando property
+printBoo.iAmBooPrinter = true
+
+var onlyPrintOnce = once(printBoo)
+
+onlyPrintOnce() // prints 'boo'
+onlyPrintOnce() // does nothing
+
+// random property is retained!
+assert.equal(onlyPrintOnce.iAmBooPrinter, true)
+```
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json
new file mode 100644
index 0000000..9165c6e
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "wrappy",
+ "version": "1.0.1",
+ "description": "Callback wrapping utility",
+ "main": "wrappy.js",
+ "directories": {
+ "test": "test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "^0.4.12"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/wrappy"
+ },
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/wrappy/issues"
+ },
+ "homepage": "https://github.com/npm/wrappy",
+ "gitHead": "006a8cbac6b99988315834c207896eed71fd069a",
+ "_id": "wrappy@1.0.1",
+ "_shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
+ "_from": "wrappy@1",
+ "_npmVersion": "2.0.0",
+ "_nodeVersion": "0.10.31",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
+ "tarball": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js
new file mode 100644
index 0000000..5ed0fcd
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js
@@ -0,0 +1,51 @@
+var test = require('tap').test
+var wrappy = require('../wrappy.js')
+
+test('basic', function (t) {
+ function onceifier (cb) {
+ var called = false
+ return function () {
+ if (called) return
+ called = true
+ return cb.apply(this, arguments)
+ }
+ }
+ onceifier.iAmOnce = {}
+ var once = wrappy(onceifier)
+ t.equal(once.iAmOnce, onceifier.iAmOnce)
+
+ var called = 0
+ function boo () {
+ t.equal(called, 0)
+ called++
+ }
+ // has some rando property
+ boo.iAmBoo = true
+
+ var onlyPrintOnce = once(boo)
+
+ onlyPrintOnce() // prints 'boo'
+ onlyPrintOnce() // does nothing
+ t.equal(called, 1)
+
+ // random property is retained!
+ t.equal(onlyPrintOnce.iAmBoo, true)
+
+ var logs = []
+ var logwrap = wrappy(function (msg, cb) {
+ logs.push(msg + ' wrapping cb')
+ return function () {
+ logs.push(msg + ' before cb')
+ var ret = cb.apply(this, arguments)
+ logs.push(msg + ' after cb')
+ }
+ })
+
+ var c = logwrap('foo', function () {
+ t.same(logs, [ 'foo wrapping cb', 'foo before cb' ])
+ })
+ c()
+ t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ])
+
+ t.end()
+})
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js
new file mode 100644
index 0000000..bb7e7d6
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js
@@ -0,0 +1,33 @@
+// Returns a wrapper function that returns a wrapped callback
+// The wrapper function should do some stuff, and return a
+// presumably different callback function.
+// This makes sure that own properties are retained, so that
+// decorations and such are not lost along the way.
+module.exports = wrappy
+function wrappy (fn, cb) {
+ if (fn && cb) return wrappy(fn)(cb)
+
+ if (typeof fn !== 'function')
+ throw new TypeError('need wrapper function')
+
+ Object.keys(fn).forEach(function (k) {
+ wrapper[k] = fn[k]
+ })
+
+ return wrapper
+
+ function wrapper() {
+ var args = new Array(arguments.length)
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i]
+ }
+ var ret = fn.apply(this, args)
+ var cb = args[args.length-1]
+ if (typeof ret === 'function' && ret !== cb) {
+ Object.keys(cb).forEach(function (k) {
+ ret[k] = cb[k]
+ })
+ }
+ return ret
+ }
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/package.json
new file mode 100644
index 0000000..38417ea
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "inflight",
+ "version": "1.0.4",
+ "description": "Add callbacks to requests in flight to avoid async duplication",
+ "main": "inflight.js",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ },
+ "devDependencies": {
+ "tap": "^0.4.10"
+ },
+ "scripts": {
+ "test": "tap test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/inflight"
+ },
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/inflight/issues"
+ },
+ "homepage": "https://github.com/isaacs/inflight",
+ "license": "ISC",
+ "gitHead": "c7b5531d572a867064d4a1da9e013e8910b7d1ba",
+ "_id": "inflight@1.0.4",
+ "_shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a",
+ "_from": "inflight@^1.0.4",
+ "_npmVersion": "2.1.3",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a",
+ "tarball": "http://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/test.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/test.js
new file mode 100644
index 0000000..2bb75b3
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inflight/test.js
@@ -0,0 +1,97 @@
+var test = require('tap').test
+var inf = require('./inflight.js')
+
+
+function req (key, cb) {
+ cb = inf(key, cb)
+ if (cb) setTimeout(function () {
+ cb(key)
+ cb(key)
+ })
+ return cb
+}
+
+test('basic', function (t) {
+ var calleda = false
+ var a = req('key', function (k) {
+ t.notOk(calleda)
+ calleda = true
+ t.equal(k, 'key')
+ if (calledb) t.end()
+ })
+ t.ok(a, 'first returned cb function')
+
+ var calledb = false
+ var b = req('key', function (k) {
+ t.notOk(calledb)
+ calledb = true
+ t.equal(k, 'key')
+ if (calleda) t.end()
+ })
+
+ t.notOk(b, 'second should get falsey inflight response')
+})
+
+test('timing', function (t) {
+ var expect = [
+ 'method one',
+ 'start one',
+ 'end one',
+ 'two',
+ 'tick',
+ 'three'
+ ]
+ var i = 0
+
+ function log (m) {
+ t.equal(m, expect[i], m + ' === ' + expect[i])
+ ++i
+ if (i === expect.length)
+ t.end()
+ }
+
+ function method (name, cb) {
+ log('method ' + name)
+ process.nextTick(cb)
+ }
+
+ var one = inf('foo', function () {
+ log('start one')
+ var three = inf('foo', function () {
+ log('three')
+ })
+ if (three) method('three', three)
+ log('end one')
+ })
+
+ method('one', one)
+
+ var two = inf('foo', function () {
+ log('two')
+ })
+ if (two) method('one', two)
+
+ process.nextTick(log.bind(null, 'tick'))
+})
+
+test('parameters', function (t) {
+ t.plan(8)
+
+ var a = inf('key', function (first, second, third) {
+ t.equal(first, 1)
+ t.equal(second, 2)
+ t.equal(third, 3)
+ })
+ t.ok(a, 'first returned cb function')
+
+ var b = inf('key', function (first, second, third) {
+ t.equal(first, 1)
+ t.equal(second, 2)
+ t.equal(third, 3)
+ })
+ t.notOk(b, 'second should get falsey inflight response')
+
+ setTimeout(function () {
+ a(1, 2, 3)
+ })
+})
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/LICENSE
new file mode 100644
index 0000000..dea3013
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/LICENSE
@@ -0,0 +1,16 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/README.md
new file mode 100644
index 0000000..b1c5665
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/README.md
@@ -0,0 +1,42 @@
+Browser-friendly inheritance fully compatible with standard node.js
+[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
+
+This package exports standard `inherits` from node.js `util` module in
+node environment, but also provides alternative browser-friendly
+implementation through [browser
+field](https://gist.github.com/shtylman/4339901). Alternative
+implementation is a literal copy of standard one located in standalone
+module to avoid requiring of `util`. It also has a shim for old
+browsers with no `Object.create` support.
+
+While keeping you sure you are using standard `inherits`
+implementation in node.js environment, it allows bundlers such as
+[browserify](https://github.com/substack/node-browserify) to not
+include full `util` package to your client code if all you need is
+just `inherits` function. It worth, because browser shim for `util`
+package is large and `inherits` is often the single function you need
+from it.
+
+It's recommended to use this package instead of
+`require('util').inherits` for any code that has chances to be used
+not only in node.js but in browser too.
+
+## usage
+
+```js
+var inherits = require('inherits');
+// then use exactly as the standard one
+```
+
+## note on version ~1.0
+
+Version ~1.0 had completely different motivation and is not compatible
+neither with 2.0 nor with standard node.js `inherits`.
+
+If you are using version ~1.0 and planning to switch to ~2.0, be
+careful:
+
+* new version uses `super_` instead of `super` for referencing
+ superclass
+* new version overwrites current prototype while old one preserves any
+ existing fields on it
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/inherits.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/inherits.js
new file mode 100644
index 0000000..29f5e24
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/inherits.js
@@ -0,0 +1 @@
+module.exports = require('util').inherits
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/inherits_browser.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/inherits_browser.js
new file mode 100644
index 0000000..c1e78a7
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/inherits_browser.js
@@ -0,0 +1,23 @@
+if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ module.exports = function inherits(ctor, superCtor) {
+ ctor.super_ = superCtor
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ };
+} else {
+ // old school shim for old browsers
+ module.exports = function inherits(ctor, superCtor) {
+ ctor.super_ = superCtor
+ var TempCtor = function () {}
+ TempCtor.prototype = superCtor.prototype
+ ctor.prototype = new TempCtor()
+ ctor.prototype.constructor = ctor
+ }
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/package.json
new file mode 100644
index 0000000..754a114
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "inherits",
+ "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
+ "version": "2.0.1",
+ "keywords": [
+ "inheritance",
+ "class",
+ "klass",
+ "oop",
+ "object-oriented",
+ "inherits",
+ "browser",
+ "browserify"
+ ],
+ "main": "./inherits.js",
+ "browser": "./inherits_browser.js",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/inherits"
+ },
+ "license": "ISC",
+ "scripts": {
+ "test": "node test"
+ },
+ "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/inherits/issues"
+ },
+ "_id": "inherits@2.0.1",
+ "dist": {
+ "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
+ "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "_from": "inherits@2",
+ "_npmVersion": "1.3.8",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
+ "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "homepage": "https://github.com/isaacs/inherits"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/test.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/test.js
new file mode 100644
index 0000000..fc53012
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/inherits/test.js
@@ -0,0 +1,25 @@
+var inherits = require('./inherits.js')
+var assert = require('assert')
+
+function test(c) {
+ assert(c.constructor === Child)
+ assert(c.constructor.super_ === Parent)
+ assert(Object.getPrototypeOf(c) === Child.prototype)
+ assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype)
+ assert(c instanceof Child)
+ assert(c instanceof Parent)
+}
+
+function Child() {
+ Parent.call(this)
+ test(this)
+}
+
+function Parent() {}
+
+inherits(Child, Parent)
+
+var c = new Child
+test(c)
+
+console.log('ok')
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/LICENSE
new file mode 100644
index 0000000..05a4010
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+All rights reserved.
+
+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/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/README.md
new file mode 100644
index 0000000..d458bc2
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/README.md
@@ -0,0 +1,216 @@
+# minimatch
+
+A minimal matching utility.
+
+[](http://travis-ci.org/isaacs/minimatch)
+
+
+This is the matching library used internally by npm.
+
+It works by converting glob expressions into JavaScript `RegExp`
+objects.
+
+## Usage
+
+```javascript
+var minimatch = require("minimatch")
+
+minimatch("bar.foo", "*.foo") // true!
+minimatch("bar.foo", "*.bar") // false!
+minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
+```
+
+## Features
+
+Supports these glob features:
+
+* Brace Expansion
+* Extended glob matching
+* "Globstar" `**` matching
+
+See:
+
+* `man sh`
+* `man bash`
+* `man 3 fnmatch`
+* `man 5 gitignore`
+
+## Minimatch Class
+
+Create a minimatch object by instanting the `minimatch.Minimatch` class.
+
+```javascript
+var Minimatch = require("minimatch").Minimatch
+var mm = new Minimatch(pattern, options)
+```
+
+### Properties
+
+* `pattern` The original pattern the minimatch object represents.
+* `options` The options supplied to the constructor.
+* `set` A 2-dimensional array of regexp or string expressions.
+ Each row in the
+ array corresponds to a brace-expanded pattern. Each item in the row
+ corresponds to a single path-part. For example, the pattern
+ `{a,b/c}/d` would expand to a set of patterns like:
+
+ [ [ a, d ]
+ , [ b, c, d ] ]
+
+ If a portion of the pattern doesn't have any "magic" in it
+ (that is, it's something like `"foo"` rather than `fo*o?`), then it
+ will be left as a string rather than converted to a regular
+ expression.
+
+* `regexp` Created by the `makeRe` method. A single regular expression
+ expressing the entire pattern. This is useful in cases where you wish
+ to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.
+* `negate` True if the pattern is negated.
+* `comment` True if the pattern is a comment.
+* `empty` True if the pattern is `""`.
+
+### Methods
+
+* `makeRe` Generate the `regexp` member if necessary, and return it.
+ Will return `false` if the pattern is invalid.
+* `match(fname)` Return true if the filename matches the pattern, or
+ false otherwise.
+* `matchOne(fileArray, patternArray, partial)` Take a `/`-split
+ filename, and match it against a single row in the `regExpSet`. This
+ method is mainly for internal use, but is exposed so that it can be
+ used by a glob-walker that needs to avoid excessive filesystem calls.
+
+All other methods are internal, and will be called as necessary.
+
+## Functions
+
+The top-level exported function has a `cache` property, which is an LRU
+cache set to store 100 items. So, calling these methods repeatedly
+with the same pattern and options will use the same Minimatch object,
+saving the cost of parsing it multiple times.
+
+### minimatch(path, pattern, options)
+
+Main export. Tests a path against the pattern using the options.
+
+```javascript
+var isJS = minimatch(file, "*.js", { matchBase: true })
+```
+
+### minimatch.filter(pattern, options)
+
+Returns a function that tests its
+supplied argument, suitable for use with `Array.filter`. Example:
+
+```javascript
+var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true}))
+```
+
+### minimatch.match(list, pattern, options)
+
+Match against the list of
+files, in the style of fnmatch or glob. If nothing is matched, and
+options.nonull is set, then return a list containing the pattern itself.
+
+```javascript
+var javascripts = minimatch.match(fileList, "*.js", {matchBase: true}))
+```
+
+### minimatch.makeRe(pattern, options)
+
+Make a regular expression object from the pattern.
+
+## Options
+
+All options are `false` by default.
+
+### debug
+
+Dump a ton of stuff to stderr.
+
+### nobrace
+
+Do not expand `{a,b}` and `{1..3}` brace sets.
+
+### noglobstar
+
+Disable `**` matching against multiple folder names.
+
+### dot
+
+Allow patterns to match filenames starting with a period, even if
+the pattern does not explicitly have a period in that spot.
+
+Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`
+is set.
+
+### noext
+
+Disable "extglob" style patterns like `+(a|b)`.
+
+### nocase
+
+Perform a case-insensitive match.
+
+### nonull
+
+When a match is not found by `minimatch.match`, return a list containing
+the pattern itself if this option is set. When not set, an empty list
+is returned if there are no matches.
+
+### matchBase
+
+If set, then patterns without slashes will be matched
+against the basename of the path if it contains slashes. For example,
+`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.
+
+### nocomment
+
+Suppress the behavior of treating `#` at the start of a pattern as a
+comment.
+
+### nonegate
+
+Suppress the behavior of treating a leading `!` character as negation.
+
+### flipNegate
+
+Returns from negate expressions the same as if they were not negated.
+(Ie, true on a hit, false on a miss.)
+
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between minimatch and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated. Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally. This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything. Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.1, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then minimatch.match returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/browser.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/browser.js
new file mode 100644
index 0000000..cf58a3f
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/browser.js
@@ -0,0 +1,1114 @@
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o any number of characters
+ , star = qmark + "*?"
+
+ // ** when dots are allowed. Anything goes, except .. and .
+ // not (^ or / followed by one or two dots followed by $ or /),
+ // followed by anything, any number of times.
+ , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?"
+
+ // not a ^ or / followed by a dot,
+ // followed by anything, any number of times.
+ , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?"
+
+ // characters that need to be escaped in RegExp.
+ , reSpecials = charSet("().*{}+?[]^$\\!")
+
+// "abc" -> { a:true, b:true, c:true }
+function charSet (s) {
+ return s.split("").reduce(function (set, c) {
+ set[c] = true
+ return set
+ }, {})
+}
+
+// normalizes slashes.
+var slashSplit = /\/+/
+
+minimatch.filter = filter
+function filter (pattern, options) {
+ options = options || {}
+ return function (p, i, list) {
+ return minimatch(p, pattern, options)
+ }
+}
+
+function ext (a, b) {
+ a = a || {}
+ b = b || {}
+ var t = {}
+ Object.keys(b).forEach(function (k) {
+ t[k] = b[k]
+ })
+ Object.keys(a).forEach(function (k) {
+ t[k] = a[k]
+ })
+ return t
+}
+
+minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return minimatch
+
+ var orig = minimatch
+
+ var m = function minimatch (p, pattern, options) {
+ return orig.minimatch(p, pattern, ext(def, options))
+ }
+
+ m.Minimatch = function Minimatch (pattern, options) {
+ return new orig.Minimatch(pattern, ext(def, options))
+ }
+
+ return m
+}
+
+Minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return Minimatch
+ return minimatch.defaults(def).Minimatch
+}
+
+
+function minimatch (p, pattern, options) {
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+
+ // shortcut: comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === "#") {
+ return false
+ }
+
+ // "" only matches ""
+ if (pattern.trim() === "") return p === ""
+
+ return new Minimatch(pattern, options).match(p)
+}
+
+function Minimatch (pattern, options) {
+ if (!(this instanceof Minimatch)) {
+ return new Minimatch(pattern, options)
+ }
+
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+ pattern = pattern.trim()
+
+ // windows support: need to use /, not \
+ if (isWindows)
+ pattern = pattern.split("\\").join("/")
+
+ this.options = options
+ this.set = []
+ this.pattern = pattern
+ this.regexp = null
+ this.negate = false
+ this.comment = false
+ this.empty = false
+
+ // make the set of regexps etc.
+ this.make()
+}
+
+Minimatch.prototype.debug = function() {}
+
+Minimatch.prototype.make = make
+function make () {
+ // don't do it more than once.
+ if (this._made) return
+
+ var pattern = this.pattern
+ var options = this.options
+
+ // empty patterns and comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === "#") {
+ this.comment = true
+ return
+ }
+ if (!pattern) {
+ this.empty = true
+ return
+ }
+
+ // step 1: figure out negation, etc.
+ this.parseNegate()
+
+ // step 2: expand braces
+ var set = this.globSet = this.braceExpand()
+
+ if (options.debug) this.debug = console.error
+
+ this.debug(this.pattern, set)
+
+ // step 3: now we have a set, so turn each one into a series of path-portion
+ // matching patterns.
+ // These will be regexps, except in the case of "**", which is
+ // set to the GLOBSTAR object for globstar behavior,
+ // and will not contain any / characters
+ set = this.globParts = set.map(function (s) {
+ return s.split(slashSplit)
+ })
+
+ this.debug(this.pattern, set)
+
+ // glob --> regexps
+ set = set.map(function (s, si, set) {
+ return s.map(this.parse, this)
+ }, this)
+
+ this.debug(this.pattern, set)
+
+ // filter out everything that didn't compile properly.
+ set = set.filter(function (s) {
+ return -1 === s.indexOf(false)
+ })
+
+ this.debug(this.pattern, set)
+
+ this.set = set
+}
+
+Minimatch.prototype.parseNegate = parseNegate
+function parseNegate () {
+ var pattern = this.pattern
+ , negate = false
+ , options = this.options
+ , negateOffset = 0
+
+ if (options.nonegate) return
+
+ for ( var i = 0, l = pattern.length
+ ; i < l && pattern.charAt(i) === "!"
+ ; i ++) {
+ negate = !negate
+ negateOffset ++
+ }
+
+ if (negateOffset) this.pattern = pattern.substr(negateOffset)
+ this.negate = negate
+}
+
+// Brace expansion:
+// a{b,c}d -> abd acd
+// a{b,}c -> abc ac
+// a{0..3}d -> a0d a1d a2d a3d
+// a{b,c{d,e}f}g -> abg acdfg acefg
+// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
+//
+// Invalid sets are not expanded.
+// a{2..}b -> a{2..}b
+// a{b}c -> a{b}c
+minimatch.braceExpand = function (pattern, options) {
+ return braceExpand(pattern, options)
+}
+
+Minimatch.prototype.braceExpand = braceExpand
+
+function braceExpand (pattern, options) {
+ if (!options) {
+ if (this instanceof Minimatch)
+ options = this.options
+ else
+ options = {}
+ }
+
+ pattern = typeof pattern === "undefined"
+ ? this.pattern : pattern
+
+ if (typeof pattern === "undefined") {
+ throw new Error("undefined pattern")
+ }
+
+ if (options.nobrace ||
+ !pattern.match(/\{.*\}/)) {
+ // shortcut. no need to expand.
+ return [pattern]
+ }
+
+ return expand(pattern)
+}
+
+// parse a component of the expanded set.
+// At this point, no pattern may contain "/" in it
+// so we're going to return a 2d array, where each entry is the full
+// pattern, split on '/', and then turned into a regular expression.
+// A regexp is made at the end which joins each array with an
+// escaped /, and another full one which joins each regexp with |.
+//
+// Following the lead of Bash 4.1, note that "**" only has special meaning
+// when it is the *only* thing in a path portion. Otherwise, any series
+// of * is equivalent to a single *. Globstar behavior is enabled by
+// default, and can be disabled by setting options.noglobstar.
+Minimatch.prototype.parse = parse
+var SUBPARSE = {}
+function parse (pattern, isSub) {
+ var options = this.options
+
+ // shortcuts
+ if (!options.noglobstar && pattern === "**") return GLOBSTAR
+ if (pattern === "") return ""
+
+ var re = ""
+ , hasMagic = !!options.nocase
+ , escaping = false
+ // ? => one single character
+ , patternListStack = []
+ , plType
+ , stateChar
+ , inClass = false
+ , reClassStart = -1
+ , classStart = -1
+ // . and .. never match anything that doesn't start with .,
+ // even when options.dot is set.
+ , patternStart = pattern.charAt(0) === "." ? "" // anything
+ // not (start or / followed by . or .. followed by / or end)
+ : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))"
+ : "(?!\\.)"
+ , self = this
+
+ function clearStateChar () {
+ if (stateChar) {
+ // we had some state-tracking character
+ // that wasn't consumed by this pass.
+ switch (stateChar) {
+ case "*":
+ re += star
+ hasMagic = true
+ break
+ case "?":
+ re += qmark
+ hasMagic = true
+ break
+ default:
+ re += "\\"+stateChar
+ break
+ }
+ self.debug('clearStateChar %j %j', stateChar, re)
+ stateChar = false
+ }
+ }
+
+ for ( var i = 0, len = pattern.length, c
+ ; (i < len) && (c = pattern.charAt(i))
+ ; i ++ ) {
+
+ this.debug("%s\t%s %s %j", pattern, i, re, c)
+
+ // skip over any that are escaped.
+ if (escaping && reSpecials[c]) {
+ re += "\\" + c
+ escaping = false
+ continue
+ }
+
+ SWITCH: switch (c) {
+ case "/":
+ // completely not allowed, even escaped.
+ // Should already be path-split by now.
+ return false
+
+ case "\\":
+ clearStateChar()
+ escaping = true
+ continue
+
+ // the various stateChar values
+ // for the "extglob" stuff.
+ case "?":
+ case "*":
+ case "+":
+ case "@":
+ case "!":
+ this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
+
+ // all of those are literals inside a class, except that
+ // the glob [!a] means [^a] in regexp
+ if (inClass) {
+ this.debug(' in class')
+ if (c === "!" && i === classStart + 1) c = "^"
+ re += c
+ continue
+ }
+
+ // if we already have a stateChar, then it means
+ // that there was something like ** or +? in there.
+ // Handle the stateChar, then proceed with this one.
+ self.debug('call clearStateChar %j', stateChar)
+ clearStateChar()
+ stateChar = c
+ // if extglob is disabled, then +(asdf|foo) isn't a thing.
+ // just clear the statechar *now*, rather than even diving into
+ // the patternList stuff.
+ if (options.noext) clearStateChar()
+ continue
+
+ case "(":
+ if (inClass) {
+ re += "("
+ continue
+ }
+
+ if (!stateChar) {
+ re += "\\("
+ continue
+ }
+
+ plType = stateChar
+ patternListStack.push({ type: plType
+ , start: i - 1
+ , reStart: re.length })
+ // negation is (?:(?!js)[^/]*)
+ re += stateChar === "!" ? "(?:(?!" : "(?:"
+ this.debug('plType %j %j', stateChar, re)
+ stateChar = false
+ continue
+
+ case ")":
+ if (inClass || !patternListStack.length) {
+ re += "\\)"
+ continue
+ }
+
+ clearStateChar()
+ hasMagic = true
+ re += ")"
+ plType = patternListStack.pop().type
+ // negation is (?:(?!js)[^/]*)
+ // The others are (?:)
+ switch (plType) {
+ case "!":
+ re += "[^/]*?)"
+ break
+ case "?":
+ case "+":
+ case "*": re += plType
+ case "@": break // the default anyway
+ }
+ continue
+
+ case "|":
+ if (inClass || !patternListStack.length || escaping) {
+ re += "\\|"
+ escaping = false
+ continue
+ }
+
+ clearStateChar()
+ re += "|"
+ continue
+
+ // these are mostly the same in regexp and glob
+ case "[":
+ // swallow any state-tracking char before the [
+ clearStateChar()
+
+ if (inClass) {
+ re += "\\" + c
+ continue
+ }
+
+ inClass = true
+ classStart = i
+ reClassStart = re.length
+ re += c
+ continue
+
+ case "]":
+ // a right bracket shall lose its special
+ // meaning and represent itself in
+ // a bracket expression if it occurs
+ // first in the list. -- POSIX.2 2.8.3.2
+ if (i === classStart + 1 || !inClass) {
+ re += "\\" + c
+ escaping = false
+ continue
+ }
+
+ // handle the case where we left a class open.
+ // "[z-a]" is valid, equivalent to "\[z-a\]"
+ if (inClass) {
+ // split where the last [ was, make sure we don't have
+ // an invalid re. if so, re-walk the contents of the
+ // would-be class to re-translate any characters that
+ // were passed through as-is
+ // TODO: It would probably be faster to determine this
+ // without a try/catch and a new RegExp, but it's tricky
+ // to do safely. For now, this is safe and works.
+ var cs = pattern.substring(classStart + 1, i)
+ try {
+ new RegExp('[' + cs + ']')
+ } catch (er) {
+ // not a valid class!
+ var sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + "\\[" + sp[0] + '\\]'
+ hasMagic = hasMagic || sp[1]
+ inClass = false
+ continue
+ }
+ }
+
+ // finish up the class.
+ hasMagic = true
+ inClass = false
+ re += c
+ continue
+
+ default:
+ // swallow any state char that wasn't consumed
+ clearStateChar()
+
+ if (escaping) {
+ // no need
+ escaping = false
+ } else if (reSpecials[c]
+ && !(c === "^" && inClass)) {
+ re += "\\"
+ }
+
+ re += c
+
+ } // switch
+ } // for
+
+
+ // handle the case where we left a class open.
+ // "[abc" is valid, equivalent to "\[abc"
+ if (inClass) {
+ // split where the last [ was, and escape it
+ // this is a huge pita. We now have to re-walk
+ // the contents of the would-be class to re-translate
+ // any characters that were passed through as-is
+ var cs = pattern.substr(classStart + 1)
+ , sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + "\\[" + sp[0]
+ hasMagic = hasMagic || sp[1]
+ }
+
+ // handle the case where we had a +( thing at the *end*
+ // of the pattern.
+ // each pattern list stack adds 3 chars, and we need to go through
+ // and escape any | chars that were passed through as-is for the regexp.
+ // Go through and escape them, taking care not to double-escape any
+ // | chars that were already escaped.
+ var pl
+ while (pl = patternListStack.pop()) {
+ var tail = re.slice(pl.reStart + 3)
+ // maybe some even number of \, then maybe 1 \, followed by a |
+ tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) {
+ if (!$2) {
+ // the | isn't already escaped, so escape it.
+ $2 = "\\"
+ }
+
+ // need to escape all those slashes *again*, without escaping the
+ // one that we need for escaping the | character. As it works out,
+ // escaping an even number of slashes can be done by simply repeating
+ // it exactly after itself. That's why this trick works.
+ //
+ // I am sorry that you have to see this.
+ return $1 + $1 + $2 + "|"
+ })
+
+ this.debug("tail=%j\n %s", tail, tail)
+ var t = pl.type === "*" ? star
+ : pl.type === "?" ? qmark
+ : "\\" + pl.type
+
+ hasMagic = true
+ re = re.slice(0, pl.reStart)
+ + t + "\\("
+ + tail
+ }
+
+ // handle trailing things that only matter at the very end.
+ clearStateChar()
+ if (escaping) {
+ // trailing \\
+ re += "\\\\"
+ }
+
+ // only need to apply the nodot start if the re starts with
+ // something that could conceivably capture a dot
+ var addPatternStart = false
+ switch (re.charAt(0)) {
+ case ".":
+ case "[":
+ case "(": addPatternStart = true
+ }
+
+ // if the re is not "" at this point, then we need to make sure
+ // it doesn't match against an empty path part.
+ // Otherwise a/* will match a/, which it should not.
+ if (re !== "" && hasMagic) re = "(?=.)" + re
+
+ if (addPatternStart) re = patternStart + re
+
+ // parsing just a piece of a larger pattern.
+ if (isSub === SUBPARSE) {
+ return [ re, hasMagic ]
+ }
+
+ // skip the regexp for non-magical patterns
+ // unescape anything in it, though, so that it'll be
+ // an exact match against a file etc.
+ if (!hasMagic) {
+ return globUnescape(pattern)
+ }
+
+ var flags = options.nocase ? "i" : ""
+ , regExp = new RegExp("^" + re + "$", flags)
+
+ regExp._glob = pattern
+ regExp._src = re
+
+ return regExp
+}
+
+minimatch.makeRe = function (pattern, options) {
+ return new Minimatch(pattern, options || {}).makeRe()
+}
+
+Minimatch.prototype.makeRe = makeRe
+function makeRe () {
+ if (this.regexp || this.regexp === false) return this.regexp
+
+ // at this point, this.set is a 2d array of partial
+ // pattern strings, or "**".
+ //
+ // It's better to use .match(). This function shouldn't
+ // be used, really, but it's pretty convenient sometimes,
+ // when you just want to work with a regex.
+ var set = this.set
+
+ if (!set.length) return this.regexp = false
+ var options = this.options
+
+ var twoStar = options.noglobstar ? star
+ : options.dot ? twoStarDot
+ : twoStarNoDot
+ , flags = options.nocase ? "i" : ""
+
+ var re = set.map(function (pattern) {
+ return pattern.map(function (p) {
+ return (p === GLOBSTAR) ? twoStar
+ : (typeof p === "string") ? regExpEscape(p)
+ : p._src
+ }).join("\\\/")
+ }).join("|")
+
+ // must match entire pattern
+ // ending in a * or ** will make it less strict.
+ re = "^(?:" + re + ")$"
+
+ // can match anything, as long as it's not this.
+ if (this.negate) re = "^(?!" + re + ").*$"
+
+ try {
+ return this.regexp = new RegExp(re, flags)
+ } catch (ex) {
+ return this.regexp = false
+ }
+}
+
+minimatch.match = function (list, pattern, options) {
+ options = options || {}
+ var mm = new Minimatch(pattern, options)
+ list = list.filter(function (f) {
+ return mm.match(f)
+ })
+ if (mm.options.nonull && !list.length) {
+ list.push(pattern)
+ }
+ return list
+}
+
+Minimatch.prototype.match = match
+function match (f, partial) {
+ this.debug("match", f, this.pattern)
+ // short-circuit in the case of busted things.
+ // comments, etc.
+ if (this.comment) return false
+ if (this.empty) return f === ""
+
+ if (f === "/" && partial) return true
+
+ var options = this.options
+
+ // windows: need to use /, not \
+ if (isWindows)
+ f = f.split("\\").join("/")
+
+ // treat the test path as a set of pathparts.
+ f = f.split(slashSplit)
+ this.debug(this.pattern, "split", f)
+
+ // just ONE of the pattern sets in this.set needs to match
+ // in order for it to be valid. If negating, then just one
+ // match means that we have failed.
+ // Either way, return on the first hit.
+
+ var set = this.set
+ this.debug(this.pattern, "set", set)
+
+ // Find the basename of the path by looking for the last non-empty segment
+ var filename;
+ for (var i = f.length - 1; i >= 0; i--) {
+ filename = f[i]
+ if (filename) break
+ }
+
+ for (var i = 0, l = set.length; i < l; i ++) {
+ var pattern = set[i], file = f
+ if (options.matchBase && pattern.length === 1) {
+ file = [filename]
+ }
+ var hit = this.matchOne(file, pattern, partial)
+ if (hit) {
+ if (options.flipNegate) return true
+ return !this.negate
+ }
+ }
+
+ // didn't get any hits. this is success if it's a negative
+ // pattern, failure otherwise.
+ if (options.flipNegate) return false
+ return this.negate
+}
+
+// set partial to true to test if, for example,
+// "/a/b" matches the start of "/*/b/*/d"
+// Partial means, if you run out of file before you run
+// out of pattern, then that's fine, as long as all
+// the parts match.
+Minimatch.prototype.matchOne = function (file, pattern, partial) {
+ var options = this.options
+
+ this.debug("matchOne",
+ { "this": this
+ , file: file
+ , pattern: pattern })
+
+ this.debug("matchOne", file.length, pattern.length)
+
+ for ( var fi = 0
+ , pi = 0
+ , fl = file.length
+ , pl = pattern.length
+ ; (fi < fl) && (pi < pl)
+ ; fi ++, pi ++ ) {
+
+ this.debug("matchOne loop")
+ var p = pattern[pi]
+ , f = file[fi]
+
+ this.debug(pattern, p, f)
+
+ // should be impossible.
+ // some invalid regexp stuff in the set.
+ if (p === false) return false
+
+ if (p === GLOBSTAR) {
+ this.debug('GLOBSTAR', [pattern, p, f])
+
+ // "**"
+ // a/**/b/**/c would match the following:
+ // a/b/x/y/z/c
+ // a/x/y/z/b/c
+ // a/b/x/b/x/c
+ // a/b/c
+ // To do this, take the rest of the pattern after
+ // the **, and see if it would match the file remainder.
+ // If so, return success.
+ // If not, the ** "swallows" a segment, and try again.
+ // This is recursively awful.
+ //
+ // a/**/b/**/c matching a/b/x/y/z/c
+ // - a matches a
+ // - doublestar
+ // - matchOne(b/x/y/z/c, b/**/c)
+ // - b matches b
+ // - doublestar
+ // - matchOne(x/y/z/c, c) -> no
+ // - matchOne(y/z/c, c) -> no
+ // - matchOne(z/c, c) -> no
+ // - matchOne(c, c) yes, hit
+ var fr = fi
+ , pr = pi + 1
+ if (pr === pl) {
+ this.debug('** at the end')
+ // a ** at the end will just swallow the rest.
+ // We have found a match.
+ // however, it will not swallow /.x, unless
+ // options.dot is set.
+ // . and .. are *never* matched by **, for explosively
+ // exponential reasons.
+ for ( ; fi < fl; fi ++) {
+ if (file[fi] === "." || file[fi] === ".." ||
+ (!options.dot && file[fi].charAt(0) === ".")) return false
+ }
+ return true
+ }
+
+ // ok, let's see if we can swallow whatever we can.
+ WHILE: while (fr < fl) {
+ var swallowee = file[fr]
+
+ this.debug('\nglobstar while',
+ file, fr, pattern, pr, swallowee)
+
+ // XXX remove this slice. Just pass the start index.
+ if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+ this.debug('globstar found match!', fr, fl, swallowee)
+ // found a match.
+ return true
+ } else {
+ // can't swallow "." or ".." ever.
+ // can only swallow ".foo" when explicitly asked.
+ if (swallowee === "." || swallowee === ".." ||
+ (!options.dot && swallowee.charAt(0) === ".")) {
+ this.debug("dot detected!", file, fr, pattern, pr)
+ break WHILE
+ }
+
+ // ** swallows a segment, and continue.
+ this.debug('globstar swallow a segment, and continue')
+ fr ++
+ }
+ }
+ // no match was found.
+ // However, in partial mode, we can't say this is necessarily over.
+ // If there's more *pattern* left, then
+ if (partial) {
+ // ran out of file
+ this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
+ if (fr === fl) return true
+ }
+ return false
+ }
+
+ // something other than **
+ // non-magic patterns just have to match exactly
+ // patterns with magic have been turned into regexps.
+ var hit
+ if (typeof p === "string") {
+ if (options.nocase) {
+ hit = f.toLowerCase() === p.toLowerCase()
+ } else {
+ hit = f === p
+ }
+ this.debug("string match", p, f, hit)
+ } else {
+ hit = f.match(p)
+ this.debug("pattern match", p, f, hit)
+ }
+
+ if (!hit) return false
+ }
+
+ // Note: ending in / means that we'll get a final ""
+ // at the end of the pattern. This can only match a
+ // corresponding "" at the end of the file.
+ // If the file ends in /, then it can only match a
+ // a pattern that ends in /, unless the pattern just
+ // doesn't have any more for it. But, a/b/ should *not*
+ // match "a/b/*", even though "" matches against the
+ // [^/]*? pattern, except in partial mode, where it might
+ // simply not be reached yet.
+ // However, a/b/ should still satisfy a/*
+
+ // now either we fell off the end of the pattern, or we're done.
+ if (fi === fl && pi === pl) {
+ // ran out of pattern and filename at the same time.
+ // an exact hit!
+ return true
+ } else if (fi === fl) {
+ // ran out of file, but still had pattern left.
+ // this is ok if we're doing the match as part of
+ // a glob fs traversal.
+ return partial
+ } else if (pi === pl) {
+ // ran out of pattern, still have file left.
+ // this is only acceptable if we're on the very last
+ // empty segment of a file with a trailing slash.
+ // a/* should match a/b/
+ var emptyFileEnd = (fi === fl - 1) && (file[fi] === "")
+ return emptyFileEnd
+ }
+
+ // should be unreachable.
+ throw new Error("wtf?")
+}
+
+
+// replace stuff like \* with *
+function globUnescape (s) {
+ return s.replace(/\\(.)/g, "$1")
+}
+
+
+function regExpEscape (s) {
+ return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
+}
+
+},{"brace-expansion":2}],2:[function(require,module,exports){
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ var expansions = expand(escapeBraces(str));
+ return expansions.filter(identity).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = /^(.*,)+(.+)?$/.test(m.body);
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0]).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ expansions.push([pre, N[j], post[k]].join(''))
+ }
+ }
+
+ return expansions;
+}
+
+
+},{"balanced-match":3,"concat-map":4}],3:[function(require,module,exports){
+module.exports = balanced;
+function balanced(a, b, str) {
+ var bal = 0;
+ var m = {};
+ var ended = false;
+
+ for (var i = 0; i < str.length; i++) {
+ if (a == str.substr(i, a.length)) {
+ if (!('start' in m)) m.start = i;
+ bal++;
+ }
+ else if (b == str.substr(i, b.length) && 'start' in m) {
+ ended = true;
+ bal--;
+ if (!bal) {
+ m.end = i;
+ m.pre = str.substr(0, m.start);
+ m.body = (m.end - m.start > 1)
+ ? str.substring(m.start + a.length, m.end)
+ : '';
+ m.post = str.slice(m.end + b.length);
+ return m;
+ }
+ }
+ }
+
+ // if we opened more than we closed, find the one we closed
+ if (bal && ended) {
+ var start = m.start + a.length;
+ m = balanced(a, b, str.substr(start));
+ if (m) {
+ m.start += start;
+ m.end += start;
+ m.pre = str.slice(0, start) + m.pre;
+ }
+ return m;
+ }
+}
+
+},{}],4:[function(require,module,exports){
+module.exports = function (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ var x = fn(xs[i], i);
+ if (Array.isArray(x)) res.push.apply(res, x);
+ else res.push(x);
+ }
+ return res;
+};
+
+},{}]},{},[1]);
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/minimatch.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/minimatch.js
new file mode 100644
index 0000000..2bfdf62
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/minimatch.js
@@ -0,0 +1,868 @@
+module.exports = minimatch
+minimatch.Minimatch = Minimatch
+
+var isWindows = false
+if (typeof process !== 'undefined' && process.platform === 'win32')
+ isWindows = true
+
+var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
+ , expand = require("brace-expansion")
+
+ // any single thing other than /
+ // don't need to escape / when using new RegExp()
+ , qmark = "[^/]"
+
+ // * => any number of characters
+ , star = qmark + "*?"
+
+ // ** when dots are allowed. Anything goes, except .. and .
+ // not (^ or / followed by one or two dots followed by $ or /),
+ // followed by anything, any number of times.
+ , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?"
+
+ // not a ^ or / followed by a dot,
+ // followed by anything, any number of times.
+ , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?"
+
+ // characters that need to be escaped in RegExp.
+ , reSpecials = charSet("().*{}+?[]^$\\!")
+
+// "abc" -> { a:true, b:true, c:true }
+function charSet (s) {
+ return s.split("").reduce(function (set, c) {
+ set[c] = true
+ return set
+ }, {})
+}
+
+// normalizes slashes.
+var slashSplit = /\/+/
+
+minimatch.filter = filter
+function filter (pattern, options) {
+ options = options || {}
+ return function (p, i, list) {
+ return minimatch(p, pattern, options)
+ }
+}
+
+function ext (a, b) {
+ a = a || {}
+ b = b || {}
+ var t = {}
+ Object.keys(b).forEach(function (k) {
+ t[k] = b[k]
+ })
+ Object.keys(a).forEach(function (k) {
+ t[k] = a[k]
+ })
+ return t
+}
+
+minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return minimatch
+
+ var orig = minimatch
+
+ var m = function minimatch (p, pattern, options) {
+ return orig.minimatch(p, pattern, ext(def, options))
+ }
+
+ m.Minimatch = function Minimatch (pattern, options) {
+ return new orig.Minimatch(pattern, ext(def, options))
+ }
+
+ return m
+}
+
+Minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return Minimatch
+ return minimatch.defaults(def).Minimatch
+}
+
+
+function minimatch (p, pattern, options) {
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+
+ // shortcut: comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === "#") {
+ return false
+ }
+
+ // "" only matches ""
+ if (pattern.trim() === "") return p === ""
+
+ return new Minimatch(pattern, options).match(p)
+}
+
+function Minimatch (pattern, options) {
+ if (!(this instanceof Minimatch)) {
+ return new Minimatch(pattern, options)
+ }
+
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+ pattern = pattern.trim()
+
+ // windows support: need to use /, not \
+ if (isWindows)
+ pattern = pattern.split("\\").join("/")
+
+ this.options = options
+ this.set = []
+ this.pattern = pattern
+ this.regexp = null
+ this.negate = false
+ this.comment = false
+ this.empty = false
+
+ // make the set of regexps etc.
+ this.make()
+}
+
+Minimatch.prototype.debug = function() {}
+
+Minimatch.prototype.make = make
+function make () {
+ // don't do it more than once.
+ if (this._made) return
+
+ var pattern = this.pattern
+ var options = this.options
+
+ // empty patterns and comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === "#") {
+ this.comment = true
+ return
+ }
+ if (!pattern) {
+ this.empty = true
+ return
+ }
+
+ // step 1: figure out negation, etc.
+ this.parseNegate()
+
+ // step 2: expand braces
+ var set = this.globSet = this.braceExpand()
+
+ if (options.debug) this.debug = console.error
+
+ this.debug(this.pattern, set)
+
+ // step 3: now we have a set, so turn each one into a series of path-portion
+ // matching patterns.
+ // These will be regexps, except in the case of "**", which is
+ // set to the GLOBSTAR object for globstar behavior,
+ // and will not contain any / characters
+ set = this.globParts = set.map(function (s) {
+ return s.split(slashSplit)
+ })
+
+ this.debug(this.pattern, set)
+
+ // glob --> regexps
+ set = set.map(function (s, si, set) {
+ return s.map(this.parse, this)
+ }, this)
+
+ this.debug(this.pattern, set)
+
+ // filter out everything that didn't compile properly.
+ set = set.filter(function (s) {
+ return -1 === s.indexOf(false)
+ })
+
+ this.debug(this.pattern, set)
+
+ this.set = set
+}
+
+Minimatch.prototype.parseNegate = parseNegate
+function parseNegate () {
+ var pattern = this.pattern
+ , negate = false
+ , options = this.options
+ , negateOffset = 0
+
+ if (options.nonegate) return
+
+ for ( var i = 0, l = pattern.length
+ ; i < l && pattern.charAt(i) === "!"
+ ; i ++) {
+ negate = !negate
+ negateOffset ++
+ }
+
+ if (negateOffset) this.pattern = pattern.substr(negateOffset)
+ this.negate = negate
+}
+
+// Brace expansion:
+// a{b,c}d -> abd acd
+// a{b,}c -> abc ac
+// a{0..3}d -> a0d a1d a2d a3d
+// a{b,c{d,e}f}g -> abg acdfg acefg
+// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
+//
+// Invalid sets are not expanded.
+// a{2..}b -> a{2..}b
+// a{b}c -> a{b}c
+minimatch.braceExpand = function (pattern, options) {
+ return braceExpand(pattern, options)
+}
+
+Minimatch.prototype.braceExpand = braceExpand
+
+function braceExpand (pattern, options) {
+ if (!options) {
+ if (this instanceof Minimatch)
+ options = this.options
+ else
+ options = {}
+ }
+
+ pattern = typeof pattern === "undefined"
+ ? this.pattern : pattern
+
+ if (typeof pattern === "undefined") {
+ throw new Error("undefined pattern")
+ }
+
+ if (options.nobrace ||
+ !pattern.match(/\{.*\}/)) {
+ // shortcut. no need to expand.
+ return [pattern]
+ }
+
+ return expand(pattern)
+}
+
+// parse a component of the expanded set.
+// At this point, no pattern may contain "/" in it
+// so we're going to return a 2d array, where each entry is the full
+// pattern, split on '/', and then turned into a regular expression.
+// A regexp is made at the end which joins each array with an
+// escaped /, and another full one which joins each regexp with |.
+//
+// Following the lead of Bash 4.1, note that "**" only has special meaning
+// when it is the *only* thing in a path portion. Otherwise, any series
+// of * is equivalent to a single *. Globstar behavior is enabled by
+// default, and can be disabled by setting options.noglobstar.
+Minimatch.prototype.parse = parse
+var SUBPARSE = {}
+function parse (pattern, isSub) {
+ var options = this.options
+
+ // shortcuts
+ if (!options.noglobstar && pattern === "**") return GLOBSTAR
+ if (pattern === "") return ""
+
+ var re = ""
+ , hasMagic = !!options.nocase
+ , escaping = false
+ // ? => one single character
+ , patternListStack = []
+ , plType
+ , stateChar
+ , inClass = false
+ , reClassStart = -1
+ , classStart = -1
+ // . and .. never match anything that doesn't start with .,
+ // even when options.dot is set.
+ , patternStart = pattern.charAt(0) === "." ? "" // anything
+ // not (start or / followed by . or .. followed by / or end)
+ : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))"
+ : "(?!\\.)"
+ , self = this
+
+ function clearStateChar () {
+ if (stateChar) {
+ // we had some state-tracking character
+ // that wasn't consumed by this pass.
+ switch (stateChar) {
+ case "*":
+ re += star
+ hasMagic = true
+ break
+ case "?":
+ re += qmark
+ hasMagic = true
+ break
+ default:
+ re += "\\"+stateChar
+ break
+ }
+ self.debug('clearStateChar %j %j', stateChar, re)
+ stateChar = false
+ }
+ }
+
+ for ( var i = 0, len = pattern.length, c
+ ; (i < len) && (c = pattern.charAt(i))
+ ; i ++ ) {
+
+ this.debug("%s\t%s %s %j", pattern, i, re, c)
+
+ // skip over any that are escaped.
+ if (escaping && reSpecials[c]) {
+ re += "\\" + c
+ escaping = false
+ continue
+ }
+
+ SWITCH: switch (c) {
+ case "/":
+ // completely not allowed, even escaped.
+ // Should already be path-split by now.
+ return false
+
+ case "\\":
+ clearStateChar()
+ escaping = true
+ continue
+
+ // the various stateChar values
+ // for the "extglob" stuff.
+ case "?":
+ case "*":
+ case "+":
+ case "@":
+ case "!":
+ this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
+
+ // all of those are literals inside a class, except that
+ // the glob [!a] means [^a] in regexp
+ if (inClass) {
+ this.debug(' in class')
+ if (c === "!" && i === classStart + 1) c = "^"
+ re += c
+ continue
+ }
+
+ // if we already have a stateChar, then it means
+ // that there was something like ** or +? in there.
+ // Handle the stateChar, then proceed with this one.
+ self.debug('call clearStateChar %j', stateChar)
+ clearStateChar()
+ stateChar = c
+ // if extglob is disabled, then +(asdf|foo) isn't a thing.
+ // just clear the statechar *now*, rather than even diving into
+ // the patternList stuff.
+ if (options.noext) clearStateChar()
+ continue
+
+ case "(":
+ if (inClass) {
+ re += "("
+ continue
+ }
+
+ if (!stateChar) {
+ re += "\\("
+ continue
+ }
+
+ plType = stateChar
+ patternListStack.push({ type: plType
+ , start: i - 1
+ , reStart: re.length })
+ // negation is (?:(?!js)[^/]*)
+ re += stateChar === "!" ? "(?:(?!" : "(?:"
+ this.debug('plType %j %j', stateChar, re)
+ stateChar = false
+ continue
+
+ case ")":
+ if (inClass || !patternListStack.length) {
+ re += "\\)"
+ continue
+ }
+
+ clearStateChar()
+ hasMagic = true
+ re += ")"
+ plType = patternListStack.pop().type
+ // negation is (?:(?!js)[^/]*)
+ // The others are (?:)
+ switch (plType) {
+ case "!":
+ re += "[^/]*?)"
+ break
+ case "?":
+ case "+":
+ case "*": re += plType
+ case "@": break // the default anyway
+ }
+ continue
+
+ case "|":
+ if (inClass || !patternListStack.length || escaping) {
+ re += "\\|"
+ escaping = false
+ continue
+ }
+
+ clearStateChar()
+ re += "|"
+ continue
+
+ // these are mostly the same in regexp and glob
+ case "[":
+ // swallow any state-tracking char before the [
+ clearStateChar()
+
+ if (inClass) {
+ re += "\\" + c
+ continue
+ }
+
+ inClass = true
+ classStart = i
+ reClassStart = re.length
+ re += c
+ continue
+
+ case "]":
+ // a right bracket shall lose its special
+ // meaning and represent itself in
+ // a bracket expression if it occurs
+ // first in the list. -- POSIX.2 2.8.3.2
+ if (i === classStart + 1 || !inClass) {
+ re += "\\" + c
+ escaping = false
+ continue
+ }
+
+ // handle the case where we left a class open.
+ // "[z-a]" is valid, equivalent to "\[z-a\]"
+ if (inClass) {
+ // split where the last [ was, make sure we don't have
+ // an invalid re. if so, re-walk the contents of the
+ // would-be class to re-translate any characters that
+ // were passed through as-is
+ // TODO: It would probably be faster to determine this
+ // without a try/catch and a new RegExp, but it's tricky
+ // to do safely. For now, this is safe and works.
+ var cs = pattern.substring(classStart + 1, i)
+ try {
+ new RegExp('[' + cs + ']')
+ } catch (er) {
+ // not a valid class!
+ var sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + "\\[" + sp[0] + '\\]'
+ hasMagic = hasMagic || sp[1]
+ inClass = false
+ continue
+ }
+ }
+
+ // finish up the class.
+ hasMagic = true
+ inClass = false
+ re += c
+ continue
+
+ default:
+ // swallow any state char that wasn't consumed
+ clearStateChar()
+
+ if (escaping) {
+ // no need
+ escaping = false
+ } else if (reSpecials[c]
+ && !(c === "^" && inClass)) {
+ re += "\\"
+ }
+
+ re += c
+
+ } // switch
+ } // for
+
+
+ // handle the case where we left a class open.
+ // "[abc" is valid, equivalent to "\[abc"
+ if (inClass) {
+ // split where the last [ was, and escape it
+ // this is a huge pita. We now have to re-walk
+ // the contents of the would-be class to re-translate
+ // any characters that were passed through as-is
+ var cs = pattern.substr(classStart + 1)
+ , sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + "\\[" + sp[0]
+ hasMagic = hasMagic || sp[1]
+ }
+
+ // handle the case where we had a +( thing at the *end*
+ // of the pattern.
+ // each pattern list stack adds 3 chars, and we need to go through
+ // and escape any | chars that were passed through as-is for the regexp.
+ // Go through and escape them, taking care not to double-escape any
+ // | chars that were already escaped.
+ var pl
+ while (pl = patternListStack.pop()) {
+ var tail = re.slice(pl.reStart + 3)
+ // maybe some even number of \, then maybe 1 \, followed by a |
+ tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) {
+ if (!$2) {
+ // the | isn't already escaped, so escape it.
+ $2 = "\\"
+ }
+
+ // need to escape all those slashes *again*, without escaping the
+ // one that we need for escaping the | character. As it works out,
+ // escaping an even number of slashes can be done by simply repeating
+ // it exactly after itself. That's why this trick works.
+ //
+ // I am sorry that you have to see this.
+ return $1 + $1 + $2 + "|"
+ })
+
+ this.debug("tail=%j\n %s", tail, tail)
+ var t = pl.type === "*" ? star
+ : pl.type === "?" ? qmark
+ : "\\" + pl.type
+
+ hasMagic = true
+ re = re.slice(0, pl.reStart)
+ + t + "\\("
+ + tail
+ }
+
+ // handle trailing things that only matter at the very end.
+ clearStateChar()
+ if (escaping) {
+ // trailing \\
+ re += "\\\\"
+ }
+
+ // only need to apply the nodot start if the re starts with
+ // something that could conceivably capture a dot
+ var addPatternStart = false
+ switch (re.charAt(0)) {
+ case ".":
+ case "[":
+ case "(": addPatternStart = true
+ }
+
+ // if the re is not "" at this point, then we need to make sure
+ // it doesn't match against an empty path part.
+ // Otherwise a/* will match a/, which it should not.
+ if (re !== "" && hasMagic) re = "(?=.)" + re
+
+ if (addPatternStart) re = patternStart + re
+
+ // parsing just a piece of a larger pattern.
+ if (isSub === SUBPARSE) {
+ return [ re, hasMagic ]
+ }
+
+ // skip the regexp for non-magical patterns
+ // unescape anything in it, though, so that it'll be
+ // an exact match against a file etc.
+ if (!hasMagic) {
+ return globUnescape(pattern)
+ }
+
+ var flags = options.nocase ? "i" : ""
+ , regExp = new RegExp("^" + re + "$", flags)
+
+ regExp._glob = pattern
+ regExp._src = re
+
+ return regExp
+}
+
+minimatch.makeRe = function (pattern, options) {
+ return new Minimatch(pattern, options || {}).makeRe()
+}
+
+Minimatch.prototype.makeRe = makeRe
+function makeRe () {
+ if (this.regexp || this.regexp === false) return this.regexp
+
+ // at this point, this.set is a 2d array of partial
+ // pattern strings, or "**".
+ //
+ // It's better to use .match(). This function shouldn't
+ // be used, really, but it's pretty convenient sometimes,
+ // when you just want to work with a regex.
+ var set = this.set
+
+ if (!set.length) return this.regexp = false
+ var options = this.options
+
+ var twoStar = options.noglobstar ? star
+ : options.dot ? twoStarDot
+ : twoStarNoDot
+ , flags = options.nocase ? "i" : ""
+
+ var re = set.map(function (pattern) {
+ return pattern.map(function (p) {
+ return (p === GLOBSTAR) ? twoStar
+ : (typeof p === "string") ? regExpEscape(p)
+ : p._src
+ }).join("\\\/")
+ }).join("|")
+
+ // must match entire pattern
+ // ending in a * or ** will make it less strict.
+ re = "^(?:" + re + ")$"
+
+ // can match anything, as long as it's not this.
+ if (this.negate) re = "^(?!" + re + ").*$"
+
+ try {
+ return this.regexp = new RegExp(re, flags)
+ } catch (ex) {
+ return this.regexp = false
+ }
+}
+
+minimatch.match = function (list, pattern, options) {
+ options = options || {}
+ var mm = new Minimatch(pattern, options)
+ list = list.filter(function (f) {
+ return mm.match(f)
+ })
+ if (mm.options.nonull && !list.length) {
+ list.push(pattern)
+ }
+ return list
+}
+
+Minimatch.prototype.match = match
+function match (f, partial) {
+ this.debug("match", f, this.pattern)
+ // short-circuit in the case of busted things.
+ // comments, etc.
+ if (this.comment) return false
+ if (this.empty) return f === ""
+
+ if (f === "/" && partial) return true
+
+ var options = this.options
+
+ // windows: need to use /, not \
+ if (isWindows)
+ f = f.split("\\").join("/")
+
+ // treat the test path as a set of pathparts.
+ f = f.split(slashSplit)
+ this.debug(this.pattern, "split", f)
+
+ // just ONE of the pattern sets in this.set needs to match
+ // in order for it to be valid. If negating, then just one
+ // match means that we have failed.
+ // Either way, return on the first hit.
+
+ var set = this.set
+ this.debug(this.pattern, "set", set)
+
+ // Find the basename of the path by looking for the last non-empty segment
+ var filename;
+ for (var i = f.length - 1; i >= 0; i--) {
+ filename = f[i]
+ if (filename) break
+ }
+
+ for (var i = 0, l = set.length; i < l; i ++) {
+ var pattern = set[i], file = f
+ if (options.matchBase && pattern.length === 1) {
+ file = [filename]
+ }
+ var hit = this.matchOne(file, pattern, partial)
+ if (hit) {
+ if (options.flipNegate) return true
+ return !this.negate
+ }
+ }
+
+ // didn't get any hits. this is success if it's a negative
+ // pattern, failure otherwise.
+ if (options.flipNegate) return false
+ return this.negate
+}
+
+// set partial to true to test if, for example,
+// "/a/b" matches the start of "/*/b/*/d"
+// Partial means, if you run out of file before you run
+// out of pattern, then that's fine, as long as all
+// the parts match.
+Minimatch.prototype.matchOne = function (file, pattern, partial) {
+ var options = this.options
+
+ this.debug("matchOne",
+ { "this": this
+ , file: file
+ , pattern: pattern })
+
+ this.debug("matchOne", file.length, pattern.length)
+
+ for ( var fi = 0
+ , pi = 0
+ , fl = file.length
+ , pl = pattern.length
+ ; (fi < fl) && (pi < pl)
+ ; fi ++, pi ++ ) {
+
+ this.debug("matchOne loop")
+ var p = pattern[pi]
+ , f = file[fi]
+
+ this.debug(pattern, p, f)
+
+ // should be impossible.
+ // some invalid regexp stuff in the set.
+ if (p === false) return false
+
+ if (p === GLOBSTAR) {
+ this.debug('GLOBSTAR', [pattern, p, f])
+
+ // "**"
+ // a/**/b/**/c would match the following:
+ // a/b/x/y/z/c
+ // a/x/y/z/b/c
+ // a/b/x/b/x/c
+ // a/b/c
+ // To do this, take the rest of the pattern after
+ // the **, and see if it would match the file remainder.
+ // If so, return success.
+ // If not, the ** "swallows" a segment, and try again.
+ // This is recursively awful.
+ //
+ // a/**/b/**/c matching a/b/x/y/z/c
+ // - a matches a
+ // - doublestar
+ // - matchOne(b/x/y/z/c, b/**/c)
+ // - b matches b
+ // - doublestar
+ // - matchOne(x/y/z/c, c) -> no
+ // - matchOne(y/z/c, c) -> no
+ // - matchOne(z/c, c) -> no
+ // - matchOne(c, c) yes, hit
+ var fr = fi
+ , pr = pi + 1
+ if (pr === pl) {
+ this.debug('** at the end')
+ // a ** at the end will just swallow the rest.
+ // We have found a match.
+ // however, it will not swallow /.x, unless
+ // options.dot is set.
+ // . and .. are *never* matched by **, for explosively
+ // exponential reasons.
+ for ( ; fi < fl; fi ++) {
+ if (file[fi] === "." || file[fi] === ".." ||
+ (!options.dot && file[fi].charAt(0) === ".")) return false
+ }
+ return true
+ }
+
+ // ok, let's see if we can swallow whatever we can.
+ WHILE: while (fr < fl) {
+ var swallowee = file[fr]
+
+ this.debug('\nglobstar while',
+ file, fr, pattern, pr, swallowee)
+
+ // XXX remove this slice. Just pass the start index.
+ if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+ this.debug('globstar found match!', fr, fl, swallowee)
+ // found a match.
+ return true
+ } else {
+ // can't swallow "." or ".." ever.
+ // can only swallow ".foo" when explicitly asked.
+ if (swallowee === "." || swallowee === ".." ||
+ (!options.dot && swallowee.charAt(0) === ".")) {
+ this.debug("dot detected!", file, fr, pattern, pr)
+ break WHILE
+ }
+
+ // ** swallows a segment, and continue.
+ this.debug('globstar swallow a segment, and continue')
+ fr ++
+ }
+ }
+ // no match was found.
+ // However, in partial mode, we can't say this is necessarily over.
+ // If there's more *pattern* left, then
+ if (partial) {
+ // ran out of file
+ this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
+ if (fr === fl) return true
+ }
+ return false
+ }
+
+ // something other than **
+ // non-magic patterns just have to match exactly
+ // patterns with magic have been turned into regexps.
+ var hit
+ if (typeof p === "string") {
+ if (options.nocase) {
+ hit = f.toLowerCase() === p.toLowerCase()
+ } else {
+ hit = f === p
+ }
+ this.debug("string match", p, f, hit)
+ } else {
+ hit = f.match(p)
+ this.debug("pattern match", p, f, hit)
+ }
+
+ if (!hit) return false
+ }
+
+ // Note: ending in / means that we'll get a final ""
+ // at the end of the pattern. This can only match a
+ // corresponding "" at the end of the file.
+ // If the file ends in /, then it can only match a
+ // a pattern that ends in /, unless the pattern just
+ // doesn't have any more for it. But, a/b/ should *not*
+ // match "a/b/*", even though "" matches against the
+ // [^/]*? pattern, except in partial mode, where it might
+ // simply not be reached yet.
+ // However, a/b/ should still satisfy a/*
+
+ // now either we fell off the end of the pattern, or we're done.
+ if (fi === fl && pi === pl) {
+ // ran out of pattern and filename at the same time.
+ // an exact hit!
+ return true
+ } else if (fi === fl) {
+ // ran out of file, but still had pattern left.
+ // this is ok if we're doing the match as part of
+ // a glob fs traversal.
+ return partial
+ } else if (pi === pl) {
+ // ran out of pattern, still have file left.
+ // this is only acceptable if we're on the very last
+ // empty segment of a file with a trailing slash.
+ // a/* should match a/b/
+ var emptyFileEnd = (fi === fl - 1) && (file[fi] === "")
+ return emptyFileEnd
+ }
+
+ // should be unreachable.
+ throw new Error("wtf?")
+}
+
+
+// replace stuff like \* with *
+function globUnescape (s) {
+ return s.replace(/\\(.)/g, "$1")
+}
+
+
+function regExpEscape (s) {
+ return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore
new file mode 100644
index 0000000..249bc20
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore
@@ -0,0 +1,2 @@
+node_modules
+*.sw*
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml
new file mode 100644
index 0000000..6e5919d
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - "0.10"
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md
new file mode 100644
index 0000000..62bc7ba
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md
@@ -0,0 +1,121 @@
+# brace-expansion
+
+[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),
+as known from sh/bash, in JavaScript.
+
+[](http://travis-ci.org/juliangruber/brace-expansion)
+
+[](https://ci.testling.com/juliangruber/brace-expansion)
+
+## Example
+
+```js
+var expand = require('brace-expansion');
+
+expand('file-{a,b,c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('-v{,,}')
+// => ['-v', '-v', '-v']
+
+expand('file{0..2}.jpg')
+// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
+
+expand('file-{a..c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('file{2..0}.jpg')
+// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
+
+expand('file{0..4..2}.jpg')
+// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
+
+expand('file-{a..e..2}.jpg')
+// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
+
+expand('file{00..10..5}.jpg')
+// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
+
+expand('{{A..C},{a..c}}')
+// => ['A', 'B', 'C', 'a', 'b', 'c']
+
+expand('ppp{,config,oe{,conf}}')
+// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
+```
+
+## API
+
+```js
+var expand = require('brace-expansion');
+```
+
+### var expanded = expand(str)
+
+Return an array of all possible and valid expansions of `str`. If none are
+found, `[str]` is returned.
+
+Valid expansions are:
+
+```js
+/^(.*,)+(.+)?$/
+// {a,b,...}
+```
+
+A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+A numeric sequence from `x` to `y` inclusive, with optional increment.
+If `x` or `y` start with a leading `0`, all the numbers will be padded
+to have equal length. Negative numbers and backwards iteration work too.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+An alphabetic sequence from `x` to `y` inclusive, with optional increment.
+`x` and `y` must be exactly one character, and if given, `incr` must be a
+number.
+
+For compatibility reasons, the string `${` is not eligible for brace expansion.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install brace-expansion
+```
+
+## Contributors
+
+- [Julian Gruber](https://github.com/juliangruber)
+- [Isaac Z. Schlueter](https://github.com/isaacs)
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+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/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js
new file mode 100644
index 0000000..60ecfc7
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js
@@ -0,0 +1,8 @@
+var expand = require('./');
+
+console.log(expand('http://any.org/archive{1996..1999}/vol{1..4}/part{a,b,c}.html'));
+console.log(expand('http://www.numericals.com/file{1..100..10}.txt'));
+console.log(expand('http://www.letters.com/file{a..z..2}.txt'));
+console.log(expand('mkdir /usr/local/src/bash/{old,new,dist,bugs}'));
+console.log(expand('chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}'));
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
new file mode 100644
index 0000000..a23104e
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
@@ -0,0 +1,191 @@
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str, isTop) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = /^(.*,)+(.+)?$/.test(m.body);
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
+ }
+ }
+
+ return expansions;
+}
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore
new file mode 100644
index 0000000..fd4f2b0
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore
@@ -0,0 +1,2 @@
+node_modules
+.DS_Store
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
new file mode 100644
index 0000000..cc4dba2
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile
new file mode 100644
index 0000000..fa5da71
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile
@@ -0,0 +1,6 @@
+
+test:
+ @node_modules/.bin/tape test/*.js
+
+.PHONY: test
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
new file mode 100644
index 0000000..2aff0eb
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
@@ -0,0 +1,80 @@
+# balanced-match
+
+Match balanced string pairs, like `{` and `}` or `` and ` `.
+
+[](http://travis-ci.org/juliangruber/balanced-match)
+[](https://www.npmjs.org/package/balanced-match)
+
+[](https://ci.testling.com/juliangruber/balanced-match)
+
+## Example
+
+Get the first matching pair of braces:
+
+```js
+var balanced = require('balanced-match');
+
+console.log(balanced('{', '}', 'pre{in{nested}}post'));
+console.log(balanced('{', '}', 'pre{first}between{second}post'));
+```
+
+The matches are:
+
+```bash
+$ node example.js
+{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
+{ start: 3,
+ end: 9,
+ pre: 'pre',
+ body: 'first',
+ post: 'between{second}post' }
+```
+
+## API
+
+### var m = balanced(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+object with those keys:
+
+* **start** the index of the first match of `a`
+* **end** the index of the matching `b`
+* **pre** the preamble, `a` and `b` not included
+* **body** the match, `a` and `b` not included
+* **post** the postscript, `a` and `b` not included
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install balanced-match
+```
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+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/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js
new file mode 100644
index 0000000..c02ad34
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js
@@ -0,0 +1,5 @@
+var balanced = require('./');
+
+console.log(balanced('{', '}', 'pre{in{nested}}post'));
+console.log(balanced('{', '}', 'pre{first}between{second}post'));
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
new file mode 100644
index 0000000..d165ae8
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
@@ -0,0 +1,38 @@
+module.exports = balanced;
+function balanced(a, b, str) {
+ var bal = 0;
+ var m = {};
+ var ended = false;
+
+ for (var i = 0; i < str.length; i++) {
+ if (a == str.substr(i, a.length)) {
+ if (!('start' in m)) m.start = i;
+ bal++;
+ }
+ else if (b == str.substr(i, b.length) && 'start' in m) {
+ ended = true;
+ bal--;
+ if (!bal) {
+ m.end = i;
+ m.pre = str.substr(0, m.start);
+ m.body = (m.end - m.start > 1)
+ ? str.substring(m.start + a.length, m.end)
+ : '';
+ m.post = str.slice(m.end + b.length);
+ return m;
+ }
+ }
+ }
+
+ // if we opened more than we closed, find the one we closed
+ if (bal && ended) {
+ var start = m.start + a.length;
+ m = balanced(a, b, str.substr(start));
+ if (m) {
+ m.start += start;
+ m.end += start;
+ m.pre = str.slice(0, start) + m.pre;
+ }
+ return m;
+ }
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
new file mode 100644
index 0000000..9ffdc67
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "balanced-match",
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
+ "version": "0.2.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/balanced-match.git"
+ },
+ "homepage": "https://github.com/juliangruber/balanced-match",
+ "main": "index.js",
+ "scripts": {
+ "test": "make test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "tape": "~1.1.1"
+ },
+ "keywords": [
+ "match",
+ "regexp",
+ "test",
+ "balanced",
+ "parse"
+ ],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ },
+ "gitHead": "ba40ed78e7114a4a67c51da768a100184dead39c",
+ "bugs": {
+ "url": "https://github.com/juliangruber/balanced-match/issues"
+ },
+ "_id": "balanced-match@0.2.0",
+ "_shasum": "38f6730c03aab6d5edbb52bd934885e756d71674",
+ "_from": "balanced-match@^0.2.0",
+ "_npmVersion": "2.1.8",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ }
+ ],
+ "dist": {
+ "shasum": "38f6730c03aab6d5edbb52bd934885e756d71674",
+ "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
new file mode 100644
index 0000000..36bfd39
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
@@ -0,0 +1,56 @@
+var test = require('tape');
+var balanced = require('..');
+
+test('balanced', function(t) {
+ t.deepEqual(balanced('{', '}', 'pre{in{nest}}post'), {
+ start: 3,
+ end: 12,
+ pre: 'pre',
+ body: 'in{nest}',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{', '}', '{{{{{{{{{in}post'), {
+ start: 8,
+ end: 11,
+ pre: '{{{{{{{{',
+ body: 'in',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre{body{in}post'), {
+ start: 8,
+ end: 11,
+ pre: 'pre{body',
+ body: 'in',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre}{in{nest}}post'), {
+ start: 4,
+ end: 13,
+ pre: 'pre}',
+ body: 'in{nest}',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre{body}between{body2}post'), {
+ start: 3,
+ end: 8,
+ pre: 'pre',
+ body: 'body',
+ post: 'between{body2}post'
+ });
+ t.notOk(balanced('{', '}', 'nope'), 'should be notOk');
+ t.deepEqual(balanced('', ' ', 'preinnest post'), {
+ start: 3,
+ end: 19,
+ pre: 'pre',
+ body: 'innest ',
+ post: 'post'
+ });
+ t.deepEqual(balanced('', ' ', 'preinnest post'), {
+ start: 7,
+ end: 23,
+ pre: 'pre',
+ body: 'innest ',
+ post: 'post'
+ });
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml
new file mode 100644
index 0000000..f1d0f13
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.4
+ - 0.6
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+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/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
new file mode 100644
index 0000000..408f70a
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
@@ -0,0 +1,62 @@
+concat-map
+==========
+
+Concatenative mapdashery.
+
+[](http://ci.testling.com/substack/node-concat-map)
+
+[](http://travis-ci.org/substack/node-concat-map)
+
+example
+=======
+
+``` js
+var concatMap = require('concat-map');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
+```
+
+***
+
+```
+[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]
+```
+
+methods
+=======
+
+``` js
+var concatMap = require('concat-map')
+```
+
+concatMap(xs, fn)
+-----------------
+
+Return an array of concatenated elements by calling `fn(x, i)` for each element
+`x` and each index `i` in the array `xs`.
+
+When `fn(x, i)` returns an array, its result will be concatenated with the
+result array. If `fn(x, i)` returns anything else, that value will be pushed
+onto the end of the result array.
+
+install
+=======
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install concat-map
+```
+
+license
+=======
+
+MIT
+
+notes
+=====
+
+This module was written while sitting high above the ground in a tree.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js
new file mode 100644
index 0000000..3365621
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js
@@ -0,0 +1,6 @@
+var concatMap = require('../');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
new file mode 100644
index 0000000..b29a781
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
@@ -0,0 +1,13 @@
+module.exports = function (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ var x = fn(xs[i], i);
+ if (isArray(x)) res.push.apply(res, x);
+ else res.push(x);
+ }
+ return res;
+};
+
+var isArray = Array.isArray || function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]';
+};
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
new file mode 100644
index 0000000..b516138
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
@@ -0,0 +1,83 @@
+{
+ "name": "concat-map",
+ "description": "concatenative mapdashery",
+ "version": "0.0.1",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/node-concat-map.git"
+ },
+ "main": "index.js",
+ "keywords": [
+ "concat",
+ "concatMap",
+ "map",
+ "functional",
+ "higher-order"
+ ],
+ "directories": {
+ "example": "example",
+ "test": "test"
+ },
+ "scripts": {
+ "test": "tape test/*.js"
+ },
+ "devDependencies": {
+ "tape": "~2.4.0"
+ },
+ "license": "MIT",
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": {
+ "ie": [
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "ff": [
+ 3.5,
+ 10,
+ 15
+ ],
+ "chrome": [
+ 10,
+ 22
+ ],
+ "safari": [
+ 5.1
+ ],
+ "opera": [
+ 12
+ ]
+ }
+ },
+ "bugs": {
+ "url": "https://github.com/substack/node-concat-map/issues"
+ },
+ "homepage": "https://github.com/substack/node-concat-map",
+ "_id": "concat-map@0.0.1",
+ "dist": {
+ "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ },
+ "_from": "concat-map@0.0.1",
+ "_npmVersion": "1.3.21",
+ "_npmUser": {
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
new file mode 100644
index 0000000..fdbd702
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
@@ -0,0 +1,39 @@
+var concatMap = require('../');
+var test = require('tape');
+
+test('empty or not', function (t) {
+ var xs = [ 1, 2, 3, 4, 5, 6 ];
+ var ixes = [];
+ var ys = concatMap(xs, function (x, ix) {
+ ixes.push(ix);
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+ });
+ t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]);
+ t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]);
+ t.end();
+});
+
+test('always something', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function (x) {
+ return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ];
+ });
+ t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
+ t.end();
+});
+
+test('scalars', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function (x) {
+ return x === 'b' ? [ 'B', 'B', 'B' ] : x;
+ });
+ t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
+ t.end();
+});
+
+test('undefs', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function () {});
+ t.same(ys, [ undefined, undefined, undefined, undefined ]);
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
new file mode 100644
index 0000000..becf26c
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
@@ -0,0 +1,75 @@
+{
+ "name": "brace-expansion",
+ "description": "Brace expansion as known from sh/bash",
+ "version": "1.1.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
+ },
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "main": "index.js",
+ "scripts": {
+ "test": "tape test/*.js",
+ "gentest": "bash test/generate.sh"
+ },
+ "dependencies": {
+ "balanced-match": "^0.2.0",
+ "concat-map": "0.0.1"
+ },
+ "devDependencies": {
+ "tape": "^3.0.3"
+ },
+ "keywords": [],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ },
+ "gitHead": "b5fa3b1c74e5e2dba2d0efa19b28335641bc1164",
+ "bugs": {
+ "url": "https://github.com/juliangruber/brace-expansion/issues"
+ },
+ "_id": "brace-expansion@1.1.0",
+ "_shasum": "c9b7d03c03f37bc704be100e522b40db8f6cfcd9",
+ "_from": "brace-expansion@^1.0.0",
+ "_npmVersion": "2.1.10",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ }
+ ],
+ "dist": {
+ "shasum": "c9b7d03c03f37bc704be100e522b40db8f6cfcd9",
+ "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js
new file mode 100644
index 0000000..5fe2b8a
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js
@@ -0,0 +1,32 @@
+var test = require('tape');
+var expand = require('..');
+var fs = require('fs');
+var resfile = __dirname + '/bash-results.txt';
+var cases = fs.readFileSync(resfile, 'utf8').split('><><><><');
+
+// throw away the EOF marker
+cases.pop()
+
+test('matches bash expansions', function(t) {
+ cases.forEach(function(testcase) {
+ var set = testcase.split('\n');
+ var pattern = set.shift();
+ var actual = expand(pattern);
+
+ // If it expands to the empty string, then it's actually
+ // just nothing, but Bash is a singly typed language, so
+ // "nothing" is the same as "".
+ if (set.length === 1 && set[0] === '') {
+ set = []
+ } else {
+ // otherwise, strip off the [] that were added so that
+ // "" expansions would be preserved properly.
+ set = set.map(function (s) {
+ return s.replace(/^\[|\]$/g, '')
+ })
+ }
+
+ t.same(actual, set, pattern);
+ });
+ t.end();
+})
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt
new file mode 100644
index 0000000..958148d
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt
@@ -0,0 +1,1075 @@
+A{b,{d,e},{f,g}}Z
+[AbZ]
+[AdZ]
+[AeZ]
+[AfZ]
+[AgZ]><><><><><><><\{a,b}{{a,b},a,b}
+[{a,b}a]
+[{a,b}b]
+[{a,b}a]
+[{a,b}b]><><><><{{a,b}
+[{a]
+[{b]><><><><{a,b}}
+[a}]
+[b}]><><><><{,}
+><><><><><><><{,}b
+[b]
+[b]><><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><{-01..5}
+[-01]
+[000]
+[001]
+[002]
+[003]
+[004]
+[005]><><><><{-05..100..5}
+[-05]
+[000]
+[005]
+[010]
+[015]
+[020]
+[025]
+[030]
+[035]
+[040]
+[045]
+[050]
+[055]
+[060]
+[065]
+[070]
+[075]
+[080]
+[085]
+[090]
+[095]
+[100]><><><><{-05..100}
+[-05]
+[-04]
+[-03]
+[-02]
+[-01]
+[000]
+[001]
+[002]
+[003]
+[004]
+[005]
+[006]
+[007]
+[008]
+[009]
+[010]
+[011]
+[012]
+[013]
+[014]
+[015]
+[016]
+[017]
+[018]
+[019]
+[020]
+[021]
+[022]
+[023]
+[024]
+[025]
+[026]
+[027]
+[028]
+[029]
+[030]
+[031]
+[032]
+[033]
+[034]
+[035]
+[036]
+[037]
+[038]
+[039]
+[040]
+[041]
+[042]
+[043]
+[044]
+[045]
+[046]
+[047]
+[048]
+[049]
+[050]
+[051]
+[052]
+[053]
+[054]
+[055]
+[056]
+[057]
+[058]
+[059]
+[060]
+[061]
+[062]
+[063]
+[064]
+[065]
+[066]
+[067]
+[068]
+[069]
+[070]
+[071]
+[072]
+[073]
+[074]
+[075]
+[076]
+[077]
+[078]
+[079]
+[080]
+[081]
+[082]
+[083]
+[084]
+[085]
+[086]
+[087]
+[088]
+[089]
+[090]
+[091]
+[092]
+[093]
+[094]
+[095]
+[096]
+[097]
+[098]
+[099]
+[100]><><><><{0..5..2}
+[0]
+[2]
+[4]><><><><{0001..05..2}
+[0001]
+[0003]
+[0005]><><><><{0001..-5..2}
+[0001]
+[-001]
+[-003]
+[-005]><><><><{0001..-5..-2}
+[0001]
+[-001]
+[-003]
+[-005]><><><><{0001..5..-2}
+[0001]
+[0003]
+[0005]><><><><{01..5}
+[01]
+[02]
+[03]
+[04]
+[05]><><><><{1..05}
+[01]
+[02]
+[03]
+[04]
+[05]><><><><{1..05..3}
+[01]
+[04]><><><><{05..100}
+[005]
+[006]
+[007]
+[008]
+[009]
+[010]
+[011]
+[012]
+[013]
+[014]
+[015]
+[016]
+[017]
+[018]
+[019]
+[020]
+[021]
+[022]
+[023]
+[024]
+[025]
+[026]
+[027]
+[028]
+[029]
+[030]
+[031]
+[032]
+[033]
+[034]
+[035]
+[036]
+[037]
+[038]
+[039]
+[040]
+[041]
+[042]
+[043]
+[044]
+[045]
+[046]
+[047]
+[048]
+[049]
+[050]
+[051]
+[052]
+[053]
+[054]
+[055]
+[056]
+[057]
+[058]
+[059]
+[060]
+[061]
+[062]
+[063]
+[064]
+[065]
+[066]
+[067]
+[068]
+[069]
+[070]
+[071]
+[072]
+[073]
+[074]
+[075]
+[076]
+[077]
+[078]
+[079]
+[080]
+[081]
+[082]
+[083]
+[084]
+[085]
+[086]
+[087]
+[088]
+[089]
+[090]
+[091]
+[092]
+[093]
+[094]
+[095]
+[096]
+[097]
+[098]
+[099]
+[100]><><><><{0a..0z}
+[{0a..0z}]><><><><{a,b\}c,d}
+[a]
+[b}c]
+[d]><><><><{a,b{c,d}
+[{a,bc]
+[{a,bd]><><><><{a,b}c,d}
+[ac,d}]
+[bc,d}]><><><><{a..F}
+[a]
+[`]
+[_]
+[^]
+[]]
+[]
+[[]
+[Z]
+[Y]
+[X]
+[W]
+[V]
+[U]
+[T]
+[S]
+[R]
+[Q]
+[P]
+[O]
+[N]
+[M]
+[L]
+[K]
+[J]
+[I]
+[H]
+[G]
+[F]><><><><{A..f}
+[A]
+[B]
+[C]
+[D]
+[E]
+[F]
+[G]
+[H]
+[I]
+[J]
+[K]
+[L]
+[M]
+[N]
+[O]
+[P]
+[Q]
+[R]
+[S]
+[T]
+[U]
+[V]
+[W]
+[X]
+[Y]
+[Z]
+[[]
+[]
+[]]
+[^]
+[_]
+[`]
+[a]
+[b]
+[c]
+[d]
+[e]
+[f]><><><><{a..Z}
+[a]
+[`]
+[_]
+[^]
+[]]
+[]
+[[]
+[Z]><><><><{A..z}
+[A]
+[B]
+[C]
+[D]
+[E]
+[F]
+[G]
+[H]
+[I]
+[J]
+[K]
+[L]
+[M]
+[N]
+[O]
+[P]
+[Q]
+[R]
+[S]
+[T]
+[U]
+[V]
+[W]
+[X]
+[Y]
+[Z]
+[[]
+[]
+[]]
+[^]
+[_]
+[`]
+[a]
+[b]
+[c]
+[d]
+[e]
+[f]
+[g]
+[h]
+[i]
+[j]
+[k]
+[l]
+[m]
+[n]
+[o]
+[p]
+[q]
+[r]
+[s]
+[t]
+[u]
+[v]
+[w]
+[x]
+[y]
+[z]><><><><{z..A}
+[z]
+[y]
+[x]
+[w]
+[v]
+[u]
+[t]
+[s]
+[r]
+[q]
+[p]
+[o]
+[n]
+[m]
+[l]
+[k]
+[j]
+[i]
+[h]
+[g]
+[f]
+[e]
+[d]
+[c]
+[b]
+[a]
+[`]
+[_]
+[^]
+[]]
+[]
+[[]
+[Z]
+[Y]
+[X]
+[W]
+[V]
+[U]
+[T]
+[S]
+[R]
+[Q]
+[P]
+[O]
+[N]
+[M]
+[L]
+[K]
+[J]
+[I]
+[H]
+[G]
+[F]
+[E]
+[D]
+[C]
+[B]
+[A]><><><><{Z..a}
+[Z]
+[[]
+[]
+[]]
+[^]
+[_]
+[`]
+[a]><><><><{a..F..2}
+[a]
+[_]
+[]]
+[[]
+[Y]
+[W]
+[U]
+[S]
+[Q]
+[O]
+[M]
+[K]
+[I]
+[G]><><><><{A..f..02}
+[A]
+[C]
+[E]
+[G]
+[I]
+[K]
+[M]
+[O]
+[Q]
+[S]
+[U]
+[W]
+[Y]
+[[]
+[]]
+[_]
+[a]
+[c]
+[e]><><><><{a..Z..5}
+[a]
+[]><><><><><><><{A..z..10}
+[A]
+[K]
+[U]
+[_]
+[i]
+[s]><><><><{z..A..-2}
+[z]
+[x]
+[v]
+[t]
+[r]
+[p]
+[n]
+[l]
+[j]
+[h]
+[f]
+[d]
+[b]
+[`]
+[^]
+[]
+[Z]
+[X]
+[V]
+[T]
+[R]
+[P]
+[N]
+[L]
+[J]
+[H]
+[F]
+[D]
+[B]><><><><{Z..a..20}
+[Z]><><><><{a{,b}
+[{a]
+[{ab]><><><><{a},b}
+[a}]
+[b]><><><><{x,y{,}g}
+[x]
+[yg]
+[yg]><><><><{x,y{}g}
+[x]
+[y{}g]><><><><{{a,b}
+[{a]
+[{b]><><><><{{a,b},c}
+[a]
+[b]
+[c]><><><><{{a,b}c}
+[{ac}]
+[{bc}]><><><><{{a,b},}
+[a]
+[b]><><><><><><><{{a,b},}c
+[ac]
+[bc]
+[c]><><><><{{a,b}.}
+[{a.}]
+[{b.}]><><><><{{a,b}}
+[{a}]
+[{b}]><><><><><><><
+><><><><{-10..00}
+[-10]
+[-09]
+[-08]
+[-07]
+[-06]
+[-05]
+[-04]
+[-03]
+[-02]
+[-01]
+[000]><><><><{a,\\{a,b}c}
+[a]
+[\ac]
+[\bc]><><><><{a,\{a,b}c}
+[ac}]
+[{ac}]
+[bc}]><><><><><><><{-10.\.00}
+[{-10..00}]><><><><><><><><><><{l,n,m}xyz
+[lxyz]
+[nxyz]
+[mxyz]><><><><{abc\,def}
+[{abc,def}]><><><><{abc}
+[{abc}]><><><><{x\,y,\{abc\},trie}
+[x,y]
+[{abc}]
+[trie]><><><><{}
+[{}]><><><><}
+[}]><><><><{
+[{]><><><><><><><{1..10}
+[1]
+[2]
+[3]
+[4]
+[5]
+[6]
+[7]
+[8]
+[9]
+[10]><><><><{0..10,braces}
+[0..10]
+[braces]><><><><{{0..10},braces}
+[0]
+[1]
+[2]
+[3]
+[4]
+[5]
+[6]
+[7]
+[8]
+[9]
+[10]
+[braces]><><><><><><><{3..3}
+[3]><><><><><><><{10..1}
+[10]
+[9]
+[8]
+[7]
+[6]
+[5]
+[4]
+[3]
+[2]
+[1]><><><><{10..1}y
+[10y]
+[9y]
+[8y]
+[7y]
+[6y]
+[5y]
+[4y]
+[3y]
+[2y]
+[1y]><><><><><><><{a..f}
+[a]
+[b]
+[c]
+[d]
+[e]
+[f]><><><><{f..a}
+[f]
+[e]
+[d]
+[c]
+[b]
+[a]><><><><{a..A}
+[a]
+[`]
+[_]
+[^]
+[]]
+[]
+[[]
+[Z]
+[Y]
+[X]
+[W]
+[V]
+[U]
+[T]
+[S]
+[R]
+[Q]
+[P]
+[O]
+[N]
+[M]
+[L]
+[K]
+[J]
+[I]
+[H]
+[G]
+[F]
+[E]
+[D]
+[C]
+[B]
+[A]><><><><{A..a}
+[A]
+[B]
+[C]
+[D]
+[E]
+[F]
+[G]
+[H]
+[I]
+[J]
+[K]
+[L]
+[M]
+[N]
+[O]
+[P]
+[Q]
+[R]
+[S]
+[T]
+[U]
+[V]
+[W]
+[X]
+[Y]
+[Z]
+[[]
+[]
+[]]
+[^]
+[_]
+[`]
+[a]><><><><{f..f}
+[f]><><><><{1..f}
+[{1..f}]><><><><{f..1}
+[{f..1}]><><><><{-1..-10}
+[-1]
+[-2]
+[-3]
+[-4]
+[-5]
+[-6]
+[-7]
+[-8]
+[-9]
+[-10]><><><><{-20..0}
+[-20]
+[-19]
+[-18]
+[-17]
+[-16]
+[-15]
+[-14]
+[-13]
+[-12]
+[-11]
+[-10]
+[-9]
+[-8]
+[-7]
+[-6]
+[-5]
+[-4]
+[-3]
+[-2]
+[-1]
+[0]><><><><><><><><><><{klklkl}{1,2,3}
+[{klklkl}1]
+[{klklkl}2]
+[{klklkl}3]><><><><{1..10..2}
+[1]
+[3]
+[5]
+[7]
+[9]><><><><{-1..-10..2}
+[-1]
+[-3]
+[-5]
+[-7]
+[-9]><><><><{-1..-10..-2}
+[-1]
+[-3]
+[-5]
+[-7]
+[-9]><><><><{10..1..-2}
+[10]
+[8]
+[6]
+[4]
+[2]><><><><{10..1..2}
+[10]
+[8]
+[6]
+[4]
+[2]><><><><{1..20..2}
+[1]
+[3]
+[5]
+[7]
+[9]
+[11]
+[13]
+[15]
+[17]
+[19]><><><><{1..20..20}
+[1]><><><><{100..0..5}
+[100]
+[95]
+[90]
+[85]
+[80]
+[75]
+[70]
+[65]
+[60]
+[55]
+[50]
+[45]
+[40]
+[35]
+[30]
+[25]
+[20]
+[15]
+[10]
+[5]
+[0]><><><><{100..0..-5}
+[100]
+[95]
+[90]
+[85]
+[80]
+[75]
+[70]
+[65]
+[60]
+[55]
+[50]
+[45]
+[40]
+[35]
+[30]
+[25]
+[20]
+[15]
+[10]
+[5]
+[0]><><><><{a..z}
+[a]
+[b]
+[c]
+[d]
+[e]
+[f]
+[g]
+[h]
+[i]
+[j]
+[k]
+[l]
+[m]
+[n]
+[o]
+[p]
+[q]
+[r]
+[s]
+[t]
+[u]
+[v]
+[w]
+[x]
+[y]
+[z]><><><><{a..z..2}
+[a]
+[c]
+[e]
+[g]
+[i]
+[k]
+[m]
+[o]
+[q]
+[s]
+[u]
+[w]
+[y]><><><><{z..a..-2}
+[z]
+[x]
+[v]
+[t]
+[r]
+[p]
+[n]
+[l]
+[j]
+[h]
+[f]
+[d]
+[b]><><><><{2147483645..2147483649}
+[2147483645]
+[2147483646]
+[2147483647]
+[2147483648]
+[2147483649]><><><><{10..0..2}
+[10]
+[8]
+[6]
+[4]
+[2]
+[0]><><><><{10..0..-2}
+[10]
+[8]
+[6]
+[4]
+[2]
+[0]><><><><{-50..-0..5}
+[-50]
+[-45]
+[-40]
+[-35]
+[-30]
+[-25]
+[-20]
+[-15]
+[-10]
+[-5]
+[0]><><><><{1..10.f}
+[{1..10.f}]><><><><{1..ff}
+[{1..ff}]><><><><{1..10..ff}
+[{1..10..ff}]><><><><{1.20..2}
+[{1.20..2}]><><><><{1..20..f2}
+[{1..20..f2}]><><><><{1..20..2f}
+[{1..20..2f}]><><><><{1..2f..2}
+[{1..2f..2}]><><><><{1..ff..2}
+[{1..ff..2}]><><><><{1..ff}
+[{1..ff}]><><><><{1..f}
+[{1..f}]><><><><{1..0f}
+[{1..0f}]><><><><{1..10f}
+[{1..10f}]><><><><{1..10.f}
+[{1..10.f}]><><><><{1..10.f}
+[{1..10.f}]><><><><
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt
new file mode 100644
index 0000000..e5161c3
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt
@@ -0,0 +1,182 @@
+# skip quotes for now
+# "{x,x}"
+# {"x,x"}
+# {x","x}
+# '{a,b}{{a,b},a,b}'
+A{b,{d,e},{f,g}}Z
+PRE-{a,b}{{a,b},a,b}-POST
+\\{a,b}{{a,b},a,b}
+{{a,b}
+{a,b}}
+{,}
+a{,}
+{,}b
+a{,}b
+a{b}c
+a{1..5}b
+a{01..5}b
+a{-01..5}b
+a{-01..5..3}b
+a{001..9}b
+a{b,c{d,e},{f,g}h}x{y,z
+a{b,c{d,e},{f,g}h}x{y,z\\}
+a{b,c{d,e},{f,g}h}x{y,z}
+a{b{c{d,e}f{x,y{{g}h
+a{b{c{d,e}f{x,y{}g}h
+a{b{c{d,e}f{x,y}}g}h
+a{b{c{d,e}f}g}h
+a{{x,y},z}b
+f{x,y{g,z}}h
+f{x,y{{g,z}}h
+f{x,y{{g,z}}h}
+f{x,y{{g}h
+f{x,y{{g}}h
+f{x,y{}g}h
+z{a,b{,c}d
+z{a,b},c}d
+{-01..5}
+{-05..100..5}
+{-05..100}
+{0..5..2}
+{0001..05..2}
+{0001..-5..2}
+{0001..-5..-2}
+{0001..5..-2}
+{01..5}
+{1..05}
+{1..05..3}
+{05..100}
+{0a..0z}
+{a,b\\}c,d}
+{a,b{c,d}
+{a,b}c,d}
+{a..F}
+{A..f}
+{a..Z}
+{A..z}
+{z..A}
+{Z..a}
+{a..F..2}
+{A..f..02}
+{a..Z..5}
+d{a..Z..5}b
+{A..z..10}
+{z..A..-2}
+{Z..a..20}
+{a{,b}
+{a},b}
+{x,y{,}g}
+{x,y{}g}
+{{a,b}
+{{a,b},c}
+{{a,b}c}
+{{a,b},}
+X{{a,b},}X
+{{a,b},}c
+{{a,b}.}
+{{a,b}}
+X{a..#}X
+# this next one is an empty string
+
+{-10..00}
+# Need to escape slashes in here for reasons i guess.
+{a,\\\\{a,b}c}
+{a,\\{a,b}c}
+a,\\{b,c}
+{-10.\\.00}
+#### bash tests/braces.tests
+# Note that some tests are edited out because some features of
+# bash are intentionally not supported in this brace expander.
+ff{c,b,a}
+f{d,e,f}g
+{l,n,m}xyz
+{abc\\,def}
+{abc}
+{x\\,y,\\{abc\\},trie}
+# not impementing back-ticks obviously
+# XXXX\\{`echo a b c | tr ' ' ','`\\}
+{}
+# We only ever have to worry about parsing a single argument,
+# not a command line, so spaces have a different meaning than bash.
+# { }
+}
+{
+abcd{efgh
+# spaces
+# foo {1,2} bar
+# not impementing back-ticks obviously
+# `zecho foo {1,2} bar`
+# $(zecho foo {1,2} bar)
+# ${var} is not a variable here, like it is in bash. omit.
+# foo{bar,${var}.}
+# foo{bar,${var}}
+# isaacs: skip quotes for now
+# "${var}"{x,y}
+# $var{x,y}
+# ${var}{x,y}
+# new sequence brace operators
+{1..10}
+# this doesn't work yet
+{0..10,braces}
+# but this does
+{{0..10},braces}
+x{{0..10},braces}y
+{3..3}
+x{3..3}y
+{10..1}
+{10..1}y
+x{10..1}y
+{a..f}
+{f..a}
+{a..A}
+{A..a}
+{f..f}
+# mixes are incorrectly-formed brace expansions
+{1..f}
+{f..1}
+# spaces
+# 0{1..9} {10..20}
+# do negative numbers work?
+{-1..-10}
+{-20..0}
+# weirdly-formed brace expansions -- fixed in post-bash-3.1
+a-{b{d,e}}-c
+a-{bdef-{g,i}-c
+# isaacs: skip quotes for now
+# {"klklkl"}{1,2,3}
+# isaacs: this is a valid test, though
+{klklkl}{1,2,3}
+# {"x,x"}
+{1..10..2}
+{-1..-10..2}
+{-1..-10..-2}
+{10..1..-2}
+{10..1..2}
+{1..20..2}
+{1..20..20}
+{100..0..5}
+{100..0..-5}
+{a..z}
+{a..z..2}
+{z..a..-2}
+# make sure brace expansion handles ints > 2**31 - 1 using intmax_t
+{2147483645..2147483649}
+# unwanted zero-padding -- fixed post-bash-4.0
+{10..0..2}
+{10..0..-2}
+{-50..-0..5}
+# bad
+{1..10.f}
+{1..ff}
+{1..10..ff}
+{1.20..2}
+{1..20..f2}
+{1..20..2f}
+{1..2f..2}
+{1..ff..2}
+{1..ff}
+{1..f}
+{1..0f}
+{1..10f}
+{1..10.f}
+{1..10.f}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js
new file mode 100644
index 0000000..3fcc185
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js
@@ -0,0 +1,9 @@
+var test = require('tape');
+var expand = require('..');
+
+test('ignores ${', function(t) {
+ t.deepEqual(expand('${1..3}'), ['${1..3}']);
+ t.deepEqual(expand('${a,b}${c,d}'), ['${a,b}${c,d}']);
+ t.deepEqual(expand('x${a,b}x${c,d}x'), ['x${a,b}x${c,d}x']);
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js
new file mode 100644
index 0000000..e429121
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js
@@ -0,0 +1,10 @@
+var test = require('tape');
+var expand = require('..');
+
+test('empty option', function(t) {
+ t.deepEqual(expand('-v{,,,,}'), [
+ '-v', '-v', '-v', '-v', '-v'
+ ]);
+ t.end();
+});
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh
new file mode 100644
index 0000000..e040e66
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+set -e
+
+# Bash 4.3 because of arbitrary need to pick a single standard.
+
+if [ "${BASH_VERSINFO[0]}" != "4" ] || [ "${BASH_VERSINFO[1]}" != "3" ]; then
+ echo "this script requires bash 4.3" >&2
+ exit 1
+fi
+
+CDPATH= cd "$(dirname "$0")"
+
+js='require("./")(process.argv[1]).join(" ")'
+
+cat cases.txt | \
+ while read case; do
+ if [ "${case:0:1}" = "#" ]; then
+ continue;
+ fi;
+ b="$($BASH -c 'for c in '"$case"'; do echo ["$c"]; done')"
+ echo "$case"
+ echo -n "$b><><><><";
+ done > bash-results.txt
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js
new file mode 100644
index 0000000..8d434c2
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js
@@ -0,0 +1,15 @@
+var test = require('tape');
+var expand = require('..');
+
+test('negative increment', function(t) {
+ t.deepEqual(expand('{3..1}'), ['3', '2', '1']);
+ t.deepEqual(expand('{10..8}'), ['10', '9', '8']);
+ t.deepEqual(expand('{10..08}'), ['10', '09', '08']);
+ t.deepEqual(expand('{c..a}'), ['c', 'b', 'a']);
+
+ t.deepEqual(expand('{4..0..2}'), ['4', '2', '0']);
+ t.deepEqual(expand('{4..0..-2}'), ['4', '2', '0']);
+ t.deepEqual(expand('{e..a..2}'), ['e', 'c', 'a']);
+
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js
new file mode 100644
index 0000000..0862dc5
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js
@@ -0,0 +1,16 @@
+var test = require('tape');
+var expand = require('..');
+
+test('nested', function(t) {
+ t.deepEqual(expand('{a,b{1..3},c}'), [
+ 'a', 'b1', 'b2', 'b3', 'c'
+ ]);
+ t.deepEqual(expand('{{A..Z},{a..z}}'),
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+ );
+ t.deepEqual(expand('ppp{,config,oe{,conf}}'), [
+ 'ppp', 'pppconfig', 'pppoe', 'pppoeconf'
+ ]);
+ t.end();
+});
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js
new file mode 100644
index 0000000..c00ad15
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js
@@ -0,0 +1,10 @@
+var test = require('tape');
+var expand = require('..');
+
+test('order', function(t) {
+ t.deepEqual(expand('a{d,c,b}e'), [
+ 'ade', 'ace', 'abe'
+ ]);
+ t.end();
+});
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js
new file mode 100644
index 0000000..e415877
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js
@@ -0,0 +1,13 @@
+var test = require('tape');
+var expand = require('..');
+
+test('pad', function(t) {
+ t.deepEqual(expand('{9..11}'), [
+ '9', '10', '11'
+ ]);
+ t.deepEqual(expand('{09..11}'), [
+ '09', '10', '11'
+ ]);
+ t.end();
+});
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js
new file mode 100644
index 0000000..3038fba
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js
@@ -0,0 +1,7 @@
+var test = require('tape');
+var expand = require('..');
+
+test('x and y of same type', function(t) {
+ t.deepEqual(expand('{a..9}'), ['{a..9}']);
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js
new file mode 100644
index 0000000..f73a957
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js
@@ -0,0 +1,50 @@
+var test = require('tape');
+var expand = require('..');
+
+test('numeric sequences', function(t) {
+ t.deepEqual(expand('a{1..2}b{2..3}c'), [
+ 'a1b2c', 'a1b3c', 'a2b2c', 'a2b3c'
+ ]);
+ t.deepEqual(expand('{1..2}{2..3}'), [
+ '12', '13', '22', '23'
+ ]);
+ t.end();
+});
+
+test('numeric sequences with step count', function(t) {
+ t.deepEqual(expand('{0..8..2}'), [
+ '0', '2', '4', '6', '8'
+ ]);
+ t.deepEqual(expand('{1..8..2}'), [
+ '1', '3', '5', '7'
+ ]);
+ t.end();
+});
+
+test('numeric sequence with negative x / y', function(t) {
+ t.deepEqual(expand('{3..-2}'), [
+ '3', '2', '1', '0', '-1', '-2'
+ ]);
+ t.end();
+});
+
+test('alphabetic sequences', function(t) {
+ t.deepEqual(expand('1{a..b}2{b..c}3'), [
+ '1a2b3', '1a2c3', '1b2b3', '1b2c3'
+ ]);
+ t.deepEqual(expand('{a..b}{b..c}'), [
+ 'ab', 'ac', 'bb', 'bc'
+ ]);
+ t.end();
+});
+
+test('alphabetic sequences with step count', function(t) {
+ t.deepEqual(expand('{a..k..2}'), [
+ 'a', 'c', 'e', 'g', 'i', 'k'
+ ]);
+ t.deepEqual(expand('{b..k..2}'), [
+ 'b', 'd', 'f', 'h', 'j'
+ ]);
+ t.end();
+});
+
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json
new file mode 100644
index 0000000..0ada269
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json
@@ -0,0 +1,64 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me"
+ },
+ "name": "minimatch",
+ "description": "a glob matcher in javascript",
+ "version": "2.0.4",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/minimatch.git"
+ },
+ "main": "minimatch.js",
+ "scripts": {
+ "test": "tap test/*.js",
+ "prepublish": "browserify -o browser.js -e minimatch.js --bare"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "brace-expansion": "^1.0.0"
+ },
+ "devDependencies": {
+ "browserify": "^9.0.3",
+ "tap": ""
+ },
+ "license": {
+ "type": "MIT",
+ "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
+ },
+ "files": [
+ "minimatch.js",
+ "browser.js"
+ ],
+ "gitHead": "c75d17c23df3b6050338ee654a58490255b36ebc",
+ "bugs": {
+ "url": "https://github.com/isaacs/minimatch/issues"
+ },
+ "homepage": "https://github.com/isaacs/minimatch",
+ "_id": "minimatch@2.0.4",
+ "_shasum": "83bea115803e7a097a78022427287edb762fafed",
+ "_from": "minimatch@^2.0.1",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "83bea115803e7a097a78022427287edb762fafed",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/LICENSE
new file mode 100644
index 0000000..0c44ae7
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) Isaac Z. Schlueter ("Author")
+All rights reserved.
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/README.md
new file mode 100644
index 0000000..a2981ea
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/README.md
@@ -0,0 +1,51 @@
+# once
+
+Only call a function once.
+
+## usage
+
+```javascript
+var once = require('once')
+
+function load (file, cb) {
+ cb = once(cb)
+ loader.load('file')
+ loader.once('load', cb)
+ loader.once('error', cb)
+}
+```
+
+Or add to the Function.prototype in a responsible way:
+
+```javascript
+// only has to be done once
+require('once').proto()
+
+function load (file, cb) {
+ cb = cb.once()
+ loader.load('file')
+ loader.once('load', cb)
+ loader.once('error', cb)
+}
+```
+
+Ironically, the prototype feature makes this module twice as
+complicated as necessary.
+
+To check whether you function has been called, use `fn.called`. Once the
+function is called for the first time the return value of the original
+function is saved in `fn.value` and subsequent calls will continue to
+return this value.
+
+```javascript
+var once = require('once')
+
+function load (cb) {
+ cb = once(cb)
+ var stream = createStream()
+ stream.once('data', cb)
+ stream.once('end', function () {
+ if (!cb.called) cb(new Error('not found'))
+ })
+}
+```
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/README.md b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/README.md
new file mode 100644
index 0000000..98eab25
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/README.md
@@ -0,0 +1,36 @@
+# wrappy
+
+Callback wrapping utility
+
+## USAGE
+
+```javascript
+var wrappy = require("wrappy")
+
+// var wrapper = wrappy(wrapperFunction)
+
+// make sure a cb is called only once
+// See also: http://npm.im/once for this specific use case
+var once = wrappy(function (cb) {
+ var called = false
+ return function () {
+ if (called) return
+ called = true
+ return cb.apply(this, arguments)
+ }
+})
+
+function printBoo () {
+ console.log('boo')
+}
+// has some rando property
+printBoo.iAmBooPrinter = true
+
+var onlyPrintOnce = once(printBoo)
+
+onlyPrintOnce() // prints 'boo'
+onlyPrintOnce() // does nothing
+
+// random property is retained!
+assert.equal(onlyPrintOnce.iAmBooPrinter, true)
+```
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
new file mode 100644
index 0000000..9165c6e
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "wrappy",
+ "version": "1.0.1",
+ "description": "Callback wrapping utility",
+ "main": "wrappy.js",
+ "directories": {
+ "test": "test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "^0.4.12"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/wrappy"
+ },
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/wrappy/issues"
+ },
+ "homepage": "https://github.com/npm/wrappy",
+ "gitHead": "006a8cbac6b99988315834c207896eed71fd069a",
+ "_id": "wrappy@1.0.1",
+ "_shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
+ "_from": "wrappy@1",
+ "_npmVersion": "2.0.0",
+ "_nodeVersion": "0.10.31",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
+ "tarball": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js
new file mode 100644
index 0000000..5ed0fcd
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js
@@ -0,0 +1,51 @@
+var test = require('tap').test
+var wrappy = require('../wrappy.js')
+
+test('basic', function (t) {
+ function onceifier (cb) {
+ var called = false
+ return function () {
+ if (called) return
+ called = true
+ return cb.apply(this, arguments)
+ }
+ }
+ onceifier.iAmOnce = {}
+ var once = wrappy(onceifier)
+ t.equal(once.iAmOnce, onceifier.iAmOnce)
+
+ var called = 0
+ function boo () {
+ t.equal(called, 0)
+ called++
+ }
+ // has some rando property
+ boo.iAmBoo = true
+
+ var onlyPrintOnce = once(boo)
+
+ onlyPrintOnce() // prints 'boo'
+ onlyPrintOnce() // does nothing
+ t.equal(called, 1)
+
+ // random property is retained!
+ t.equal(onlyPrintOnce.iAmBoo, true)
+
+ var logs = []
+ var logwrap = wrappy(function (msg, cb) {
+ logs.push(msg + ' wrapping cb')
+ return function () {
+ logs.push(msg + ' before cb')
+ var ret = cb.apply(this, arguments)
+ logs.push(msg + ' after cb')
+ }
+ })
+
+ var c = logwrap('foo', function () {
+ t.same(logs, [ 'foo wrapping cb', 'foo before cb' ])
+ })
+ c()
+ t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ])
+
+ t.end()
+})
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js
new file mode 100644
index 0000000..bb7e7d6
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js
@@ -0,0 +1,33 @@
+// Returns a wrapper function that returns a wrapped callback
+// The wrapper function should do some stuff, and return a
+// presumably different callback function.
+// This makes sure that own properties are retained, so that
+// decorations and such are not lost along the way.
+module.exports = wrappy
+function wrappy (fn, cb) {
+ if (fn && cb) return wrappy(fn)(cb)
+
+ if (typeof fn !== 'function')
+ throw new TypeError('need wrapper function')
+
+ Object.keys(fn).forEach(function (k) {
+ wrapper[k] = fn[k]
+ })
+
+ return wrapper
+
+ function wrapper() {
+ var args = new Array(arguments.length)
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i]
+ }
+ var ret = fn.apply(this, args)
+ var cb = args[args.length-1]
+ if (typeof ret === 'function' && ret !== cb) {
+ Object.keys(cb).forEach(function (k) {
+ ret[k] = cb[k]
+ })
+ }
+ return ret
+ }
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/once.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/once.js
new file mode 100644
index 0000000..2e1e721
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/once.js
@@ -0,0 +1,21 @@
+var wrappy = require('wrappy')
+module.exports = wrappy(once)
+
+once.proto = once(function () {
+ Object.defineProperty(Function.prototype, 'once', {
+ value: function () {
+ return once(this)
+ },
+ configurable: true
+ })
+})
+
+function once (fn) {
+ var f = function () {
+ if (f.called) return f.value
+ f.called = true
+ return f.value = fn.apply(this, arguments)
+ }
+ f.called = false
+ return f
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/package.json
new file mode 100644
index 0000000..74d80e0
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "once",
+ "version": "1.3.1",
+ "description": "Run a function exactly one time",
+ "main": "once.js",
+ "directories": {
+ "test": "test"
+ },
+ "dependencies": {
+ "wrappy": "1"
+ },
+ "devDependencies": {
+ "tap": "~0.3.0"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/once"
+ },
+ "keywords": [
+ "once",
+ "function",
+ "one",
+ "single"
+ ],
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "BSD",
+ "gitHead": "c90ac02a74f433ce47f6938869e68dd6196ffc2c",
+ "bugs": {
+ "url": "https://github.com/isaacs/once/issues"
+ },
+ "homepage": "https://github.com/isaacs/once",
+ "_id": "once@1.3.1",
+ "_shasum": "f3f3e4da5b7d27b5c732969ee3e67e729457b31f",
+ "_from": "once@^1.3.0",
+ "_npmVersion": "2.0.0",
+ "_nodeVersion": "0.10.31",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "f3f3e4da5b7d27b5c732969ee3e67e729457b31f",
+ "tarball": "http://registry.npmjs.org/once/-/once-1.3.1.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/test/once.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/test/once.js
new file mode 100644
index 0000000..c618360
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/once/test/once.js
@@ -0,0 +1,23 @@
+var test = require('tap').test
+var once = require('../once.js')
+
+test('once', function (t) {
+ var f = 0
+ function fn (g) {
+ t.equal(f, 0)
+ f ++
+ return f + g + this
+ }
+ fn.ownProperty = {}
+ var foo = once(fn)
+ t.equal(fn.ownProperty, foo.ownProperty)
+ t.notOk(foo.called)
+ for (var i = 0; i < 1E3; i++) {
+ t.same(f, i === 0 ? 0 : 1)
+ var g = foo.call(1, 1)
+ t.ok(foo.called)
+ t.same(g, 3)
+ t.same(f, 1)
+ }
+ t.end()
+})
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/package.json
new file mode 100644
index 0000000..33b3b0e
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/package.json
@@ -0,0 +1,72 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "name": "glob",
+ "description": "a little globber",
+ "version": "4.5.3",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-glob.git"
+ },
+ "main": "glob.js",
+ "files": [
+ "glob.js",
+ "sync.js",
+ "common.js"
+ ],
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ },
+ "devDependencies": {
+ "mkdirp": "0",
+ "rimraf": "^2.2.8",
+ "tap": "^0.5.0",
+ "tick": "0.0.6"
+ },
+ "scripts": {
+ "prepublish": "npm run benchclean",
+ "profclean": "rm -f v8.log profile.txt",
+ "test": "npm run profclean && tap test/*.js",
+ "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js",
+ "bench": "bash benchmark.sh",
+ "prof": "bash prof.sh && cat profile.txt",
+ "benchclean": "bash benchclean.sh"
+ },
+ "license": "ISC",
+ "gitHead": "a4e461ab59a837eee80a4d8dbdbf5ae1054a646f",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-glob/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-glob",
+ "_id": "glob@4.5.3",
+ "_shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "_from": "glob@^4.4.2",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-4.5.3.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/sync.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/sync.js
new file mode 100644
index 0000000..f4f5e36
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/sync.js
@@ -0,0 +1,457 @@
+module.exports = globSync
+globSync.GlobSync = GlobSync
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var Glob = require('./glob.js').Glob
+var util = require('util')
+var path = require('path')
+var assert = require('assert')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var childrenIgnored = common.childrenIgnored
+
+function globSync (pattern, options) {
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ return new GlobSync(pattern, options).found
+}
+
+function GlobSync (pattern, options) {
+ if (!pattern)
+ throw new Error('must provide pattern')
+
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ if (!(this instanceof GlobSync))
+ return new GlobSync(pattern, options)
+
+ setopts(this, pattern, options)
+
+ if (this.noprocess)
+ return this
+
+ var n = this.minimatch.set.length
+ this.matches = new Array(n)
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false)
+ }
+ this._finish()
+}
+
+GlobSync.prototype._finish = function () {
+ assert(this instanceof GlobSync)
+ if (this.realpath) {
+ var self = this
+ this.matches.forEach(function (matchset, index) {
+ var set = self.matches[index] = Object.create(null)
+ for (var p in matchset) {
+ try {
+ p = self._makeAbs(p)
+ var real = fs.realpathSync(p, this.realpathCache)
+ set[real] = true
+ } catch (er) {
+ if (er.syscall === 'stat')
+ set[self._makeAbs(p)] = true
+ else
+ throw er
+ }
+ }
+ })
+ }
+ common.finish(this)
+}
+
+
+GlobSync.prototype._process = function (pattern, index, inGlobStar) {
+ assert(this instanceof GlobSync)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // See if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip processing
+ if (childrenIgnored(this, read))
+ return
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
+}
+
+
+GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
+ var entries = this._readdir(abs, inGlobStar)
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix.slice(-1) !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this.matches[index][e] = true
+ }
+ // This was the last one, and no stats were needed
+ return
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix)
+ newPattern = [prefix, e]
+ else
+ newPattern = [e]
+ this._process(newPattern.concat(remain), index, inGlobStar)
+ }
+}
+
+
+GlobSync.prototype._emitMatch = function (index, e) {
+ var abs = this._makeAbs(e)
+ if (this.mark)
+ e = this._mark(e)
+
+ if (this.matches[index][e])
+ return
+
+ if (this.nodir) {
+ var c = this.cache[this._makeAbs(e)]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ this.matches[index][e] = true
+ if (this.stat)
+ this._stat(e)
+}
+
+
+GlobSync.prototype._readdirInGlobStar = function (abs) {
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false)
+
+ var entries
+ var lstat
+ var stat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ // lstat failed, doesn't exist
+ return null
+ }
+
+ var isSym = lstat.isSymbolicLink()
+ this.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory())
+ this.cache[abs] = 'FILE'
+ else
+ entries = this._readdir(abs, false)
+
+ return entries
+}
+
+GlobSync.prototype._readdir = function (abs, inGlobStar) {
+ var entries
+
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return null
+
+ if (Array.isArray(c))
+ return c
+ }
+
+ try {
+ return this._readdirEntries(abs, fs.readdirSync(abs))
+ } catch (er) {
+ this._readdirError(abs, er)
+ return null
+ }
+}
+
+GlobSync.prototype._readdirEntries = function (abs, entries) {
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+
+ // mark and cache dir-ness
+ return entries
+}
+
+GlobSync.prototype._readdirError = function (f, er) {
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) throw er
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+}
+
+GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
+
+ var entries = this._readdir(abs, inGlobStar)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false)
+
+ var len = entries.length
+ var isSym = this.symlinks[abs]
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true)
+ }
+}
+
+GlobSync.prototype._processSimple = function (prefix, index) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var exists = this._stat(prefix)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this.matches[index][prefix] = true
+}
+
+// Returns either 'DIR', 'FILE', or false
+GlobSync.prototype._stat = function (f) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return false
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return c
+
+ if (needDir && c === 'FILE')
+ return false
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (!stat) {
+ var lstat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ return false
+ }
+
+ if (lstat.isSymbolicLink()) {
+ try {
+ stat = fs.statSync(abs)
+ } catch (er) {
+ stat = lstat
+ }
+ } else {
+ stat = lstat
+ }
+ }
+
+ this.statCache[abs] = stat
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return false
+
+ return c
+}
+
+GlobSync.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+GlobSync.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/package.json b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/package.json
new file mode 100644
index 0000000..584797b
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "rimraf",
+ "version": "2.3.2",
+ "main": "rimraf.js",
+ "description": "A deep deletion module for node (like `rm -rf`)",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": {
+ "type": "MIT",
+ "url": "https://github.com/isaacs/rimraf/raw/master/LICENSE"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/rimraf.git"
+ },
+ "scripts": {
+ "test": "cd test && bash run.sh"
+ },
+ "bin": {
+ "rimraf": "./bin.js"
+ },
+ "dependencies": {
+ "glob": "^4.4.2"
+ },
+ "files": [
+ "bin.js",
+ "rimraf.js",
+ "LICENSE",
+ "README.md"
+ ],
+ "gitHead": "9d5ab4a8b6986ec909af04f6d91315e98f5893e8",
+ "bugs": {
+ "url": "https://github.com/isaacs/rimraf/issues"
+ },
+ "homepage": "https://github.com/isaacs/rimraf",
+ "_id": "rimraf@2.3.2",
+ "_shasum": "7304bd9275c401b89103b106b3531c1ef0c02fe9",
+ "_from": "rimraf@^2.2.8",
+ "_npmVersion": "2.7.0",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "7304bd9275c401b89103b106b3531c1ef0c02fe9",
+ "tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/rimraf.js b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/rimraf.js
new file mode 100644
index 0000000..c189d54
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/node_modules/rimraf/rimraf.js
@@ -0,0 +1,329 @@
+module.exports = rimraf
+rimraf.sync = rimrafSync
+
+var assert = require("assert")
+var path = require("path")
+var fs = require("fs")
+var glob = require("glob")
+
+var globOpts = {
+ nosort: true,
+ nocomment: true,
+ nonegate: true,
+ silent: true
+}
+
+// for EMFILE handling
+var timeout = 0
+
+var isWindows = (process.platform === "win32")
+
+function defaults (options) {
+ var methods = [
+ 'unlink',
+ 'chmod',
+ 'stat',
+ 'lstat',
+ 'rmdir',
+ 'readdir'
+ ]
+ methods.forEach(function(m) {
+ options[m] = options[m] || fs[m]
+ m = m + 'Sync'
+ options[m] = options[m] || fs[m]
+ })
+
+ options.maxBusyTries = options.maxBusyTries || 3
+ options.emfileWait = options.emfileWait || 1000
+}
+
+function rimraf (p, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = {}
+ }
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
+
+ defaults(options)
+
+ if (!cb) throw new Error("No callback passed to rimraf()")
+
+ var busyTries = 0
+ var errState = null
+ var n = 0
+
+ if (!glob.hasMagic(p))
+ return afterGlob(null, [p])
+
+ fs.lstat(p, function (er, stat) {
+ if (!er)
+ return afterGlob(null, [p])
+
+ glob(p, globOpts, afterGlob)
+ })
+
+ function next (er) {
+ errState = errState || er
+ if (--n === 0)
+ cb(errState)
+ }
+
+ function afterGlob (er, results) {
+ if (er)
+ return cb(er)
+
+ n = results.length
+ if (n === 0)
+ return cb()
+
+ results.forEach(function (p) {
+ rimraf_(p, options, function CB (er) {
+ if (er) {
+ if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY") &&
+ busyTries < options.maxBusyTries) {
+ busyTries ++
+ var time = busyTries * 100
+ // try again, with the same exact callback as this one.
+ return setTimeout(function () {
+ rimraf_(p, options, CB)
+ }, time)
+ }
+
+ // this one won't happen if graceful-fs is used.
+ if (er.code === "EMFILE" && timeout < options.emfileWait) {
+ return setTimeout(function () {
+ rimraf_(p, options, CB)
+ }, timeout ++)
+ }
+
+ // already gone
+ if (er.code === "ENOENT") er = null
+ }
+
+ timeout = 0
+ next(er)
+ })
+ })
+ }
+}
+
+// Two possible strategies.
+// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
+// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
+//
+// Both result in an extra syscall when you guess wrong. However, there
+// are likely far more normal files in the world than directories. This
+// is based on the assumption that a the average number of files per
+// directory is >= 1.
+//
+// If anyone ever complains about this, then I guess the strategy could
+// be made configurable somehow. But until then, YAGNI.
+function rimraf_ (p, options, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
+
+ // sunos lets the root user unlink directories, which is... weird.
+ // so we have to lstat here and make sure it's not a dir.
+ options.lstat(p, function (er, st) {
+ if (er && er.code === "ENOENT")
+ return cb(null)
+
+ if (st && st.isDirectory())
+ return rmdir(p, options, er, cb)
+
+ options.unlink(p, function (er) {
+ if (er) {
+ if (er.code === "ENOENT")
+ return cb(null)
+ if (er.code === "EPERM")
+ return (isWindows)
+ ? fixWinEPERM(p, options, er, cb)
+ : rmdir(p, options, er, cb)
+ if (er.code === "EISDIR")
+ return rmdir(p, options, er, cb)
+ }
+ return cb(er)
+ })
+ })
+}
+
+function fixWinEPERM (p, options, er, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
+ if (er)
+ assert(er instanceof Error)
+
+ options.chmod(p, 666, function (er2) {
+ if (er2)
+ cb(er2.code === "ENOENT" ? null : er)
+ else
+ options.stat(p, function(er3, stats) {
+ if (er3)
+ cb(er3.code === "ENOENT" ? null : er)
+ else if (stats.isDirectory())
+ rmdir(p, options, er, cb)
+ else
+ options.unlink(p, cb)
+ })
+ })
+}
+
+function fixWinEPERMSync (p, options, er) {
+ assert(p)
+ assert(options)
+ if (er)
+ assert(er instanceof Error)
+
+ try {
+ options.chmodSync(p, 666)
+ } catch (er2) {
+ if (er2.code === "ENOENT")
+ return
+ else
+ throw er
+ }
+
+ try {
+ var stats = options.statSync(p)
+ } catch (er3) {
+ if (er3.code === "ENOENT")
+ return
+ else
+ throw er
+ }
+
+ if (stats.isDirectory())
+ rmdirSync(p, options, er)
+ else
+ options.unlinkSync(p)
+}
+
+function rmdir (p, options, originalEr, cb) {
+ assert(p)
+ assert(options)
+ if (originalEr)
+ assert(originalEr instanceof Error)
+ assert(typeof cb === 'function')
+
+ // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
+ // if we guessed wrong, and it's not a directory, then
+ // raise the original error.
+ options.rmdir(p, function (er) {
+ if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
+ rmkids(p, options, cb)
+ else if (er && er.code === "ENOTDIR")
+ cb(originalEr)
+ else
+ cb(er)
+ })
+}
+
+function rmkids(p, options, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
+
+ options.readdir(p, function (er, files) {
+ if (er)
+ return cb(er)
+ var n = files.length
+ if (n === 0)
+ return options.rmdir(p, cb)
+ var errState
+ files.forEach(function (f) {
+ rimraf(path.join(p, f), options, function (er) {
+ if (errState)
+ return
+ if (er)
+ return cb(errState = er)
+ if (--n === 0)
+ options.rmdir(p, cb)
+ })
+ })
+ })
+}
+
+// this looks simpler, and is strictly *faster*, but will
+// tie up the JavaScript thread and fail on excessively
+// deep directory trees.
+function rimrafSync (p, options) {
+ options = options || {}
+ defaults(options)
+
+ assert(p)
+ assert(options)
+
+ var results
+
+ if (!glob.hasMagic(p)) {
+ results = [p]
+ } else {
+ try {
+ fs.lstatSync(p)
+ results = [p]
+ } catch (er) {
+ results = glob.sync(p, globOpts)
+ }
+ }
+
+ if (!results.length)
+ return
+
+ for (var i = 0; i < results.length; i++) {
+ var p = results[i]
+
+ try {
+ var st = options.lstatSync(p)
+ } catch (er) {
+ if (er.code === "ENOENT")
+ return
+ }
+
+ try {
+ // sunos lets the root user unlink directories, which is... weird.
+ if (st && st.isDirectory())
+ rmdirSync(p, options, null)
+ else
+ options.unlinkSync(p)
+ } catch (er) {
+ if (er.code === "ENOENT")
+ return
+ if (er.code === "EPERM")
+ return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
+ if (er.code !== "EISDIR")
+ throw er
+ rmdirSync(p, options, er)
+ }
+ }
+}
+
+function rmdirSync (p, options, originalEr) {
+ assert(p)
+ assert(options)
+ if (originalEr)
+ assert(originalEr instanceof Error)
+
+ try {
+ options.rmdirSync(p)
+ } catch (er) {
+ if (er.code === "ENOENT")
+ return
+ if (er.code === "ENOTDIR")
+ throw originalEr
+ if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
+ rmkidsSync(p, options)
+ }
+}
+
+function rmkidsSync (p, options) {
+ assert(p)
+ assert(options)
+ options.readdirSync(p).forEach(function (f) {
+ rimrafSync(path.join(p, f), options)
+ })
+ options.rmdirSync(p, options)
+}
diff --git a/node_modules/csswring/node_modules/fs-extra/package.json b/node_modules/csswring/node_modules/fs-extra/package.json
new file mode 100644
index 0000000..5e5afc1
--- /dev/null
+++ b/node_modules/csswring/node_modules/fs-extra/package.json
@@ -0,0 +1,88 @@
+{
+ "name": "fs-extra",
+ "version": "0.16.5",
+ "description": "fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as mkdir -p, cp -r, and rm -rf.",
+ "homepage": "https://github.com/jprichardson/node-fs-extra",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jprichardson/node-fs-extra"
+ },
+ "keywords": [
+ "fs",
+ "file",
+ "file system",
+ "copy",
+ "directory",
+ "extra",
+ "mkdirp",
+ "mkdir",
+ "mkdirs",
+ "recursive",
+ "json",
+ "read",
+ "write",
+ "extra",
+ "delete",
+ "remove",
+ "touch",
+ "create",
+ "text",
+ "output",
+ "move"
+ ],
+ "author": {
+ "name": "JP Richardson",
+ "email": "jprichardson@gmail.com"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://github.com/jprichardson/node-fs-extra/raw/master/LICENSE"
+ }
+ ],
+ "dependencies": {
+ "graceful-fs": "^3.0.5",
+ "jsonfile": "^2.0.0",
+ "rimraf": "^2.2.8"
+ },
+ "devDependencies": {
+ "coveralls": "^2.11.2",
+ "istanbul": "^0.3.5",
+ "mocha": "^2.1.0",
+ "read-dir-files": "^0.1.1",
+ "secure-random": "^1.1.1",
+ "testutil": "^0.7.0"
+ },
+ "main": "./lib/index",
+ "scripts": {
+ "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
+ "coveralls": "npm run coverage && coveralls < coverage/lcov.info",
+ "test": "mocha test"
+ },
+ "gitHead": "c062045ae9c7f12865e63dfca96d1d2f6c61de18",
+ "bugs": {
+ "url": "https://github.com/jprichardson/node-fs-extra/issues"
+ },
+ "_id": "fs-extra@0.16.5",
+ "_shasum": "1ad661fa6c86c9608cd1b49efc6fce834939a750",
+ "_from": "fs-extra@^0.16.0",
+ "_npmVersion": "2.3.0",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "jprichardson",
+ "email": "jprichardson@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jprichardson",
+ "email": "jprichardson@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "1ad661fa6c86c9608cd1b49efc6fce834939a750",
+ "tarball": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.16.5.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.16.5.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/minimist/.travis.yml b/node_modules/csswring/node_modules/minimist/.travis.yml
new file mode 100644
index 0000000..cc4dba2
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
diff --git a/node_modules/csswring/node_modules/minimist/LICENSE b/node_modules/csswring/node_modules/minimist/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+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/node_modules/csswring/node_modules/minimist/example/parse.js b/node_modules/csswring/node_modules/minimist/example/parse.js
new file mode 100644
index 0000000..abff3e8
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/example/parse.js
@@ -0,0 +1,2 @@
+var argv = require('../')(process.argv.slice(2));
+console.dir(argv);
diff --git a/node_modules/csswring/node_modules/minimist/index.js b/node_modules/csswring/node_modules/minimist/index.js
new file mode 100644
index 0000000..185a045
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/index.js
@@ -0,0 +1,219 @@
+module.exports = function (args, opts) {
+ if (!opts) opts = {};
+
+ var flags = { bools : {}, strings : {}, unknownFn: null };
+
+ if (typeof opts['unknown'] === 'function') {
+ flags.unknownFn = opts['unknown'];
+ }
+
+ if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {
+ flags.allBools = true;
+ } else {
+ [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
+ flags.bools[key] = true;
+ });
+ }
+
+ var aliases = {};
+ Object.keys(opts.alias || {}).forEach(function (key) {
+ aliases[key] = [].concat(opts.alias[key]);
+ aliases[key].forEach(function (x) {
+ aliases[x] = [key].concat(aliases[key].filter(function (y) {
+ return x !== y;
+ }));
+ });
+ });
+
+ [].concat(opts.string).filter(Boolean).forEach(function (key) {
+ flags.strings[key] = true;
+ if (aliases[key]) {
+ flags.strings[aliases[key]] = true;
+ }
+ });
+
+ var defaults = opts['default'] || {};
+
+ var argv = { _ : [] };
+ Object.keys(flags.bools).forEach(function (key) {
+ setArg(key, defaults[key] === undefined ? false : defaults[key]);
+ });
+
+ var notFlags = [];
+
+ if (args.indexOf('--') !== -1) {
+ notFlags = args.slice(args.indexOf('--')+1);
+ args = args.slice(0, args.indexOf('--'));
+ }
+
+ function argDefined(key, arg) {
+ return (flags.allBools && /^--[^=]+$/.test(arg)) ||
+ flags.strings[key] || flags.bools[key] || aliases[key];
+ }
+
+ function setArg (key, val, arg) {
+ if (arg && flags.unknownFn && !argDefined(key, arg)) {
+ if (flags.unknownFn(arg) === false) return;
+ }
+
+ var value = !flags.strings[key] && isNumber(val)
+ ? Number(val) : val
+ ;
+ setKey(argv, key.split('.'), value);
+
+ (aliases[key] || []).forEach(function (x) {
+ setKey(argv, x.split('.'), value);
+ });
+ }
+
+ function setKey (obj, keys, value) {
+ var o = obj;
+ keys.slice(0,-1).forEach(function (key) {
+ if (o[key] === undefined) o[key] = {};
+ o = o[key];
+ });
+
+ var key = keys[keys.length - 1];
+ if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {
+ o[key] = value;
+ }
+ else if (Array.isArray(o[key])) {
+ o[key].push(value);
+ }
+ else {
+ o[key] = [ o[key], value ];
+ }
+ }
+
+ for (var i = 0; i < args.length; i++) {
+ var arg = args[i];
+
+ if (/^--.+=/.test(arg)) {
+ // Using [\s\S] instead of . because js doesn't support the
+ // 'dotall' regex modifier. See:
+ // http://stackoverflow.com/a/1068308/13216
+ var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
+ setArg(m[1], m[2], arg);
+ }
+ else if (/^--no-.+/.test(arg)) {
+ var key = arg.match(/^--no-(.+)/)[1];
+ setArg(key, false, arg);
+ }
+ else if (/^--.+/.test(arg)) {
+ var key = arg.match(/^--(.+)/)[1];
+ var next = args[i + 1];
+ if (next !== undefined && !/^-/.test(next)
+ && !flags.bools[key]
+ && !flags.allBools
+ && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+ setArg(key, next, arg);
+ i++;
+ }
+ else if (/^(true|false)$/.test(next)) {
+ setArg(key, next === 'true', arg);
+ i++;
+ }
+ else {
+ setArg(key, flags.strings[key] ? '' : true, arg);
+ }
+ }
+ else if (/^-[^-]+/.test(arg)) {
+ var letters = arg.slice(1,-1).split('');
+
+ var broken = false;
+ for (var j = 0; j < letters.length; j++) {
+ var next = arg.slice(j+2);
+
+ if (next === '-') {
+ setArg(letters[j], next, arg)
+ continue;
+ }
+
+ if (/[A-Za-z]/.test(letters[j])
+ && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
+ setArg(letters[j], next, arg);
+ broken = true;
+ break;
+ }
+
+ if (letters[j+1] && letters[j+1].match(/\W/)) {
+ setArg(letters[j], arg.slice(j+2), arg);
+ broken = true;
+ break;
+ }
+ else {
+ setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);
+ }
+ }
+
+ var key = arg.slice(-1)[0];
+ if (!broken && key !== '-') {
+ if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
+ && !flags.bools[key]
+ && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+ setArg(key, args[i+1], arg);
+ i++;
+ }
+ else if (args[i+1] && /true|false/.test(args[i+1])) {
+ setArg(key, args[i+1] === 'true', arg);
+ i++;
+ }
+ else {
+ setArg(key, flags.strings[key] ? '' : true, arg);
+ }
+ }
+ }
+ else {
+ if (!flags.unknownFn || flags.unknownFn(arg) !== false) {
+ argv._.push(
+ flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
+ );
+ }
+ if (opts.stopEarly) {
+ argv._.push.apply(argv._, args.slice(i + 1));
+ break;
+ }
+ }
+ }
+
+ Object.keys(defaults).forEach(function (key) {
+ if (!hasKey(argv, key.split('.'))) {
+ setKey(argv, key.split('.'), defaults[key]);
+
+ (aliases[key] || []).forEach(function (x) {
+ setKey(argv, x.split('.'), defaults[key]);
+ });
+ }
+ });
+
+ if (opts['--']) {
+ argv['--'] = new Array();
+ notFlags.forEach(function(key) {
+ argv['--'].push(key);
+ });
+ }
+ else {
+ notFlags.forEach(function(key) {
+ argv._.push(key);
+ });
+ }
+
+ return argv;
+};
+
+function hasKey (obj, keys) {
+ var o = obj;
+ keys.slice(0,-1).forEach(function (key) {
+ o = (o[key] || {});
+ });
+
+ var key = keys[keys.length - 1];
+ return key in o;
+}
+
+function isNumber (x) {
+ if (typeof x === 'number') return true;
+ if (/^0x[0-9a-f]+$/i.test(x)) return true;
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
+}
+
diff --git a/node_modules/csswring/node_modules/minimist/package.json b/node_modules/csswring/node_modules/minimist/package.json
new file mode 100644
index 0000000..06c8d74
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/package.json
@@ -0,0 +1,71 @@
+{
+ "name": "minimist",
+ "version": "1.1.1",
+ "description": "parse argument options",
+ "main": "index.js",
+ "devDependencies": {
+ "covert": "^1.0.0",
+ "tap": "~0.4.0",
+ "tape": "^3.5.0"
+ },
+ "scripts": {
+ "test": "tap test/*.js",
+ "coverage": "covert test/*.js"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/6..latest",
+ "ff/5",
+ "firefox/latest",
+ "chrome/10",
+ "chrome/latest",
+ "safari/5.1",
+ "safari/latest",
+ "opera/12"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/minimist.git"
+ },
+ "homepage": "https://github.com/substack/minimist",
+ "keywords": [
+ "argv",
+ "getopt",
+ "parser",
+ "optimist"
+ ],
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "license": "MIT",
+ "gitHead": "bc9d1c466541eb52ae85e6682a4b809f4c32fe1f",
+ "bugs": {
+ "url": "https://github.com/substack/minimist/issues"
+ },
+ "_id": "minimist@1.1.1",
+ "_shasum": "1bc2bc71658cdca5712475684363615b0b4f695b",
+ "_from": "minimist@^1.1.0",
+ "_npmVersion": "2.3.0",
+ "_nodeVersion": "0.12.0",
+ "_npmUser": {
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "dist": {
+ "shasum": "1bc2bc71658cdca5712475684363615b0b4f695b",
+ "tarball": "http://registry.npmjs.org/minimist/-/minimist-1.1.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/minimist/readme.markdown b/node_modules/csswring/node_modules/minimist/readme.markdown
new file mode 100644
index 0000000..30a74cf
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/readme.markdown
@@ -0,0 +1,91 @@
+# minimist
+
+parse argument options
+
+This module is the guts of optimist's argument parser without all the
+fanciful decoration.
+
+[](http://ci.testling.com/substack/minimist)
+
+[](http://travis-ci.org/substack/minimist)
+
+# example
+
+``` js
+var argv = require('minimist')(process.argv.slice(2));
+console.dir(argv);
+```
+
+```
+$ node example/parse.js -a beep -b boop
+{ _: [], a: 'beep', b: 'boop' }
+```
+
+```
+$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
+{ _: [ 'foo', 'bar', 'baz' ],
+ x: 3,
+ y: 4,
+ n: 5,
+ a: true,
+ b: true,
+ c: true,
+ beep: 'boop' }
+```
+
+# methods
+
+``` js
+var parseArgs = require('minimist')
+```
+
+## var argv = parseArgs(args, opts={})
+
+Return an argument object `argv` populated with the array arguments from `args`.
+
+`argv._` contains all the arguments that didn't have an option associated with
+them.
+
+Numeric-looking arguments will be returned as numbers unless `opts.string` or
+`opts.boolean` is set for that argument name.
+
+Any arguments after `'--'` will not be parsed and will end up in `argv._`.
+
+options can be:
+
+* `opts.string` - a string or array of strings argument names to always treat as
+strings
+* `opts.boolean` - a boolean, string or array of strings to always treat as
+booleans. if `true` will treat all double hyphenated arguments without equal signs
+as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`)
+* `opts.alias` - an object mapping string names to strings or arrays of string
+argument names to use as aliases
+* `opts.default` - an object mapping string argument names to default values
+* `opts.stopEarly` - when true, populate `argv._` with everything after the
+first non-option
+* `opts['--']` - when true, populate `argv._` with everything before the `--`
+and `argv['--']` with everything after the `--`. Here's an example:
+* `opts.unknown` - a function which is invoked with a command line parameter not
+defined in the `opts` configuration object. If the function returns `false`, the
+unknown option is not added to `argv`.
+
+```
+> require('./')('one two three -- four five --six'.split(' '), { '--': true })
+{ _: [ 'one', 'two', 'three' ],
+ '--': [ 'four', 'five', '--six' ] }
+```
+
+Note that with `opts['--']` set, parsing for arguments still stops after the
+`--`.
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install minimist
+```
+
+# license
+
+MIT
diff --git a/node_modules/csswring/node_modules/minimist/test/all_bool.js b/node_modules/csswring/node_modules/minimist/test/all_bool.js
new file mode 100644
index 0000000..ac83548
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/all_bool.js
@@ -0,0 +1,32 @@
+var parse = require('../');
+var test = require('tape');
+
+test('flag boolean true (default all --args to boolean)', function (t) {
+ var argv = parse(['moo', '--honk', 'cow'], {
+ boolean: true
+ });
+
+ t.deepEqual(argv, {
+ honk: true,
+ _: ['moo', 'cow']
+ });
+
+ t.deepEqual(typeof argv.honk, 'boolean');
+ t.end();
+});
+
+test('flag boolean true only affects double hyphen arguments without equals signs', function (t) {
+ var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], {
+ boolean: true
+ });
+
+ t.deepEqual(argv, {
+ honk: true,
+ tacos: 'good',
+ p: 55,
+ _: ['moo', 'cow']
+ });
+
+ t.deepEqual(typeof argv.honk, 'boolean');
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/bool.js b/node_modules/csswring/node_modules/minimist/test/bool.js
new file mode 100644
index 0000000..749e083
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/bool.js
@@ -0,0 +1,119 @@
+var parse = require('../');
+var test = require('tape');
+
+test('flag boolean default false', function (t) {
+ var argv = parse(['moo'], {
+ boolean: ['t', 'verbose'],
+ default: { verbose: false, t: false }
+ });
+
+ t.deepEqual(argv, {
+ verbose: false,
+ t: false,
+ _: ['moo']
+ });
+
+ t.deepEqual(typeof argv.verbose, 'boolean');
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+
+});
+
+test('boolean groups', function (t) {
+ var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], {
+ boolean: ['x','y','z']
+ });
+
+ t.deepEqual(argv, {
+ x : true,
+ y : false,
+ z : true,
+ _ : [ 'one', 'two', 'three' ]
+ });
+
+ t.deepEqual(typeof argv.x, 'boolean');
+ t.deepEqual(typeof argv.y, 'boolean');
+ t.deepEqual(typeof argv.z, 'boolean');
+ t.end();
+});
+test('boolean and alias with chainable api', function (t) {
+ var aliased = [ '-h', 'derp' ];
+ var regular = [ '--herp', 'derp' ];
+ var opts = {
+ herp: { alias: 'h', boolean: true }
+ };
+ var aliasedArgv = parse(aliased, {
+ boolean: 'herp',
+ alias: { h: 'herp' }
+ });
+ var propertyArgv = parse(regular, {
+ boolean: 'herp',
+ alias: { h: 'herp' }
+ });
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ 'derp' ]
+ };
+
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+test('boolean and alias with options hash', function (t) {
+ var aliased = [ '-h', 'derp' ];
+ var regular = [ '--herp', 'derp' ];
+ var opts = {
+ alias: { 'h': 'herp' },
+ boolean: 'herp'
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ 'derp' ]
+ };
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+test('boolean and alias using explicit true', function (t) {
+ var aliased = [ '-h', 'true' ];
+ var regular = [ '--herp', 'true' ];
+ var opts = {
+ alias: { h: 'herp' },
+ boolean: 'h'
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ ]
+ };
+
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+// regression, see https://github.com/substack/node-optimist/issues/71
+test('boolean and --x=true', function(t) {
+ var parsed = parse(['--boool', '--other=true'], {
+ boolean: 'boool'
+ });
+
+ t.same(parsed.boool, true);
+ t.same(parsed.other, 'true');
+
+ parsed = parse(['--boool', '--other=false'], {
+ boolean: 'boool'
+ });
+
+ t.same(parsed.boool, true);
+ t.same(parsed.other, 'false');
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/dash.js b/node_modules/csswring/node_modules/minimist/test/dash.js
new file mode 100644
index 0000000..5a4fa5b
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/dash.js
@@ -0,0 +1,31 @@
+var parse = require('../');
+var test = require('tape');
+
+test('-', function (t) {
+ t.plan(5);
+ t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] });
+ t.deepEqual(parse([ '-' ]), { _: [ '-' ] });
+ t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] });
+ t.deepEqual(
+ parse([ '-b', '-' ], { boolean: 'b' }),
+ { b: true, _: [ '-' ] }
+ );
+ t.deepEqual(
+ parse([ '-s', '-' ], { string: 's' }),
+ { s: '-', _: [] }
+ );
+});
+
+test('-a -- b', function (t) {
+ t.plan(3);
+ t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+ t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+ t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+});
+
+test('move arguments after the -- into their own `--` array', function(t) {
+ t.plan(1);
+ t.deepEqual(
+ parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }),
+ { name: 'John', _: [ 'before' ], '--': [ 'after' ] });
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/default_bool.js b/node_modules/csswring/node_modules/minimist/test/default_bool.js
new file mode 100644
index 0000000..780a311
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/default_bool.js
@@ -0,0 +1,35 @@
+var test = require('tape');
+var parse = require('../');
+
+test('boolean default true', function (t) {
+ var argv = parse([], {
+ boolean: 'sometrue',
+ default: { sometrue: true }
+ });
+ t.equal(argv.sometrue, true);
+ t.end();
+});
+
+test('boolean default false', function (t) {
+ var argv = parse([], {
+ boolean: 'somefalse',
+ default: { somefalse: false }
+ });
+ t.equal(argv.somefalse, false);
+ t.end();
+});
+
+test('boolean default to null', function (t) {
+ var argv = parse([], {
+ boolean: 'maybe',
+ default: { maybe: null }
+ });
+ t.equal(argv.maybe, null);
+ var argv = parse(['--maybe'], {
+ boolean: 'maybe',
+ default: { maybe: null }
+ });
+ t.equal(argv.maybe, true);
+ t.end();
+
+})
diff --git a/node_modules/csswring/node_modules/minimist/test/dotted.js b/node_modules/csswring/node_modules/minimist/test/dotted.js
new file mode 100644
index 0000000..d8b3e85
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/dotted.js
@@ -0,0 +1,22 @@
+var parse = require('../');
+var test = require('tape');
+
+test('dotted alias', function (t) {
+ var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}});
+ t.equal(argv.a.b, 22);
+ t.equal(argv.aa.bb, 22);
+ t.end();
+});
+
+test('dotted default', function (t) {
+ var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}});
+ t.equal(argv.a.b, 11);
+ t.equal(argv.aa.bb, 11);
+ t.end();
+});
+
+test('dotted default with no alias', function (t) {
+ var argv = parse('', {default: {'a.b': 11}});
+ t.equal(argv.a.b, 11);
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/long.js b/node_modules/csswring/node_modules/minimist/test/long.js
new file mode 100644
index 0000000..5d3a1e0
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/long.js
@@ -0,0 +1,31 @@
+var test = require('tape');
+var parse = require('../');
+
+test('long opts', function (t) {
+ t.deepEqual(
+ parse([ '--bool' ]),
+ { bool : true, _ : [] },
+ 'long boolean'
+ );
+ t.deepEqual(
+ parse([ '--pow', 'xixxle' ]),
+ { pow : 'xixxle', _ : [] },
+ 'long capture sp'
+ );
+ t.deepEqual(
+ parse([ '--pow=xixxle' ]),
+ { pow : 'xixxle', _ : [] },
+ 'long capture eq'
+ );
+ t.deepEqual(
+ parse([ '--host', 'localhost', '--port', '555' ]),
+ { host : 'localhost', port : 555, _ : [] },
+ 'long captures sp'
+ );
+ t.deepEqual(
+ parse([ '--host=localhost', '--port=555' ]),
+ { host : 'localhost', port : 555, _ : [] },
+ 'long captures eq'
+ );
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/num.js b/node_modules/csswring/node_modules/minimist/test/num.js
new file mode 100644
index 0000000..2cc77f4
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/num.js
@@ -0,0 +1,36 @@
+var parse = require('../');
+var test = require('tape');
+
+test('nums', function (t) {
+ var argv = parse([
+ '-x', '1234',
+ '-y', '5.67',
+ '-z', '1e7',
+ '-w', '10f',
+ '--hex', '0xdeadbeef',
+ '789'
+ ]);
+ t.deepEqual(argv, {
+ x : 1234,
+ y : 5.67,
+ z : 1e7,
+ w : '10f',
+ hex : 0xdeadbeef,
+ _ : [ 789 ]
+ });
+ t.deepEqual(typeof argv.x, 'number');
+ t.deepEqual(typeof argv.y, 'number');
+ t.deepEqual(typeof argv.z, 'number');
+ t.deepEqual(typeof argv.w, 'string');
+ t.deepEqual(typeof argv.hex, 'number');
+ t.deepEqual(typeof argv._[0], 'number');
+ t.end();
+});
+
+test('already a number', function (t) {
+ var argv = parse([ '-x', 1234, 789 ]);
+ t.deepEqual(argv, { x : 1234, _ : [ 789 ] });
+ t.deepEqual(typeof argv.x, 'number');
+ t.deepEqual(typeof argv._[0], 'number');
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/parse.js b/node_modules/csswring/node_modules/minimist/test/parse.js
new file mode 100644
index 0000000..7b4a2a1
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/parse.js
@@ -0,0 +1,197 @@
+var parse = require('../');
+var test = require('tape');
+
+test('parse args', function (t) {
+ t.deepEqual(
+ parse([ '--no-moo' ]),
+ { moo : false, _ : [] },
+ 'no'
+ );
+ t.deepEqual(
+ parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]),
+ { v : ['a','b','c'], _ : [] },
+ 'multi'
+ );
+ t.end();
+});
+
+test('comprehensive', function (t) {
+ t.deepEqual(
+ parse([
+ '--name=meowmers', 'bare', '-cats', 'woo',
+ '-h', 'awesome', '--multi=quux',
+ '--key', 'value',
+ '-b', '--bool', '--no-meep', '--multi=baz',
+ '--', '--not-a-flag', 'eek'
+ ]),
+ {
+ c : true,
+ a : true,
+ t : true,
+ s : 'woo',
+ h : 'awesome',
+ b : true,
+ bool : true,
+ key : 'value',
+ multi : [ 'quux', 'baz' ],
+ meep : false,
+ name : 'meowmers',
+ _ : [ 'bare', '--not-a-flag', 'eek' ]
+ }
+ );
+ t.end();
+});
+
+test('flag boolean', function (t) {
+ var argv = parse([ '-t', 'moo' ], { boolean: 't' });
+ t.deepEqual(argv, { t : true, _ : [ 'moo' ] });
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+});
+
+test('flag boolean value', function (t) {
+ var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], {
+ boolean: [ 't', 'verbose' ],
+ default: { verbose: true }
+ });
+
+ t.deepEqual(argv, {
+ verbose: false,
+ t: true,
+ _: ['moo']
+ });
+
+ t.deepEqual(typeof argv.verbose, 'boolean');
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+});
+
+test('newlines in params' , function (t) {
+ var args = parse([ '-s', "X\nX" ])
+ t.deepEqual(args, { _ : [], s : "X\nX" });
+
+ // reproduce in bash:
+ // VALUE="new
+ // line"
+ // node program.js --s="$VALUE"
+ args = parse([ "--s=X\nX" ])
+ t.deepEqual(args, { _ : [], s : "X\nX" });
+ t.end();
+});
+
+test('strings' , function (t) {
+ var s = parse([ '-s', '0001234' ], { string: 's' }).s;
+ t.equal(s, '0001234');
+ t.equal(typeof s, 'string');
+
+ var x = parse([ '-x', '56' ], { string: 'x' }).x;
+ t.equal(x, '56');
+ t.equal(typeof x, 'string');
+ t.end();
+});
+
+test('stringArgs', function (t) {
+ var s = parse([ ' ', ' ' ], { string: '_' })._;
+ t.same(s.length, 2);
+ t.same(typeof s[0], 'string');
+ t.same(s[0], ' ');
+ t.same(typeof s[1], 'string');
+ t.same(s[1], ' ');
+ t.end();
+});
+
+test('empty strings', function(t) {
+ var s = parse([ '-s' ], { string: 's' }).s;
+ t.equal(s, '');
+ t.equal(typeof s, 'string');
+
+ var str = parse([ '--str' ], { string: 'str' }).str;
+ t.equal(str, '');
+ t.equal(typeof str, 'string');
+
+ var letters = parse([ '-art' ], {
+ string: [ 'a', 't' ]
+ });
+
+ t.equal(letters.a, '');
+ t.equal(letters.r, true);
+ t.equal(letters.t, '');
+
+ t.end();
+});
+
+
+test('string and alias', function(t) {
+ var x = parse([ '--str', '000123' ], {
+ string: 's',
+ alias: { s: 'str' }
+ });
+
+ t.equal(x.str, '000123');
+ t.equal(typeof x.str, 'string');
+ t.equal(x.s, '000123');
+ t.equal(typeof x.s, 'string');
+
+ var y = parse([ '-s', '000123' ], {
+ string: 'str',
+ alias: { str: 's' }
+ });
+
+ t.equal(y.str, '000123');
+ t.equal(typeof y.str, 'string');
+ t.equal(y.s, '000123');
+ t.equal(typeof y.s, 'string');
+ t.end();
+});
+
+test('slashBreak', function (t) {
+ t.same(
+ parse([ '-I/foo/bar/baz' ]),
+ { I : '/foo/bar/baz', _ : [] }
+ );
+ t.same(
+ parse([ '-xyz/foo/bar/baz' ]),
+ { x : true, y : true, z : '/foo/bar/baz', _ : [] }
+ );
+ t.end();
+});
+
+test('alias', function (t) {
+ var argv = parse([ '-f', '11', '--zoom', '55' ], {
+ alias: { z: 'zoom' }
+ });
+ t.equal(argv.zoom, 55);
+ t.equal(argv.z, argv.zoom);
+ t.equal(argv.f, 11);
+ t.end();
+});
+
+test('multiAlias', function (t) {
+ var argv = parse([ '-f', '11', '--zoom', '55' ], {
+ alias: { z: [ 'zm', 'zoom' ] }
+ });
+ t.equal(argv.zoom, 55);
+ t.equal(argv.z, argv.zoom);
+ t.equal(argv.z, argv.zm);
+ t.equal(argv.f, 11);
+ t.end();
+});
+
+test('nested dotted objects', function (t) {
+ var argv = parse([
+ '--foo.bar', '3', '--foo.baz', '4',
+ '--foo.quux.quibble', '5', '--foo.quux.o_O',
+ '--beep.boop'
+ ]);
+
+ t.same(argv.foo, {
+ bar : 3,
+ baz : 4,
+ quux : {
+ quibble : 5,
+ o_O : true
+ }
+ });
+ t.same(argv.beep, { boop : true });
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/parse_modified.js b/node_modules/csswring/node_modules/minimist/test/parse_modified.js
new file mode 100644
index 0000000..ab620dc
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/parse_modified.js
@@ -0,0 +1,9 @@
+var parse = require('../');
+var test = require('tape');
+
+test('parse with modifier functions' , function (t) {
+ t.plan(1);
+
+ var argv = parse([ '-b', '123' ], { boolean: 'b' });
+ t.deepEqual(argv, { b: true, _: [123] });
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/short.js b/node_modules/csswring/node_modules/minimist/test/short.js
new file mode 100644
index 0000000..d513a1c
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/short.js
@@ -0,0 +1,67 @@
+var parse = require('../');
+var test = require('tape');
+
+test('numeric short args', function (t) {
+ t.plan(2);
+ t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] });
+ t.deepEqual(
+ parse([ '-123', '456' ]),
+ { 1: true, 2: true, 3: 456, _: [] }
+ );
+});
+
+test('short', function (t) {
+ t.deepEqual(
+ parse([ '-b' ]),
+ { b : true, _ : [] },
+ 'short boolean'
+ );
+ t.deepEqual(
+ parse([ 'foo', 'bar', 'baz' ]),
+ { _ : [ 'foo', 'bar', 'baz' ] },
+ 'bare'
+ );
+ t.deepEqual(
+ parse([ '-cats' ]),
+ { c : true, a : true, t : true, s : true, _ : [] },
+ 'group'
+ );
+ t.deepEqual(
+ parse([ '-cats', 'meow' ]),
+ { c : true, a : true, t : true, s : 'meow', _ : [] },
+ 'short group next'
+ );
+ t.deepEqual(
+ parse([ '-h', 'localhost' ]),
+ { h : 'localhost', _ : [] },
+ 'short capture'
+ );
+ t.deepEqual(
+ parse([ '-h', 'localhost', '-p', '555' ]),
+ { h : 'localhost', p : 555, _ : [] },
+ 'short captures'
+ );
+ t.end();
+});
+
+test('mixed short bool and capture', function (t) {
+ t.same(
+ parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
+ {
+ f : true, p : 555, h : 'localhost',
+ _ : [ 'script.js' ]
+ }
+ );
+ t.end();
+});
+
+test('short and long', function (t) {
+ t.deepEqual(
+ parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
+ {
+ f : true, p : 555, h : 'localhost',
+ _ : [ 'script.js' ]
+ }
+ );
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/stop_early.js b/node_modules/csswring/node_modules/minimist/test/stop_early.js
new file mode 100644
index 0000000..bdf9fbc
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/stop_early.js
@@ -0,0 +1,15 @@
+var parse = require('../');
+var test = require('tape');
+
+test('stops parsing on the first non-option when stopEarly is set', function (t) {
+ var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], {
+ stopEarly: true
+ });
+
+ t.deepEqual(argv, {
+ aaa: 'bbb',
+ _: ['ccc', '--ddd']
+ });
+
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/unknown.js b/node_modules/csswring/node_modules/minimist/test/unknown.js
new file mode 100644
index 0000000..462a36b
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/unknown.js
@@ -0,0 +1,102 @@
+var parse = require('../');
+var test = require('tape');
+
+test('boolean and alias is not unknown', function (t) {
+ var unknown = [];
+ function unknownFn(arg) {
+ unknown.push(arg);
+ return false;
+ }
+ var aliased = [ '-h', 'true', '--derp', 'true' ];
+ var regular = [ '--herp', 'true', '-d', 'true' ];
+ var opts = {
+ alias: { h: 'herp' },
+ boolean: 'h',
+ unknown: unknownFn
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+
+ t.same(unknown, ['--derp', '-d']);
+ t.end();
+});
+
+test('flag boolean true any double hyphen argument is not unknown', function (t) {
+ var unknown = [];
+ function unknownFn(arg) {
+ unknown.push(arg);
+ return false;
+ }
+ var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], {
+ boolean: true,
+ unknown: unknownFn
+ });
+ t.same(unknown, ['--tacos=good', 'cow', '-p']);
+ t.same(argv, {
+ honk: true,
+ _: []
+ });
+ t.end();
+});
+
+test('string and alias is not unknown', function (t) {
+ var unknown = [];
+ function unknownFn(arg) {
+ unknown.push(arg);
+ return false;
+ }
+ var aliased = [ '-h', 'hello', '--derp', 'goodbye' ];
+ var regular = [ '--herp', 'hello', '-d', 'moon' ];
+ var opts = {
+ alias: { h: 'herp' },
+ string: 'h',
+ unknown: unknownFn
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+
+ t.same(unknown, ['--derp', '-d']);
+ t.end();
+});
+
+test('default and alias is not unknown', function (t) {
+ var unknown = [];
+ function unknownFn(arg) {
+ unknown.push(arg);
+ return false;
+ }
+ var aliased = [ '-h', 'hello' ];
+ var regular = [ '--herp', 'hello' ];
+ var opts = {
+ default: { 'h': 'bar' },
+ alias: { 'h': 'herp' },
+ unknown: unknownFn
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+
+ t.same(unknown, []);
+ t.end();
+ unknownFn(); // exercise fn for 100% coverage
+});
+
+test('value following -- is not unknown', function (t) {
+ var unknown = [];
+ function unknownFn(arg) {
+ unknown.push(arg);
+ return false;
+ }
+ var aliased = [ '--bad', '--', 'good', 'arg' ];
+ var opts = {
+ '--': true,
+ unknown: unknownFn
+ };
+ var argv = parse(aliased, opts);
+
+ t.same(unknown, ['--bad']);
+ t.same(argv, {
+ '--': ['good', 'arg'],
+ '_': []
+ })
+ t.end();
+});
diff --git a/node_modules/csswring/node_modules/minimist/test/whitespace.js b/node_modules/csswring/node_modules/minimist/test/whitespace.js
new file mode 100644
index 0000000..8a52a58
--- /dev/null
+++ b/node_modules/csswring/node_modules/minimist/test/whitespace.js
@@ -0,0 +1,8 @@
+var parse = require('../');
+var test = require('tape');
+
+test('whitespace should be whitespace' , function (t) {
+ t.plan(1);
+ var x = parse([ '-x', '\t' ]).x;
+ t.equal(x, '\t');
+});
diff --git a/node_modules/csswring/node_modules/onecolor/README.md b/node_modules/csswring/node_modules/onecolor/README.md
new file mode 100644
index 0000000..a2a6ee1
--- /dev/null
+++ b/node_modules/csswring/node_modules/onecolor/README.md
@@ -0,0 +1,313 @@
+one.color
+=========
+
+JavaScript color calculation toolkit for node.js and the browser.
+
+Features:
+* RGB, HSV, HSL, and CMYK colorspace support (experimental implementations of LAB and XYZ)
+* Legal values for all channels are 0..1
+* Instances are immutable -- a new object is created for each manipulation
+* All internal calculations are done using floating point, so very little precision is lost due to rounding errors when converting between colorspaces
+* Alpha channel support
+* Extensible architecture -- implement your own colorspaces easily
+* Chainable color manipulation
+* Seamless conversion between colorspaces
+* Outputs as hex, `rgb(...)`, `rgba(...)` or `hsv(...)`
+
+Module support:
+* CommonJS / Node
+* AMD / RequireJS
+* jQuery (installs itself on $.color)
+* Vanilla JS (installs itself on one.color)
+
+Package managers:
+* npm: `npm install onecolor`
+* bower: `bower install color`
+
+WARNING IE USERS:
+This library uses some modern ecmascript methods that aren't available in IE versions below IE9.
+To keep the core library small, these methods aren't polyfilled in the library itself.
+If you want IE support for older IE versions, please include one-color-ieshim.js before the color library. This is only needed if you don't already have a library installed that polyfills `Array.prototype.map`and `Array.prototype.forEach`.
+
+Usage
+-----
+
+In the browser (change one-color.js to one-color-all.js to gain
+named color support):
+
+```html
+
+
+```
+
+In node.js (after `npm install onecolor`):
+
+```javascript
+var color = require('onecolor');
+console.warn(color('rgba(100%, 0%, 0%, .5)').alpha(.4).cssa()); // 'rgba(255,0,0,0.4)'
+```
+
+`one.color` is the parser. All of the above return color instances in
+the relevant color space with the channel values (0..1) as instance
+variables:
+
+```javascript
+var myColor = one.color('#a9d91d');
+myColor instanceof one.color.RGB; // true
+myColor.red() // 0.6627450980392157
+```
+
+You can also parse named CSS colors (works out of the box in node.js,
+but the requires the slightly bigger one-color-all.js build in the
+browser):
+
+```javascript
+one.color('maroon').lightness(.3).hex() // '#990000'
+```
+
+To turn a color instance back into a string, use the `hex()`, `css()`,
+and `cssa()` methods:
+
+```javascript
+one.color('rgb(124, 96, 200)').hex() // '#7c60c8'
+one.color('#bb7b81').cssa() // 'rgba(187,123,129,1)'
+```
+
+Color instances have getters/setters for all channels in all supported
+colorspaces (`red()`, `green()`, `blue()`, `hue()`, `saturation()`, `lightness()`,
+`value()`, `alpha()`, etc.). Thus you don't need to think about which colorspace
+you're in. All the necessary conversions happen automatically:
+
+```javascript
+one.color('#ff0000') // Red in RGB
+ .green(1) // Set green to the max value, producing yellow (still RGB)
+ .hue(.5, true) // Add 180 degrees to the hue, implicitly converting to HSV
+ .hex() // Dump as RGB hex syntax: '#2222ff'
+```
+
+When called without any arguments, they return the current value of
+the channel (0..1):
+
+```javascript
+one.color('#09ffdd').green() // 1
+one.color('#09ffdd').saturation() // 0.9647058823529412
+```
+
+When called with a single numerical argument (0..1), a new color
+object is returned with that channel replaced:
+
+```javascript
+var myColor = one.color('#00ddff');
+myColor.red(.5).red() // .5
+
+// ... but as the objects are immutable, the original object retains its value:
+myColor.red() // 0
+```
+
+When called with a single numerical argument (0..1) and `true` as
+the second argument, a new value is returned with that channel
+adjusted:
+
+```javascript
+one.color('#ff0000') // Red
+ .red(-.1, true) // Adjust red channel by -0.1
+ .hex() // '#e60000'
+```
+
+Alpha channel
+-------------
+
+All color instances have an alpha channel (0..1), defaulting to 1
+(opaque). You can simply ignore it if you don't need it.
+
+It's preserved when converting between colorspaces:
+
+```javascript
+one.color('rgba(10, 20, 30, .8)')
+ .green(.4)
+ .saturation(.2)
+ .alpha() // 0.8
+```
+
+Comparing color objects
+-----------------------
+
+If you need to know whether two colors represent the same 8 bit color, regardless
+of colorspace, compare their `hex()` values:
+
+```javascript
+one.color('#f00').hex() === one.color('#e00').red(1).hex() // true
+```
+
+Use the `equals` method to compare two color instances within a certain
+epsilon (defaults to `1e-9`).
+
+```javascript
+one.color('#e00').lightness(.00001, true).equals(one.color('#e00'), 1e-5) // false
+one.color('#e00').lightness(.000001, true).equals(one.color('#e00'), 1e-5) // true
+```
+
+Before comparing the `equals` method converts the other color to the right colorspace,
+so you don't need to convert explicitly in this case either:
+
+```javascript
+one.color('#e00').hsv().equals(one.color('#e00')) // true
+```
+
+API overview
+============
+
+Color parser function, the recommended way to create a color instance:
+
+```javascript
+one.color('#a9d91d') // Regular hex syntax
+one.color('a9d91d') // hex syntax, # is optional
+one.color('#eee') // Short hex syntax
+one.color('rgb(124, 96, 200)') // CSS rgb syntax
+one.color('rgb(99%, 40%, 0%)') // CSS rgb syntax with percentages
+one.color('rgba(124, 96, 200, .4)') // CSS rgba syntax
+one.color('hsl(120, 75%, 75%)') // CSS hsl syntax
+one.color('hsla(120, 75%, 75%, .1)') // CSS hsla syntax
+one.color('hsv(220, 47%, 12%)') // CSS hsv syntax (non-standard)
+one.color('hsva(120, 75%, 75%, 0)') // CSS hsva syntax (non-standard)
+one.color([0, 4, 255, 120]) // CanvasPixelArray entry, RGBA
+one.color(["RGB", .5, .1, .6, .9]) // The output format of color.toJSON()
+```
+
+The slightly bigger one-color-all.js build adds support for
+the standard suite of named CSS colors :
+
+```javascript
+one.color('maroon')
+one.color('darkolivegreen')
+```
+
+Existing one.color instances pass through unchanged, which is useful
+in APIs where you want to accept either a string or a color instance:
+
+```javascript
+one.color(one.color('#fff')) // Same as one.color('#fff')
+```
+
+Serialization methods:
+
+```javascript
+color.hex() // 6-digit hex string: '#bda65b'
+color.css() // CSS rgb syntax: 'rgb(10,128,220)'
+color.cssa() // CSS rgba syntax: 'rgba(10,128,220,0.8)'
+color.toString() // For debugging: '[one.color.RGB: Red=0.3 Green=0.8 Blue=0 Alpha=1]'
+color.toJSON() // ["RGB"|"HSV"|"HSL", , , , ]
+```
+
+Getters -- return the value of the channel (converts to other colorspaces as needed):
+
+```javascript
+color.red()
+color.green()
+color.blue()
+color.hue()
+color.saturation()
+color.value()
+color.lightness()
+color.alpha()
+color.cyan() // one-color-all.js and node.js only
+color.magenta() // one-color-all.js and node.js only
+color.yellow() // one-color-all.js and node.js only
+color.black() // one-color-all.js and node.js only
+```
+
+Setters -- return new color instances with one channel changed:
+
+```javascript
+color.red()
+color.green()
+color.blue()
+color.hue()
+color.saturation()
+color.value()
+color.lightness()
+color.alpha()
+color.cyan() // one-color-all.js and node.js only
+color.magenta() // one-color-all.js and node.js only
+color.yellow() // one-color-all.js and node.js only
+color.black() // one-color-all.js and node.js only
+```
+
+Adjusters -- return new color instances with the channel adjusted by
+the specified delta (0..1):
+
+```javascript
+color.red(, true)
+color.green(, true)
+color.blue(, true)
+color.hue(, true)
+color.saturation(, true)
+color.value(, true)
+color.lightness(, true)
+color.alpha(, true)
+color.cyan(, true) // one-color-all.js and node.js only
+color.magenta(, true) // one-color-all.js and node.js only
+color.yellow(, true) // one-color-all.js and node.js only
+color.black(, true) // one-color-all.js and node.js only
+```
+Comparison with other color objects, returns `true` or `false` (epsilon defaults to `1e-9`):
+
+```javascript
+color.equals(otherColor[, ])
+```
+
+Mostly for internal (and plugin) use:
+-------------------------------------
+
+"Low level" constructors, accept 3 or 4 numerical arguments (0..1):
+
+```javascript
+new one.color.RGB(, , [, ])
+new one.color.HSL(, , [, ])
+new one.color.HSV(, , [, ])
+```
+The one-color-all.js build includes CMYK support:
+
+```javascript
+new one.color.CMYK(, , , [, ])
+```
+
+All color instances have `rgb()`, `hsv()`, and `hsl()` methods for
+explicitly converting to another color space. Like the setter and
+adjuster methods they return a new color object representing the same
+color in another color space.
+
+If for some reason you need to get all the channel values in a
+specific colorspace, do an explicit conversion first to cut down on
+the number of implicit conversions:
+
+```javascript
+var myColor = one.color('#0620ff').lightness(+.3).rgb();
+// Alerts '0 0.06265060240963878 0.5999999999999999':
+alert(myColor.red() + ' ' + myColor.green() + ' ' + myColor.blue());
+```
+
+Building
+========
+
+```
+git clone https://github.com/One-com/one-color.git
+cd one-color
+npm install
+make
+```
+
+If you aren't up for a complete installation, there are pre-built
+packages in the repository as well as the npm package:
+
+* Basic library: one-color.js ,
+ debuggable version: one-color-debug.js
+* Full library including named color support: one-color-all.js ,
+ debuggable version: one-color-all-debug.js .
+
+License
+=======
+
+one.color is licensed under a standard 2-clause BSD license -- see the LICENSE-file for details.
diff --git a/node_modules/csswring/node_modules/onecolor/one-color-all-debug.js b/node_modules/csswring/node_modules/onecolor/one-color-all-debug.js
new file mode 100644
index 0000000..2fefe05
--- /dev/null
+++ b/node_modules/csswring/node_modules/onecolor/one-color-all-debug.js
@@ -0,0 +1,775 @@
+/*jshint evil:true, onevar:false*/
+/*global define*/
+var installedColorSpaces = [],
+ namedColors = {},
+ undef = function (obj) {
+ return typeof obj === 'undefined';
+ },
+ channelRegExp = /\s*(\.\d+|\d+(?:\.\d+)?)(%)?\s*/,
+ percentageChannelRegExp = /\s*(\.\d+|100|\d?\d(?:\.\d+)?)%\s*/,
+ alphaChannelRegExp = /\s*(\.\d+|\d+(?:\.\d+)?)\s*/,
+ cssColorRegExp = new RegExp(
+ "^(rgb|hsl|hsv)a?" +
+ "\\(" +
+ channelRegExp.source + "," +
+ channelRegExp.source + "," +
+ channelRegExp.source +
+ "(?:," + alphaChannelRegExp.source + ")?" +
+ "\\)$", "i");
+
+function ONECOLOR(obj) {
+ if (Object.prototype.toString.apply(obj) === '[object Array]') {
+ if (typeof obj[0] === 'string' && typeof ONECOLOR[obj[0]] === 'function') {
+ // Assumed array from .toJSON()
+ return new ONECOLOR[obj[0]](obj.slice(1, obj.length));
+ } else if (obj.length === 4) {
+ // Assumed 4 element int RGB array from canvas with all channels [0;255]
+ return new ONECOLOR.RGB(obj[0] / 255, obj[1] / 255, obj[2] / 255, obj[3] / 255);
+ }
+ } else if (typeof obj === 'string') {
+ var lowerCased = obj.toLowerCase();
+ if (namedColors[lowerCased]) {
+ obj = '#' + namedColors[lowerCased];
+ }
+ if (lowerCased === 'transparent') {
+ obj = 'rgba(0,0,0,0)';
+ }
+ // Test for CSS rgb(....) string
+ var matchCssSyntax = obj.match(cssColorRegExp);
+ if (matchCssSyntax) {
+ var colorSpaceName = matchCssSyntax[1].toUpperCase(),
+ alpha = undef(matchCssSyntax[8]) ? matchCssSyntax[8] : parseFloat(matchCssSyntax[8]),
+ hasHue = colorSpaceName[0] === 'H',
+ firstChannelDivisor = matchCssSyntax[3] ? 100 : (hasHue ? 360 : 255),
+ secondChannelDivisor = (matchCssSyntax[5] || hasHue) ? 100 : 255,
+ thirdChannelDivisor = (matchCssSyntax[7] || hasHue) ? 100 : 255;
+ if (undef(ONECOLOR[colorSpaceName])) {
+ throw new Error("one.color." + colorSpaceName + " is not installed.");
+ }
+ return new ONECOLOR[colorSpaceName](
+ parseFloat(matchCssSyntax[2]) / firstChannelDivisor,
+ parseFloat(matchCssSyntax[4]) / secondChannelDivisor,
+ parseFloat(matchCssSyntax[6]) / thirdChannelDivisor,
+ alpha
+ );
+ }
+ // Assume hex syntax
+ if (obj.length < 6) {
+ // Allow CSS shorthand
+ obj = obj.replace(/^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i, '$1$1$2$2$3$3');
+ }
+ // Split obj into red, green, and blue components
+ var hexMatch = obj.match(/^#?([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/i);
+ if (hexMatch) {
+ return new ONECOLOR.RGB(
+ parseInt(hexMatch[1], 16) / 255,
+ parseInt(hexMatch[2], 16) / 255,
+ parseInt(hexMatch[3], 16) / 255
+ );
+ }
+
+ // No match so far. Lets try the less likely ones
+ if (ONECOLOR.CMYK) {
+ var cmykMatch = obj.match(new RegExp(
+ "^cmyk" +
+ "\\(" +
+ percentageChannelRegExp.source + "," +
+ percentageChannelRegExp.source + "," +
+ percentageChannelRegExp.source + "," +
+ percentageChannelRegExp.source +
+ "\\)$", "i"));
+ if (cmykMatch) {
+ return new ONECOLOR.CMYK(
+ parseFloat(cmykMatch[1]) / 100,
+ parseFloat(cmykMatch[2]) / 100,
+ parseFloat(cmykMatch[3]) / 100,
+ parseFloat(cmykMatch[4]) / 100
+ );
+ }
+ }
+ } else if (typeof obj === 'object' && obj.isColor) {
+ return obj;
+ }
+ return false;
+}
+
+function installColorSpace(colorSpaceName, propertyNames, config) {
+ ONECOLOR[colorSpaceName] = new Function(propertyNames.join(","),
+ // Allow passing an array to the constructor:
+ "if (Object.prototype.toString.apply(" + propertyNames[0] + ") === '[object Array]') {" +
+ propertyNames.map(function (propertyName, i) {
+ return propertyName + "=" + propertyNames[0] + "[" + i + "];";
+ }).reverse().join("") +
+ "}" +
+ "if (" + propertyNames.filter(function (propertyName) {
+ return propertyName !== 'alpha';
+ }).map(function (propertyName) {
+ return "isNaN(" + propertyName + ")";
+ }).join("||") + "){" + "throw new Error(\"[" + colorSpaceName + "]: Invalid color: (\"+" + propertyNames.join("+\",\"+") + "+\")\");}" +
+ propertyNames.map(function (propertyName) {
+ if (propertyName === 'hue') {
+ return "this._hue=hue<0?hue-Math.floor(hue):hue%1"; // Wrap
+ } else if (propertyName === 'alpha') {
+ return "this._alpha=(isNaN(alpha)||alpha>1)?1:(alpha<0?0:alpha);";
+ } else {
+ return "this._" + propertyName + "=" + propertyName + "<0?0:(" + propertyName + ">1?1:" + propertyName + ")";
+ }
+ }).join(";") + ";"
+ );
+ ONECOLOR[colorSpaceName].propertyNames = propertyNames;
+
+ var prototype = ONECOLOR[colorSpaceName].prototype;
+
+ ['valueOf', 'hex', 'hexa', 'css', 'cssa'].forEach(function (methodName) {
+ prototype[methodName] = prototype[methodName] || (colorSpaceName === 'RGB' ? prototype.hex : new Function("return this.rgb()." + methodName + "();"));
+ });
+
+ prototype.isColor = true;
+
+ prototype.equals = function (otherColor, epsilon) {
+ if (undef(epsilon)) {
+ epsilon = 1e-10;
+ }
+
+ otherColor = otherColor[colorSpaceName.toLowerCase()]();
+
+ for (var i = 0; i < propertyNames.length; i = i + 1) {
+ if (Math.abs(this['_' + propertyNames[i]] - otherColor['_' + propertyNames[i]]) > epsilon) {
+ return false;
+ }
+ }
+
+ return true;
+ };
+
+ prototype.toJSON = new Function(
+ "return ['" + colorSpaceName + "', " +
+ propertyNames.map(function (propertyName) {
+ return "this._" + propertyName;
+ }, this).join(", ") +
+ "];"
+ );
+
+ for (var propertyName in config) {
+ if (config.hasOwnProperty(propertyName)) {
+ var matchFromColorSpace = propertyName.match(/^from(.*)$/);
+ if (matchFromColorSpace) {
+ ONECOLOR[matchFromColorSpace[1].toUpperCase()].prototype[colorSpaceName.toLowerCase()] = config[propertyName];
+ } else {
+ prototype[propertyName] = config[propertyName];
+ }
+ }
+ }
+
+ // It is pretty easy to implement the conversion to the same color space:
+ prototype[colorSpaceName.toLowerCase()] = function () {
+ return this;
+ };
+ prototype.toString = new Function("return \"[one.color." + colorSpaceName + ":\"+" + propertyNames.map(function (propertyName, i) {
+ return "\" " + propertyNames[i] + "=\"+this._" + propertyName;
+ }).join("+") + "+\"]\";");
+
+ // Generate getters and setters
+ propertyNames.forEach(function (propertyName, i) {
+ prototype[propertyName] = prototype[propertyName === 'black' ? 'k' : propertyName[0]] = new Function("value", "isDelta",
+ // Simple getter mode: color.red()
+ "if (typeof value === 'undefined') {" +
+ "return this._" + propertyName + ";" +
+ "}" +
+ // Adjuster: color.red(+.2, true)
+ "if (isDelta) {" +
+ "return new this.constructor(" + propertyNames.map(function (otherPropertyName, i) {
+ return "this._" + otherPropertyName + (propertyName === otherPropertyName ? "+value" : "");
+ }).join(", ") + ");" +
+ "}" +
+ // Setter: color.red(.2);
+ "return new this.constructor(" + propertyNames.map(function (otherPropertyName, i) {
+ return propertyName === otherPropertyName ? "value" : "this._" + otherPropertyName;
+ }).join(", ") + ");");
+ });
+
+ function installForeignMethods(targetColorSpaceName, sourceColorSpaceName) {
+ var obj = {};
+ obj[sourceColorSpaceName.toLowerCase()] = new Function("return this.rgb()." + sourceColorSpaceName.toLowerCase() + "();"); // Fallback
+ ONECOLOR[sourceColorSpaceName].propertyNames.forEach(function (propertyName, i) {
+ obj[propertyName] = obj[propertyName === 'black' ? 'k' : propertyName[0]] = new Function("value", "isDelta", "return this." + sourceColorSpaceName.toLowerCase() + "()." + propertyName + "(value, isDelta);");
+ });
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop) && ONECOLOR[targetColorSpaceName].prototype[prop] === undefined) {
+ ONECOLOR[targetColorSpaceName].prototype[prop] = obj[prop];
+ }
+ }
+ }
+
+ installedColorSpaces.forEach(function (otherColorSpaceName) {
+ installForeignMethods(colorSpaceName, otherColorSpaceName);
+ installForeignMethods(otherColorSpaceName, colorSpaceName);
+ });
+
+ installedColorSpaces.push(colorSpaceName);
+}
+
+ONECOLOR.installMethod = function (name, fn) {
+ installedColorSpaces.forEach(function (colorSpace) {
+ ONECOLOR[colorSpace].prototype[name] = fn;
+ });
+};
+
+installColorSpace('RGB', ['red', 'green', 'blue', 'alpha'], {
+ hex: function () {
+ var hexString = (Math.round(255 * this._red) * 0x10000 + Math.round(255 * this._green) * 0x100 + Math.round(255 * this._blue)).toString(16);
+ return '#' + ('00000'.substr(0, 6 - hexString.length)) + hexString;
+ },
+
+ hexa: function () {
+ var alphaString = Math.round(this._alpha * 255).toString(16);
+ return '#' + '00'.substr(0, 2 - alphaString.length) + alphaString + this.hex().substr(1, 6);
+ },
+
+ css: function () {
+ return "rgb(" + Math.round(255 * this._red) + "," + Math.round(255 * this._green) + "," + Math.round(255 * this._blue) + ")";
+ },
+
+ cssa: function () {
+ return "rgba(" + Math.round(255 * this._red) + "," + Math.round(255 * this._green) + "," + Math.round(255 * this._blue) + "," + this._alpha + ")";
+ }
+});
+if (typeof define === 'function' && !undef(define.amd)) {
+ define(function () {
+ return ONECOLOR;
+ });
+} else if (typeof exports === 'object') {
+ // Node module export
+ module.exports = ONECOLOR;
+} else {
+ one = window.one || {};
+ one.color = ONECOLOR;
+}
+
+if (typeof jQuery !== 'undefined' && undef(jQuery.color)) {
+ jQuery.color = ONECOLOR;
+}
+
+/*global namedColors*/
+namedColors = {
+ aliceblue: 'f0f8ff',
+ antiquewhite: 'faebd7',
+ aqua: '0ff',
+ aquamarine: '7fffd4',
+ azure: 'f0ffff',
+ beige: 'f5f5dc',
+ bisque: 'ffe4c4',
+ black: '000',
+ blanchedalmond: 'ffebcd',
+ blue: '00f',
+ blueviolet: '8a2be2',
+ brown: 'a52a2a',
+ burlywood: 'deb887',
+ cadetblue: '5f9ea0',
+ chartreuse: '7fff00',
+ chocolate: 'd2691e',
+ coral: 'ff7f50',
+ cornflowerblue: '6495ed',
+ cornsilk: 'fff8dc',
+ crimson: 'dc143c',
+ cyan: '0ff',
+ darkblue: '00008b',
+ darkcyan: '008b8b',
+ darkgoldenrod: 'b8860b',
+ darkgray: 'a9a9a9',
+ darkgrey: 'a9a9a9',
+ darkgreen: '006400',
+ darkkhaki: 'bdb76b',
+ darkmagenta: '8b008b',
+ darkolivegreen: '556b2f',
+ darkorange: 'ff8c00',
+ darkorchid: '9932cc',
+ darkred: '8b0000',
+ darksalmon: 'e9967a',
+ darkseagreen: '8fbc8f',
+ darkslateblue: '483d8b',
+ darkslategray: '2f4f4f',
+ darkslategrey: '2f4f4f',
+ darkturquoise: '00ced1',
+ darkviolet: '9400d3',
+ deeppink: 'ff1493',
+ deepskyblue: '00bfff',
+ dimgray: '696969',
+ dimgrey: '696969',
+ dodgerblue: '1e90ff',
+ firebrick: 'b22222',
+ floralwhite: 'fffaf0',
+ forestgreen: '228b22',
+ fuchsia: 'f0f',
+ gainsboro: 'dcdcdc',
+ ghostwhite: 'f8f8ff',
+ gold: 'ffd700',
+ goldenrod: 'daa520',
+ gray: '808080',
+ grey: '808080',
+ green: '008000',
+ greenyellow: 'adff2f',
+ honeydew: 'f0fff0',
+ hotpink: 'ff69b4',
+ indianred: 'cd5c5c',
+ indigo: '4b0082',
+ ivory: 'fffff0',
+ khaki: 'f0e68c',
+ lavender: 'e6e6fa',
+ lavenderblush: 'fff0f5',
+ lawngreen: '7cfc00',
+ lemonchiffon: 'fffacd',
+ lightblue: 'add8e6',
+ lightcoral: 'f08080',
+ lightcyan: 'e0ffff',
+ lightgoldenrodyellow: 'fafad2',
+ lightgray: 'd3d3d3',
+ lightgrey: 'd3d3d3',
+ lightgreen: '90ee90',
+ lightpink: 'ffb6c1',
+ lightsalmon: 'ffa07a',
+ lightseagreen: '20b2aa',
+ lightskyblue: '87cefa',
+ lightslategray: '789',
+ lightslategrey: '789',
+ lightsteelblue: 'b0c4de',
+ lightyellow: 'ffffe0',
+ lime: '0f0',
+ limegreen: '32cd32',
+ linen: 'faf0e6',
+ magenta: 'f0f',
+ maroon: '800000',
+ mediumaquamarine: '66cdaa',
+ mediumblue: '0000cd',
+ mediumorchid: 'ba55d3',
+ mediumpurple: '9370d8',
+ mediumseagreen: '3cb371',
+ mediumslateblue: '7b68ee',
+ mediumspringgreen: '00fa9a',
+ mediumturquoise: '48d1cc',
+ mediumvioletred: 'c71585',
+ midnightblue: '191970',
+ mintcream: 'f5fffa',
+ mistyrose: 'ffe4e1',
+ moccasin: 'ffe4b5',
+ navajowhite: 'ffdead',
+ navy: '000080',
+ oldlace: 'fdf5e6',
+ olive: '808000',
+ olivedrab: '6b8e23',
+ orange: 'ffa500',
+ orangered: 'ff4500',
+ orchid: 'da70d6',
+ palegoldenrod: 'eee8aa',
+ palegreen: '98fb98',
+ paleturquoise: 'afeeee',
+ palevioletred: 'd87093',
+ papayawhip: 'ffefd5',
+ peachpuff: 'ffdab9',
+ peru: 'cd853f',
+ pink: 'ffc0cb',
+ plum: 'dda0dd',
+ powderblue: 'b0e0e6',
+ purple: '800080',
+ rebeccapurple: '639',
+ red: 'f00',
+ rosybrown: 'bc8f8f',
+ royalblue: '4169e1',
+ saddlebrown: '8b4513',
+ salmon: 'fa8072',
+ sandybrown: 'f4a460',
+ seagreen: '2e8b57',
+ seashell: 'fff5ee',
+ sienna: 'a0522d',
+ silver: 'c0c0c0',
+ skyblue: '87ceeb',
+ slateblue: '6a5acd',
+ slategray: '708090',
+ slategrey: '708090',
+ snow: 'fffafa',
+ springgreen: '00ff7f',
+ steelblue: '4682b4',
+ tan: 'd2b48c',
+ teal: '008080',
+ thistle: 'd8bfd8',
+ tomato: 'ff6347',
+ turquoise: '40e0d0',
+ violet: 'ee82ee',
+ wheat: 'f5deb3',
+ white: 'fff',
+ whitesmoke: 'f5f5f5',
+ yellow: 'ff0',
+ yellowgreen: '9acd32'
+};
+
+/*global INCLUDE, installColorSpace, ONECOLOR*/
+
+installColorSpace('XYZ', ['x', 'y', 'z', 'alpha'], {
+ fromRgb: function () {
+ // http://www.easyrgb.com/index.php?X=MATH&H=02#text2
+ var convert = function (channel) {
+ return channel > 0.04045 ?
+ Math.pow((channel + 0.055) / 1.055, 2.4) :
+ channel / 12.92;
+ },
+ r = convert(this._red),
+ g = convert(this._green),
+ b = convert(this._blue);
+
+ // Reference white point sRGB D65:
+ // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
+ return new ONECOLOR.XYZ(
+ r * 0.4124564 + g * 0.3575761 + b * 0.1804375,
+ r * 0.2126729 + g * 0.7151522 + b * 0.0721750,
+ r * 0.0193339 + g * 0.1191920 + b * 0.9503041,
+ this._alpha
+ );
+ },
+
+ rgb: function () {
+ // http://www.easyrgb.com/index.php?X=MATH&H=01#text1
+ var x = this._x,
+ y = this._y,
+ z = this._z,
+ convert = function (channel) {
+ return channel > 0.0031308 ?
+ 1.055 * Math.pow(channel, 1 / 2.4) - 0.055 :
+ 12.92 * channel;
+ };
+
+ // Reference white point sRGB D65:
+ // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
+ return new ONECOLOR.RGB(
+ convert(x * 3.2404542 + y * -1.5371385 + z * -0.4985314),
+ convert(x * -0.9692660 + y * 1.8760108 + z * 0.0415560),
+ convert(x * 0.0556434 + y * -0.2040259 + z * 1.0572252),
+ this._alpha
+ );
+ },
+
+ lab: function () {
+ // http://www.easyrgb.com/index.php?X=MATH&H=07#text7
+ var convert = function (channel) {
+ return channel > 0.008856 ?
+ Math.pow(channel, 1 / 3) :
+ 7.787037 * channel + 4 / 29;
+ },
+ x = convert(this._x / 95.047),
+ y = convert(this._y / 100.000),
+ z = convert(this._z / 108.883);
+
+ return new ONECOLOR.LAB(
+ (116 * y) - 16,
+ 500 * (x - y),
+ 200 * (y - z),
+ this._alpha
+ );
+ }
+});
+
+/*global INCLUDE, installColorSpace, ONECOLOR*/
+
+installColorSpace('LAB', ['l', 'a', 'b', 'alpha'], {
+ fromRgb: function () {
+ return this.xyz().lab();
+ },
+
+ rgb: function () {
+ return this.xyz().rgb();
+ },
+
+ xyz: function () {
+ // http://www.easyrgb.com/index.php?X=MATH&H=08#text8
+ var convert = function (channel) {
+ var pow = Math.pow(channel, 3);
+ return pow > 0.008856 ?
+ pow :
+ (channel - 16 / 116) / 7.87;
+ },
+ y = (this._l + 16) / 116,
+ x = this._a / 500 + y,
+ z = y - this._b / 200;
+
+ return new ONECOLOR.XYZ(
+ convert(x) * 95.047,
+ convert(y) * 100.000,
+ convert(z) * 108.883,
+ this._alpha
+ );
+ }
+});
+
+/*global one*/
+
+installColorSpace('HSV', ['hue', 'saturation', 'value', 'alpha'], {
+ rgb: function () {
+ var hue = this._hue,
+ saturation = this._saturation,
+ value = this._value,
+ i = Math.min(5, Math.floor(hue * 6)),
+ f = hue * 6 - i,
+ p = value * (1 - saturation),
+ q = value * (1 - f * saturation),
+ t = value * (1 - (1 - f) * saturation),
+ red,
+ green,
+ blue;
+ switch (i) {
+ case 0:
+ red = value;
+ green = t;
+ blue = p;
+ break;
+ case 1:
+ red = q;
+ green = value;
+ blue = p;
+ break;
+ case 2:
+ red = p;
+ green = value;
+ blue = t;
+ break;
+ case 3:
+ red = p;
+ green = q;
+ blue = value;
+ break;
+ case 4:
+ red = t;
+ green = p;
+ blue = value;
+ break;
+ case 5:
+ red = value;
+ green = p;
+ blue = q;
+ break;
+ }
+ return new ONECOLOR.RGB(red, green, blue, this._alpha);
+ },
+
+ hsl: function () {
+ var l = (2 - this._saturation) * this._value,
+ sv = this._saturation * this._value,
+ svDivisor = l <= 1 ? l : (2 - l),
+ saturation;
+
+ // Avoid division by zero when lightness approaches zero:
+ if (svDivisor < 1e-9) {
+ saturation = 0;
+ } else {
+ saturation = sv / svDivisor;
+ }
+ return new ONECOLOR.HSL(this._hue, saturation, l / 2, this._alpha);
+ },
+
+ fromRgb: function () { // Becomes one.color.RGB.prototype.hsv
+ var red = this._red,
+ green = this._green,
+ blue = this._blue,
+ max = Math.max(red, green, blue),
+ min = Math.min(red, green, blue),
+ delta = max - min,
+ hue,
+ saturation = (max === 0) ? 0 : (delta / max),
+ value = max;
+ if (delta === 0) {
+ hue = 0;
+ } else {
+ switch (max) {
+ case red:
+ hue = (green - blue) / delta / 6 + (green < blue ? 1 : 0);
+ break;
+ case green:
+ hue = (blue - red) / delta / 6 + 1 / 3;
+ break;
+ case blue:
+ hue = (red - green) / delta / 6 + 2 / 3;
+ break;
+ }
+ }
+ return new ONECOLOR.HSV(hue, saturation, value, this._alpha);
+ }
+});
+
+/*global one*/
+
+
+installColorSpace('HSL', ['hue', 'saturation', 'lightness', 'alpha'], {
+ hsv: function () {
+ // Algorithm adapted from http://wiki.secondlife.com/wiki/Color_conversion_scripts
+ var l = this._lightness * 2,
+ s = this._saturation * ((l <= 1) ? l : 2 - l),
+ saturation;
+
+ // Avoid division by zero when l + s is very small (approaching black):
+ if (l + s < 1e-9) {
+ saturation = 0;
+ } else {
+ saturation = (2 * s) / (l + s);
+ }
+
+ return new ONECOLOR.HSV(this._hue, saturation, (l + s) / 2, this._alpha);
+ },
+
+ rgb: function () {
+ return this.hsv().rgb();
+ },
+
+ fromRgb: function () { // Becomes one.color.RGB.prototype.hsv
+ return this.hsv().hsl();
+ }
+});
+
+/*global one*/
+
+installColorSpace('CMYK', ['cyan', 'magenta', 'yellow', 'black', 'alpha'], {
+ rgb: function () {
+ return new ONECOLOR.RGB((1 - this._cyan * (1 - this._black) - this._black),
+ (1 - this._magenta * (1 - this._black) - this._black),
+ (1 - this._yellow * (1 - this._black) - this._black),
+ this._alpha);
+ },
+
+ fromRgb: function () { // Becomes one.color.RGB.prototype.cmyk
+ // Adapted from http://www.javascripter.net/faq/rgb2cmyk.htm
+ var red = this._red,
+ green = this._green,
+ blue = this._blue,
+ cyan = 1 - red,
+ magenta = 1 - green,
+ yellow = 1 - blue,
+ black = 1;
+ if (red || green || blue) {
+ black = Math.min(cyan, Math.min(magenta, yellow));
+ cyan = (cyan - black) / (1 - black);
+ magenta = (magenta - black) / (1 - black);
+ yellow = (yellow - black) / (1 - black);
+ } else {
+ black = 1;
+ }
+ return new ONECOLOR.CMYK(cyan, magenta, yellow, black, this._alpha);
+ }
+});
+
+ONECOLOR.installMethod('clearer', function (amount) {
+ return this.alpha(isNaN(amount) ? -0.1 : -amount, true);
+});
+
+
+ONECOLOR.installMethod('darken', function (amount) {
+ return this.lightness(isNaN(amount) ? -0.1 : -amount, true);
+});
+
+
+ONECOLOR.installMethod('desaturate', function (amount) {
+ return this.saturation(isNaN(amount) ? -0.1 : -amount, true);
+});
+
+function gs () {
+ var rgb = this.rgb(),
+ val = rgb._red * 0.3 + rgb._green * 0.59 + rgb._blue * 0.11;
+
+ return new ONECOLOR.RGB(val, val, val, this._alpha);
+};
+
+ONECOLOR.installMethod('greyscale', gs);
+ONECOLOR.installMethod('grayscale', gs);
+
+
+ONECOLOR.installMethod('lighten', function (amount) {
+ return this.lightness(isNaN(amount) ? 0.1 : amount, true);
+});
+
+ONECOLOR.installMethod('mix', function (otherColor, weight) {
+ otherColor = ONECOLOR(otherColor).rgb();
+ weight = 1 - (isNaN(weight) ? 0.5 : weight);
+
+ var w = weight * 2 - 1,
+ a = this._alpha - otherColor._alpha,
+ weight1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2,
+ weight2 = 1 - weight1,
+ rgb = this.rgb();
+
+ return new ONECOLOR.RGB(
+ rgb._red * weight1 + otherColor._red * weight2,
+ rgb._green * weight1 + otherColor._green * weight2,
+ rgb._blue * weight1 + otherColor._blue * weight2,
+ rgb._alpha * weight + otherColor._alpha * (1 - weight)
+ );
+});
+
+ONECOLOR.installMethod('negate', function () {
+ var rgb = this.rgb();
+ return new ONECOLOR.RGB(1 - rgb._red, 1 - rgb._green, 1 - rgb._blue, this._alpha);
+});
+
+ONECOLOR.installMethod('opaquer', function (amount) {
+ return this.alpha(isNaN(amount) ? 0.1 : amount, true);
+});
+
+ONECOLOR.installMethod('rotate', function (degrees) {
+ return this.hue((degrees || 0) / 360, true);
+});
+
+
+ONECOLOR.installMethod('saturate', function (amount) {
+ return this.saturation(isNaN(amount) ? 0.1 : amount, true);
+});
+
+// Adapted from http://gimp.sourcearchive.com/documentation/2.6.6-1ubuntu1/color-to-alpha_8c-source.html
+/*
+ toAlpha returns a color where the values of the argument have been converted to alpha
+*/
+ONECOLOR.installMethod('toAlpha', function (color) {
+ var me = this.rgb(),
+ other = ONECOLOR(color).rgb(),
+ epsilon = 1e-10,
+ a = new ONECOLOR.RGB(0, 0, 0, me._alpha),
+ channels = ['_red', '_green', '_blue'];
+
+ channels.forEach(function (channel) {
+ if (me[channel] < epsilon) {
+ a[channel] = me[channel];
+ } else if (me[channel] > other[channel]) {
+ a[channel] = (me[channel] - other[channel]) / (1 - other[channel]);
+ } else if (me[channel] > other[channel]) {
+ a[channel] = (other[channel] - me[channel]) / other[channel];
+ } else {
+ a[channel] = 0;
+ }
+ });
+
+ if (a._red > a._green) {
+ if (a._red > a._blue) {
+ me._alpha = a._red;
+ } else {
+ me._alpha = a._blue;
+ }
+ } else if (a._green > a._blue) {
+ me._alpha = a._green;
+ } else {
+ me._alpha = a._blue;
+ }
+
+ if (me._alpha < epsilon) {
+ return me;
+ }
+
+ channels.forEach(function (channel) {
+ me[channel] = (me[channel] - other[channel]) / me._alpha + other[channel];
+ });
+ me._alpha *= a._alpha;
+
+ return me;
+});
+
+/*global one*/
+
+// This file is purely for the build system
+
+// Order is important to prevent channel name clashes. Lab <-> hsL
+
+// Convenience functions
+
diff --git a/node_modules/csswring/node_modules/onecolor/one-color-all.js b/node_modules/csswring/node_modules/onecolor/one-color-all.js
new file mode 100644
index 0000000..9b5a9f4
--- /dev/null
+++ b/node_modules/csswring/node_modules/onecolor/one-color-all.js
@@ -0,0 +1 @@
+(function(e,t,n,r,i,s,o,u,a){function m(e){if(Object.prototype.toString.apply(e)==="[object Array]"){if(typeof e[0]=="string"&&typeof m[e[0]]=="function")return new m[e[0]](e.slice(1,e.length));if(e.length===4)return new m.RGB(e[0]/255,e[1]/255,e[2]/255,e[3]/255)}else if(typeof e=="string"){var i=e.toLowerCase();l[i]&&(e="#"+l[i]),i==="transparent"&&(e="rgba(0,0,0,0)");var s=e.match(v);if(s){var o=s[1].toUpperCase(),u=c(s[8])?s[8]:n(s[8]),a=o[0]==="H",f=s[3]?100:a?360:255,h=s[5]||a?100:255,d=s[7]||a?100:255;if(c(m[o]))throw new Error("one.color."+o+" is not installed.");return new m[o](n(s[2])/f,n(s[4])/h,n(s[6])/d,u)}e.length<6&&(e=e.replace(/^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i,"$1$1$2$2$3$3"));var g=e.match(/^#?([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/i);if(g)return new m.RGB(r(g[1],16)/255,r(g[2],16)/255,r(g[3],16)/255);if(m.CMYK){var y=e.match(new t("^cmyk\\("+p.source+","+p.source+","+p.source+","+p.source+"\\)$","i"));if(y)return new m.CMYK(n(y[1])/100,n(y[2])/100,n(y[3])/100,n(y[4])/100)}}else if(typeof e=="object"&&e.isColor)return e;return!1}function g(t,n,r){function a(e,t){var n={};n[t.toLowerCase()]=new i("return this.rgb()."+t.toLowerCase()+"();"),m[t].propertyNames.forEach(function(e,r){n[e]=n[e==="black"?"k":e[0]]=new i("value","isDelta","return this."+t.toLowerCase()+"()."+e+"(value, isDelta);")});for(var r in n)n.hasOwnProperty(r)&&m[e].prototype[r]===undefined&&(m[e].prototype[r]=n[r])}m[t]=new i(n.join(","),"if (Object.prototype.toString.apply("+n[0]+") === '[object Array]') {"+n.map(function(e,t){return e+"="+n[0]+"["+t+"];"}).reverse().join("")+"}"+"if ("+n.filter(function(e){return e!=="alpha"}).map(function(e){return"isNaN("+e+")"}).join("||")+"){"+'throw new Error("['+t+']: Invalid color: ("+'+n.join('+","+')+'+")");}'+n.map(function(e){return e==="hue"?"this._hue=hue<0?hue-Math.floor(hue):hue%1":e==="alpha"?"this._alpha=(isNaN(alpha)||alpha>1)?1:(alpha<0?0:alpha);":"this._"+e+"="+e+"<0?0:("+e+">1?1:"+e+")"}).join(";")+";"),m[t].propertyNames=n;var s=m[t].prototype;["valueOf","hex","hexa","css","cssa"].forEach(function(e){s[e]=s[e]||(t==="RGB"?s.hex:new i("return this.rgb()."+e+"();"))}),s.isColor=!0,s.equals=function(r,i){c(i)&&(i=1e-10),r=r[t.toLowerCase()]();for(var s=0;si)return!1;return!0},s.toJSON=new i("return ['"+t+"', "+n.map(function(e){return"this._"+e},this).join(", ")+"];");for(var o in r)if(r.hasOwnProperty(o)){var u=o.match(/^from(.*)$/);u?m[u[1].toUpperCase()].prototype[t.toLowerCase()]=r[o]:s[o]=r[o]}s[t.toLowerCase()]=function(){return this},s.toString=new i('return "[one.color.'+t+':"+'+n.map(function(e,t){return'" '+n[t]+'="+this._'+e}).join("+")+'+"]";'),n.forEach(function(e,t){s[e]=s[e==="black"?"k":e[0]]=new i("value","isDelta","if (typeof value === 'undefined') {return this._"+e+";"+"}"+"if (isDelta) {"+"return new this.constructor("+n.map(function(t,n){return"this._"+t+(e===t?"+value":"")}).join(", ")+");"+"}"+"return new this.constructor("+n.map(function(t,n){return e===t?"value":"this._"+t}).join(", ")+");")}),f.forEach(function(e){a(t,e),a(e,t)}),f.push(t)}function y(){var e=this.rgb(),t=e._red*.3+e._green*.59+e._blue*.11;return new m.RGB(t,t,t,this._alpha)}var f=[],l={},c=function(e){return typeof e=="undefined"},h=/\s*(\.\d+|\d+(?:\.\d+)?)(%)?\s*/,p=/\s*(\.\d+|100|\d?\d(?:\.\d+)?)%\s*/,d=/\s*(\.\d+|\d+(?:\.\d+)?)\s*/,v=new t("^(rgb|hsl|hsv)a?\\("+h.source+","+h.source+","+h.source+"(?:,"+d.source+")?"+"\\)$","i");m.installMethod=function(e,t){f.forEach(function(n){m[n].prototype[e]=t})},g("RGB",["red","green","blue","alpha"],{hex:function(){var e=(o(255*this._red)*65536+o(255*this._green)*256+o(255*this._blue)).toString(16);return"#"+"00000".substr(0,6-e.length)+e},hexa:function(){var e=o(this._alpha*255).toString(16);return"#"+"00".substr(0,2-e.length)+e+this.hex().substr(1,6)},css:function(){return"rgb("+o(255*this._red)+","+o(255*this._green)+","+o(255*this._blue)+")"},cssa:function(){return"rgba("+o(255*this._red)+","+o(255*this._green)+","+o(255*this._blue)+","+this._alpha+")"}}),typeof define=="function"&&!c(define.amd)?define(function(){return m}):typeof exports=="object"?module.exports=m:(one=window.one||{},one.color=m),typeof jQuery!="undefined"&&c(jQuery.color)&&(jQuery.color=m),l={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgrey:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",grey:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},g("XYZ",["x","y","z","alpha"],{fromRgb:function(){var e=function(e){return e>.04045?u((e+.055)/1.055,2.4):e/12.92},t=e(this._red),n=e(this._green),r=e(this._blue);return new m.XYZ(t*.4124564+n*.3575761+r*.1804375,t*.2126729+n*.7151522+r*.072175,t*.0193339+n*.119192+r*.9503041,this._alpha)},rgb:function(){var e=this._x,t=this._y,n=this._z,r=function(e){return e>.0031308?1.055*u(e,1/2.4)-.055:12.92*e};return new m.RGB(r(e*3.2404542+t*-1.5371385+n*-0.4985314),r(e*-0.969266+t*1.8760108+n*.041556),r(e*.0556434+t*-0.2040259+n*1.0572252),this._alpha)},lab:function(){var e=function(e){return e>.008856?u(e,1/3):7.787037*e+4/29},t=e(this._x/95.047),n=e(this._y/100),r=e(this._z/108.883);return new m.LAB(116*n-16,500*(t-n),200*(n-r),this._alpha)}}),g("LAB",["l","a","b","alpha"],{fromRgb:function(){return this.xyz().lab()},rgb:function(){return this.xyz().rgb()},xyz:function(){var e=function(e){var t=u(e,3);return t>.008856?t:(e-16/116)/7.87},t=(this._l+16)/116,n=this._a/500+t,r=t-this._b/200;return new m.XYZ(e(n)*95.047,e(t)*100,e(r)*108.883,this._alpha)}}),g("HSV",["hue","saturation","value","alpha"],{rgb:function(){var t=this._hue,n=this._saturation,r=this._value,i=a(5,e.floor(t*6)),s=t*6-i,o=r*(1-n),u=r*(1-s*n),f=r*(1-(1-s)*n),l,c,h;switch(i){case 0:l=r,c=f,h=o;break;case 1:l=u,c=r,h=o;break;case 2:l=o,c=r,h=f;break;case 3:l=o,c=u,h=r;break;case 4:l=f,c=o,h=r;break;case 5:l=r,c=o,h=u}return new m.RGB(l,c,h,this._alpha)},hsl:function(){var e=(2-this._saturation)*this._value,t=this._saturation*this._value,n=e<=1?e:2-e,r;return n<1e-9?r=0:r=t/n,new m.HSL(this._hue,r,e/2,this._alpha)},fromRgb:function(){var t=this._red,n=this._green,r=this._blue,i=e.max(t,n,r),s=a(t,n,r),o=i-s,u,f=i===0?0:o/i,l=i;if(o===0)u=0;else switch(i){case t:u=(n-r)/o/6+(nn[e]?i[e]=(t[e]-n[e])/(1-n[e]):t[e]>n[e]?i[e]=(n[e]-t[e])/n[e]:i[e]=0}),i._red>i._green?i._red>i._blue?t._alpha=i._red:t._alpha=i._blue:i._green>i._blue?t._alpha=i._green:t._alpha=i._blue,t._alpha1)?1:(alpha<0?0:alpha);";
+ } else {
+ return "this._" + propertyName + "=" + propertyName + "<0?0:(" + propertyName + ">1?1:" + propertyName + ")";
+ }
+ }).join(";") + ";"
+ );
+ ONECOLOR[colorSpaceName].propertyNames = propertyNames;
+
+ var prototype = ONECOLOR[colorSpaceName].prototype;
+
+ ['valueOf', 'hex', 'hexa', 'css', 'cssa'].forEach(function (methodName) {
+ prototype[methodName] = prototype[methodName] || (colorSpaceName === 'RGB' ? prototype.hex : new Function("return this.rgb()." + methodName + "();"));
+ });
+
+ prototype.isColor = true;
+
+ prototype.equals = function (otherColor, epsilon) {
+ if (undef(epsilon)) {
+ epsilon = 1e-10;
+ }
+
+ otherColor = otherColor[colorSpaceName.toLowerCase()]();
+
+ for (var i = 0; i < propertyNames.length; i = i + 1) {
+ if (Math.abs(this['_' + propertyNames[i]] - otherColor['_' + propertyNames[i]]) > epsilon) {
+ return false;
+ }
+ }
+
+ return true;
+ };
+
+ prototype.toJSON = new Function(
+ "return ['" + colorSpaceName + "', " +
+ propertyNames.map(function (propertyName) {
+ return "this._" + propertyName;
+ }, this).join(", ") +
+ "];"
+ );
+
+ for (var propertyName in config) {
+ if (config.hasOwnProperty(propertyName)) {
+ var matchFromColorSpace = propertyName.match(/^from(.*)$/);
+ if (matchFromColorSpace) {
+ ONECOLOR[matchFromColorSpace[1].toUpperCase()].prototype[colorSpaceName.toLowerCase()] = config[propertyName];
+ } else {
+ prototype[propertyName] = config[propertyName];
+ }
+ }
+ }
+
+ // It is pretty easy to implement the conversion to the same color space:
+ prototype[colorSpaceName.toLowerCase()] = function () {
+ return this;
+ };
+ prototype.toString = new Function("return \"[one.color." + colorSpaceName + ":\"+" + propertyNames.map(function (propertyName, i) {
+ return "\" " + propertyNames[i] + "=\"+this._" + propertyName;
+ }).join("+") + "+\"]\";");
+
+ // Generate getters and setters
+ propertyNames.forEach(function (propertyName, i) {
+ prototype[propertyName] = prototype[propertyName === 'black' ? 'k' : propertyName[0]] = new Function("value", "isDelta",
+ // Simple getter mode: color.red()
+ "if (typeof value === 'undefined') {" +
+ "return this._" + propertyName + ";" +
+ "}" +
+ // Adjuster: color.red(+.2, true)
+ "if (isDelta) {" +
+ "return new this.constructor(" + propertyNames.map(function (otherPropertyName, i) {
+ return "this._" + otherPropertyName + (propertyName === otherPropertyName ? "+value" : "");
+ }).join(", ") + ");" +
+ "}" +
+ // Setter: color.red(.2);
+ "return new this.constructor(" + propertyNames.map(function (otherPropertyName, i) {
+ return propertyName === otherPropertyName ? "value" : "this._" + otherPropertyName;
+ }).join(", ") + ");");
+ });
+
+ function installForeignMethods(targetColorSpaceName, sourceColorSpaceName) {
+ var obj = {};
+ obj[sourceColorSpaceName.toLowerCase()] = new Function("return this.rgb()." + sourceColorSpaceName.toLowerCase() + "();"); // Fallback
+ ONECOLOR[sourceColorSpaceName].propertyNames.forEach(function (propertyName, i) {
+ obj[propertyName] = obj[propertyName === 'black' ? 'k' : propertyName[0]] = new Function("value", "isDelta", "return this." + sourceColorSpaceName.toLowerCase() + "()." + propertyName + "(value, isDelta);");
+ });
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop) && ONECOLOR[targetColorSpaceName].prototype[prop] === undefined) {
+ ONECOLOR[targetColorSpaceName].prototype[prop] = obj[prop];
+ }
+ }
+ }
+
+ installedColorSpaces.forEach(function (otherColorSpaceName) {
+ installForeignMethods(colorSpaceName, otherColorSpaceName);
+ installForeignMethods(otherColorSpaceName, colorSpaceName);
+ });
+
+ installedColorSpaces.push(colorSpaceName);
+}
+
+ONECOLOR.installMethod = function (name, fn) {
+ installedColorSpaces.forEach(function (colorSpace) {
+ ONECOLOR[colorSpace].prototype[name] = fn;
+ });
+};
+
+installColorSpace('RGB', ['red', 'green', 'blue', 'alpha'], {
+ hex: function () {
+ var hexString = (Math.round(255 * this._red) * 0x10000 + Math.round(255 * this._green) * 0x100 + Math.round(255 * this._blue)).toString(16);
+ return '#' + ('00000'.substr(0, 6 - hexString.length)) + hexString;
+ },
+
+ hexa: function () {
+ var alphaString = Math.round(this._alpha * 255).toString(16);
+ return '#' + '00'.substr(0, 2 - alphaString.length) + alphaString + this.hex().substr(1, 6);
+ },
+
+ css: function () {
+ return "rgb(" + Math.round(255 * this._red) + "," + Math.round(255 * this._green) + "," + Math.round(255 * this._blue) + ")";
+ },
+
+ cssa: function () {
+ return "rgba(" + Math.round(255 * this._red) + "," + Math.round(255 * this._green) + "," + Math.round(255 * this._blue) + "," + this._alpha + ")";
+ }
+});
+if (typeof define === 'function' && !undef(define.amd)) {
+ define(function () {
+ return ONECOLOR;
+ });
+} else if (typeof exports === 'object') {
+ // Node module export
+ module.exports = ONECOLOR;
+} else {
+ one = window.one || {};
+ one.color = ONECOLOR;
+}
+
+if (typeof jQuery !== 'undefined' && undef(jQuery.color)) {
+ jQuery.color = ONECOLOR;
+}
+
+/*global one*/
+
+installColorSpace('HSV', ['hue', 'saturation', 'value', 'alpha'], {
+ rgb: function () {
+ var hue = this._hue,
+ saturation = this._saturation,
+ value = this._value,
+ i = Math.min(5, Math.floor(hue * 6)),
+ f = hue * 6 - i,
+ p = value * (1 - saturation),
+ q = value * (1 - f * saturation),
+ t = value * (1 - (1 - f) * saturation),
+ red,
+ green,
+ blue;
+ switch (i) {
+ case 0:
+ red = value;
+ green = t;
+ blue = p;
+ break;
+ case 1:
+ red = q;
+ green = value;
+ blue = p;
+ break;
+ case 2:
+ red = p;
+ green = value;
+ blue = t;
+ break;
+ case 3:
+ red = p;
+ green = q;
+ blue = value;
+ break;
+ case 4:
+ red = t;
+ green = p;
+ blue = value;
+ break;
+ case 5:
+ red = value;
+ green = p;
+ blue = q;
+ break;
+ }
+ return new ONECOLOR.RGB(red, green, blue, this._alpha);
+ },
+
+ hsl: function () {
+ var l = (2 - this._saturation) * this._value,
+ sv = this._saturation * this._value,
+ svDivisor = l <= 1 ? l : (2 - l),
+ saturation;
+
+ // Avoid division by zero when lightness approaches zero:
+ if (svDivisor < 1e-9) {
+ saturation = 0;
+ } else {
+ saturation = sv / svDivisor;
+ }
+ return new ONECOLOR.HSL(this._hue, saturation, l / 2, this._alpha);
+ },
+
+ fromRgb: function () { // Becomes one.color.RGB.prototype.hsv
+ var red = this._red,
+ green = this._green,
+ blue = this._blue,
+ max = Math.max(red, green, blue),
+ min = Math.min(red, green, blue),
+ delta = max - min,
+ hue,
+ saturation = (max === 0) ? 0 : (delta / max),
+ value = max;
+ if (delta === 0) {
+ hue = 0;
+ } else {
+ switch (max) {
+ case red:
+ hue = (green - blue) / delta / 6 + (green < blue ? 1 : 0);
+ break;
+ case green:
+ hue = (blue - red) / delta / 6 + 1 / 3;
+ break;
+ case blue:
+ hue = (red - green) / delta / 6 + 2 / 3;
+ break;
+ }
+ }
+ return new ONECOLOR.HSV(hue, saturation, value, this._alpha);
+ }
+});
+
+/*global one*/
+
+
+installColorSpace('HSL', ['hue', 'saturation', 'lightness', 'alpha'], {
+ hsv: function () {
+ // Algorithm adapted from http://wiki.secondlife.com/wiki/Color_conversion_scripts
+ var l = this._lightness * 2,
+ s = this._saturation * ((l <= 1) ? l : 2 - l),
+ saturation;
+
+ // Avoid division by zero when l + s is very small (approaching black):
+ if (l + s < 1e-9) {
+ saturation = 0;
+ } else {
+ saturation = (2 * s) / (l + s);
+ }
+
+ return new ONECOLOR.HSV(this._hue, saturation, (l + s) / 2, this._alpha);
+ },
+
+ rgb: function () {
+ return this.hsv().rgb();
+ },
+
+ fromRgb: function () { // Becomes one.color.RGB.prototype.hsv
+ return this.hsv().hsl();
+ }
+});
+
+/*global one*/
+
+// This file is purely for the build system
+
diff --git a/node_modules/csswring/node_modules/onecolor/one-color-ieshim.js b/node_modules/csswring/node_modules/onecolor/one-color-ieshim.js
new file mode 100644
index 0000000..443756b
--- /dev/null
+++ b/node_modules/csswring/node_modules/onecolor/one-color-ieshim.js
@@ -0,0 +1 @@
+!function(){var prepareString="a"!=="a"[0],toObject=function(o){if(null===o)throw new TypeError("can't convert "+o+" to object");return prepareString&&"string"==typeof o&&o?o.split(""):new Object(o)};Array.prototype.forEach||(Array.prototype.forEach=function(fun){var self=toObject(this),thisp=arguments[1],i=-1,length=self.length>>>0;if("function"!=typeof fun)throw new TypeError;for(;++i>>0,result=new Array(length),thisp=arguments[1];if("function"!=typeof fun)throw new TypeError(fun+" is not a function");for(i=0;length>i;i+=1)i in self&&(result[i]=fun.call(thisp,self[i],i,self));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,i,self=toObject(this),length=self.length>>>0,result=[],thisp=arguments[1];if("function"!=typeof fun)throw new TypeError(fun+" is not a function");for(i=0;length>i;i+=1)i in self&&(value=self[i],fun.call(thisp,value,i,self)&&result.push(value));return result})}();
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/onecolor/one-color.js b/node_modules/csswring/node_modules/onecolor/one-color.js
new file mode 100644
index 0000000..171af36
--- /dev/null
+++ b/node_modules/csswring/node_modules/onecolor/one-color.js
@@ -0,0 +1 @@
+(function(e,t,n,r,i,s,o){function d(r){if(Object.prototype.toString.apply(r)==="[object Array]"){if(typeof r[0]=="string"&&typeof d[r[0]]=="function")return new d[r[0]](r.slice(1,r.length));if(r.length===4)return new d.RGB(r[0]/255,r[1]/255,r[2]/255,r[3]/255)}else if(typeof r=="string"){var i=r.toLowerCase();a[i]&&(r="#"+a[i]),i==="transparent"&&(r="rgba(0,0,0,0)");var s=r.match(p);if(s){var o=s[1].toUpperCase(),u=f(s[8])?s[8]:t(s[8]),l=o[0]==="H",h=s[3]?100:l?360:255,v=s[5]||l?100:255,m=s[7]||l?100:255;if(f(d[o]))throw new Error("one.color."+o+" is not installed.");return new d[o](t(s[2])/h,t(s[4])/v,t(s[6])/m,u)}r.length<6&&(r=r.replace(/^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i,"$1$1$2$2$3$3"));var g=r.match(/^#?([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/i);if(g)return new d.RGB(n(g[1],16)/255,n(g[2],16)/255,n(g[3],16)/255);if(d.CMYK){var y=r.match(new e("^cmyk\\("+c.source+","+c.source+","+c.source+","+c.source+"\\)$","i"));if(y)return new d.CMYK(t(y[1])/100,t(y[2])/100,t(y[3])/100,t(y[4])/100)}}else if(typeof r=="object"&&r.isColor)return r;return!1}function v(e,t,n){function l(e,t){var n={};n[t.toLowerCase()]=new r("return this.rgb()."+t.toLowerCase()+"();"),d[t].propertyNames.forEach(function(e,i){n[e]=n[e==="black"?"k":e[0]]=new r("value","isDelta","return this."+t.toLowerCase()+"()."+e+"(value, isDelta);")});for(var i in n)n.hasOwnProperty(i)&&d[e].prototype[i]===undefined&&(d[e].prototype[i]=n[i])}d[e]=new r(t.join(","),"if (Object.prototype.toString.apply("+t[0]+") === '[object Array]') {"+t.map(function(e,n){return e+"="+t[0]+"["+n+"];"}).reverse().join("")+"}"+"if ("+t.filter(function(e){return e!=="alpha"}).map(function(e){return"isNaN("+e+")"}).join("||")+"){"+'throw new Error("['+e+']: Invalid color: ("+'+t.join('+","+')+'+")");}'+t.map(function(e){return e==="hue"?"this._hue=hue<0?hue-Math.floor(hue):hue%1":e==="alpha"?"this._alpha=(isNaN(alpha)||alpha>1)?1:(alpha<0?0:alpha);":"this._"+e+"="+e+"<0?0:("+e+">1?1:"+e+")"}).join(";")+";"),d[e].propertyNames=t;var s=d[e].prototype;["valueOf","hex","hexa","css","cssa"].forEach(function(t){s[t]=s[t]||(e==="RGB"?s.hex:new r("return this.rgb()."+t+"();"))}),s.isColor=!0,s.equals=function(n,r){f(r)&&(r=1e-10),n=n[e.toLowerCase()]();for(var s=0;sr)return!1;return!0},s.toJSON=new r("return ['"+e+"', "+t.map(function(e){return"this._"+e},this).join(", ")+"];");for(var o in n)if(n.hasOwnProperty(o)){var a=o.match(/^from(.*)$/);a?d[a[1].toUpperCase()].prototype[e.toLowerCase()]=n[o]:s[o]=n[o]}s[e.toLowerCase()]=function(){return this},s.toString=new r('return "[one.color.'+e+':"+'+t.map(function(e,n){return'" '+t[n]+'="+this._'+e}).join("+")+'+"]";'),t.forEach(function(e,n){s[e]=s[e==="black"?"k":e[0]]=new r("value","isDelta","if (typeof value === 'undefined') {return this._"+e+";"+"}"+"if (isDelta) {"+"return new this.constructor("+t.map(function(t,n){return"this._"+t+(e===t?"+value":"")}).join(", ")+");"+"}"+"return new this.constructor("+t.map(function(t,n){return e===t?"value":"this._"+t}).join(", ")+");")}),u.forEach(function(t){l(e,t),l(t,e)}),u.push(e)}var u=[],a={},f=function(e){return typeof e=="undefined"},l=/\s*(\.\d+|\d+(?:\.\d+)?)(%)?\s*/,c=/\s*(\.\d+|100|\d?\d(?:\.\d+)?)%\s*/,h=/\s*(\.\d+|\d+(?:\.\d+)?)\s*/,p=new e("^(rgb|hsl|hsv)a?\\("+l.source+","+l.source+","+l.source+"(?:,"+h.source+")?"+"\\)$","i");d.installMethod=function(e,t){u.forEach(function(n){d[n].prototype[e]=t})},v("RGB",["red","green","blue","alpha"],{hex:function(){var e=(s(255*this._red)*65536+s(255*this._green)*256+s(255*this._blue)).toString(16);return"#"+"00000".substr(0,6-e.length)+e},hexa:function(){var e=s(this._alpha*255).toString(16);return"#"+"00".substr(0,2-e.length)+e+this.hex().substr(1,6)},css:function(){return"rgb("+s(255*this._red)+","+s(255*this._green)+","+s(255*this._blue)+")"},cssa:function(){return"rgba("+s(255*this._red)+","+s(255*this._green)+","+s(255*this._blue)+","+this._alpha+")"}}),typeof define=="function"&&!f(define.amd)?define(function(){return d}):typeof exports=="object"?module.exports=d:(one=window.one||{},one.color=d),typeof jQuery!="undefined"&&f(jQuery.color)&&(jQuery.color=d),v("HSV",["hue","saturation","value","alpha"],{rgb:function(){var e=this._hue,t=this._saturation,n=this._value,r=o(5,i.floor(e*6)),s=e*6-r,u=n*(1-t),a=n*(1-s*t),f=n*(1-(1-s)*t),l,c,h;switch(r){case 0:l=n,c=f,h=u;break;case 1:l=a,c=n,h=u;break;case 2:l=u,c=n,h=f;break;case 3:l=u,c=a,h=n;break;case 4:l=f,c=u,h=n;break;case 5:l=n,c=u,h=a}return new d.RGB(l,c,h,this._alpha)},hsl:function(){var e=(2-this._saturation)*this._value,t=this._saturation*this._value,n=e<=1?e:2-e,r;return n<1e-9?r=0:r=t/n,new d.HSL(this._hue,r,e/2,this._alpha)},fromRgb:function(){var e=this._red,t=this._green,n=this._blue,r=i.max(e,t,n),s=o(e,t,n),u=r-s,a,f=r===0?0:u/r,l=r;if(u===0)a=0;else switch(r){case e:a=(t-n)/u/6+(t=0.4.8"
+ },
+ "files": [
+ "one-color-all-debug.js",
+ "one-color-all.js",
+ "one-color-debug.js",
+ "one-color.js",
+ "one-color-ieshim.js"
+ ],
+ "publishConfig": {
+ "registry": "http://registry.npmjs.org/"
+ },
+ "main": "one-color-all-debug.js",
+ "ender": "lib/ender.js",
+ "scripts": {
+ "postpublish": "jam publish",
+ "test": "vows"
+ },
+ "jam": {
+ "main": "one-color-all.js",
+ "include": [
+ "one-color.js",
+ "one-color-all.js",
+ "one-color-ieshim.js",
+ "README.md",
+ "LICENSE"
+ ]
+ },
+ "gitHead": "8d09dfeee4e17cb2aff7752cf4d66bcb6a2658d5",
+ "bugs": {
+ "url": "https://github.com/One-com/one-color/issues"
+ },
+ "homepage": "https://github.com/One-com/one-color",
+ "_id": "onecolor@2.5.0",
+ "_shasum": "2256b651dc807c101f00aedbd49925c57a4431c1",
+ "_from": "onecolor@^2.4.0",
+ "_npmVersion": "1.5.0-alpha-1",
+ "_npmUser": {
+ "name": "munter",
+ "email": "munter@fumle.dk"
+ },
+ "dist": {
+ "shasum": "2256b651dc807c101f00aedbd49925c57a4431c1",
+ "tarball": "http://registry.npmjs.org/onecolor/-/onecolor-2.5.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/onecolor/-/onecolor-2.5.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/postcss/API.md b/node_modules/csswring/node_modules/postcss/API.md
new file mode 100644
index 0000000..57a9644
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/API.md
@@ -0,0 +1,1296 @@
+# PostCSS API
+
+* [postcss function](#postcss-function)
+* [PostCSS class](#postcss-class)
+* [Result class](#result-class)
+* [Vendor module](#vendor-module)
+* [List module](#list-module)
+* [Input class](#input-class)
+* [Nodes common methods](#nodes-common-methods)
+* [Containers common methods](#containers-common-methods)
+* [Root node](#root-node)
+* [AtRule node](#atrule-node)
+* [Rule node](#rule-node)
+* [Declaration node](#declaration-node)
+* [Comment node](#comment-node)
+
+## `postcss` function
+
+The `postcss` function is the main entry point for PostCSS.
+
+```js
+var postcss = require('postcss');
+```
+
+### `postcss(plugins)`
+
+Returns a new `PostCSS` instance that will apply `plugins`
+as CSS processors.
+
+```js
+postcss([autoprefixer, cssnext, cssgrace]).process(css).css;
+```
+
+You can also set plugins with the [`PostCSS#use`] method.
+
+See [`PostCSS#use`] below for details about plugin formats.
+
+### `postcss.parse(css, opts)`
+
+Parses source `css` and returns a new `Root` node, which contains
+the source CSS nodes.
+
+```js
+// Simple CSS concatenation with source map support
+var root1 = postcss.parse(css1, { from: file1 });
+var root2 = postcss.parse(css2, { from: file2 });
+root1.append(root2).toResult().css;
+```
+
+Options:
+
+* `from`: the path to the source CSS file. You should always set `from`,
+ because it is used in map generation and in syntax error messages.
+* `safe`: enable [Safe Mode], in which PostCSS will try
+ to fix CSS syntax errors.
+* `map`: an object of [source map options].
+ Only `map.prev` is used in `parse`.
+
+### `postcss.root(props)`
+
+Creates a new [`Root` node].
+
+```js
+postcss.root({ after: '\n' }).toString() //=> "\n"
+```
+
+### `postcss.atRule(props)`
+
+Creates a new [`AtRule` node].
+
+```js
+postcss.atRule({ name: 'charset' }).toString() //=> "@charset"
+```
+
+### `postcss.rule(props)`
+
+Creates a new [`Rule` node].
+
+```js
+postcss.rule({ selector: 'a' }).toString() //=> "a {\n}"
+```
+
+### `postcss.decl(props)`
+
+Creates a new [`Declaration` node].
+
+```js
+postcss.decl({ prop: 'color', value: 'black' }).toString() //=> "color: black"
+```
+
+### `postcss.comment(props)`
+
+Creates a new [`Comment` node].
+
+```js
+postcss.comment({ text: 'test' }).toString() //=> "/* test */"
+```
+
+## `PostCSS` class
+
+A `PostCSS` instance contains plugins to process CSS. You can create
+one `PostCSS` instance, initialize its plugins, and then use that instance
+on many CSS files.
+
+```js
+var processor = postcss([autoprefixer, cssnext, cssgrace]);
+processor.process(css1).css;
+processor.process(css2).css;
+```
+
+### `p.use(plugin)`
+
+Adds a plugin to be used as a CSS processor.
+
+```js
+var processor = postcss();
+processor.use(autoprefixer).use(cssnext).use(cssgrace);
+```
+
+Plugins can also be added by passing them as arguments when creating
+a `postcss` instance (cf. [`postcss(plugins)`]).
+
+Plugins can come in three formats:
+
+1. A function. PostCSS will pass the function a [`Root` node]
+ as the first argument.
+2. An object with a `postcss` method. PostCSS will use that method
+ as described in #1.
+3. Another `PostCSS` instance. PostCSS will copy plugins
+ from that instance to this one.
+
+Plugin functions should mutate the passed `Root` node and return nothing,
+or return a new `Root` node.
+
+```js
+processor.use(function (css) {
+ css.prepend({ name: 'charset', params: '"UTF-8"' });
+});
+processor.use(function (css) {
+ return postcss.root();
+});
+```
+
+### `p.process(css, opts)`
+
+This is the main method of PostCSS. It will parse the source CSS
+and create a [`Root` node]; send this `Root` to each plugin successively,
+for transformations; and then return a `Result` instance created
+from the transformed `Root`.
+
+```js
+var result = processor.process(css, { from: 'a.css', to: 'a.out.css' });
+```
+
+Input CSS formats are:
+
+* A string of CSS.
+* A `Result` instance from another PostCSS processor. PostCSS will accept
+ the already parsed `Root` from it.
+* Any object with a `toString()` method — for example, a file stream.
+
+Options:
+
+* `from`: the path of the CSS source file. You should always set `from`,
+ because it is used in source map generation and syntax error messages.
+* `to`: the path where you’ll put the output CSS file. You should always set
+ `to` to generate correct source maps.
+* `safe`: enable [Safe Mode], in which PostCSS will try
+ to fix CSS syntax errors.
+* `map`: an object of [source map options].
+
+## `Result` class
+
+Provides result of PostCSS transformations.
+
+A `Result` instance is returned
+by [`PostCSS#process(css, opts)`] and [`Root#toResult(opts)`].
+
+```js
+var result1 = postcss().process(css);
+var result2 = postcss.parse(css).toResult();
+```
+
+### `result.root`
+
+The source `Root` instance.
+
+```js
+root.toResult().root == root;
+```
+
+### `result.opts`
+
+Options from the [`PostCSS#process(css, opts)`] or
+[`Root#toResult(opts)`] call that produced
+this `Result` instance.
+
+```js
+postcss().process(css, opts).opts == opts;
+```
+
+### `result.css`
+
+A CSS string representing this `Result`’s '`Root` instance.
+
+```js
+postcss().process('a{}').css //=> "a{}"
+```
+
+This property is generated *lazily*: `Root` is not stringified until
+the first request for the `css` property (or the [`result.map`] property).
+That initial request for `css` will also generate a source map.
+Source map will inlined into CSS or assigned to the [`result.map`] property,
+if user ask to save map to separated file.
+
+### `result.map`
+
+An instance of the `SourceMapGenerator` class from the [`source-map`] library,
+representing changes to the `Result`’s `Root` instance.
+
+```js
+result.map.toJSON() //=> { version: 3, file: 'a.css', sources: ['a.css'], … }
+```
+
+This property is generated *lazily*: the source map for `Root` is not generated
+until the first request for the `map` property (or the [`result.css`] property).
+That initial request will also stringify `Root` and assign the generated
+CSS string to the [`result.css`] property.
+
+Additionally, *this property will receive a value only if the user does not wan
+an inline source map*. By default, PostCSS generates inline source maps,
+written directly into the processed CSS; so by default the `map` property
+will be empty.
+
+An external source map will be generated — and assigned to `map` — only if the
+user has set the `map.inline` option to `false`, or if PostCSS was passed
+an external input source map.
+
+```js
+if ( result.map ) {
+ fs.writeFileSync(to + '.map', result.map.toString());
+}
+```
+
+## Vendor module
+
+Contains helpers for working with vendor prefixes.
+
+### `vendor.prefix(string)`
+
+Returns the vendor prefix extracted from an input string.
+
+```js
+vendor.prefix('-moz-tab-size') //=> '-moz-'
+```
+
+### `vendor.unprefixed(string)`
+
+Returns the input string stripped of its vendor prefix.
+
+```js
+vendor.unprefixed('-moz-tab-size') //=> 'tab-size'
+```
+
+## List module
+
+Contains helpers for safely splitting lists of CSS values, preserving parentheses
+and quotes.
+
+```js
+var list = require('postcss/lib/list');
+```
+
+### `list.space(string)`
+
+Safely splits space-separated values (such as those for `background`,
+`border-radius`, and other shorthand properties).
+
+```js
+list.space('1px calc(10% + 1px)')
+//=> ['1px', 'calc(10% + 1px)']
+```
+
+### `list.comma(string)`
+
+Safely splits comma-separated values (such as those
+for `transition-*` and `background` properties).
+
+```js
+list.comma('black, linear-gradient(white, black)')
+//=> ['black', 'linear-gradient(white, black)']
+```
+
+## `Input` class
+
+Represents the source CSS.
+
+```js
+var root = postcss.parse(css, { from: file });
+var input = root.source.input;
+```
+
+### `input.file`
+
+The absolute path to the CSS source file defined with
+the [`from` option](#pprocesscss-opts).
+
+```js
+var root = postcss.parse(css, { from: 'a.css' });
+root.source.input.file //=> '/home/ai/a.css'
+```
+
+### `input.id`
+
+The unique ID of the CSS source. This is used if the user did not enter a `from`
+options so PostCSS does not know about a file path.
+
+```js
+var root = postcss.parse(css);
+root.source.input.file //=> undefined
+root.source.input.id //=>
+```
+
+### `input.from`
+
+The CSS source identifier. Contains [`input.file`](#inputfile) if the user set the
+[`from` option](#pprocesscss-opts), or [`input.id`](#inputid) if she did not.
+
+```js
+var root = postcss.parse(css, { from: 'a.css' });
+root.source.input.from //=> '/home/ai/a.css'
+
+var root = postcss.parse(css);
+root.source.input.from //=>
+```
+
+### `input.map`
+
+Represents the input source map passed from a compilation step before PostCSS
+(for example, from the Sass compiler).
+
+`map.consumer()` returns an instance of the `SourceMapConsumer` class
+from the [`source-map`] library.
+
+```js
+root.source.input.map.consumer().sources //=> ['a.sass']
+```
+
+### `input.origin(line, column)`
+
+Reads the input source map and returns a symbol position in the input source
+(for example, in a Sass file that was compiled to CSS before being passed
+to PostCSS):
+
+```js
+root.source.input.origin(1, 1) //=> { source: 'a.css', line: 3, column: 1 }
+```
+
+## Nodes: common methods
+
+All node classes have many common methods.
+
+### `node.type`
+
+Returns a string representing the node’s type.
+
+Possible values are `root`, `atrule`, `rule`, `decl`, or `comment`.
+
+```js
+postcss.decl({ prop: 'color', value: 'black' }).type //=> 'decl'
+```
+
+### `node.parent`
+
+Returns the node’s parent node.
+
+```js
+root.nodes[0].parent == root;
+```
+
+### `node.source`
+
+Returns the input source of the node, with the following properties:
+
+- `node.source.input`: An [`Input`] instance.
+- `node.source.start`: The starting position of the node’s source —
+ line and column.
+- `node.source.end`: The ending position of the node’s source — line and column.
+
+```js
+decl.source.input.from //=> '/home/ai/a.sass'
+decl.source.start //=> { line: 10, column: 2 }
+decl.source.end //=> { line: 10, column: 12 }
+```
+
+The property is used in source map generation.
+
+If you create a node manually (for example, with `postcss.decl()`),
+that node will not have a `source` property and will be absent
+from the source map. For this reason, plugin developer should consider
+cloning nodes to create new ones (in which case the new node’s source
+will reference the original, cloned node) or setting the `source` property
+manually.
+
+```js
+// Bad
+var prefixed = postcss.decl({ prop: '-moz-' + decl.prop, value: decl.value });
+
+// Good
+var prefixed = decl.clone({ prop: '-moz-' + decl.prop });
+```
+
+```js
+if ( atrule.name == 'add-link' ) {
+ var rule = postcss.rule({ selector: 'a' }); // Rule has no source
+ atrule.parent.insertBefore(atrule, rule); // We add it because of atrule
+ rule.source = atrule.source; // So we copy source from atrule
+}
+```
+
+### `node.toString()`
+
+Returns a CSS string representing the node.
+
+```js
+postcss.rule({ selector: 'a' }).toString() //=> 'a {}''
+```
+
+### `node.error(message)`
+
+Returns a `CssSyntaxError` instance that presents the original position
+of the node in the source, showing line and column numbers and also
+a small excerpt to facilitate debugging.
+
+It will use an input source map, if present, to get the original position
+of the source, even from a previous compilation step
+(for example, from Sass compilation).
+
+This method produces very useful error messages.
+
+```js
+if ( !variables[name] ) {
+ throw decl.error('Unknown variable ' + name);
+ // CssSyntaxError: a.sass:4:3: Unknown variable $black
+ // a
+ // color: $black
+ // ^
+ // background: white
+}
+
+if ( oldSyntax.check(decl) ) {
+ console.warn( decl.error('Old syntax for variables').message );
+ // a.sass:4:3: Old syntax for variables
+}
+```
+
+### `node.next()` and `node.prev()`
+
+Returns the next/previous child of the node’s parent; or returns `undefined`
+if the current node is the last/first child.
+
+```js
+var annotation = decl.prev();
+if ( annotation.type == 'comment' ) {
+ readAnnotation( annotation.text );
+}
+```
+
+### `node.root()`
+
+Returns the `Root` instance of the node’s tree.
+
+```js
+root.nodes[0].nodes[0].root() == root
+```
+
+### `node.removeSelf()`
+
+Removes the node from its parent, and cleans the `parent` property in the node
+and its children.
+
+```js
+if ( decl.prop.match(/^-webkit-/) ) {
+ decl.removeSelf();
+}
+```
+
+### `node.replaceWith(otherNode)`
+
+Inserts another node before the current node, and removes the current node.
+
+```js
+if ( atrule.name == 'mixin' ) {
+ atrule.replaceWith(mixinRules[atrule.params]);
+}
+```
+
+### `node.clone(props)`
+
+Returns a clones of the node.
+
+The resultant clone node and its (clone) children will have clean `parent`
+and code style properties. You can override properties in the clone node
+by passing a `props` argument.
+
+```js
+var clonded = decl.clone({ prop: '-moz-' + decl.prop });
+cloned.before //=> undefined
+cloned.parent //=> undefined
+cloned.toString() //=> -moz-transform: scale(0)
+```
+
+### `node.cloneBefore(props)` and `node.cloneAfter(props)`
+
+Shortcuts to clone the node and insert the resultant clone node before/after
+the current node.
+
+```js
+decl.cloneBefore({ prop: '-moz-' + decl.prop });
+```
+
+### `node.moveTo(newParent)`
+
+Removes the node from its current parent and inserts it
+at the end of `newParent`.
+
+This will clean the `before` and `after` code style properties from the node,
+and replace them with the indentation style of `newParent`. It will also clean
+the `between` property if `newParent` is in another `Root`.
+
+```js
+atrule.moveTo(atrule.parent.parent);
+```
+
+### `node.moveBefore(otherNode)` and `node.moveAfter(otherNode)`
+
+Removes the node from its current parent and inserts it into a new parent
+before/after `otherNode`.
+
+This will also clean the node’s code style properties just
+as `node.moveTo(newParent)` does.
+
+### `node.style(prop, defaultType)`
+
+Returns a code style property value. If the node is missing the code style
+property (because the node was manually built or cloned), PostCSS will try
+to autodetect the code style property by looking at other nodes in the tree.
+
+```js
+var root = postcss.parse('a { background: white }');
+root.nodes[0].append({ prop: 'color', value: 'black' });
+root.nodes[0].nodes[1].style('before') //=> ' '
+```
+
+## Containers: common methods
+
+The `Root`, `AtRule`, and `Rule` container nodes have some common methods
+to help work with their children.
+
+Note that all containers can store *any* content. If you write a rule inside
+a rule, PostCSS will parse it.
+
+### `container.nodes`
+
+An array containing the container’s children.
+
+```js
+var root = postcss.parse('a { color: black }');
+root.nodes.length //=> 1
+root.nodes[0].selector //=> 'a'
+root.nodes[0].nodes[0].prop //=> 'color'
+```
+
+### `container.first`
+
+The container’s first child.
+
+```js
+rule.first == rules.nodes[0];
+```
+
+### `container.last`
+
+The container’s last child.
+
+```js
+rule.last == rule.nodes[rule.nodes.length - 1];
+```
+
+### `container.index(child)`
+
+Returns `child`’s index within the container’s `nodes` array.
+
+```js
+rule.index( rule.nodes[2] ) //=> 2
+```
+
+### `container.every(callback)`
+
+Returns `true` if `callback` returns a truthy value for all
+of the container’s children.
+
+```js
+var noPrefixes = rule.every(function (decl) {
+ return decl.prop[0] != '-';
+});
+```
+
+### `container.some(callback)`
+
+Return `true` if `callback` returns a truthy value
+for (at least) one of the container’s children.
+
+```js
+var hasPrefix = rule.some(function (decl) {
+ return decl.prop[0] == '-';
+});
+```
+
+### `container.each(callback)`
+
+Iterates through the container’s immediate children, calling `callback`
+for each child.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+Returning `false` within `callback` will break iteration.
+
+```js
+var color;
+rule.each(function (decl) {
+ if ( decl.prop == 'color' ) {
+ color = decl.value;
+ return false;
+ }
+});
+```
+
+Unlike the `for {}`-cycle or `Array#forEach()` this iterator is safe
+if you are mutating the array of child nodes during iteration.
+PostCSS will adjust the current index to match the mutations.
+
+```js
+var root = postcss.parse('a { color: black; z-index: 1 }');
+var rule = root.first;
+
+for ( var i = 0; i < rule.nodes.length; i++ ) {
+ var decl = rule.nodes[i];
+ decl.cloneBefore({ prop: '-webkit-' + decl.prop });
+ // Cycle will be infinite, because cloneBefore move current node
+ // to next index
+}
+
+rule.each(function (decl) {
+ decl.cloneBefore({ prop: '-webkit-' + decl.prop });
+ // Will be executed only for color and z-index
+});
+```
+
+`container.each()` only iterates through the container’s immediate children.
+If you need to recursively iterate through all the container’s descendents,
+use `container.eachInside()`.
+
+### `container.eachInside(callback)`
+
+Recursively iterates through the container’s children,
+those children’s children, etc., calling `callback` for each.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+```js
+root.eachInside(function (node) {
+ // Will be iterate through all nodes
+});
+```
+
+Like `container.each()`, this method is safe to use
+if you are mutating arrays during iteration.
+
+If you only need to iterate through the container’s immediate children,
+use `container.each()`.
+
+### `container.eachDecl([propFilter,] callback)`
+
+Recursively iterates through all declaration nodes within the container,
+calling `callback` for each.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+```js
+root.eachDecl(function (decl) {
+ if ( decl.prop.match(/^-webkit-/) ) {
+ decl.removeSelf();
+ }
+});
+```
+
+If you pass a string or regular expression as `filter`, only those declarations whose
+property matches`filter` will be iterated over.
+
+```js
+// Make flat design
+root.eachDecl('border-radius', function (decl) {
+ decl.removeSelf();
+});
+root.eachDecl(/^background/, function (decl) {
+ decl.value = takeFirstColorFromGradient(decl.value);
+});
+```
+
+Like `container.each()`, this method is safe to use if you are mutating
+arrays during iteration.
+
+### `container.eachAtRule([nameFilter,] callback)`
+
+Recursively iterates through all at-rule nodes within the container,
+calling `callback` for each.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+
+```js
+root.eachAtRule(function (rule) {
+ if ( rule.name.match(/^-webkit-/) ) rule.removeSelf();
+});
+```
+
+If you pass a string or regular expression as `filter`, only those at-rules whose name
+matches `filter` will be iterated over.
+
+```js
+var first = false;
+root.eachAtRule('charset', function (rule) {
+ if ( !first ) {
+ first = true;
+ } else {
+ rule.removeSelf();
+ }
+});
+```
+
+Like `container.each()`, this method is safe to use if you are mutating arrays
+during iteration.
+
+### `container.eachRule(callback)`
+
+Recursively iterates through all rule nodes within the container, calling
+`callback` for each.
+
+`callback` receives 2 arguments: the node itself and an index.
+
+```js
+var selectors = [];
+root.eachRule(function (rule) {
+ selectors.push(rule.selector);
+});
+console.log('You CSS uses ' + selectors.length + ' selectors');
+```
+
+Like `container.each()`, this method is safe to use if you are mutating arrays
+during iteration.
+
+### `container.eachComment(callback)`
+
+Recursively iterates through all comment nodes within the container, calling
+`callback` for each.
+
+```js
+root.eachComment(function (comment) {
+ comment.removeSelf();
+})
+```
+
+Like `container.each()`, this method is safe to use if you are mutating arrays
+during iteration.
+
+### `container.replaceValues(regexp, opts, callback)`
+
+Passes all declaration values within the container that match `regexp` through
+`callback`, replacing those values with the returned result of `callback`.
+
+`callback` will receive the same arguments as those passed to a function
+parameter of [`String#replace`].
+
+You can speed up the search by passing `opts`:
+
+- `props`: An array of property names. The method will only search for values
+ that match `regexp` within declarations of listed properties.
+- `fast`: A string that will be used to narrow down values and speed up
+ the regexp search. Searching every single value with a regexp can be slow;
+ so if you pass a `fast` string, PostCSS will first check whether the value
+ contains the `fast` string; and only if it does will PostCSS check that value
+ against `regexp`. For example, instead of just checking for `/\d+rem/` on
+ all values, you can set `fast: 'rem'` to first check whether a value has
+ the `rem` unit, and only if it does perform the regexp check.
+
+This method is useful if you are using a custom unit or function,
+so need to iterate through all values.
+
+```js
+root.replaceValues(/\d+rem/, { fast: 'rem' }, function (string) {
+ return 15 * parseInt(string) + 'px';
+});
+```
+
+[`String#replace`]: (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter)
+
+### `container.prepend(node)` and `container.append(node)`
+
+Insert a new node to the start/end of the container.
+
+```js
+var decl = postcss.decl({ prop: 'color', value: 'black' });
+rule.append(decl);
+```
+
+Because each node class is identifiable by unique properties, you can use
+the following shortcuts to create nodes to prepend/append:
+
+```js
+root.append({ name: '@charset', params: '"UTF-8"' }); // at-rule
+root.append({ selector: 'a' }); // rule
+rule.append({ prop: 'color', value: 'black' }); // declaration
+rule.append({ text: 'Comment' }) // comment
+```
+
+### `container.insertBefore(oldNode, newNew)` and `container.insertAftr(oldNode, newNew)`
+
+Insert `newNode` before/after `oldNode` within the container.
+
+`oldNode` can be a node or a node’s index.
+
+```js
+rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop }));
+```
+
+You can also use the same shorcuts available to `container.append()`.
+
+```js
+rule.insertBefore(decl, { prop: 'color', value: 'black' });
+```
+
+### `container.remove(node)`
+
+Removes `node` from the container, and the `parent` properties of `node`
+and its children.
+
+`node` can be a node or a node’s index.
+
+```js
+rule.nodes.length //=> 5
+rule.remove(decl);
+rule.nodes.length //=> 4
+decl.parent //=> undefined
+```
+
+### `container.removeAll()`
+
+Removes all children from the container, and cleans their `parent` properties.
+
+```js
+rule.removeAll();
+rule.nodes.length //=> 0
+```
+
+## `Root` node
+
+Represents a CSS file and contains all its parsed nodes.
+
+```js
+var root = postcss.parse('a{color:black} b{z-index:2}');
+root.type //=> 'root'
+root.nodes.length //=> 2
+```
+
+### `root.toResult(opts)`
+
+Returns a [`Result`] instance representing the root's CSS.
+
+```js
+var root1 = postcss.parse(css1, { from: 'a.css' });
+var root2 = postcss.parse(css2, { from: 'b.css' });
+
+root1.append(root2);
+var result = root1.toResult({ to: 'all.css', map: true });
+```
+
+Options:
+
+* `to`: the path where you’ll put the output CSS file. You should always set
+ `to` to generate correct source maps.
+* `map`: an object of [source map options].
+
+### `root.after`
+
+The space symbols after the last child of `root`,
+such as `\n` at the end of a file.
+
+```js
+var root = parse('a {}\nb { color: black }\n');
+root.after //=> '\n'
+```
+
+This is a code style property.
+
+## `AtRule` node
+
+Represents an at-rule.
+
+This node will have a `nodes` property, representing its children,
+if it is followed in the CSS by a `{}` block.
+
+
+```js
+var root = postcss.parse('@charset "UTF-8"; @media print {}');
+
+var charset = root.first;
+charset.type //=> 'atrule'
+charset.nodes //=> undefined
+
+var media = root.last;
+media.nodes //=> []
+```
+
+### `atrule.name`
+
+The at-rule’s name. This is the identifier that immediately follows the `@`.
+
+```js
+var root = postcss.parse('@media print {}');
+var media = root.first;
+media.name //=> 'media'
+```
+
+### `atrule.params`
+
+The at-rule’s parameters. These are the values that follow the at-rule’s name
+but precede any `{}` block. The spec refers to this area
+as the at-rule’s “prelude”.
+
+```js
+var root = postcss.parse('@media print, screen {}');
+var media = root.first;
+media.params //=> '[print, screen]'
+```
+
+This value will be cleaned of comments. If the source at-rule’s prelude
+contained comments, those comments will be available
+in the `_params.raw` property.
+
+If you have not changed the parameters, calling `atrule.toString()`
+will stringify the original raw value (comments and all).
+
+```js
+var root = postcss.parse('@media print, /**/ screen {}');
+var media = root.first;
+media.params //=> '[print, screen]'
+media._params.raw //=> 'print, /**/ screen'
+media.toString() //=> '@media print, /**/ screen {}'
+```
+
+### `atrule.before`
+
+The space symbols before the at-rule.
+
+The default value is `\n`, except for the first rule in a `Root`,
+whose `before` property is empty.
+
+```js
+var root = postcss.parse('@charset "UTF-8";\n@media print {}\n');
+var media = root.last;
+media.before //=> '\n'
+```
+
+This is a code style property.
+
+### `atrule.afterName`
+
+The space symbols between the at-rule’s name and its parameters.
+
+The default value is ` `.
+
+```js
+var root = postcss.parse('@media\n print,\n screen {}\n');
+var media = root.first;
+media.afterName //=> '\n '
+```
+
+This is a code style property.
+
+### `atrule.between`
+
+The space symbols between the at-rule’s parameters
+and `{`, the block-opening curly brace.
+
+The default value is ` `.
+
+```js
+var root = postcss.parse('@media print, screen\n{}\n');
+var media = root.first;
+media.before //=> '\n'
+```
+
+This is a code style property.
+
+### `atrule.after`
+
+The space symbols between the at-rule’s last child and `}`,
+the block-closing curly brace.
+
+The default value is `\n` if the at-rule has children,
+and an empty string (`''`) if it does not.
+
+```js
+var root = postcss.parse('@media print {\n a {}\n }\n');
+var media = root.first;
+media.after //=> '\n '
+```
+
+This is a code style property.
+
+### `atrule.semicolon`
+
+`true` if at-rule’s last child declaration
+is followed by an (optional) semicolon.
+
+`undefined` if the semicolon is omitted.
+
+```js
+postcss.parse('@page{color:black}').first.semicolon //=> undefined
+postcss.parse('@page{color:black;}').first.semicolon //=> true
+```
+
+This is a code style property.
+
+## `Rule` node
+
+Represents a CSS rule: a selector followed by a declaration block.
+
+```js
+var root = postcss.parse('a{}');
+var rule = root.first;
+rule.type //=> 'rule'
+rule.toString() //=> 'a{}'
+```
+
+### `rule.selector`
+
+The rule’s full selector represented as a string. If there are multiple
+comma-separated selectors, the entire group will be included.
+
+```js
+var root = postcss.parse('a, b { }');
+var rule = root.first;
+rule.selector //=> 'a, b'
+```
+
+This value will be cleaned of comments. If the source selector contained
+comments, those comments will be available in the `_selector.raw` property.
+
+If you have not changed the selector, the result of `rule.toString()`
+will include the original raw selector value (comments and all).
+
+```js
+var root = postcss.parse('a /**/ b {}');
+var rule = root.first;
+rule.selector //=> 'a b'
+rule._selector.raw //=> 'a /**/ b'
+rule.toString() //=> 'a /**/ b {}'
+```
+
+### `rule.selectors`
+
+An array containing the rule’s individual selectors.
+Groups of selectors are split at commas.
+
+```js
+var root = postcss.parse('a, b { }');
+var rule = root.first;
+
+rule.selector //=> 'a, b'
+rule.selectors //=> ['a', 'b']
+
+rule.selectors = ['a', 'strong'];
+rule.selector //=> 'a, strong'
+```
+
+### `rule.before`
+
+The space symbols before the rule.
+
+The default value is `\n`, except for first rule in root,
+whose `before` property is empty.
+
+```js
+var root = postcss.parse('a {}\nb {}\n');
+var rule = root.last;
+rule.before //=> '\n'
+```
+
+This is a code style property.
+
+### `rule.after`
+
+The space symbols between the rule’s last child and `}`,
+the block-closing curly brace.
+
+The default value is `\n` if rule has children and an empty string (`''`)
+if it does not.
+
+```js
+var root = postcss.parse('@a {\n color: black\n }\n');
+var rule = root.first;
+root.after //=> '\n '
+```
+
+This is a code style property.
+
+### `rule.semicolon`
+
+`true` if rule’s last child declaration is followed by an (optional) semicolon.
+
+`undefined` if the semicolon is omitted.
+
+```js
+postcss.parse('a{color:black}').first.semicolon //=> undefined
+postcss.parse('a{color:black;}').first.semicolon //=> true
+```
+
+This is a code style property.
+
+## `Declaration` node
+
+Represents a CSS declaration.
+
+```js
+var root = postcss.parse('a { color: black }');
+var decl = root.first.first;
+decl.type //=> 'decl'
+decl.toString() //=> ' color: black'
+```
+
+### `declaration.prop`
+
+The declaration’s property name.
+
+```js
+var root = postcss.parse('a { color: black }');
+var decl = root.first.first;
+decl.prop //=> 'color'
+```
+
+### `declaration.value`
+
+The declaration’s value.
+
+```js
+var root = postcss.parse('a { color: black }');
+var decl = root.first.first;
+decl.value //=> 'black'
+```
+
+This value will be cleaned of comments. If the source value contained comments,
+those comments will be available in the `_value.raw` property.
+
+If you have not changed the value, the result of `decl.toString()` will include
+the original raw value (comments and all).
+
+```js
+var root = postcss.parse('a { border-radius: 3px /**/ 0 }');
+var decl = root.first.first;
+decl.value //=> '3px 0'
+decl._value.raw //=> '3px /**/ 0'
+decl.toString() //=> ' border-radius: 3px /**/ 0'
+```
+
+### `declaration.before`
+
+The space symbols before the declaration.
+
+Default value is `\n `.
+
+```js
+var root = postcss.parse('a {\n color: black\n}\n');
+var decl = root.first.first;
+decl.before //=> '\n '
+```
+
+This is a code style property.
+
+### `declaration.between`
+
+The symbols between the declaration’s property and its value.
+
+Default value is `: `.
+
+```js
+var root = postcss.parse('a { color/**/: black }');
+var decl = root.first.first;
+decl.between //=> '/**/: '
+```
+
+This is a code style property.
+
+### `declaration.important`
+
+`true` if the declaration has an `!important` annotation.
+
+```js
+var root = postcss.parse('a { color: black !important; color: white }');
+root.first.first.important //=> true
+root.first.last.important //=> undefined
+```
+
+If there are comments between the declaration’s value and its
+`!important` annotation, they will be available in the `_important` property.
+
+```js
+var root = postcss.parse('a { color: black /**/ !important }');
+root.first.first._important //=> ' /**/ !important'
+```
+
+## `Comment` node
+
+Represents a comment between declarations or statements (rule and at-rules).
+Comments inside selectors, at-rules parameters, or declaration values
+will be stored in the raw properties explained above.
+
+```js
+var root = postcss.parse('a { color: /* inner */ black; /* outer */ }');
+var decl = root.first.first;
+var comment = root.first.last;
+
+comment.type //=> 'comment'
+decl.between //=> ': /* inner */'
+```
+
+### `comment.text`
+
+The comment’s text.
+
+```js
+var root = postcss.parse('/* Empty file */');
+var comment = root.first;
+var comment.text //=> 'Empty file'
+```
+
+### `comment.left` and `comment.right`
+
+The space symbols before/after the comment’s text.
+
+Default value is ` `.
+
+```js
+var root = postcss.parse('/* long */ /*short*/');
+var long = root.first;
+var short = root.last;
+
+long.left //=> ' '
+short.left //=> ''
+```
+
+This is a code style property.
+
+### `comment.before`
+
+The space symbols before the comment.
+
+Default value is `\n`.
+
+```js
+var root = postcss.parse('a {\n /**/}\n');
+var comment = root.first.first;
+comment.before //=> '\n '
+```
+
+This is a code style property.
+
+[`source-map`]: https://github.com/mozilla/source-map
+
+[source map options]: https://github.com/postcss/postcss#source-map
+[Safe Mode]: https://github.com/postcss/postcss#safe-mode
+
+[`PostCSS#process(css, opts)`]: #pprocesscss-opts
+[`Root#toResult(opts)`]: #roottoresult-opts
+[`postcss(plugins)`]: #postcssplugins
+[`Declaration` node]: #declaration-node
+[`Comment` node]: #comment-node
+[`PostCSS#use`]: #puseplugin
+[`AtRule` node]: #atrule-node
+[`result.map`]: #resultmap
+[`result.css`]: #resultcss
+[`Root` node]: #root-node
+[`Rule` node]: #rule-node
+[`Input`]: #inputclass
+[`Result`]: #result-class
diff --git a/node_modules/csswring/node_modules/postcss/ChangeLog.md b/node_modules/csswring/node_modules/postcss/ChangeLog.md
new file mode 100644
index 0000000..736bf8d
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/ChangeLog.md
@@ -0,0 +1,196 @@
+## 4.0.6
+* Remove `babel` from released package dependencies (by Andres Suarez).
+
+## 4.0.5
+* Fix error message on double colon in declaration.
+
+## 4.0.4
+* Fix indent detection in some rare cases.
+
+## 4.0.3
+* Faster API with 6to5 Loose mode.
+* Fix indexed source maps support.
+
+## 4.0.2
+* Do not copy IE hacks to code style.
+
+## 4.0.1
+* Add `source.input` to `Root` too.
+
+## 4.0 “Duke Flauros”
+* Rename `Container#childs` to `nodes`.
+* Rename `PostCSS#processors` to `plugins`.
+* Add `Node#replaceValues()` method.
+* Add `Node#moveTo()`, `moveBefore()` and `moveAfter()` methods.
+* Add `Node#cloneBefore()` and `cloneAfter()` shortcuts.
+* Add `Node#next()`, `prev()` and `root()` shorcuts.
+* Add `Node#replaceWith()` method.
+* Add `Node#error()` method.
+* Add `Container#removeAll()` method.
+* Add filter argument to `eachDecl()` and `eachAtRule()`.
+* Add `Node#source.input` and move `source.file` or `source.id` to `input`.
+* Change code indent, when node was moved.
+* Better fix code style on `Rule`, `AtRule` and `Comment` nodes changes.
+* Allow to create rules and at-rules by hash shortcut in append methods.
+* Add class name to CSS syntax error output.
+
+## 3.0.7
+* Fix IE filter parsing with multiple commands.
+* Safer way to consume PostCSS object as plugin (by Maxime Thirouin).
+
+## 3.0.6
+* Fix missing semicolon when comment comes after last declaration.
+* Fix Safe Mode declaration parsing on unclosed blocks.
+
+## 3.0.5
+* Fix parser to support difficult cases with backslash escape and brackets.
+* Add `CssSyntaxError#stack` (by Maxime Thirouin).
+
+## 3.0.4
+* Fix Safe Mode on unknown word before declaration.
+
+## 3.0.3
+* Increase tokenizer speed (by Roman Dvornov).
+
+## 3.0.2
+* Fix empty comment parsing.
+* Fix `Root#normalize` in some inserts.
+
+## 3.0.1
+* Fix Rhino JS runtime support.
+* Typo in deprecated warning (by Maxime Thirouin).
+
+## 3.0 “Marquis Andrealphus”
+* New parser, which become the fastest ever CSS parser written in JavaScript.
+* Parser can now parse declarations and rules in one parent (like in `@page`)
+ and nested declarations for plugins like `postcss-nested`.
+* Child nodes array is now in `childs` property, instead of `decls` and `rules`.
+* `map.inline` and `map.sourcesContent` options are now `true` by default.
+* Fix iterators (`each`, `insertAfter`) on children array changes.
+* Use previous source map to show origin source of CSS syntax error.
+* Use 6to5 ES6 compiler, instead of ES6 Transpiler.
+* Use code style for manually added rules from existing rules.
+* Use `from` option from previous source map `file` field.
+* Set `to` value to `from` if `to` option is missing.
+* Use better node source name when missing `from` option.
+* Show a syntax error when `;` is missed between declarations.
+* Allow to pass `PostCSS` instance or list of plugins to `use()` method.
+* Allow to pass `Result` instance to `process()` method.
+* Trim Unicode BOM on source maps parsing.
+* Parse at-rules without spaces like `@import"file"`.
+* Better previous `sourceMappingURL` annotation comment cleaning.
+* Do not remove previous `sourceMappingURL` comment on `map.annotation: false`.
+* Parse nameless at-rules in Safe Mode.
+* Fix source map generation for nodes without source.
+* Fix next child `before` if `Root` first child got removed.
+
+## 2.2.6
+* Fix map generation for nodes without source (by Josiah Savary).
+
+## 2.2.5
+* Fix source map with BOM marker support (by Mohammad Younes).
+* Fix source map paths (by Mohammad Younes).
+
+## 2.2.4
+* Fix `prepend()` on empty `Root`.
+
+## 2.2.3
+* Allow to use object shortcut in `use()` with functions like `autoprefixer`.
+
+## 2.2.2
+* Add shortcut to set processors in `use()` via object with `.postcss` property.
+
+## 2.2.1
+* Send `opts` from `Processor#process(css, opts)` to processors.
+
+## 2.2 “Marquis Cimeies”
+* Use GNU style syntax error messages.
+* Add `Node#replace` method.
+* Add `CssSyntaxError#reason` property.
+
+## 2.1.2
+* Fix UTF-8 support in inline source map.
+* Fix source map `sourcesContent` if there is no `from` and `to` options.
+
+## 2.1.1
+* Allow to miss `to` and `from` options for inline source maps.
+* Add `Node#source.id` if file name is unknown.
+* Better detect splitter between rules in CSS concatenation tools.
+* Automatically clone node in insert methods.
+
+## 2.1 “King Amdusias”
+* Change Traceur ES6 compiler to ES6 Transpiler.
+* Show broken CSS line in syntax error.
+
+## 2.0 “King Belial”
+* Project was rewritten from CoffeeScript to ES6.
+* Add Safe Mode to works with live input or with hacks from legacy code.
+* More safer parser to pass all hacks from Browserhacks.com.
+* Use real properties instead of magic getter/setter for raw propeties.
+
+## 1.0 “Marquis Decarabia”
+* Save previous source map for each node to support CSS concatenation
+ with multiple previous maps.
+* Add `map.sourcesContent` option to add origin content to `sourcesContent`
+ inside map.
+* Allow to set different place of output map in annotation comment.
+* Allow to use arrays and `Root` in `Container#append` and same methods.
+* Add `Root#prevMap` with information about previous map.
+* Allow to use latest PostCSS from GitHub by npm.
+* `Result` now is lazy and it will stringify output CSS only if you use `css` or
+ `map` property.
+* Use separated `map.prev` option to set previous map.
+* Rename `inlineMap` option to `map.inline`.
+* Rename `mapAnnotation` option to `map.annotation`.
+* `Result#map` now return `SourceMapGenerator` object, instead of string.
+* Run previous map autodetect only if input CSS contains annotation comment.
+* Add `map: 'inline'` shortcut for `map: { inline: true }` option.
+* `Node#source.file` now will contains absolute path.
+* Clean `Declaration#between` style on node clone.
+
+## 0.3.5
+* Allow to use `Root` or `Result` as first argument in `process()`.
+* Save parsed AST to `Result#root`.
+
+## 0.3.4
+* Better space symbol detect to read UTF-8 BOM correctly.
+
+## 0.3.3
+* Remove source map hacks by using new Mozilla’s `source-map` (by Simon Lydell).
+
+## 0.3.2
+* Add URI encoding support for inline source maps.
+
+## 0.3.1
+* Fix relative paths from previous source map.
+* Safer space split in `Rule#selectors` (by Simon Lydell).
+
+## 0.3 “Prince Seere”
+* Add `Comment` node for comments between declarations or rules.
+* Add source map annotation comment to output CSS.
+* Allow to inline source map to annotation comment by data:uri.
+* Fix source maps on Windows.
+* Fix source maps for styles in subdirectory (by @nDmitry and @lydell).
+* Autodetect previous source map.
+* Add `first` and `last` shortcuts to container nodes.
+* Parse `!important` to separated property in `Declaration`.
+* Allow to break iteration by returning `false`.
+* Copy code style to new nodes.
+* Add `eachInside` method to recursivelly iterate all nodes.
+* Add `selectors` shortcut to get selectors array.
+* Add `toResult` method to `Rule` to simplify work with several input files.
+* Clean declaration’s `value`, rule’s `selector` and at-rule’s `params`
+ by storing spaces in `between` property.
+
+## 0.2 “Duke Dantalion”
+* Add source map support.
+* Add shortcuts to create nodes.
+* Method `process()` now returns object with `css` and `map` keys.
+* Origin CSS file option was renamed from `file` to `from`.
+* Rename `Node#remove()` method to `removeSelf()` to fix name conflict.
+* Node source was moved to `source` property with origin file
+ and node end position.
+* You can set own stringify function.
+
+## 0.1 “Count Andromalius”
+* Initial release.
diff --git a/node_modules/csswring/node_modules/postcss/LICENSE b/node_modules/csswring/node_modules/postcss/LICENSE
new file mode 100644
index 0000000..da057b4
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2013 Andrey Sitnik
+
+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/node_modules/csswring/node_modules/postcss/README.md b/node_modules/csswring/node_modules/postcss/README.md
new file mode 100644
index 0000000..7b1cd81
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/README.md
@@ -0,0 +1,440 @@
+# PostCSS [](https://travis-ci.org/postcss/postcss) [](https://gitter.im/postcss/postcss?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+
+
+PostCSS is a tool for transforming CSS with JS plugins. The growing ecosystem
+of PostCSS plugins can add vendor prefixes, support variables and mixins,
+transpile future CSS syntax, inline images, and more.
+
+PostCSS is used by Google, Twitter, Alibaba, and Shopify.
+Its most popular plugin, [Autoprefixer], is one of the most universally
+praised CSS processors available.
+
+PostCSS can do the same work as preprocessors like Sass, Less, and Stylus.
+But PostCSS is modular, 4-40x faster, and much more powerful.
+
+PostCSS itself is very small. It includes only a CSS parser,
+a CSS node tree API, a source map generator, and a node tree stringifier.
+All CSS transformations are encapsulated in modular plugins. And these plugins
+are themselves small plain JS functions, which receive a CSS node tree,
+apply transformations to it, and return a modified tree.
+
+You can use the [cssnext] plugin pack and write future CSS code right now:
+
+```css
+:root {
+ --row: 1rem;
+ --mainColor: #ffbbaaff;
+}
+
+@custom-media --mobile (width <= 640px);
+
+@custom-selector --heading h1, h2, h3, h4, h5, h6;
+
+.post-article --heading {
+ margin-top: calc(10 * var(--row));
+ color: color(var(--mainColor) blackness(+20%));
+ font-variant-caps: small-caps;
+}
+@media (--mobile) {
+ .post-article --heading {
+ margin-top: 0;
+ }
+}
+```
+
+Or if you like the power provided by preprocessors like Sass,
+you could combine [postcss-nested], [postcss-mixins], [postcss-easings]
+and [postcss-media-minmax]:
+
+```css
+$mobile: width <= 640px;
+
+@define-mixin social-icon $color {
+ background: $color;
+ &:hover {
+ background: color($color whiteness(+10%));
+ }
+}
+
+.social-icon {
+ transition: background 200ms ease-in-sine;
+ &.is-twitter {
+ @mixin social-icon #55acee;
+ }
+ &.is-facebook {
+ @mixin social-icon #3b5998;
+ }
+}
+
+.post-article {
+ padding: 10px 5px;
+ @media ($mobile) {
+ padding: 0;
+ }
+}
+```
+
+Twitter account for articles, releases, and new plugins: [@postcss].
+Weibo account: [postcss].
+
+
+
+
+
+[@postcss]: https://twitter.com/postcss
+[postcss]: http://weibo.com/postcss
+
+## How PostCSS differs from Preprocessors
+
+Sass, Less and Stylus provide specialized languages that you can use to write
+CSS templates. These languages and their compilers are defined together
+in large codebases. Tools and libraries for preprocessors must work within
+each preprocessor’s limitations: usually they can only offer sets
+of pre-defined mixins, functions, and variables.
+
+In contrast, PostCSS provides a simple API that modular plugins can use
+to understand, transform, and create CSS. PostCSS plugins, therefore,
+can be created, maintained, and implemented independently. And they can perform
+many different tasks, not just compile special syntaxes to CSS.
+Each plugin does one thing well.
+
+## Features
+
+### Modularity
+
+Without any plugins, PostCSS will parse your CSS and stringify it back
+to you without changing a single byte. All of the processing that enables
+special features and syntax in your stylesheets is made possible
+by PostCSS plugins, which are nothing more than JS functions.
+
+Because each PostCSS plugin is an independent module, different plugins can take
+different approaches. This flexibility allows plugin authors to create whatever
+features they can imagine, while empowering PostCSS users to add only
+those features that they want to their workflow.
+
+Some plugins, like [postcss-custom-properties], [postcss-media-minmax],
+and [postcss-calc], implement syntax from present and future W3C specs,
+transpiling it to cross-browser-compatible output. Other plugins,
+like [postcss-mixins] and [postcss-simple-extend], add new powers
+to your stylesheets that are not yet part of any spec. With PostCSS,
+you can decide for yourself which plugins match your own needs and preferences.
+
+Another advantage of PostCSS’s modularity is that anybody can contribute easily
+to the PostCSS ecosystem. Plugins are simple npm packages;
+so there are no barriers to writing your own plugins, or contributing ideas
+and bug fixes to the plugins that you use.
+
+### Perfomance
+
+PostCSS is one of the fastest CSS parsers written in JS. (Only [CSSOM] is
+faster, and only because it is less accurate.) So PostCSS will read your CSS
+and apply transformations faster than any other stylesheet processor out there.
+
+If you use Ruby Sass now, PostCSS could significantly improve your development
+process: PostCSS processing is *40 times faster* than Ruby Sass compilation.
+And even if you throw in the entire [cssnext] plugin pack, PostCSS,
+written in JS, is still *4 times faster* than [libsass], written on C++.
+
+[libsass]: https://github.com/sass/libsass
+[CSSOM]: https://github.com/NV/CSSOM
+
+### Powerful Tools
+
+PostCSS plugins can read and rebuild an entire CSS node tree. With this power,
+plugin authors are able to create tools that would be impossible
+to build into preprocessors (like [Autoprefixer]).
+
+PostCSS-powered tools can do much more than transform special syntax into
+browser-friendly CSS. PostCSS plugin authors have built linters
+(like [doiuse] and [postcss-bem-linter]), code review tools
+(like [list-selectors]), and minifiers (like [csswring]).
+With [postcss-data-packer], you can create a cacheable “sprite”
+by moving all `data:uri` values to separate file.
+
+One unique example of PostCSS’s power is [RTLCSS]. As you know,
+in Arabic and Hebrew, writing moves from right-to-left (RTL), instead
+of the more widespread left-to-right convention. Because a language’s
+directionality affects its readers’ perspective, an international site’s layout
+needs to change for RTL users, not just its text. (Check out [Arabic Wikipedia]
+as an example.) The [RTLCSS] plugin effectively “mirrors” your stylesheet
+by swapping `left` and `right`, changing the value order in `margin` shorthands,
+and more.
+
+[Arabic Wikipedia]: https://ar.wikipedia.org/wiki/%D9%84%D8%BA%D8%A9_%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9
+
+### Use the CSS of the Future
+
+CSS3 added valuable features, but some of them are not yet available in all
+of the browsers that developers need to support. And exciting future CSS modules
+are being drafted now — some even implemented in cutting-edge browsers —
+that will not be widely available for quite a while. But PostCSS plugins
+can allow us to write this CSS of the future, then transpile it to code usable
+in all the browsers we must support.
+
+[Autoprefixer] exemplifies this power: you write spec-compliant, future-friendly
+CSS, pretending that vendor prefixes don’t exist, and it does the dirty work
+of inserting the prefixes you’ll need. All of the plugins bundled into [cssnext]
+do similar work, allowing authors to use syntax and functions
+from the latest W3C specs without worrying about the fallbacks they’ll need.
+
+As more CSS specs are drafted, more PostCSS plugins will be written. Users will
+be able to write stylesheets using standard, interoperable syntax, instead of
+a specialized language for a specialized tool (as with preprocessors).
+
+## Quick Start
+
+1. Implement PostCSS with your build tool of choice. See the PostCSS [Grunt],
+ [Gulp], and [webpack] plugins more detailed instructions.
+2. Select plugins from the list below and add them to your PostCSS process.
+3. Make awesome products.
+
+[webpack]: https://github.com/postcss/postcss-loader
+[Grunt]: https://github.com/nDmitry/grunt-postcss
+[Gulp]: https://github.com/w0rm/gulp-postcss
+
+## Plugins Packs
+
+* [cssnext] contains plugins that allow you to use future CSS features today.
+* [ACSS] contains plugins that transform your CSS according
+ to special annotation comments.
+
+[cssnext]: https://github.com/putaindecode/cssnext
+[ACSS]: https://github.com/morishitter/acss
+
+## Plugins
+
+### Future CSS Syntax
+
+* [postcss-color-function] supports functions to transform colors.
+* [postcss-color-gray] supports the `gray()` function.
+* [postcss-color-hex] transforms `rgb()` and `rgba()` to hex.
+* [postcss-color-hex-alpha] supports `#rrggbbaa` and `#rgba` notation.
+* [postcss-color-hwb] transforms `hwb()` to widely compatible `rgb()`.
+* [postcss-color-rebeccapurple] supports the `rebeccapurple` color.
+* [postcss-custom-media] supports custom aliases for media queries.
+* [postcss-custom-properties] supports variables, using syntax from
+ the W3C Custom Properties.
+* [postcss-custom-selectors] adds custom aliases for selectors.
+* [postcss-font-variant] transpiles human-readable `font-variant` to more widely
+ supported CSS.
+* [postcss-host] makes the Shadow DOM’s `:host` selector work properly
+ with pseudo-classes.
+* [postcss-media-minmax] adds `<=` and `=>` statements to media queries.
+* [mq4-hover-shim] supports the `@media (hover)` feature.
+
+### Fallbacks
+
+* [postcss-epub] adds the `-epub-` prefix to relevant properties.
+* [postcss-opacity] adds opacity filter for IE8.
+* [postcss-vmin] generates `vm` fallback for `vmin` unit in IE9.
+* [postcss-will-change] inserts 3D hack before `will-change` property.
+* [Autoprefixer] adds vendor prefixes for you, using data from Can I Use.
+* [cssgrace] provides various helpers and transpiles CSS3 for IE
+ and other old browsers.
+* [pixrem] generates pixel fallbacks for `rem` units.
+* [pleeease-filters] converts WebKit filters to SVG filters,
+ for cross-browser compatibility.
+
+### Language Extensions
+
+* [postcss-mixins] enables mixins more powerful than Sass’s,
+ defined within stylesheets or in JS.
+* [postcss-nested] unwraps nested rules, as Sass does.
+* [postcss-simple-extend] supports extending of silent classes,
+ like Sass’s `@extend`.
+* [postcss-simple-vars] supports for Sass-style variables.
+* [csstyle] adds components workflow to your styles.
+
+### Optimizations
+
+* [postcss-assets] allows you to simplify URLs, insert image dimensions,
+ and inline files.
+* [postcss-calc] reduces `calc()` to values
+ (when expressions involve the same units).
+* [postcss-data-packer] moves embedded Base64 data out of the stylesheet
+ and into a separate file.
+* [postcss-import] inlines the stylesheets referred to by `@import` rules.
+* [postcss-url] rebases or inlines `url()`s.
+* [csswring] is a CSS minifier.
+* [css-byebye] removes the CSS rules that you don’t want.
+* [css-mqpacker] joins matching CSS media queries into a single statement.
+* [webpcss] adds URLs for WebP images, so they can be used by browsers
+ that support WebP.
+
+### Shortcuts
+
+* [postcss-easings] replaces easing names from easings.net
+ with `cubic-bezier()` functions.
+* [postcss-size] adds a `size` shortcut that sets width and height
+ with one declaration.
+
+### Others
+
+* [postcss-brand-colors] inserts company brand colors
+ in the `brand-colors` module.
+* [postcss-color-palette] transforms CSS2 color keywords to a custom palette.
+* [postcss-single-charset] ensures that there is one
+ and only one `@charset` rule at the top of file.
+* [rtlcss] mirrors styles for right-to-left locales.
+
+### Analysis
+
+* [postcss-bem-linter] lints CSS for conformance to SUIT CSS methodology.
+* [css2modernizr] creates a Modernizr config file
+ that requires only the tests that your CSS uses.
+* [doiuse] lints CSS for browser support, using data from Can I Use.
+* [list-selectors] lists and categorizes the selectors used in your CSS,
+ for code review and analysis.
+
+[postcss-color-rebeccapurple]: https://github.com/postcss/postcss-color-rebeccapurple
+[postcss-custom-properties]: https://github.com/postcss/postcss-custom-properties
+[postcss-custom-selectors]: https://github.com/postcss/postcss-custom-selectors
+[postcss-color-hex-alpha]: https://github.com/postcss/postcss-color-hex-alpha
+[postcss-color-function]: https://github.com/postcss/postcss-color-function
+[postcss-single-charset]: https://github.com/hail2u/postcss-single-charset
+[postcss-color-palette]: https://github.com/zaim/postcss-color-palette
+[postcss-simple-extend]: https://github.com/davidtheclark/postcss-simple-extend
+[postcss-media-minmax]: https://github.com/postcss/postcss-media-minmax
+[postcss-custom-media]: https://github.com/postcss/postcss-custom-media
+[postcss-brand-colors]: https://github.com/postcss/postcss-brand-colors
+[postcss-font-variant]: https://github.com/postcss/postcss-font-variant
+[postcss-will-change]: https://github.com/postcss/postcss-will-change
+[postcss-simple-vars]: https://github.com/postcss/postcss-simple-vars
+[postcss-data-packer]: https://github.com/Ser-Gen/postcss-data-packer
+[postcss-bem-linter]: https://github.com/necolas/postcss-bem-linter
+[postcss-color-gray]: https://github.com/postcss/postcss-color-gray
+[postcss-color-hex]: https://github.com/TrySound/postcss-color-hex
+[postcss-color-hwb]: https://github.com/postcss/postcss-color-hwb
+[pleeease-filters]: https://github.com/iamvdo/pleeease-filters
+[postcss-easings]: https://github.com/postcss/postcss-easings
+[postcss-opacity]: https://github.com/iamvdo/postcss-opacity
+[postcss-assets]: https://github.com/borodean/postcss-assets
+[postcss-import]: https://github.com/postcss/postcss-import
+[postcss-nested]: https://github.com/postcss/postcss-nested
+[postcss-mixins]: https://github.com/postcss/postcss-mixins
+[mq4-hover-shim]: https://github.com/twbs/mq4-hover-shim
+[list-selectors]: https://github.com/davidtheclark/list-selectors
+[css2modernizr]: https://github.com/vovanbo/css2modernizr
+[Autoprefixer]: https://github.com/postcss/autoprefixer
+[css-mqpacker]: https://github.com/hail2u/node-css-mqpacker
+[postcss-epub]: https://github.com/Rycochet/postcss-epub
+[postcss-calc]: https://github.com/postcss/postcss-calc
+[postcss-size]: https://github.com/postcss/postcss-size
+[postcss-host]: https://github.com/vitkarpov/postcss-host
+[postcss-vmin]: https://github.com/iamvdo/postcss-vmin
+[postcss-url]: https://github.com/postcss/postcss-url
+[css-byebye]: https://github.com/AoDev/css-byebye
+[cssgrace]: https://github.com/cssdream/cssgrace
+[csswring]: https://github.com/hail2u/node-csswring
+[csstyle]: https://github.com/geddski/csstyle
+[webpcss]: https://github.com/lexich/webpcss
+[rtlcss]: https://github.com/MohammadYounes/rtlcss
+[RTLCSS]: https://github.com/MohammadYounes/rtlcss
+[pixrem]: https://github.com/robwierzbowski/node-pixrem
+[doiuse]: https://github.com/anandthakker/doiuse
+
+## Usage
+
+### JavaScript API
+
+```js
+var postcss = require('postcss');
+var processor = postcss([require('cssnext'), require('cssgrace')]);
+
+var result = processor.process(css, { from: 'app.css', to: 'app.out.css' });
+console.log(result.css);
+```
+
+Read the [postcss function], [processor], and [Result] API docs for more details.
+
+[postcss function]: https://github.com/postcss/postcss/blob/master/API.md#postcss-function
+[processor]: https://github.com/postcss/postcss/blob/master/API.md#postcss-class
+[Result]: https://github.com/postcss/postcss/blob/master/API.md#result-class
+
+### Source Maps
+
+PostCSS has great [source maps] support. It can read and interpret maps
+from previous transformation steps, autodetect the format that you expect,
+and output both external and inline maps.
+
+To ensure that you generate an accurate source map, you must indicate the input
+and output CSS files paths — using the options `from` and `to`, respectively.
+
+To generate a new source map with the default options, simply set `map: true`.
+This will generate an inline source map that contains the source content.
+If you don’t want the map inlined, you can use set `map.inline: false`.
+
+```js
+var result = processor.process(css, {
+ from: 'main.css',
+ to: 'main.out.css',
+ map: { inline: false },
+});
+
+result.map //=> '{"version":3,"file":"main.out.css","sources":["main.css"],"names":[],"mappings":"AAAA,KAAI"}'
+```
+
+If PostCSS finds source maps from a previous transformation,
+it will automatically update that source map with the same options.
+
+```js
+// main.sass.css has an annotation comment with a link to main.sass.css.map
+var result = minifier.process(css, { from: 'main.sass.css', to: 'main.min.css' });
+result.map //=> Source map from main.sass to main.min.css
+```
+
+If you want more control over source map generation, you can define the `map`
+option as an object with the following parameters:
+
+* `inline` boolean: indicates that the source map should be embedded
+ in the output CSS as a Base64-encoded comment. By default it is `true`.
+ But if all previous maps are external, not inline, PostCSS will not embed
+ the map even if you do not set this option.
+
+ If you have an inline source map, the `result.map` property will be empty,
+ as the source map will be contained within the text of `result.css`.
+
+* `prev` string, object or boolean: source map content from
+ a previous processing step (for example, Sass compilation).
+ PostCSS will try to read the previous source map automatically
+ (based on comments within the source CSS), but you can use this option
+ to identify it manually. If desired, you can omit the previous map
+ with `prev: false`.
+
+* `sourcesContent` boolean: indicates that PostCSS should set the origin
+ content (for example, Sass source) of the source map. By default it is `true`.
+ But if all previous maps do not contain sources content, PostCSS will also
+ leave it out even if you do not set this option.
+
+* `annotation` boolean or string: indicates that PostCSS should add annotation
+ comments to the CSS. By default, PostCSS will always add a comment with a path
+ to the source map. But if the input CSS does not have any annotation
+ comment, PostCSS will omit it, too, even if you do not set this option.
+
+ By default, PostCSS presumes that you want to save the source map as
+ `opts.to + '.map'` and will use this path in the annotation comment.
+ But you can set another path by providing a string value for `annotation`.
+
+ If you have set `inline: true`, annotation cannot be disabled.
+
+[source maps]: http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/
+
+### Safe Mode
+
+If you provide a `safe: true` option to the `process` or `parse` methods,
+PostCSS will try to correct any syntax errors that it finds in the CSS.
+
+```js
+postcss.parse('a {'); // will throw "Unclosed block"
+postcss.parse('a {', { safe: true }); // will return CSS root for a {}
+```
+
+This is useful for legacy code filled with hacks. Another use-case
+is interactive tools with live input — for example,
+the [Autoprefixer demo](http://jsfiddle.net/simevidas/udyTs/show/light/).
+
+## How to Develop PostCSS Plugin
+
+* [PostCSS API](https://github.com/postcss/postcss/blob/master/API.md)
+* [Plugin Boilerplate](https://github.com/postcss/postcss-plugin-boilerplate)
diff --git a/node_modules/csswring/node_modules/postcss/lib/at-rule.js b/node_modules/csswring/node_modules/postcss/lib/at-rule.js
new file mode 100644
index 0000000..9c05e18
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/at-rule.js
@@ -0,0 +1,78 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Container = _interopRequire(require("./container"));
+
+// CSS at-rule like “this.keyframes name { }”.
+//
+// Can contain declarations (like this.font-face or this.page) ot another rules.
+
+var AtRule = (function (Container) {
+ function AtRule(defaults) {
+ _classCallCheck(this, AtRule);
+
+ this.type = "atrule";
+ Container.call(this, defaults);
+ }
+
+ _inherits(AtRule, Container);
+
+ // Stringify at-rule
+
+ AtRule.prototype.stringify = function stringify(builder, semicolon) {
+ var name = "@" + this.name;
+ var params = this.params ? this.stringifyRaw("params") : "";
+
+ if (typeof this.afterName != "undefined") {
+ name += this.afterName;
+ } else if (params) {
+ name += " ";
+ }
+
+ if (this.nodes) {
+ this.stringifyBlock(builder, name + params);
+ } else {
+ var before = this.style("before");
+ if (before) builder(before);
+ var end = (this.between || "") + (semicolon ? ";" : "");
+ builder(name + params + end, this);
+ }
+ };
+
+ // Hack to mark, that at-rule contains children
+
+ AtRule.prototype.append = function append(child) {
+ if (!this.nodes) this.nodes = [];
+ return Container.prototype.append.call(this, child);
+ };
+
+ // Hack to mark, that at-rule contains children
+
+ AtRule.prototype.prepend = function prepend(child) {
+ if (!this.nodes) this.nodes = [];
+ return Container.prototype.prepend.call(this, child);
+ };
+
+ // Hack to mark, that at-rule contains children
+
+ AtRule.prototype.insertBefore = function insertBefore(exist, add) {
+ if (!this.nodes) this.nodes = [];
+ return Container.prototype.insertBefore.call(this, exist, add);
+ };
+
+ // Hack to mark, that at-rule contains children
+
+ AtRule.prototype.insertAfter = function insertAfter(exist, add) {
+ if (!this.nodes) this.nodes = [];
+ return Container.prototype.insertAfter.call(this, exist, add);
+ };
+
+ return AtRule;
+})(Container);
+
+module.exports = AtRule;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/comment.js b/node_modules/csswring/node_modules/postcss/lib/comment.js
new file mode 100644
index 0000000..6cb5f3b
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/comment.js
@@ -0,0 +1,36 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Node = _interopRequire(require("./node"));
+
+// CSS comment between declarations or rules
+
+var Comment = (function (Node) {
+ function Comment(defaults) {
+ _classCallCheck(this, Comment);
+
+ this.type = "comment";
+ Node.call(this, defaults);
+ }
+
+ _inherits(Comment, Node);
+
+ // Stringify declaration
+
+ Comment.prototype.stringify = function stringify(builder) {
+ var before = this.style("before");
+ if (before) builder(before);
+ var left = this.style("left", "commentLeft");
+ var right = this.style("right", "commentRight");
+ builder("/*" + left + this.text + right + "*/", this);
+ };
+
+ return Comment;
+})(Node);
+
+module.exports = Comment;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/container.js b/node_modules/csswring/node_modules/postcss/lib/container.js
new file mode 100644
index 0000000..7cd1723
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/container.js
@@ -0,0 +1,565 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var Comment = _interopRequire(require("./comment"));
+
+var Node = _interopRequire(require("./node"));
+
+// CSS node, that contain another nodes (like at-rules or rules with selectors)
+
+var Container = (function (Node) {
+ function Container() {
+ _classCallCheck(this, Container);
+
+ if (Node != null) {
+ Node.apply(this, arguments);
+ }
+ }
+
+ _inherits(Container, Node);
+
+ // Stringify container children
+
+ Container.prototype.stringifyContent = function stringifyContent(builder) {
+ if (!this.nodes) {
+ return;
+ }var i,
+ last = this.nodes.length - 1;
+ while (last > 0) {
+ if (this.nodes[last].type != "comment") break;
+ last -= 1;
+ }
+
+ var semicolon = this.style("semicolon");
+ for (i = 0; i < this.nodes.length; i++) {
+ this.nodes[i].stringify(builder, last != i || semicolon);
+ }
+ };
+
+ // Stringify node with start (for example, selector) and brackets block
+ // with child inside
+
+ Container.prototype.stringifyBlock = function stringifyBlock(builder, start) {
+ var before = this.style("before");
+ if (before) builder(before);
+
+ var between = this.style("between", "beforeOpen");
+ builder(start + between + "{", this, "start");
+
+ var after;
+ if (this.nodes && this.nodes.length) {
+ this.stringifyContent(builder);
+ after = this.style("after");
+ } else {
+ after = this.style("after", "emptyBody");
+ }
+
+ if (after) builder(after);
+ builder("}", this, "end");
+ };
+
+ // Add child to end of list without any checks.
+ // Please, use `append()` method, `push()` is mostly for parser.
+
+ Container.prototype.push = function push(child) {
+ child.parent = this;
+ this.nodes.push(child);
+ return this;
+ };
+
+ // Execute `callback` on every child element. First arguments will be child
+ // node, second will be index.
+ //
+ // css.each( (rule, i) => {
+ // console.log(rule.type + ' at ' + i);
+ // });
+ //
+ // It is safe for add and remove elements to list while iterating:
+ //
+ // css.each( (rule) => {
+ // css.insertBefore( rule, addPrefix(rule) );
+ // # On next iteration will be next rule, regardless of that
+ // # list size was increased
+ // });
+
+ Container.prototype.each = function each(callback) {
+ if (!this.lastEach) this.lastEach = 0;
+ if (!this.indexes) this.indexes = {};
+
+ this.lastEach += 1;
+ var id = this.lastEach;
+ this.indexes[id] = 0;
+
+ if (!this.nodes) {
+ return;
+ }var index, result;
+ while (this.indexes[id] < this.nodes.length) {
+ index = this.indexes[id];
+ result = callback(this.nodes[index], index);
+ if (result === false) break;
+
+ this.indexes[id] += 1;
+ }
+
+ delete this.indexes[id];
+
+ if (result === false) {
+ return false;
+ }
+ };
+
+ // Execute callback on every child in all rules inside.
+ //
+ // First argument will be child node, second will be index inside parent.
+ //
+ // css.eachInside( (node, i) => {
+ // console.log(node.type + ' at ' + i);
+ // });
+ //
+ // Also as `each` it is safe of insert/remove nodes inside iterating.
+
+ Container.prototype.eachInside = function eachInside(callback) {
+ return this.each(function (child, i) {
+ var result = callback(child, i);
+
+ if (result !== false && child.eachInside) {
+ result = child.eachInside(callback);
+ }
+
+ if (result === false) return result;
+ });
+ };
+
+ // Execute callback on every declaration in all rules inside.
+ // It will goes inside at-rules recursivelly.
+ //
+ // First argument will be declaration node, second will be index inside
+ // parent rule.
+ //
+ // css.eachDecl( (decl, i) => {
+ // console.log(decl.prop + ' in ' + decl.parent.selector + ':' + i);
+ // });
+ //
+ // Also as `each` it is safe of insert/remove nodes inside iterating.
+ //
+ // You can filter declrataion by property name:
+ //
+ // css.eachDecl('background', (decl) => { });
+
+ Container.prototype.eachDecl = function eachDecl(prop, callback) {
+ if (!callback) {
+ callback = prop;
+ return this.eachInside(function (child, i) {
+ if (child.type == "decl") {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ } else if (prop instanceof RegExp) {
+ return this.eachInside(function (child, i) {
+ if (child.type == "decl" && prop.test(child.prop)) {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ } else {
+ return this.eachInside(function (child, i) {
+ if (child.type == "decl" && child.prop == prop) {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ }
+ };
+
+ // Execute `callback` on every rule in conatiner and inside child at-rules.
+ //
+ // First argument will be rule node, second will be index inside parent.
+ //
+ // css.eachRule( (rule, i) => {
+ // if ( parent.type == 'atrule' ) {
+ // console.log(rule.selector + ' in ' + rule.parent.name);
+ // } else {
+ // console.log(rule.selector + ' at ' + i);
+ // }
+ // });
+
+ Container.prototype.eachRule = function eachRule(callback) {
+ return this.eachInside(function (child, i) {
+ if (child.type == "rule") {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ };
+
+ // Execute `callback` on every at-rule in conatiner and inside at-rules.
+ //
+ // First argument will be at-rule node, second will be index inside parent.
+ //
+ // css.eachAtRule( (atrule, parent, i) => {
+ // if ( parent.type == 'atrule' ) {
+ // console.log(atrule.name + ' in ' + atrule.parent.name);
+ // } else {
+ // console.log(atrule.name + ' at ' + i);
+ // }
+ // });
+ //
+ // You can filter at-rules by name:
+ //
+ // css.eachAtRule('keyframes', (atrule) => { });
+
+ Container.prototype.eachAtRule = function eachAtRule(name, callback) {
+ if (!callback) {
+ callback = name;
+ return this.eachInside(function (child, i) {
+ if (child.type == "atrule") {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ } else if (name instanceof RegExp) {
+ return this.eachInside(function (child, i) {
+ if (child.type == "atrule" && name.test(child.name)) {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ } else {
+ return this.eachInside(function (child, i) {
+ if (child.type == "atrule" && child.name == name) {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ }
+ };
+
+ // Execute callback on every block comment (only between rules
+ // and declarations, not inside selectors and values) in all rules inside.
+ //
+ // First argument will be comment node, second will be index inside
+ // parent rule.
+ //
+ // css.eachComment( (comment, i) => {
+ // console.log(comment.content + ' at ' + i);
+ // });
+ //
+ // Also as `each` it is safe of insert/remove nodes inside iterating.
+
+ Container.prototype.eachComment = function eachComment(callback) {
+ return this.eachInside(function (child, i) {
+ if (child.type == "comment") {
+ var result = callback(child, i);
+ if (result === false) return result;
+ }
+ });
+ };
+
+ // Add child to container.
+ //
+ // css.append(rule);
+ //
+ // You can add declaration by hash:
+ //
+ // rule.append({ prop: 'color', value: 'black' });
+
+ Container.prototype.append = function append(child) {
+ var nodes = this.normalize(child, this.last);
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ this.nodes.push(node);
+ }return this;
+ };
+
+ // Add child to beginning of container
+ //
+ // css.prepend(rule);
+ //
+ // You can add declaration by hash:
+ //
+ // rule.prepend({ prop: 'color', value: 'black' });
+
+ Container.prototype.prepend = function prepend(child) {
+ var nodes = this.normalize(child, this.first, "prepend").reverse();
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ this.nodes.unshift(node);
+ }for (var id in this.indexes) {
+ this.indexes[id] = this.indexes[id] + nodes.length;
+ }
+
+ return this;
+ };
+
+ // Insert new `added` child before `exist`.
+ // You can set node object or node index (it will be faster) in `exist`.
+ //
+ // css.insertAfter(1, rule);
+ //
+ // You can add declaration by hash:
+ //
+ // rule.insertBefore(1, { prop: 'color', value: 'black' });
+
+ Container.prototype.insertBefore = function insertBefore(exist, add) {
+ exist = this.index(exist);
+
+ var type = exist === 0 ? "prepend" : false;
+ var nodes = this.normalize(add, this.nodes[exist], type).reverse();
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ this.nodes.splice(exist, 0, node);
+ }var index;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (exist <= index) {
+ this.indexes[id] = index + nodes.length;
+ }
+ }
+
+ return this;
+ };
+
+ // Insert new `added` child after `exist`.
+ // You can set node object or node index (it will be faster) in `exist`.
+ //
+ // css.insertAfter(1, rule);
+ //
+ // You can add declaration by hash:
+ //
+ // rule.insertAfter(1, { prop: 'color', value: 'black' });
+
+ Container.prototype.insertAfter = function insertAfter(exist, add) {
+ exist = this.index(exist);
+
+ var nodes = this.normalize(add, this.nodes[exist]).reverse();
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ this.nodes.splice(exist + 1, 0, node);
+ }var index;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (exist < index) {
+ this.indexes[id] = index + nodes.length;
+ }
+ }
+
+ return this;
+ };
+
+ // Remove `child` by index or node.
+ //
+ // css.remove(2);
+
+ Container.prototype.remove = function remove(child) {
+ child = this.index(child);
+ this.nodes[child].parent = undefined;
+ this.nodes.splice(child, 1);
+
+ var index;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (index >= child) {
+ this.indexes[id] = index - 1;
+ }
+ }
+
+ return this;
+ };
+
+ // Remove all children in node.
+ //
+ // css.removeAll();
+
+ Container.prototype.removeAll = function removeAll() {
+ for (var _iterator = this.nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ node.parent = undefined;
+ }this.nodes = [];
+ return this;
+ };
+
+ // Recursivelly check all declarations inside node and replace
+ // `regexp` by `callback`.
+ //
+ // css.replaceValues('black', '#000');
+ //
+ // Argumets `regexp` and `callback` is same as in `String#replace()`.
+ //
+ // You can speed up checks by `props` and `fast` options:
+ //
+ // css.replaceValues(/\d+rem/, { fast: 'rem', props: ['width'] },
+ // function (str) {
+ // return (14 * parseInt(str)) + 'px';
+ // })
+
+ Container.prototype.replaceValues = function replaceValues(regexp, opts, callback) {
+ if (!callback) {
+ callback = opts;
+ opts = {};
+ }
+
+ this.eachDecl(function (decl) {
+ if (opts.props && opts.props.indexOf(decl.prop) == -1) return;
+ if (opts.fast && decl.value.indexOf(opts.fast) == -1) return;
+
+ decl.value = decl.value.replace(regexp, callback);
+ });
+
+ return this;
+ };
+
+ // Return true if all nodes return true in `condition`.
+ // Just shorcut for `nodes.every`.
+
+ Container.prototype.every = function every(condition) {
+ return this.nodes.every(condition);
+ };
+
+ // Return true if one or more nodes return true in `condition`.
+ // Just shorcut for `nodes.some`.
+
+ Container.prototype.some = function some(condition) {
+ return this.nodes.some(condition);
+ };
+
+ // Return index of child
+
+ Container.prototype.index = function index(child) {
+ if (typeof child == "number") {
+ return child;
+ } else {
+ return this.nodes.indexOf(child);
+ }
+ };
+
+ // Normalize child before insert. Copy before from `sample`.
+
+ Container.prototype.normalize = function normalize(nodes, sample) {
+ var _this = this;
+
+ if (!Array.isArray(nodes)) {
+ if (nodes.type == "root") {
+ nodes = nodes.nodes;
+ } else if (nodes.type) {
+ nodes = [nodes];
+ } else if (nodes.prop) {
+ nodes = [new Declaration(nodes)];
+ } else if (nodes.selector) {
+ var Rule = _interopRequire(require("./rule"));
+
+ nodes = [new Rule(nodes)];
+ } else if (nodes.name) {
+ var AtRule = _interopRequire(require("./at-rule"));
+
+ nodes = [new AtRule(nodes)];
+ } else if (nodes.text) {
+ nodes = [new Comment(nodes)];
+ }
+ }
+
+ var processed = nodes.map(function (child) {
+ if (child.parent) child = child.clone();
+ if (typeof child.before == "undefined") {
+ if (sample && typeof sample.before != "undefined") {
+ child.before = sample.before.replace(/[^\s]/g, "");
+ }
+ }
+ child.parent = _this;
+ return child;
+ });
+
+ return processed;
+ };
+
+ _prototypeProperties(Container, null, {
+ first: {
+
+ // Shortcut to get first child
+
+ get: function () {
+ if (!this.nodes) return undefined;
+ return this.nodes[0];
+ },
+ configurable: true
+ },
+ last: {
+
+ // Shortcut to get first child
+
+ get: function () {
+ if (!this.nodes) return undefined;
+ return this.nodes[this.nodes.length - 1];
+ },
+ configurable: true
+ }
+ });
+
+ return Container;
+})(Node);
+
+module.exports = Container;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/css-syntax-error.js b/node_modules/csswring/node_modules/postcss/lib/css-syntax-error.js
new file mode 100644
index 0000000..d87c9c1
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/css-syntax-error.js
@@ -0,0 +1,89 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var PreviousMap = _interopRequire(require("./previous-map"));
+
+var path = _interopRequire(require("path"));
+
+// Error while CSS parsing
+
+var CssSyntaxError = (function (SyntaxError) {
+ function CssSyntaxError(message, line, column, source, file) {
+ _classCallCheck(this, CssSyntaxError);
+
+ this.reason = message;
+
+ this.message = file ? file : "";
+ if (typeof line != "undefined" && typeof column != "undefined") {
+ this.line = line;
+ this.column = column;
+ this.message += ":" + line + ":" + column + ": " + message;
+ } else {
+ this.message += ": " + message;
+ }
+
+ if (file) this.file = file;
+ if (source) this.source = source;
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, CssSyntaxError);
+ }
+ }
+
+ _inherits(CssSyntaxError, SyntaxError);
+
+ // Return source of broken lines
+
+ CssSyntaxError.prototype.highlight = function highlight(color) {
+ var num = this.line - 1;
+ var lines = this.source.split("\n");
+
+ var prev = num > 0 ? lines[num - 1] + "\n" : "";
+ var broken = lines[num];
+ var next = num < lines.length - 1 ? "\n" + lines[num + 1] : "";
+
+ var mark = "\n";
+ for (var i = 0; i < this.column - 1; i++) {
+ mark += " ";
+ }
+
+ if (typeof color == "undefined" && typeof process != "undefined") {
+ if (process.stdout && process.env) {
+ color = process.stdout.isTTY && !process.env.NODE_DISABLE_COLORS;
+ }
+ }
+
+ if (color) {
+ mark += "\u001b[1;31m^\u001b[0m";
+ } else {
+ mark += "^";
+ }
+
+ return prev + broken + mark + next;
+ };
+
+ CssSyntaxError.prototype.setMozillaProps = function setMozillaProps() {
+ var sample = Error.call(this, message);
+ if (sample.columnNumber) this.columnNumber = this.column;
+ if (sample.description) this.description = this.message;
+ if (sample.lineNumber) this.lineNumber = this.line;
+ if (sample.fileName) this.fileName = this.file;
+ };
+
+ CssSyntaxError.prototype.toString = function toString() {
+ var text = this.message;
+ if (this.source) text += "\n" + this.highlight();
+ return this.name + ": " + text;
+ };
+
+ return CssSyntaxError;
+})(SyntaxError);
+
+module.exports = CssSyntaxError;
+
+CssSyntaxError.prototype.name = "CssSyntaxError";
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/declaration.js b/node_modules/csswring/node_modules/postcss/lib/declaration.js
new file mode 100644
index 0000000..b4ceb82
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/declaration.js
@@ -0,0 +1,45 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var vendor = _interopRequire(require("./vendor"));
+
+var Node = _interopRequire(require("./node"));
+
+// CSS declaration like “color: black” in rules
+
+var Declaration = (function (Node) {
+ function Declaration(defaults) {
+ _classCallCheck(this, Declaration);
+
+ this.type = "decl";
+ Node.call(this, defaults);
+ }
+
+ _inherits(Declaration, Node);
+
+ // Stringify declaration
+
+ Declaration.prototype.stringify = function stringify(builder, semicolon) {
+ var before = this.style("before");
+ if (before) builder(before);
+
+ var between = this.style("between", "colon");
+ var string = this.prop + between + this.stringifyRaw("value");
+
+ if (this.important) {
+ string += this._important || " !important";
+ }
+
+ if (semicolon) string += ";";
+ builder(string, this);
+ };
+
+ return Declaration;
+})(Node);
+
+module.exports = Declaration;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/input.js b/node_modules/csswring/node_modules/postcss/lib/input.js
new file mode 100644
index 0000000..de7b40f
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/input.js
@@ -0,0 +1,113 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var CssSyntaxError = _interopRequire(require("./css-syntax-error"));
+
+var PreviousMap = _interopRequire(require("./previous-map"));
+
+var Parser = _interopRequire(require("./parser"));
+
+var path = _interopRequire(require("path"));
+
+var sequence = 0;
+
+var Input = (function () {
+ function Input(css) {
+ var opts = arguments[1] === undefined ? {} : arguments[1];
+
+ _classCallCheck(this, Input);
+
+ this.css = css.toString();
+
+ if (this.css[0] == "" || this.css[0] == "") {
+ this.css = this.css.slice(1);
+ }
+
+ this.safe = !!opts.safe;
+
+ if (opts.from) this.file = path.resolve(opts.from);
+
+ var map = new PreviousMap(this.css, opts, this.id);
+ if (map.text) {
+ this.map = map;
+ var file = map.consumer().file;
+ if (!this.file && file) this.file = this.mapResolve(file);
+ }
+
+ if (this.file) {
+ this.from = this.file;
+ } else {
+ sequence += 1;
+ this.id = " ";
+ this.from = this.id;
+ }
+ if (this.map) this.map.file = this.from;
+ }
+
+ // Throw syntax error from this input
+
+ Input.prototype.error = (function (_error) {
+ var _errorWrapper = function error() {
+ return _error.apply(this, arguments);
+ };
+
+ _errorWrapper.toString = function () {
+ return _error.toString();
+ };
+
+ return _errorWrapper;
+ })(function (message, line, column) {
+ var error = new CssSyntaxError(message);
+
+ var origin = this.origin(line, column);
+ if (origin) {
+ error = new CssSyntaxError(message, origin.line, origin.column, origin.source, origin.file);
+
+ error.generated = {
+ line: line,
+ column: column,
+ source: this.css
+ };
+ if (this.file) error.generated.file = this.file;
+ } else {
+ error = new CssSyntaxError(message, line, column, this.css, this.file);
+ }
+
+ return error;
+ });
+
+ // Get origin position of code if source map was given
+
+ Input.prototype.origin = function origin(line, column) {
+ if (!this.map) {
+ return false;
+ }var consumer = this.map.consumer();
+
+ var from = consumer.originalPositionFor({ line: line, column: column });
+ if (!from.source) {
+ return false;
+ }var result = {
+ file: this.mapResolve(from.source),
+ line: from.line,
+ column: from.column
+ };
+
+ var source = consumer.sourceContentFor(result.file);
+ if (source) result.source = source;
+
+ return result;
+ };
+
+ // Return path relative from source map root
+
+ Input.prototype.mapResolve = function mapResolve(file) {
+ return path.resolve(this.map.consumer().sourceRoot || ".", file);
+ };
+
+ return Input;
+})();
+
+module.exports = Input;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/list.js b/node_modules/csswring/node_modules/postcss/lib/list.js
new file mode 100644
index 0000000..ce56e51
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/list.js
@@ -0,0 +1,75 @@
+"use strict";
+
+// Methods to parse list and split it to array
+module.exports = {
+
+ // Split string to array by separator symbols with function and inside strings
+ // cheching
+ split: function split(string, separators, last) {
+ var array = [];
+ var current = "";
+ var split = false;
+
+ var func = 0;
+ var quote = false;
+ var escape = false;
+
+ for (var i = 0; i < string.length; i++) {
+ var letter = string[i];
+
+ if (quote) {
+ if (escape) {
+ escape = false;
+ } else if (letter == "\\") {
+ escape = true;
+ } else if (letter == quote) {
+ quote = false;
+ }
+ } else if (letter == "\"" || letter == "'") {
+ quote = letter;
+ } else if (letter == "(") {
+ func += 1;
+ } else if (letter == ")") {
+ if (func > 0) func -= 1;
+ } else if (func === 0) {
+ for (var j = 0; j < separators.length; j++) {
+ if (letter == separators[j]) split = true;
+ }
+ }
+
+ if (split) {
+ if (current !== "") array.push(current.trim());
+ current = "";
+ split = false;
+ } else {
+ current += letter;
+ }
+ }
+
+ if (last || current !== "") array.push(current.trim());
+ return array;
+ },
+
+ // Split list devided by space:
+ //
+ // list.space('a b') #=> ['a', 'b']
+ //
+ // It check for fuction and strings:
+ //
+ // list.space('calc(1px + 1em) "b c"') #=> ['calc(1px + 1em)', '"b c"']
+ space: function space(string) {
+ return this.split(string, [" ", "\n", "\t"]);
+ },
+
+ // Split list devided by comma
+ //
+ // list.comma('a, b') #=> ['a', 'b']
+ //
+ // It check for fuction and strings:
+ //
+ // list.comma('rgba(0, 0, 0, 0) white') #=> ['rgba(0, 0, 0, 0)', '"white"']
+ comma: function comma(string) {
+ return this.split(string, [","], true);
+ }
+
+};
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/map-generator.js b/node_modules/csswring/node_modules/postcss/lib/map-generator.js
new file mode 100644
index 0000000..3c659e5
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/map-generator.js
@@ -0,0 +1,313 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Result = _interopRequire(require("./result"));
+
+var Base64 = require("js-base64").Base64;
+
+var mozilla = _interopRequire(require("source-map"));
+
+var path = _interopRequire(require("path"));
+
+// All tools to generate source maps
+
+var MapGenerator = (function () {
+ function MapGenerator(root, opts) {
+ _classCallCheck(this, MapGenerator);
+
+ this.root = root;
+ this.opts = opts;
+ this.mapOpts = opts.map || {};
+ }
+
+ // Should map be generated
+
+ MapGenerator.prototype.isMap = function isMap() {
+ if (typeof this.opts.map != "undefined") {
+ return !!this.opts.map;
+ } else {
+ return this.previous().length > 0;
+ }
+ };
+
+ // Return source map arrays from previous compilation step (like Sass)
+
+ MapGenerator.prototype.previous = function previous() {
+ var _this = this;
+
+ if (!this.previousMaps) {
+ this.previousMaps = [];
+ this.root.eachInside(function (node) {
+ if (node.source && node.source.input.map) {
+ var map = node.source.input.map;
+ if (_this.previousMaps.indexOf(map) == -1) {
+ _this.previousMaps.push(map);
+ }
+ }
+ });
+ }
+
+ return this.previousMaps;
+ };
+
+ // Should we inline source map to annotation comment
+
+ MapGenerator.prototype.isInline = function isInline() {
+ if (typeof this.mapOpts.inline != "undefined") {
+ return this.mapOpts.inline;
+ }
+
+ var annotation = this.mapOpts.annotation;
+ if (typeof annotation != "undefined" && annotation !== true) {
+ return false;
+ }
+
+ if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.inline;
+ });
+ } else {
+ return true;
+ }
+ };
+
+ // Should we set sourcesContent
+
+ MapGenerator.prototype.isSourcesContent = function isSourcesContent() {
+ if (typeof this.mapOpts.sourcesContent != "undefined") {
+ return this.mapOpts.sourcesContent;
+ }
+ if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.withContent();
+ });
+ } else {
+ return true;
+ }
+ };
+
+ // Clear source map annotation comment
+
+ MapGenerator.prototype.clearAnnotation = function clearAnnotation() {
+ if (this.mapOpts.annotation === false) {
+ return;
+ }var node;
+ for (var i = this.root.nodes.length - 1; i >= 0; i--) {
+ node = this.root.nodes[i];
+ if (node.type != "comment") continue;
+ if (node.text.match(/^# sourceMappingURL=/)) {
+ this.root.remove(i);
+ return;
+ }
+ }
+ };
+
+ // Set origin CSS content
+
+ MapGenerator.prototype.setSourcesContent = function setSourcesContent() {
+ var _this = this;
+
+ var already = {};
+ this.root.eachInside(function (node) {
+ if (node.source) {
+ var from = node.source.input.from;
+ if (from && !already[from]) {
+ already[from] = true;
+ var relative = _this.relative(from);
+ _this.map.setSourceContent(relative, node.source.input.css);
+ }
+ }
+ });
+ };
+
+ // Apply source map from previous compilation step (like Sass)
+
+ MapGenerator.prototype.applyPrevMaps = function applyPrevMaps() {
+ for (var _iterator = this.previous(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var prev = _ref;
+
+ var from = this.relative(prev.file);
+ var root = prev.root || path.dirname(prev.file);
+ var map;
+
+ if (this.mapOpts.sourcesContent === false) {
+ map = new mozilla.SourceMapConsumer(prev.text);
+ map.sourcesContent = map.sourcesContent.map(function (i) {
+ return null;
+ });
+ } else {
+ map = prev.consumer();
+ }
+
+ this.map.applySourceMap(map, from, this.relative(root));
+ }
+ };
+
+ // Should we add annotation comment
+
+ MapGenerator.prototype.isAnnotation = function isAnnotation() {
+ if (this.isInline()) {
+ return true;
+ } else if (typeof this.mapOpts.annotation != "undefined") {
+ return this.mapOpts.annotation;
+ } else if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.annotation;
+ });
+ } else {
+ return true;
+ }
+ };
+
+ // Add source map annotation comment if it is needed
+
+ MapGenerator.prototype.addAnnotation = function addAnnotation() {
+ var content;
+
+ if (this.isInline()) {
+ content = "data:application/json;base64," + Base64.encode(this.map.toString());
+ } else if (typeof this.mapOpts.annotation == "string") {
+ content = this.mapOpts.annotation;
+ } else {
+ content = this.outputFile() + ".map";
+ }
+
+ this.css += "\n/*# sourceMappingURL=" + content + " */";
+ };
+
+ // Return output CSS file path
+
+ MapGenerator.prototype.outputFile = function outputFile() {
+ if (this.opts.to) {
+ return this.relative(this.opts.to);
+ } else if (this.opts.from) {
+ return this.relative(this.opts.from);
+ } else {
+ return "to.css";
+ }
+ };
+
+ // Return Result object with map
+
+ MapGenerator.prototype.generateMap = function generateMap() {
+ this.stringify();
+ if (this.isSourcesContent()) this.setSourcesContent();
+ if (this.previous().length > 0) this.applyPrevMaps();
+ if (this.isAnnotation()) this.addAnnotation();
+
+ if (this.isInline()) {
+ return [this.css];
+ } else {
+ return [this.css, this.map];
+ }
+ };
+
+ // Return path relative from output CSS file
+
+ MapGenerator.prototype.relative = function relative(file) {
+ var from = this.opts.to ? path.dirname(this.opts.to) : ".";
+
+ if (typeof this.mapOpts.annotation == "string") {
+ from = path.dirname(path.resolve(from, this.mapOpts.annotation));
+ }
+
+ file = path.relative(from, file);
+ if (path.sep == "\\") {
+ return file.replace(/\\/g, "/");
+ } else {
+ return file;
+ }
+ };
+
+ // Return path of node source for map
+
+ MapGenerator.prototype.sourcePath = function sourcePath(node) {
+ return this.relative(node.source.input.from);
+ };
+
+ // Return CSS string and source map
+
+ MapGenerator.prototype.stringify = function stringify() {
+ var _this = this;
+
+ this.css = "";
+ this.map = new mozilla.SourceMapGenerator({ file: this.outputFile() });
+
+ var line = 1;
+ var column = 1;
+
+ var lines, last;
+ var builder = function (str, node, type) {
+ _this.css += str;
+
+ if (node && node.source && node.source.start && type != "end") {
+ _this.map.addMapping({
+ source: _this.sourcePath(node),
+ original: {
+ line: node.source.start.line,
+ column: node.source.start.column - 1
+ },
+ generated: {
+ line: line,
+ column: column - 1
+ }
+ });
+ }
+
+ lines = str.match(/\n/g);
+ if (lines) {
+ line += lines.length;
+ last = str.lastIndexOf("\n");
+ column = str.length - last;
+ } else {
+ column = column + str.length;
+ }
+
+ if (node && node.source && node.source.end && type != "start") {
+ _this.map.addMapping({
+ source: _this.sourcePath(node),
+ original: {
+ line: node.source.end.line,
+ column: node.source.end.column
+ },
+ generated: {
+ line: line,
+ column: column
+ }
+ });
+ }
+ };
+
+ this.root.stringify(builder);
+ };
+
+ // Return Result object with or without map
+
+ MapGenerator.prototype.generate = function generate() {
+ this.clearAnnotation();
+
+ if (this.isMap()) {
+ return this.generateMap();
+ } else {
+ return [this.root.toString()];
+ }
+ };
+
+ return MapGenerator;
+})();
+
+module.exports = MapGenerator;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/node.js b/node_modules/csswring/node_modules/postcss/lib/node.js
new file mode 100644
index 0000000..168d058
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/node.js
@@ -0,0 +1,487 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var CssSyntaxError = _interopRequire(require("./css-syntax-error"));
+
+// Default code style
+var defaultStyle = {
+ colon: ": ",
+ indent: " ",
+ beforeDecl: "\n",
+ beforeRule: "\n",
+ beforeOpen: " ",
+ beforeClose: "\n",
+ beforeComment: "\n",
+ after: "\n",
+ emptyBody: "",
+ commentLeft: " ",
+ commentRight: " "
+};
+
+// Recursivly clone objects
+var cloneNode = (function (_cloneNode) {
+ var _cloneNodeWrapper = function cloneNode() {
+ return _cloneNode.apply(this, arguments);
+ };
+
+ _cloneNodeWrapper.toString = function () {
+ return _cloneNode.toString();
+ };
+
+ return _cloneNodeWrapper;
+})(function (obj, parent) {
+ if (typeof obj != "object") return obj;
+ var cloned = new obj.constructor();
+
+ for (var i in obj) {
+ if (!obj.hasOwnProperty(i)) continue;
+ var value = obj[i];
+
+ if (i == "parent" && typeof value == "object") {
+ if (parent) cloned[i] = parent;
+ } else if (i == "source") {
+ cloned[i] = value;
+ } else if (value instanceof Array) {
+ cloned[i] = value.map(function (i) {
+ return cloneNode(i, cloned);
+ });
+ } else if (i != "before" && i != "after" && i != "between" && i != "semicolon") {
+ cloned[i] = cloneNode(value, cloned);
+ }
+ }
+
+ return cloned;
+});
+
+// Some common methods for all CSS nodes
+
+var Node = (function () {
+ function Node() {
+ var defaults = arguments[0] === undefined ? {} : arguments[0];
+
+ _classCallCheck(this, Node);
+
+ for (var name in defaults) {
+ this[name] = defaults[name];
+ }
+ }
+
+ // Return error to mark error in your plugin syntax:
+ //
+ // if ( wrongVariable ) {
+ // throw decl.error('Wrong variable');
+ // }
+ //
+ // You can also get origin line and column from previous source map:
+ //
+ // if ( deprecatedSyntax ) {
+ // var error = decl.error('Deprecated syntax');
+ // console.warn(error.toString());
+ // }
+
+ Node.prototype.error = function error(message) {
+ if (this.source) {
+ var pos = this.source.start;
+ return this.source.input.error(message, pos.line, pos.column);
+ } else {
+ return new CssSyntaxError(message);
+ }
+ };
+
+ // Remove this node from parent
+ //
+ // decl.removeSelf();
+ //
+ // Note, that removing by index is faster:
+ //
+ // rule.each( (decl, i) => rule.remove(i) );
+
+ Node.prototype.removeSelf = function removeSelf() {
+ if (this.parent) {
+ this.parent.remove(this);
+ }
+ this.parent = undefined;
+ return this;
+ };
+
+ // Shortcut to insert nodes before and remove self.
+ //
+ // importNode.replace( loadedRoot );
+
+ Node.prototype.replace = function replace(nodes) {
+ this.parent.insertBefore(this, nodes);
+ this.parent.remove(this);
+ return this;
+ };
+
+ // Return CSS string of current node
+ //
+ // decl.toString(); //=> " color: black"
+
+ Node.prototype.toString = function toString() {
+ var result = "";
+ var builder = function (str) {
+ return result += str;
+ };
+ this.stringify(builder);
+ return result;
+ };
+
+ // Clone current node
+ //
+ // rule.append( decl.clone() );
+ //
+ // You can override properties while cloning:
+ //
+ // rule.append( decl.clone({ value: '0' }) );
+
+ Node.prototype.clone = function clone() {
+ var overrides = arguments[0] === undefined ? {} : arguments[0];
+
+ var cloned = cloneNode(this);
+ for (var name in overrides) {
+ cloned[name] = overrides[name];
+ }
+ return cloned;
+ };
+
+ // Clone node and insert clone before current one.
+ // It accept properties to change in clone and return new node.
+ //
+ // decl.cloneBefore({ prop: '-webkit-' + del.prop });
+
+ Node.prototype.cloneBefore = function cloneBefore() {
+ var overrides = arguments[0] === undefined ? {} : arguments[0];
+
+ var cloned = this.clone(overrides);
+ this.parent.insertBefore(this, cloned);
+ return cloned;
+ };
+
+ // Clone node and insert clone after current one.
+ // It accept properties to change in clone and return new node.
+ //
+ // decl.cloneAfter({ value: convertToRem(decl.value) });
+
+ Node.prototype.cloneAfter = function cloneAfter() {
+ var overrides = arguments[0] === undefined ? {} : arguments[0];
+
+ var cloned = this.clone(overrides);
+ this.parent.insertAfter(this, cloned);
+ return cloned;
+ };
+
+ // Replace with node by another one.
+ //
+ // decl.replaceWith(fixedDecl);
+
+ Node.prototype.replaceWith = function replaceWith(node) {
+ this.parent.insertBefore(this, node);
+ this.removeSelf();
+ return this;
+ };
+
+ // Remove node from current place and put to end of new one.
+ // It will also clean node code styles, but will keep `between` if old
+ // parent and new parent has same root.
+ //
+ // rule.moveTo(atRule);
+
+ Node.prototype.moveTo = function moveTo(container) {
+ this.cleanStyles(this.root() == container.root());
+ this.removeSelf();
+ container.append(this);
+ return this;
+ };
+
+ // Remove node from current place and put to before other node.
+ // It will also clean node code styles, but will keep `between` if old
+ // parent and new parent has same root.
+ //
+ // rule.moveBefore(rule.parent);
+
+ Node.prototype.moveBefore = function moveBefore(node) {
+ this.cleanStyles(this.root() == node.root());
+ this.removeSelf();
+ node.parent.insertBefore(node, this);
+ return this;
+ };
+
+ // Remove node from current place and put to after other node.
+ // It will also clean node code styles, but will keep `between` if old
+ // parent and new parent has same root.
+ //
+ // rule.moveAfter(rule.parent);
+
+ Node.prototype.moveAfter = function moveAfter(node) {
+ this.cleanStyles(this.root() == node.root());
+ this.removeSelf();
+ node.parent.insertAfter(node, this);
+ return this;
+ };
+
+ // Return next node in parent. If current node is last one,
+ // method will return `undefined`.
+ //
+ // var next = decl.next();
+ // if ( next && next.prop == removePrefix(decl.prop) ) {
+ // decl.removeSelf();
+ // }
+
+ Node.prototype.next = function next() {
+ var index = this.parent.index(this);
+ return this.parent.nodes[index + 1];
+ };
+
+ // Return previous node in parent. If current node is first one,
+ // method will return `undefined`.
+ //
+ // var prev = decl.prev();
+ // if ( prev && removePrefix(prev.prop) == decl.prop) ) {
+ // prev.removeSelf();
+ // }
+
+ Node.prototype.prev = function prev() {
+ var index = this.parent.index(this);
+ return this.parent.nodes[index - 1];
+ };
+
+ // Remove `parent` node on cloning to fix circular structures
+
+ Node.prototype.toJSON = function toJSON() {
+ var fixed = {};
+
+ for (var name in this) {
+ if (!this.hasOwnProperty(name)) continue;
+ if (name == "parent") continue;
+ var value = this[name];
+
+ if (value instanceof Array) {
+ fixed[name] = value.map(function (i) {
+ return typeof i == "object" && i.toJSON ? i.toJSON() : i;
+ });
+ } else if (typeof value == "object" && value.toJSON) {
+ fixed[name] = value.toJSON();
+ } else {
+ fixed[name] = value;
+ }
+ }
+
+ return fixed;
+ };
+
+ // Copy code style from first node with same type
+
+ Node.prototype.style = function style(own, detect) {
+ var value;
+ if (!detect) detect = own;
+
+ // Already had
+ if (own) {
+ value = this[own];
+ if (typeof value != "undefined") {
+ return value;
+ }
+ }
+
+ var parent = this.parent;
+
+ // Hack for first rule in CSS
+ if (detect == "before") {
+ if (!parent || parent.type == "root" && parent.first == this) {
+ return "";
+ }
+ }
+
+ // Floating child without parent
+ if (!parent) {
+ return defaultStyle[detect];
+ } // Detect style by other nodes
+ var root = this.root();
+ if (!root.styleCache) root.styleCache = {};
+ if (typeof root.styleCache[detect] != "undefined") {
+ return root.styleCache[detect];
+ }
+
+ if (detect == "semicolon") {
+ root.eachInside(function (i) {
+ if (i.nodes && i.nodes.length && i.last.type == "decl") {
+ value = i.semicolon;
+ if (typeof value != "undefined") return false;
+ }
+ });
+ } else if (detect == "emptyBody") {
+ root.eachInside(function (i) {
+ if (i.nodes && i.nodes.length === 0) {
+ value = i.after;
+ if (typeof value != "undefined") return false;
+ }
+ });
+ } else if (detect == "indent") {
+ root.eachInside(function (i) {
+ var p = i.parent;
+ if (p && p != root && p.parent && p.parent == root) {
+ if (typeof i.before != "undefined") {
+ var parts = i.before.split("\n");
+ value = parts[parts.length - 1];
+ value = value.replace(/[^\s]/g, "");
+ return false;
+ }
+ }
+ });
+ } else if (detect == "beforeComment") {
+ root.eachComment(function (i) {
+ if (typeof i.before != "undefined") {
+ value = i.before;
+ if (value.indexOf("\n") != -1) {
+ value = value.replace(/[^\n]+$/, "");
+ }
+ return false;
+ }
+ });
+ if (typeof value == "undefined") {
+ value = this.style(null, "beforeDecl");
+ }
+ } else if (detect == "beforeDecl") {
+ root.eachDecl(function (i) {
+ if (typeof i.before != "undefined") {
+ value = i.before;
+ if (value.indexOf("\n") != -1) {
+ value = value.replace(/[^\n]+$/, "");
+ }
+ return false;
+ }
+ });
+ if (typeof value == "undefined") {
+ value = this.style(null, "beforeRule");
+ }
+ } else if (detect == "beforeRule") {
+ root.eachInside(function (i) {
+ if (i.nodes && (i.parent != root || root.first != i)) {
+ if (typeof i.before != "undefined") {
+ value = i.before;
+ if (value.indexOf("\n") != -1) {
+ value = value.replace(/[^\n]+$/, "");
+ }
+ return false;
+ }
+ }
+ });
+ } else if (detect == "beforeClose") {
+ root.eachInside(function (i) {
+ if (i.nodes && i.nodes.length > 0) {
+ if (typeof i.after != "undefined") {
+ value = i.after;
+ if (value.indexOf("\n") != -1) {
+ value = value.replace(/[^\n]+$/, "");
+ }
+ return false;
+ }
+ }
+ });
+ } else if (detect == "before" || detect == "after") {
+ if (this.type == "decl") {
+ value = this.style(null, "beforeDecl");
+ } else if (this.type == "comment") {
+ value = this.style(null, "beforeComment");
+ } else if (detect == "before") {
+ value = this.style(null, "beforeRule");
+ } else {
+ value = this.style(null, "beforeClose");
+ }
+
+ var node = this.parent;
+ var depth = 0;
+ while (node && node.type != "root") {
+ depth += 1;
+ node = node.parent;
+ }
+
+ if (value.indexOf("\n") != -1) {
+ var indent = this.style(null, "indent");
+ if (indent.length) {
+ for (var step = 0; step < depth; step++) value += indent;
+ }
+ }
+
+ return value;
+ } else if (detect == "colon") {
+ root.eachDecl(function (i) {
+ if (typeof i.between != "undefined") {
+ value = i.between.replace(/[^\s:]/g, "");
+ return false;
+ }
+ });
+ } else if (detect == "beforeOpen") {
+ root.eachInside(function (i) {
+ if (i.type != "decl") {
+ value = i.between;
+ if (typeof value != "undefined") return false;
+ }
+ });
+ } else {
+ root.eachInside(function (i) {
+ value = i[own];
+ if (typeof value != "undefined") return false;
+ });
+ }
+
+ if (typeof value == "undefined") value = defaultStyle[detect];
+
+ root.styleCache[detect] = value;
+ return value;
+ };
+
+ // Return top parent , parent of parents.
+
+ Node.prototype.root = function root() {
+ var result = this;
+ while (result.parent) result = result.parent;
+ return result;
+ };
+
+ // Recursivelly remove all code style properties (`before` and `between`).
+
+ Node.prototype.cleanStyles = function cleanStyles(keepBetween) {
+ delete this.before;
+ delete this.after;
+ if (!keepBetween) delete this.between;
+
+ if (this.nodes) {
+ for (var _iterator = this.nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+ node.cleanStyles(keepBetween);
+ }
+ }
+ };
+
+ // Use raw value if origin was not changed
+
+ Node.prototype.stringifyRaw = function stringifyRaw(prop) {
+ var value = this[prop];
+ var raw = this["_" + prop];
+ if (raw && raw.value === value) {
+ return raw.raw;
+ } else {
+ return value;
+ }
+ };
+
+ return Node;
+})();
+
+module.exports = Node;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/parse.js b/node_modules/csswring/node_modules/postcss/lib/parse.js
new file mode 100644
index 0000000..d53be35
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/parse.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var Parser = _interopRequire(require("./parser"));
+
+var Input = _interopRequire(require("./input"));
+
+module.exports = function (css, opts) {
+ var input = new Input(css, opts);
+
+ var parser = new Parser(input);
+ parser.tokenize();
+ parser.loop();
+
+ return parser.root;
+};
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/parser.js b/node_modules/csswring/node_modules/postcss/lib/parser.js
new file mode 100644
index 0000000..d2420ce
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/parser.js
@@ -0,0 +1,499 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var tokenizer = _interopRequire(require("./tokenize"));
+
+var Comment = _interopRequire(require("./comment"));
+
+var AtRule = _interopRequire(require("./at-rule"));
+
+var Root = _interopRequire(require("./root"));
+
+var Rule = _interopRequire(require("./rule"));
+
+// CSS parser
+
+var Parser = (function () {
+ function Parser(input) {
+ _classCallCheck(this, Parser);
+
+ this.input = input;
+
+ this.pos = 0;
+ this.root = new Root();
+ this.current = this.root;
+ this.spaces = "";
+ this.semicolon = false;
+
+ this.root.source = { input: input };
+ if (input.map) this.root.prevMap = input.map;
+ }
+
+ Parser.prototype.tokenize = function tokenize() {
+ this.tokens = tokenizer(this.input);
+ };
+
+ Parser.prototype.loop = function loop() {
+ var token;
+ while (this.pos < this.tokens.length) {
+ token = this.tokens[this.pos];
+
+ switch (token[0]) {
+ case "word":
+ case ":":
+ this.word(token);
+ break;
+
+ case "}":
+ this.end(token);
+ break;
+
+ case "comment":
+ this.comment(token);
+ break;
+
+ case "at-word":
+ this.atrule(token);
+ break;
+
+ case "{":
+ this.emptyRule(token);
+ break;
+
+ default:
+ this.spaces += token[1];
+ break;
+ }
+
+ this.pos += 1;
+ }
+ this.endFile();
+ };
+
+ Parser.prototype.comment = function comment(token) {
+ var node = new Comment();
+ this.init(node, token[2], token[3]);
+ node.source.end = { line: token[4], column: token[5] };
+
+ var text = token[1].slice(2, -2);
+ if (text.match(/^\s*$/)) {
+ node.left = text;
+ node.text = "";
+ node.right = "";
+ } else {
+ var match = text.match(/^(\s*)([^]*[^\s])(\s*)$/);
+ node.left = match[1];
+ node.text = match[2];
+ node.right = match[3];
+ }
+ };
+
+ Parser.prototype.emptyRule = function emptyRule(token) {
+ var node = new Rule();
+ this.init(node, token[2], token[3]);
+ node.between = "";
+ node.selector = "";
+ this.current = node;
+ };
+
+ Parser.prototype.word = function word() {
+ var token;
+ var end = false;
+ var type = null;
+ var colon = false;
+ var bracket = null;
+ var brackets = 0;
+
+ var start = this.pos;
+ this.pos += 1;
+ while (true) {
+ token = this.tokens[this.pos];
+ if (!token) {
+ this.pos -= 1;
+ end = true;
+ break;
+ }
+
+ type = token[0];
+ if (type == "(") {
+ if (!bracket) bracket = token;
+ brackets += 1;
+ } else if (type == ")") {
+ brackets -= 1;
+ if (brackets === 0) bracket = null;
+ } else if (brackets === 0) {
+ if (type == ";") {
+ if (colon) {
+ this.decl(this.tokens.slice(start, this.pos + 1));
+ return;
+ } else {
+ break;
+ }
+ } else if (type == "{") {
+ this.rule(this.tokens.slice(start, this.pos + 1));
+ return;
+ } else if (type == "}") {
+ this.pos -= 1;
+ end = true;
+ break;
+ } else if (type == "at-word") {
+ this.pos -= 1;
+ break;
+ } else {
+ if (type == ":") colon = true;
+ }
+ }
+
+ this.pos += 1;
+ }
+
+ if (brackets > 0 && !this.input.safe) {
+ throw this.input.error("Unclosed bracket", bracket[2], bracket[3]);
+ }
+
+ if (end && colon) {
+ while (this.pos > start) {
+ token = this.tokens[this.pos][0];
+ if (token != "space" && token != "comment") break;
+ this.pos -= 1;
+ }
+ this.decl(this.tokens.slice(start, this.pos + 1));
+ return;
+ }
+
+ if (this.input.safe) {
+ var buffer = this.tokens.slice(start, this.pos + 1);
+ this.spaces += buffer.map(function (i) {
+ return i[1];
+ }).join("");
+ } else {
+ token = this.tokens[start];
+ throw this.input.error("Unknown word", token[2], token[3]);
+ }
+ };
+
+ Parser.prototype.rule = function rule(tokens) {
+ tokens.pop();
+
+ var node = new Rule();
+ this.init(node, tokens[0][2], tokens[0][3]);
+
+ node.between = this.spacesFromEnd(tokens);
+ this.raw(node, "selector", tokens);
+ this.current = node;
+ };
+
+ Parser.prototype.decl = function decl(tokens) {
+ var node = new Declaration();
+ this.init(node);
+
+ var last = tokens[tokens.length - 1];
+ if (last[0] == ";") {
+ this.semicolon = true;
+ tokens.pop();
+ }
+ if (last[4]) {
+ node.source.end = { line: last[4], column: last[5] };
+ } else {
+ node.source.end = { line: last[2], column: last[3] };
+ }
+
+ while (tokens[0][0] != "word") {
+ node.before += tokens.shift()[1];
+ }
+ node.source.start = { line: tokens[0][2], column: tokens[0][3] };
+
+ node.prop = tokens.shift()[1];
+ node.between = "";
+
+ var token;
+ while (tokens.length) {
+ token = tokens.shift();
+
+ if (token[0] == ":") {
+ node.between += token[1];
+ break;
+ } else if (token[0] != "space" && token[0] != "comment") {
+ this.unknownWord(node, token, tokens);
+ } else {
+ node.between += token[1];
+ }
+ }
+
+ if (node.prop[0] == "_" || node.prop[0] == "*") {
+ node.before += node.prop[0];
+ node.prop = node.prop.slice(1);
+ }
+ node.between += this.spacesFromStart(tokens);
+
+ if (this.input.safe) this.checkMissedSemicolon(tokens);
+
+ for (var i = tokens.length - 1; i > 0; i--) {
+ token = tokens[i];
+ if (token[1] == "!important") {
+ node.important = true;
+ var string = this.stringFrom(tokens, i);
+ string = this.spacesFromEnd(tokens) + string;
+ if (string != " !important") node._important = string;
+ break;
+ } else if (token[0] != "space" && token[0] != "comment") {
+ break;
+ }
+ }
+
+ this.raw(node, "value", tokens);
+
+ if (node.value.indexOf(":") != -1 && !this.input.safe) {
+ this.checkMissedSemicolon(tokens);
+ }
+ };
+
+ Parser.prototype.atrule = function atrule(token) {
+ var node = new AtRule();
+ node.name = token[1].slice(1);
+ if (node.name === "") {
+ if (this.input.safe) {
+ node.name = "";
+ } else {
+ throw this.input.error("At-rule without name", token[2], token[3]);
+ }
+ }
+ this.init(node, token[2], token[3]);
+
+ var next;
+ var last = false;
+ var open = false;
+ var params = [];
+ while (true) {
+ this.pos += 1;
+ token = this.tokens[this.pos];
+
+ if (!token) {
+ last = true;
+ break;
+ } else if (token[0] == ";") {
+ node.source.end = { line: token[2], column: token[3] };
+ this.semicolon = true;
+ break;
+ } else if (token[0] == "{") {
+ open = true;
+ break;
+ } else {
+ params.push(token);
+ }
+ }
+
+ node.between = this.spacesFromEnd(params);
+ if (params.length) {
+ node.afterName = this.spacesFromStart(params);
+ this.raw(node, "params", params);
+ if (last) {
+ token = params[params.length - 1];
+ node.source.end = { line: token[4], column: token[5] };
+ this.spaces = node.between;
+ node.between = "";
+ }
+ } else {
+ node.afterName = "";
+ node.params = "";
+ }
+
+ if (open) {
+ node.nodes = [];
+ this.current = node;
+ }
+ };
+
+ Parser.prototype.end = function end(token) {
+ if (this.current.nodes && this.current.nodes.length) {
+ this.current.semicolon = this.semicolon;
+ }
+ this.semicolon = false;
+
+ this.current.after = (this.current.after || "") + this.spaces;
+ this.spaces = "";
+
+ if (this.current.parent) {
+ this.current.source.end = { line: token[2], column: token[3] };
+ this.current = this.current.parent;
+ } else if (!this.input.safe) {
+ throw this.input.error("Unexpected }", token[2], token[3]);
+ } else {
+ this.current.after += "}";
+ }
+ };
+
+ Parser.prototype.endFile = function endFile() {
+ if (this.current.parent && !this.input.safe) {
+ var pos = this.current.source.start;
+ throw this.input.error("Unclosed block", pos.line, pos.column);
+ }
+
+ if (this.current.nodes && this.current.nodes.length) {
+ this.current.semicolon = this.semicolon;
+ }
+ this.current.after = (this.current.after || "") + this.spaces;
+
+ while (this.current.parent) {
+ this.current = this.current.parent;
+ this.current.after = "";
+ }
+ };
+
+ Parser.prototype.unknownWord = function unknownWord(node, token) {
+ if (this.input.safe) {
+ node.source.start = { line: token[2], column: token[3] };
+ node.before += node.prop + node.between;
+ node.prop = token[1];
+ node.between = "";
+ } else {
+ throw this.input.error("Unknown word", token[2], token[3]);
+ }
+ };
+
+ Parser.prototype.checkMissedSemicolon = function checkMissedSemicolon(tokens) {
+ var prev = null;
+ var colon = false;
+ var brackets = 0;
+ var type, token;
+ for (var i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ type = token[0];
+
+ if (type == "(") {
+ brackets += 1;
+ } else if (type == ")") {
+ brackets -= 0;
+ } else if (brackets === 0 && type == ":") {
+ if (!prev && this.input.safe) {
+ continue;
+ } else if (!prev) {
+ throw this.input.error("Double colon", token[2], token[3]);
+ } else if (prev[0] == "word" && prev[1] == "progid") {
+ continue;
+ } else {
+ colon = i;
+ break;
+ }
+ }
+
+ prev = token;
+ }
+
+ if (colon === false) {
+ return;
+ }if (this.input.safe) {
+ var split;
+ for (split = colon - 1; split >= 0; split--) {
+ if (tokens[split][0] == "word") break;
+ }
+ for (split -= 1; split >= 0; split--) {
+ if (tokens[split][0] != "space") {
+ split += 1;
+ break;
+ }
+ }
+ var other = tokens.splice(split, tokens.length - split);
+ this.decl(other);
+ } else {
+ var founded = 0;
+ for (var j = colon - 1; j >= 0; j--) {
+ token = tokens[j];
+ if (token[0] != "space") {
+ founded += 1;
+ if (founded == 2) break;
+ }
+ }
+ throw this.input.error("Missed semicolon", token[4], token[5]);
+ }
+ };
+
+ // Helpers
+
+ Parser.prototype.init = function init(node, line, column) {
+ this.current.push(node);
+
+ node.source = { start: { line: line, column: column }, input: this.input };
+ node.before = this.spaces;
+ this.spaces = "";
+ if (node.type != "comment") this.semicolon = false;
+ };
+
+ Parser.prototype.raw = function raw(node, prop, tokens) {
+ var token;
+ var value = "";
+ var clean = true;
+ for (var _iterator = tokens, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ token = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ token = _i.value;
+ }
+
+ if (token[0] == "comment") {
+ clean = false;
+ } else {
+ value += token[1];
+ }
+ }
+ if (!clean) {
+ var origin = "";
+ for (var _iterator2 = tokens, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+ if (_isArray2) {
+ if (_i2 >= _iterator2.length) break;
+ token = _iterator2[_i2++];
+ } else {
+ _i2 = _iterator2.next();
+ if (_i2.done) break;
+ token = _i2.value;
+ }
+
+ origin += token[1];
+ }node["_" + prop] = { value: value, raw: origin };
+ }
+ node[prop] = value;
+ };
+
+ Parser.prototype.spacesFromEnd = function spacesFromEnd(tokens) {
+ var next;
+ var spaces = "";
+ while (tokens.length) {
+ next = tokens[tokens.length - 1][0];
+ if (next != "space" && next != "comment") break;
+ spaces += tokens.pop()[1];
+ }
+ return spaces;
+ };
+
+ Parser.prototype.spacesFromStart = function spacesFromStart(tokens) {
+ var next;
+ var spaces = "";
+ while (tokens.length) {
+ next = tokens[0][0];
+ if (next != "space" && next != "comment") break;
+ spaces += tokens.shift()[1];
+ }
+ return spaces;
+ };
+
+ Parser.prototype.stringFrom = function stringFrom(tokens, from) {
+ var result = "";
+ for (var i = from; i < tokens.length; i++) {
+ result += tokens[i][1];
+ }
+ tokens.splice(from, tokens.length - from);
+ return result;
+ };
+
+ return Parser;
+})();
+
+module.exports = Parser;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/postcss.js b/node_modules/csswring/node_modules/postcss/lib/postcss.js
new file mode 100644
index 0000000..8a81290
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/postcss.js
@@ -0,0 +1,137 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var Comment = _interopRequire(require("./comment"));
+
+var AtRule = _interopRequire(require("./at-rule"));
+
+var Result = _interopRequire(require("./result"));
+
+var parse = _interopRequire(require("./parse"));
+
+var Rule = _interopRequire(require("./rule"));
+
+var Root = _interopRequire(require("./root"));
+
+// List of functions to process CSS
+
+var PostCSS = (function () {
+ function PostCSS() {
+ var _this = this;
+
+ var plugins = arguments[0] === undefined ? [] : arguments[0];
+
+ _classCallCheck(this, PostCSS);
+
+ this.plugins = plugins.map(function (i) {
+ return _this.normalize(i);
+ });
+ }
+
+ // Add function as PostCSS plugins
+
+ PostCSS.prototype.use = function use(plugin) {
+ plugin = this.normalize(plugin);
+ if (typeof plugin == "object" && Array.isArray(plugin.plugins)) {
+ this.plugins = this.plugins.concat(plugin.plugins);
+ } else {
+ this.plugins.push(plugin);
+ }
+ return this;
+ };
+
+ // Process CSS throw installed plugins
+
+ PostCSS.prototype.process = function process(css) {
+ var opts = arguments[1] === undefined ? {} : arguments[1];
+
+ var parsed;
+ if (css instanceof Root) {
+ parsed = css;
+ } else if (css instanceof Result) {
+ parsed = css.root;
+ if (css.map && typeof opts.map == "undefined") {
+ opts.map = { prev: css.map };
+ }
+ } else {
+ parsed = postcss.parse(css, opts);
+ }
+
+ for (var _iterator = this.plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var plugin = _ref;
+
+ var returned = plugin(parsed, opts);
+ if (returned instanceof Root) parsed = returned;
+ }
+
+ return parsed.toResult(opts);
+ };
+
+ // Return plugin function
+
+ PostCSS.prototype.normalize = function normalize(plugin) {
+ var type = typeof plugin;
+ if ((type == "object" || type == "function") && plugin.postcss) {
+ return plugin.postcss;
+ } else {
+ return plugin;
+ }
+ };
+
+ return PostCSS;
+})();
+
+// Framework for CSS postprocessors
+//
+// var processor = postcss(function (css) {
+// // Change nodes in css
+// });
+// processor.process(css)
+var postcss = function postcss() {
+ for (var _len = arguments.length, plugins = Array(_len), _key = 0; _key < _len; _key++) {
+ plugins[_key] = arguments[_key];
+ }
+
+ if (plugins.length == 1 && Array.isArray(plugins[0])) {
+ plugins = plugins[0];
+ }
+ return new PostCSS(plugins);
+};
+
+// Compile CSS to nodes
+postcss.parse = parse;
+
+// Nodes shortcuts
+postcss.comment = function (defaults) {
+ return new Comment(defaults);
+};
+postcss.atRule = function (defaults) {
+ return new AtRule(defaults);
+};
+postcss.decl = function (defaults) {
+ return new Declaration(defaults);
+};
+postcss.rule = function (defaults) {
+ return new Rule(defaults);
+};
+postcss.root = function (defaults) {
+ return new Root(defaults);
+};
+
+module.exports = postcss;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/previous-map.js b/node_modules/csswring/node_modules/postcss/lib/previous-map.js
new file mode 100644
index 0000000..9a66f56
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/previous-map.js
@@ -0,0 +1,108 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Base64 = require("js-base64").Base64;
+
+var mozilla = _interopRequire(require("source-map"));
+
+var path = _interopRequire(require("path"));
+
+var fs = _interopRequire(require("fs"));
+
+// Detect previous map
+
+var PreviousMap = (function () {
+ function PreviousMap(css, opts) {
+ _classCallCheck(this, PreviousMap);
+
+ this.loadAnnotation(css);
+ this.inline = this.startWith(this.annotation, "data:");
+
+ var prev = opts.map ? opts.map.prev : undefined;
+ var text = this.loadMap(opts.from, prev);
+ if (text) this.text = text;
+ }
+
+ // Return SourceMapConsumer object to read map
+
+ PreviousMap.prototype.consumer = function consumer() {
+ if (!this.consumerCache) {
+ this.consumerCache = new mozilla.SourceMapConsumer(this.text);
+ }
+ return this.consumerCache;
+ };
+
+ // Is map has sources content
+
+ PreviousMap.prototype.withContent = function withContent() {
+ return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
+ };
+
+ // Is `string` is starting with `start`
+
+ PreviousMap.prototype.startWith = function startWith(string, start) {
+ if (!string) {
+ return false;
+ }return string.substr(0, start.length) == start;
+ };
+
+ // Load for annotation comment from previous compilation step
+
+ PreviousMap.prototype.loadAnnotation = function loadAnnotation(css) {
+ var match = css.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//);
+ if (match) this.annotation = match[1].trim();
+ };
+
+ // Encode different type of inline
+
+ PreviousMap.prototype.decodeInline = function decodeInline(text) {
+ var uri = "data:application/json,";
+ var base64 = "data:application/json;base64,";
+
+ if (this.startWith(text, uri)) {
+ return decodeURIComponent(text.substr(uri.length));
+ } else if (this.startWith(text, base64)) {
+ return Base64.decode(text.substr(base64.length));
+ } else {
+ var encoding = text.match(/data:application\/json;([^,]+),/)[1];
+ throw new Error("Unsupported source map encoding " + encoding);
+ }
+ };
+
+ // Load previous map
+
+ PreviousMap.prototype.loadMap = function loadMap(file, prev) {
+ if (prev === false) {
+ return;
+ }if (prev) {
+ if (typeof prev == "string") {
+ return prev;
+ } else if (prev instanceof mozilla.SourceMapConsumer) {
+ return mozilla.SourceMapGenerator.fromSourceMap(prev).toString();
+ } else if (prev instanceof mozilla.SourceMapGenerator) {
+ return prev.toString();
+ } else if (typeof prev == "object" && prev.mappings) {
+ return JSON.stringify(prev);
+ } else {
+ throw new Error("Unsupported previous source map format: " + prev.toString());
+ }
+ } else if (this.inline) {
+ return this.decodeInline(this.annotation);
+ } else if (this.annotation) {
+ var map = this.annotation;
+ if (file) map = path.join(path.dirname(file), map);
+
+ this.root = path.dirname(map);
+ if (fs.existsSync && fs.existsSync(map)) {
+ return fs.readFileSync(map, "utf-8").toString().trim();
+ }
+ }
+ };
+
+ return PreviousMap;
+})();
+
+module.exports = PreviousMap;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/result.js b/node_modules/csswring/node_modules/postcss/lib/result.js
new file mode 100644
index 0000000..e33e5f3
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/result.js
@@ -0,0 +1,64 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var MapGenerator = _interopRequire(require("./map-generator"));
+
+// Object with processed CSS
+
+var Result = (function () {
+ function Result(root) {
+ var opts = arguments[1] === undefined ? {} : arguments[1];
+
+ _classCallCheck(this, Result);
+
+ this.root = root;
+ this.opts = opts;
+ }
+
+ // Return CSS string on any try to print
+
+ Result.prototype.toString = function toString() {
+ return this.css;
+ };
+
+ // Generate CSS and map
+
+ Result.prototype.stringify = function stringify() {
+ var map = new MapGenerator(this.root, this.opts);
+ var generated = map.generate();
+ this.cssCached = generated[0];
+ this.mapCached = generated[1];
+ };
+
+ _prototypeProperties(Result, null, {
+ map: {
+
+ // Lazy method to return source map
+
+ get: function () {
+ if (!this.cssCached) this.stringify();
+ return this.mapCached;
+ },
+ configurable: true
+ },
+ css: {
+
+ // Lazy method to return CSS string
+
+ get: function () {
+ if (!this.cssCached) this.stringify();
+ return this.cssCached;
+ },
+ configurable: true
+ }
+ });
+
+ return Result;
+})();
+
+module.exports = Result;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/root.js b/node_modules/csswring/node_modules/postcss/lib/root.js
new file mode 100644
index 0000000..10e8398
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/root.js
@@ -0,0 +1,99 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var Container = _interopRequire(require("./container"));
+
+var Comment = _interopRequire(require("./comment"));
+
+var AtRule = _interopRequire(require("./at-rule"));
+
+var Result = _interopRequire(require("./result"));
+
+var Rule = _interopRequire(require("./rule"));
+
+// Root of CSS
+
+var Root = (function (Container) {
+ function Root(defaults) {
+ _classCallCheck(this, Root);
+
+ this.type = "root";
+ this.nodes = [];
+ Container.call(this, defaults);
+ }
+
+ _inherits(Root, Container);
+
+ // Fix space when we remove first child
+
+ Root.prototype.remove = function remove(child) {
+ child = this.index(child);
+
+ if (child === 0 && this.nodes.length > 1) {
+ this.nodes[1].before = this.nodes[child].before;
+ }
+
+ return Container.prototype.remove.call(this, child);
+ };
+
+ // Fix spaces on insert before first rule
+
+ Root.prototype.normalize = function normalize(child, sample, type) {
+ var nodes = Container.prototype.normalize.call(this, child);
+
+ if (sample) {
+ if (type == "prepend") {
+ if (this.nodes.length > 1) {
+ sample.before = this.nodes[1].before;
+ } else {
+ delete sample.before;
+ }
+ } else {
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+
+ if (this.first != sample) node.before = sample.before;
+ }
+ }
+ }
+
+ return nodes;
+ };
+
+ // Stringify styles
+
+ Root.prototype.stringify = function stringify(builder) {
+ this.stringifyContent(builder);
+ if (this.after) builder(this.after);
+ };
+
+ // Generate processing result with optional source map
+
+ Root.prototype.toResult = function toResult() {
+ var opts = arguments[0] === undefined ? {} : arguments[0];
+
+ return new Result(this, opts);
+ };
+
+ return Root;
+})(Container);
+
+module.exports = Root;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/rule.js b/node_modules/csswring/node_modules/postcss/lib/rule.js
new file mode 100644
index 0000000..c2bcb11
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/rule.js
@@ -0,0 +1,54 @@
+"use strict";
+
+var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
+
+var _prototypeProperties = function (child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
+
+var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };
+
+var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
+
+var Declaration = _interopRequire(require("./declaration"));
+
+var Container = _interopRequire(require("./container"));
+
+var list = _interopRequire(require("./list"));
+
+// CSS rule like “a { }”
+
+var Rule = (function (Container) {
+ function Rule(defaults) {
+ _classCallCheck(this, Rule);
+
+ this.type = "rule";
+ this.nodes = [];
+ Container.call(this, defaults);
+ }
+
+ _inherits(Rule, Container);
+
+ // Stringify rule
+
+ Rule.prototype.stringify = function stringify(builder) {
+ this.stringifyBlock(builder, this.stringifyRaw("selector"));
+ };
+
+ _prototypeProperties(Rule, null, {
+ selectors: {
+
+ // Shortcut to get selectors as array
+
+ get: function () {
+ return list.comma(this.selector);
+ },
+ set: function (values) {
+ this.selector = values.join(", ");
+ },
+ configurable: true
+ }
+ });
+
+ return Rule;
+})(Container);
+
+module.exports = Rule;
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/tokenize.js b/node_modules/csswring/node_modules/postcss/lib/tokenize.js
new file mode 100644
index 0000000..5f7d350
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/tokenize.js
@@ -0,0 +1,193 @@
+"use strict";
+
+var singleQuote = "'".charCodeAt(0),
+ doubleQuote = "\"".charCodeAt(0),
+ backslash = "\\".charCodeAt(0),
+ slash = "/".charCodeAt(0),
+ newline = "\n".charCodeAt(0),
+ space = " ".charCodeAt(0),
+ feed = "\f".charCodeAt(0),
+ tab = "\t".charCodeAt(0),
+ cr = "\r".charCodeAt(0),
+ openBracket = "(".charCodeAt(0),
+ closeBracket = ")".charCodeAt(0),
+ openCurly = "{".charCodeAt(0),
+ closeCurly = "}".charCodeAt(0),
+ semicolon = ";".charCodeAt(0),
+ asterisk = "*".charCodeAt(0),
+ colon = ":".charCodeAt(0),
+ at = "@".charCodeAt(0),
+ atEnd = /[ \n\t\r\{\(\)'"\\/]/g,
+ wordEnd = /[ \n\t\r\(\)\{\}:;@!'"\\]|\/(?=\*)/g,
+ badBracket = /.[\\\/\("'\n]/;
+
+module.exports = function (input) {
+ var tokens = [];
+ var css = input.css.valueOf();
+
+ var code, next, quote, lines, last, content, escape, nextLine, nextOffset, escaped, escapePos, bad;
+
+ var length = css.length;
+ var offset = -1;
+ var line = 1;
+ var pos = 0;
+
+ var unclosed = function unclosed(what, end) {
+ if (input.safe) {
+ css += end;
+ next = css.length - 1;
+ } else {
+ throw input.error("Unclosed " + what, line, pos - offset);
+ }
+ };
+
+ while (pos < length) {
+ code = css.charCodeAt(pos);
+
+ if (code == newline) {
+ offset = pos;
+ line += 1;
+ }
+
+ switch (code) {
+ case newline:
+ case space:
+ case tab:
+ case cr:
+ case feed:
+ next = pos;
+ do {
+ next += 1;
+ code = css.charCodeAt(next);
+ if (code == newline) {
+ offset = next;
+ line += 1;
+ }
+ } while (code == space || code == newline || code == tab || code == cr || code == feed);
+
+ tokens.push(["space", css.slice(pos, next)]);
+ pos = next - 1;
+ break;
+
+ case openCurly:
+ tokens.push(["{", "{", line, pos - offset]);
+ break;
+
+ case closeCurly:
+ tokens.push(["}", "}", line, pos - offset]);
+ break;
+
+ case colon:
+ tokens.push([":", ":", line, pos - offset]);
+ break;
+
+ case semicolon:
+ tokens.push([";", ";", line, pos - offset]);
+ break;
+
+ case openBracket:
+ next = css.indexOf(")", pos + 1);
+ content = css.slice(pos, next + 1);
+
+ if (next == -1 || badBracket.test(content)) {
+ tokens.push(["(", "(", line, pos - offset]);
+ } else {
+ tokens.push(["brackets", content, line, pos - offset, line, next - offset]);
+ pos = next;
+ }
+
+ break;
+
+ case closeBracket:
+ tokens.push([")", ")", line, pos - offset]);
+ break;
+
+ case singleQuote:
+ case doubleQuote:
+ quote = code == singleQuote ? "'" : "\"";
+ next = pos;
+ do {
+ escaped = false;
+ next = css.indexOf(quote, next + 1);
+ if (next == -1) unclosed("quote", quote);
+ escapePos = next;
+ while (css.charCodeAt(escapePos - 1) == backslash) {
+ escapePos -= 1;
+ escaped = !escaped;
+ }
+ } while (escaped);
+
+ tokens.push(["string", css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ case at:
+ atEnd.lastIndex = pos + 1;
+ atEnd.test(css);
+ if (atEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = atEnd.lastIndex - 2;
+ }
+ tokens.push(["at-word", css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ case backslash:
+ next = pos;
+ escape = true;
+ while (css.charCodeAt(next + 1) == backslash) {
+ next += 1;
+ escape = !escape;
+ }
+ code = css.charCodeAt(next + 1);
+ if (escape && (code != slash && code != space && code != newline && code != tab && code != cr && code != feed)) {
+ next += 1;
+ }
+ tokens.push(["word", css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ default:
+ if (code == slash && css.charCodeAt(pos + 1) == asterisk) {
+ next = css.indexOf("*/", pos + 2) + 1;
+ if (next === 0) unclosed("comment", "*/");
+
+ content = css.slice(pos, next + 1);
+ lines = content.split("\n");
+ last = lines.length - 1;
+
+ if (last > 0) {
+ nextLine = line + last;
+ nextOffset = next - lines[last].length;
+ } else {
+ nextLine = line;
+ nextOffset = offset;
+ }
+
+ tokens.push(["comment", content, line, pos - offset, nextLine, next - nextOffset]);
+
+ offset = nextOffset;
+ line = nextLine;
+ pos = next;
+ } else {
+ wordEnd.lastIndex = pos + 1;
+ wordEnd.test(css);
+ if (wordEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = wordEnd.lastIndex - 2;
+ }
+
+ tokens.push(["word", css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ }
+
+ break;
+ }
+
+ pos++;
+ }
+
+ return tokens;
+};
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/lib/vendor.js b/node_modules/csswring/node_modules/postcss/lib/vendor.js
new file mode 100644
index 0000000..6f4d01b
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/lib/vendor.js
@@ -0,0 +1,32 @@
+"use strict";
+
+// Methods to work with vendor prefixes
+module.exports = {
+
+ // Return vendor prefix from property name, if it exists
+ //
+ // vendor.prefix('-moz-box-sizing') #=> '-moz-'
+ // vendor.prefix('box-sizing') #=> ''
+ prefix: function prefix(prop) {
+ if (prop[0] == "-") {
+ var sep = prop.indexOf("-", 1);
+ return prop.substr(0, sep + 1);
+ } else {
+ return "";
+ }
+ },
+
+ // Remove prefix from property name
+ //
+ // vendor.prefix('-moz-box-sizing') #=> 'box-sizing'
+ // vendor.prefix('box-sizing') #=> 'box-sizing'
+ unprefixed: function unprefixed(prop) {
+ if (prop[0] == "-") {
+ var sep = prop.indexOf("-", 1);
+ return prop.substr(sep + 1);
+ } else {
+ return prop;
+ }
+ }
+
+};
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/.npmignore b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/.npmignore
new file mode 100644
index 0000000..6000925
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/.npmignore
@@ -0,0 +1,4 @@
+*,v
+attic/**/*
+node_modules/**/*
+tmp/**/*
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/.travis.yml b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/.travis.yml
new file mode 100644
index 0000000..85fc71b
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+ - "0.10"
+ - "0.8"
+
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/LICENSE.md b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/LICENSE.md
new file mode 100644
index 0000000..fd579a4
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/LICENSE.md
@@ -0,0 +1,27 @@
+Copyright (c) 2014, Dan Kogai
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of {{{project}}} nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/README.md b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/README.md
new file mode 100644
index 0000000..d3039bf
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/README.md
@@ -0,0 +1,51 @@
+[](http://travis-ci.org/dankogai/js-base64)
+
+# base64.js
+
+Yet another Base64 transcoder
+
+## Usage
+
+### In Browser
+````html
+
+````
+### node.js
+````javascript
+var Base64 = require('./base64.js').Base64;
+````
+
+
+## SYNOPSIS
+
+````javascript
+Base64.encode('dankogai'); // ZGFua29nYWk=
+Base64.encode('小飼弾'); // 5bCP6aO85by+
+Base64.encodeURI('小飼弾'); // 5bCP6aO85by-
+
+Base64.decode('ZGFua29nYWk='); // dankogai
+Base64.decode('5bCP6aO85by+'); // 小飼弾
+// note .decodeURI() is unnecessary since it accepts both flavors
+Base64.decode('5bCP6aO85by-'); // 小飼弾
+````
+
+### String Extension for ES5
+
+````javascript
+if (Base64.extendString) {
+ // you have to explicitly extend String.prototype
+ Base64.extendString();
+ // once extended, you can do the following
+ 'dankogai'.toBase64(); // ZGFua29nYWk=
+ '小飼弾'.toBase64(); // 5bCP6aO85by+
+ '小飼弾'.toBase64(true); // 5bCP6aO85by-
+ '小飼弾'.toBase64URI(); // 5bCP6aO85by-
+ 'ZGFua29nYWk='.fromBase64(); // dankogai
+ '5bCP6aO85by+'.fromBase64(); // 小飼弾
+ '5bCP6aO85by-'.fromBase64(); // 小飼弾
+}
+````
+
+## SEE ALSO
+
++ http://en.wikipedia.org/wiki/Base64
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.html b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.html
new file mode 100644
index 0000000..64b56e0
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+Test for base64.js
+
+
+Test for base64.js
+$Id: base64.html,v 1.1 2009/03/01 22:00:28 dankogai Exp dankogai $
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.js b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.js
new file mode 100644
index 0000000..f395cb2
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.js
@@ -0,0 +1,193 @@
+/*
+ * $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $
+ *
+ * Licensed under the MIT license.
+ * http://opensource.org/licenses/mit-license
+ *
+ * References:
+ * http://en.wikipedia.org/wiki/Base64
+ */
+
+(function(global) {
+ 'use strict';
+ // existing version for noConflict()
+ var _Base64 = global.Base64;
+ var version = "2.1.7";
+ // if node.js, we use Buffer
+ var buffer;
+ if (typeof module !== 'undefined' && module.exports) {
+ buffer = require('buffer').Buffer;
+ }
+ // constants
+ var b64chars
+ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+ var b64tab = function(bin) {
+ var t = {};
+ for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
+ return t;
+ }(b64chars);
+ var fromCharCode = String.fromCharCode;
+ // encoder stuff
+ var cb_utob = function(c) {
+ if (c.length < 2) {
+ var cc = c.charCodeAt(0);
+ return cc < 0x80 ? c
+ : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
+ + fromCharCode(0x80 | (cc & 0x3f)))
+ : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ + fromCharCode(0x80 | ( cc & 0x3f)));
+ } else {
+ var cc = 0x10000
+ + (c.charCodeAt(0) - 0xD800) * 0x400
+ + (c.charCodeAt(1) - 0xDC00);
+ return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
+ + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ + fromCharCode(0x80 | ( cc & 0x3f)));
+ }
+ };
+ var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
+ var utob = function(u) {
+ return u.replace(re_utob, cb_utob);
+ };
+ var cb_encode = function(ccc) {
+ var padlen = [0, 2, 1][ccc.length % 3],
+ ord = ccc.charCodeAt(0) << 16
+ | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
+ | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
+ chars = [
+ b64chars.charAt( ord >>> 18),
+ b64chars.charAt((ord >>> 12) & 63),
+ padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
+ padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
+ ];
+ return chars.join('');
+ };
+ var btoa = global.btoa ? function(b) {
+ return global.btoa(b);
+ } : function(b) {
+ return b.replace(/[\s\S]{1,3}/g, cb_encode);
+ };
+ var _encode = buffer ? function (u) {
+ return (u.constructor === buffer.constructor ? u : new buffer(u))
+ .toString('base64')
+ }
+ : function (u) { return btoa(utob(u)) }
+ ;
+ var encode = function(u, urisafe) {
+ return !urisafe
+ ? _encode(String(u))
+ : _encode(String(u)).replace(/[+\/]/g, function(m0) {
+ return m0 == '+' ? '-' : '_';
+ }).replace(/=/g, '');
+ };
+ var encodeURI = function(u) { return encode(u, true) };
+ // decoder stuff
+ var re_btou = new RegExp([
+ '[\xC0-\xDF][\x80-\xBF]',
+ '[\xE0-\xEF][\x80-\xBF]{2}',
+ '[\xF0-\xF7][\x80-\xBF]{3}'
+ ].join('|'), 'g');
+ var cb_btou = function(cccc) {
+ switch(cccc.length) {
+ case 4:
+ var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
+ | ((0x3f & cccc.charCodeAt(1)) << 12)
+ | ((0x3f & cccc.charCodeAt(2)) << 6)
+ | (0x3f & cccc.charCodeAt(3)),
+ offset = cp - 0x10000;
+ return (fromCharCode((offset >>> 10) + 0xD800)
+ + fromCharCode((offset & 0x3FF) + 0xDC00));
+ case 3:
+ return fromCharCode(
+ ((0x0f & cccc.charCodeAt(0)) << 12)
+ | ((0x3f & cccc.charCodeAt(1)) << 6)
+ | (0x3f & cccc.charCodeAt(2))
+ );
+ default:
+ return fromCharCode(
+ ((0x1f & cccc.charCodeAt(0)) << 6)
+ | (0x3f & cccc.charCodeAt(1))
+ );
+ }
+ };
+ var btou = function(b) {
+ return b.replace(re_btou, cb_btou);
+ };
+ var cb_decode = function(cccc) {
+ var len = cccc.length,
+ padlen = len % 4,
+ n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
+ | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
+ | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
+ | (len > 3 ? b64tab[cccc.charAt(3)] : 0),
+ chars = [
+ fromCharCode( n >>> 16),
+ fromCharCode((n >>> 8) & 0xff),
+ fromCharCode( n & 0xff)
+ ];
+ chars.length -= [0, 0, 2, 1][padlen];
+ return chars.join('');
+ };
+ var atob = global.atob ? function(a) {
+ return global.atob(a);
+ } : function(a){
+ return a.replace(/[\s\S]{1,4}/g, cb_decode);
+ };
+ var _decode = buffer ? function(a) {
+ return (a.constructor === buffer.constructor
+ ? a : new buffer(a, 'base64')).toString();
+ }
+ : function(a) { return btou(atob(a)) };
+ var decode = function(a){
+ return _decode(
+ String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
+ .replace(/[^A-Za-z0-9\+\/]/g, '')
+ );
+ };
+ var noConflict = function() {
+ var Base64 = global.Base64;
+ global.Base64 = _Base64;
+ return Base64;
+ };
+ // export Base64
+ global.Base64 = {
+ VERSION: version,
+ atob: atob,
+ btoa: btoa,
+ fromBase64: decode,
+ toBase64: encode,
+ utob: utob,
+ encode: encode,
+ encodeURI: encodeURI,
+ btou: btou,
+ decode: decode,
+ noConflict: noConflict
+ };
+ // if ES5 is available, make Base64.extendString() available
+ if (typeof Object.defineProperty === 'function') {
+ var noEnum = function(v){
+ return {value:v,enumerable:false,writable:true,configurable:true};
+ };
+ global.Base64.extendString = function () {
+ Object.defineProperty(
+ String.prototype, 'fromBase64', noEnum(function () {
+ return decode(this)
+ }));
+ Object.defineProperty(
+ String.prototype, 'toBase64', noEnum(function (urisafe) {
+ return encode(this, urisafe)
+ }));
+ Object.defineProperty(
+ String.prototype, 'toBase64URI', noEnum(function () {
+ return encode(this, true)
+ }));
+ };
+ }
+ // that's it!
+})(this);
+
+if (this['Meteor']) {
+ Base64 = global.Base64; // for normal export in Meteor.js
+}
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.min.js b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.min.js
new file mode 100644
index 0000000..b2f1377
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64.min.js
@@ -0,0 +1 @@
+(function(global){"use strict";var _Base64=global.Base64;var version="2.1.7";var buffer;if(typeof module!=="undefined"&&module.exports){buffer=require("buffer").Buffer}var b64chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64tab=function(bin){var t={};for(var i=0,l=bin.length;i>>6)+fromCharCode(128|cc&63):fromCharCode(224|cc>>>12&15)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}else{var cc=65536+(c.charCodeAt(0)-55296)*1024+(c.charCodeAt(1)-56320);return fromCharCode(240|cc>>>18&7)+fromCharCode(128|cc>>>12&63)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}};var re_utob=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var utob=function(u){return u.replace(re_utob,cb_utob)};var cb_encode=function(ccc){var padlen=[0,2,1][ccc.length%3],ord=ccc.charCodeAt(0)<<16|(ccc.length>1?ccc.charCodeAt(1):0)<<8|(ccc.length>2?ccc.charCodeAt(2):0),chars=[b64chars.charAt(ord>>>18),b64chars.charAt(ord>>>12&63),padlen>=2?"=":b64chars.charAt(ord>>>6&63),padlen>=1?"=":b64chars.charAt(ord&63)];return chars.join("")};var btoa=global.btoa?function(b){return global.btoa(b)}:function(b){return b.replace(/[\s\S]{1,3}/g,cb_encode)};var _encode=buffer?function(u){return(u.constructor===buffer.constructor?u:new buffer(u)).toString("base64")}:function(u){return btoa(utob(u))};var encode=function(u,urisafe){return!urisafe?_encode(String(u)):_encode(String(u)).replace(/[+\/]/g,function(m0){return m0=="+"?"-":"_"}).replace(/=/g,"")};var encodeURI=function(u){return encode(u,true)};var re_btou=new RegExp(["[À-ß][-¿]","[à-ï][-¿]{2}","[ð-÷][-¿]{3}"].join("|"),"g");var cb_btou=function(cccc){switch(cccc.length){case 4:var cp=(7&cccc.charCodeAt(0))<<18|(63&cccc.charCodeAt(1))<<12|(63&cccc.charCodeAt(2))<<6|63&cccc.charCodeAt(3),offset=cp-65536;return fromCharCode((offset>>>10)+55296)+fromCharCode((offset&1023)+56320);case 3:return fromCharCode((15&cccc.charCodeAt(0))<<12|(63&cccc.charCodeAt(1))<<6|63&cccc.charCodeAt(2));default:return fromCharCode((31&cccc.charCodeAt(0))<<6|63&cccc.charCodeAt(1))}};var btou=function(b){return b.replace(re_btou,cb_btou)};var cb_decode=function(cccc){var len=cccc.length,padlen=len%4,n=(len>0?b64tab[cccc.charAt(0)]<<18:0)|(len>1?b64tab[cccc.charAt(1)]<<12:0)|(len>2?b64tab[cccc.charAt(2)]<<6:0)|(len>3?b64tab[cccc.charAt(3)]:0),chars=[fromCharCode(n>>>16),fromCharCode(n>>>8&255),fromCharCode(n&255)];chars.length-=[0,0,2,1][padlen];return chars.join("")};var atob=global.atob?function(a){return global.atob(a)}:function(a){return a.replace(/[\s\S]{1,4}/g,cb_decode)};var _decode=buffer?function(a){return(a.constructor===buffer.constructor?a:new buffer(a,"base64")).toString()}:function(a){return btou(atob(a))};var decode=function(a){return _decode(String(a).replace(/[-_]/g,function(m0){return m0=="-"?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))};var noConflict=function(){var Base64=global.Base64;global.Base64=_Base64;return Base64};global.Base64={VERSION:version,atob:atob,btoa:btoa,fromBase64:decode,toBase64:encode,utob:utob,encode:encode,encodeURI:encodeURI,btou:btou,decode:decode,noConflict:noConflict};if(typeof Object.defineProperty==="function"){var noEnum=function(v){return{value:v,enumerable:false,writable:true,configurable:true}};global.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",noEnum(function(){return decode(this)}));Object.defineProperty(String.prototype,"toBase64",noEnum(function(urisafe){return encode(this,urisafe)}));Object.defineProperty(String.prototype,"toBase64URI",noEnum(function(){return encode(this,true)}))}}})(this);if(this["Meteor"]){Base64=global.Base64}
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64_utf8 b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64_utf8
new file mode 100644
index 0000000..07b46d3
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/base64_utf8
@@ -0,0 +1,219 @@
+(function(global) {
+ 'use strict';
+ if (global.Base64) return;
+ var version = "2.1.1";
+ // if node.js, we use Buffer
+ var buffer;
+ if (typeof module !== 'undefined' && module.exports) {
+ buffer = require('buffer').Buffer;
+ }
+ // constants
+ var b64chars
+ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+ var b64tab = function(bin) {
+ var t = {};
+ for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
+ return t;
+ }(b64chars);
+ var fromCharCode = String.fromCharCode;
+ // encoder stuff
+ var cb_utob = function(c) {
+ if (c.length < 2) {
+ var cc = c.charCodeAt(0);
+ return cc < 0x80 ? c
+ : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
+ + fromCharCode(0x80 | (cc & 0x3f)))
+ : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ + fromCharCode(0x80 | ( cc & 0x3f)));
+ } else {
+ var cc = 0x10000
+ + (c.charCodeAt(0) - 0xD800) * 0x400
+ + (c.charCodeAt(1) - 0xDC00);
+ return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
+ + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ + fromCharCode(0x80 | ( cc & 0x3f)));
+ }
+ };
+ var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
+ var utob = function(u) {
+ return u.replace(re_utob, cb_utob);
+ };
+ var cb_encode = function(ccc) {
+ var padlen = [0, 2, 1][ccc.length % 3],
+ ord = ccc.charCodeAt(0) << 16
+ | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
+ | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
+ chars = [
+ b64chars.charAt( ord >>> 18),
+ b64chars.charAt((ord >>> 12) & 63),
+ padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
+ padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
+ ];
+ return chars.join('');
+ };
+ var btoa = global.btoa || function(b) {
+ return b.replace(/[\s\S]{1,3}/g, cb_encode);
+ };
+ var _encode = buffer
+ ? function (u) { return _utf8_encode((new buffer(u)).toString('base64')) }
+ : function (u) { return _utf8_encode(btoa(utob(u))) }
+ ;
+ var encode = function(u, urisafe) {
+ return !urisafe
+ ? _encode(u)
+ : _encode(u).replace(/[+\/]/g, function(m0) {
+ return m0 == '+' ? '-' : '_';
+ }).replace(/=/g, '');
+ };
+ var encodeURI = function(u) { return encode(u, true) };
+ // decoder stuff
+ var re_btou = new RegExp([
+ '[\xC0-\xDF][\x80-\xBF]',
+ '[\xE0-\xEF][\x80-\xBF]{2}',
+ '[\xF0-\xF7][\x80-\xBF]{3}'
+ ].join('|'), 'g');
+ var cb_btou = function(cccc) {
+ switch(cccc.length) {
+ case 4:
+ var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
+ | ((0x3f & cccc.charCodeAt(1)) << 12)
+ | ((0x3f & cccc.charCodeAt(2)) << 6)
+ | (0x3f & cccc.charCodeAt(3)),
+ offset = cp - 0x10000;
+ return (fromCharCode((offset >>> 10) + 0xD800)
+ + fromCharCode((offset & 0x3FF) + 0xDC00));
+ case 3:
+ return fromCharCode(
+ ((0x0f & cccc.charCodeAt(0)) << 12)
+ | ((0x3f & cccc.charCodeAt(1)) << 6)
+ | (0x3f & cccc.charCodeAt(2))
+ );
+ default:
+ return fromCharCode(
+ ((0x1f & cccc.charCodeAt(0)) << 6)
+ | (0x3f & cccc.charCodeAt(1))
+ );
+ }
+ };
+ var _utf8_encode = function ( string ) {
+ string = string.replace(/\r\n/g,"\n");
+ var utftext = "";
+
+ for (var n = 0; n < string.length; n++) {
+
+ var c = string.charCodeAt(n);
+
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ }
+ else if((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+
+ }
+
+ return utftext;
+ };
+ var _utf8_decode = function (utftext) {
+ var string = "";
+ var i = 0;
+ var c = c1 = c2 = 0;
+
+ while ( i < utftext.length ) {
+
+ c = utftext.charCodeAt(i);
+
+ if (c < 128) {
+ string += String.fromCharCode(c);
+ i++;
+ }
+ else if((c > 191) && (c < 224)) {
+ c2 = utftext.charCodeAt(i+1);
+ string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+ i += 2;
+ }
+ else {
+ c2 = utftext.charCodeAt(i+1);
+ c3 = utftext.charCodeAt(i+2);
+ string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 3;
+ }
+
+ }
+
+ return string;
+ };
+ var btou = function(b) {
+ return b.replace(re_btou, cb_btou);
+ };
+ var cb_decode = function(cccc) {
+ var len = cccc.length,
+ padlen = len % 4,
+ n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
+ | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
+ | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
+ | (len > 3 ? b64tab[cccc.charAt(3)] : 0),
+ chars = [
+ fromCharCode( n >>> 16),
+ fromCharCode((n >>> 8) & 0xff),
+ fromCharCode( n & 0xff)
+ ];
+ chars.length -= [0, 0, 2, 1][padlen];
+ return chars.join('');
+ };
+ var atob = global.atob || function(a){
+ return a.replace(/[\s\S]{1,4}/g, cb_decode);
+ };
+ var _decode = buffer
+ ? function(a) { return (new buffer(a, 'base64')).toString() }
+ : function(a) { return btou(atob(a)) };
+ var decode = function(a){
+ a = _utf8_decode( a );
+ return _decode(
+ a.replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
+ .replace(/[^A-Za-z0-9\+\/]/g, '')
+ );
+ };
+ // export Base64
+ global.Base64 = {
+ VERSION: version,
+ atob: atob,
+ btoa: btoa,
+ fromBase64: decode,
+ toBase64: encode,
+ utob: utob,
+ encode: encode,
+ encodeURI: encodeURI,
+ btou: btou,
+ decode: decode
+ };
+ // if ES5 is available, make Base64.extendString() available
+ if (typeof Object.defineProperty === 'function') {
+ var noEnum = function(v){
+ return {value:v,enumerable:false,writable:true,configurable:true};
+ };
+ global.Base64.extendString = function () {
+ Object.defineProperty(
+ String.prototype, 'fromBase64', noEnum(function () {
+ return decode(this)
+ }));
+ Object.defineProperty(
+ String.prototype, 'toBase64', noEnum(function (urisafe) {
+ return encode(this, urisafe)
+ }));
+ Object.defineProperty(
+ String.prototype, 'toBase64URI', noEnum(function () {
+ return encode(this, true)
+ }));
+ };
+ }
+ // that's it!
+})(this);
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/bower.json b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/bower.json
new file mode 100644
index 0000000..bd798db
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/bower.json
@@ -0,0 +1,17 @@
+{
+ "name": "js-base64",
+ "version": "2.1.7",
+ "main": [
+ "./base64.js"
+ ],
+ "ignore": [
+ "old",
+ "test",
+ ".gitignore",
+ ".travis.yml",
+ "base64.html",
+ "package.json"
+ ],
+ "dependencies": {
+ }
+}
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/old/base64-1.7.js b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/old/base64-1.7.js
new file mode 100644
index 0000000..27784eb
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/old/base64-1.7.js
@@ -0,0 +1,237 @@
+/*
+ * $Id: base64.js,v 1.7 2012/08/23 10:30:18 dankogai Exp dankogai $
+ *
+ * Licensed under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * References:
+ * http://en.wikipedia.org/wiki/Base64
+ */
+
+(function(global){
+
+var b64chars
+ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+var b64charcodes = function(){
+ var a = [];
+ var codeA = 'A'.charCodeAt(0);
+ var codea = 'a'.charCodeAt(0);
+ var code0 = '0'.charCodeAt(0);
+ for (var i = 0; i < 26; i ++) a.push(codeA + i);
+ for (var i = 0; i < 26; i ++) a.push(codea + i);
+ for (var i = 0; i < 10; i ++) a.push(code0 + i);
+ a.push('+'.charCodeAt(0));
+ a.push('/'.charCodeAt(0));
+ return a;
+}();
+
+var b64tab = function(bin){
+ var t = {};
+ for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
+ return t;
+}(b64chars);
+
+var stringToArray = function(s){
+ var a = [];
+ for (var i = 0, l = s.length; i < l; i ++) a[i] = s.charCodeAt(i);
+ return a;
+};
+
+var convertUTF8ArrayToBase64 = function(bin){
+ var padlen = 0;
+ while (bin.length % 3){
+ bin.push(0);
+ padlen++;
+ };
+ var b64 = [];
+ for (var i = 0, l = bin.length; i < l; i += 3){
+ var c0 = bin[i], c1 = bin[i+1], c2 = bin[i+2];
+ if (c0 >= 256 || c1 >= 256 || c2 >= 256)
+ throw 'unsupported character found';
+ var n = (c0 << 16) | (c1 << 8) | c2;
+ b64.push(
+ b64charcodes[ n >>> 18],
+ b64charcodes[(n >>> 12) & 63],
+ b64charcodes[(n >>> 6) & 63],
+ b64charcodes[ n & 63]
+ );
+ }
+ while (padlen--) b64[b64.length - padlen - 1] = '='.charCodeAt(0);
+ return chunkStringFromCharCodeApply(b64);
+};
+
+var convertBase64ToUTF8Array = function(b64){
+ b64 = b64.replace(/[^A-Za-z0-9+\/]+/g, '');
+ var bin = [];
+ var padlen = b64.length % 4;
+ for (var i = 0, l = b64.length; i < l; i += 4){
+ var n = ((b64tab[b64.charAt(i )] || 0) << 18)
+ | ((b64tab[b64.charAt(i+1)] || 0) << 12)
+ | ((b64tab[b64.charAt(i+2)] || 0) << 6)
+ | ((b64tab[b64.charAt(i+3)] || 0));
+ bin.push(
+ ( n >> 16 ),
+ ( (n >> 8) & 0xff ),
+ ( n & 0xff )
+ );
+ }
+ bin.length -= [0,0,2,1][padlen];
+ return bin;
+};
+
+var convertUTF16ArrayToUTF8Array = function(uni){
+ var bin = [];
+ for (var i = 0, l = uni.length; i < l; i++){
+ var n = uni[i];
+ if (n < 0x80)
+ bin.push(n);
+ else if (n < 0x800)
+ bin.push(
+ 0xc0 | (n >>> 6),
+ 0x80 | (n & 0x3f));
+ else
+ bin.push(
+ 0xe0 | ((n >>> 12) & 0x0f),
+ 0x80 | ((n >>> 6) & 0x3f),
+ 0x80 | (n & 0x3f));
+ }
+ return bin;
+};
+
+var convertUTF8ArrayToUTF16Array = function(bin){
+ var uni = [];
+ for (var i = 0, l = bin.length; i < l; i++){
+ var c0 = bin[i];
+ if (c0 < 0x80){
+ uni.push(c0);
+ }else{
+ var c1 = bin[++i];
+ if (c0 < 0xe0){
+ uni.push(((c0 & 0x1f) << 6) | (c1 & 0x3f));
+ }else{
+ var c2 = bin[++i];
+ uni.push(
+ ((c0 & 0x0f) << 12) | ((c1 & 0x3f) << 6) | (c2 & 0x3f)
+ );
+ }
+ }
+ }
+ return uni;
+};
+
+var convertUTF8StringToBase64 = function(bin){
+ return convertUTF8ArrayToBase64(stringToArray(bin));
+};
+
+var convertBase64ToUTF8String = function(b64){
+ return chunkStringFromCharCodeApply(convertBase64ToUTF8Array(b64));
+};
+
+var convertUTF8StringToUTF16Array = function(bin){
+ return convertUTF8ArrayToUTF16Array(stringToArray(bin));
+};
+
+var convertUTF8ArrayToUTF16String = function(bin){
+ return chunkStringFromCharCodeApply(convertUTF8ArrayToUTF16Array(bin));
+};
+
+var convertUTF8StringToUTF16String = function(bin){
+ return chunkStringFromCharCodeApply(
+ convertUTF8ArrayToUTF16Array(stringToArray(bin))
+ );
+};
+
+var convertUTF16StringToUTF8Array = function(uni){
+ return convertUTF16ArrayToUTF8Array(stringToArray(uni));
+};
+
+var convertUTF16ArrayToUTF8String = function(uni){
+ return chunkStringFromCharCodeApply(convertUTF16ArrayToUTF8Array(uni));
+};
+
+var convertUTF16StringToUTF8String = function(uni){
+ return chunkStringFromCharCodeApply(
+ convertUTF16ArrayToUTF8Array(stringToArray(uni))
+ );
+};
+
+/*
+ * String.fromCharCode.apply will only handle arrays as big as 65536,
+ * after that it'll return a truncated string with no warning.
+ */
+var chunkStringFromCharCodeApply = function(arr){
+ var strs = [], i;
+ for (i = 0; i < arr.length; i += 65536){
+ strs.push(String.fromCharCode.apply(String, arr.slice(i, i+65536)));
+ }
+ return strs.join('');
+};
+
+if (global.btoa){
+ var btoa = global.btoa;
+ var convertUTF16StringToBase64 = function (uni){
+ return btoa(convertUTF16StringToUTF8String(uni));
+ };
+}
+else {
+ var btoa = convertUTF8StringToBase64;
+ var convertUTF16StringToBase64 = function (uni){
+ return convertUTF8ArrayToBase64(convertUTF16StringToUTF8Array(uni));
+ };
+}
+
+if (global.atob){
+ var atob = global.atob;
+ var convertBase64ToUTF16String = function (b64){
+ return convertUTF8StringToUTF16String(atob(b64));
+ };
+}
+else {
+ var atob = convertBase64ToUTF8String;
+ var convertBase64ToUTF16String = function (b64){
+ return convertUTF8ArrayToUTF16String(convertBase64ToUTF8Array(b64));
+ };
+}
+
+global.Base64 = {
+ convertUTF8ArrayToBase64:convertUTF8ArrayToBase64,
+ convertByteArrayToBase64:convertUTF8ArrayToBase64,
+ convertBase64ToUTF8Array:convertBase64ToUTF8Array,
+ convertBase64ToByteArray:convertBase64ToUTF8Array,
+ convertUTF16ArrayToUTF8Array:convertUTF16ArrayToUTF8Array,
+ convertUTF16ArrayToByteArray:convertUTF16ArrayToUTF8Array,
+ convertUTF8ArrayToUTF16Array:convertUTF8ArrayToUTF16Array,
+ convertByteArrayToUTF16Array:convertUTF8ArrayToUTF16Array,
+ convertUTF8StringToBase64:convertUTF8StringToBase64,
+ convertBase64ToUTF8String:convertBase64ToUTF8String,
+ convertUTF8StringToUTF16Array:convertUTF8StringToUTF16Array,
+ convertUTF8ArrayToUTF16String:convertUTF8ArrayToUTF16String,
+ convertByteArrayToUTF16String:convertUTF8ArrayToUTF16String,
+ convertUTF8StringToUTF16String:convertUTF8StringToUTF16String,
+ convertUTF16StringToUTF8Array:convertUTF16StringToUTF8Array,
+ convertUTF16StringToByteArray:convertUTF16StringToUTF8Array,
+ convertUTF16ArrayToUTF8String:convertUTF16ArrayToUTF8String,
+ convertUTF16StringToUTF8String:convertUTF16StringToUTF8String,
+ convertUTF16StringToBase64:convertUTF16StringToBase64,
+ convertBase64ToUTF16String:convertBase64ToUTF16String,
+ fromBase64:convertBase64ToUTF8String,
+ toBase64:convertUTF8StringToBase64,
+ atob:atob,
+ btoa:btoa,
+ utob:convertUTF16StringToUTF8String,
+ btou:convertUTF8StringToUTF16String,
+ encode:convertUTF16StringToBase64,
+ encodeURI:function(u){
+ return convertUTF16StringToBase64(u).replace(/[+\/]/g, function(m0){
+ return m0 == '+' ? '-' : '_';
+ }).replace(/=+$/, '');
+ },
+ decode:function(a){
+ return convertBase64ToUTF16String(a.replace(/[-_]/g, function(m0){
+ return m0 == '-' ? '+' : '/';
+ }));
+ }
+};
+
+})(this);
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/package.js b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/package.js
new file mode 100644
index 0000000..5b56425
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/package.js
@@ -0,0 +1,9 @@
+Package.describe({
+ summary: "Yet another Base64 transcoder"
+})
+
+Package.on_use(function(api){
+ api.export('Base64');
+
+ api.add_files(['base64.js'], 'server');
+});
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/package.json b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/package.json
new file mode 100644
index 0000000..df73bc3
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "js-base64",
+ "version": "2.1.7",
+ "description": "Yet another Base64 transcoder in pure-JS",
+ "main": "base64.js",
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "mocha": "*"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/dankogai/js-base64.git"
+ },
+ "keywords": [
+ "base64"
+ ],
+ "author": {
+ "name": "Dan Kogai"
+ },
+ "license": "BSD",
+ "gitHead": "8bfa436f733bec60c95c720e1d720c28b43ae0b2",
+ "bugs": {
+ "url": "https://github.com/dankogai/js-base64/issues"
+ },
+ "homepage": "https://github.com/dankogai/js-base64",
+ "_id": "js-base64@2.1.7",
+ "_shasum": "aa9c941ceff1567ea9ed8bea8319191f3541e4e8",
+ "_from": "js-base64@~2.1.7",
+ "_npmVersion": "2.1.18",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "dankogai",
+ "email": "dankogai+github@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "dankogai",
+ "email": "dankogai+github@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "aa9c941ceff1567ea9ed8bea8319191f3541e4e8",
+ "tarball": "http://registry.npmjs.org/js-base64/-/js-base64-2.1.7.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.7.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/dankogai.js b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/dankogai.js
new file mode 100644
index 0000000..3e7b12f
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/dankogai.js
@@ -0,0 +1,47 @@
+/*
+ * $Id: dankogai.js,v 0.4 2012/08/24 05:23:18 dankogai Exp dankogai $
+ *
+ * use mocha to test me
+ * http://visionmedia.github.com/mocha/
+ */
+var assert, Base64;
+if (this['window'] !== this) {
+ assert = require("assert");
+ Base64 = require('../base64.js').Base64;
+}
+var is = function (a, e, m) {
+ return function () {
+ assert.equal(a, e, m)
+ }
+};
+
+describe('basic', function () {
+ it('d', is(Base64.encode('d'), 'ZA=='));
+ it('da', is(Base64.encode('da'), 'ZGE='));
+ it('dan', is(Base64.encode('dan'), 'ZGFu'));
+ it('ZA==', is(Base64.decode('ZA=='), 'd' ));
+ it('ZGE=', is(Base64.decode('ZGE='), 'da' ));
+ it('ZGFu', is(Base64.decode('ZGFu'), 'dan' ));
+});
+
+describe('whitespace', function () {
+ it('Z A==', is(Base64.decode('ZA =='), 'd' ));
+ it('ZG E=', is(Base64.decode('ZG E='), 'da' ));
+ it('ZGF u', is(Base64.decode('ZGF u'), 'dan' ));
+});
+
+describe('null', function () {
+ it('\\0', is(Base64.encode('\0'), 'AA=='));
+ it('\\0\\0', is(Base64.encode('\0\0'), 'AAA='));
+ it('\\0\\0\\0', is(Base64.encode('\0\0\0'), 'AAAA'));
+ it('AA==', is(Base64.decode('AA=='), '\0' ));
+ it('AAA=', is(Base64.decode('AAA='), '\0\0' ));
+ it('AAAA', is(Base64.decode('AAAA'), '\0\0\0'));
+});
+
+describe('Base64', function () {
+ it('.encode', is(Base64.encode('小飼弾'), '5bCP6aO85by+'));
+ it('.encodeURI', is(Base64.encodeURI('小飼弾'), '5bCP6aO85by-'));
+ it('.decode', is(Base64.decode('5bCP6aO85by+'), '小飼弾'));
+ it('.decode', is(Base64.decode('5bCP6aO85by-'), '小飼弾'));
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/es5.js b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/es5.js
new file mode 100644
index 0000000..6414399
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/es5.js
@@ -0,0 +1,27 @@
+/*
+ * $Id: es5.js,v 0.1 2012/08/23 19:43:17 dankogai Exp dankogai $
+ *
+ * use mocha to test me
+ * http://visionmedia.github.com/mocha/
+ */
+var assert, Base64;
+if (this['window'] !== this) {
+ assert = require("assert");
+ Base64 = require('../base64.js').Base64;
+}
+var is = function (a, e, m) {
+ return function () {
+ assert.equal(a, e, m)
+ }
+};
+
+if ('extendString' in Base64){
+ Base64.extendString();
+ describe('String', function () {
+ it('.toBase64', is('小飼弾'.toBase64(), '5bCP6aO85by+'));
+ it('.toBase64', is('小飼弾'.toBase64(true), '5bCP6aO85by-'));
+ it('.toBase64URI', is('小飼弾'.toBase64URI(), '5bCP6aO85by-'));
+ it('.fromBase64', is('5bCP6aO85by+'.fromBase64(), '小飼弾'));
+ it('.fromBase64', is('5bCP6aO85by-'.fromBase64(), '小飼弾'));
+ });
+}
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/index.html b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/index.html
new file mode 100644
index 0000000..0ca1387
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/index.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $Id: browser.html,v 0.2 2012/08/23 19:44:32 dankogai Exp dankogai $
+
+
+
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/large.js b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/large.js
new file mode 100644
index 0000000..acd4ebf
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/large.js
@@ -0,0 +1,28 @@
+/*
+ * $Id: large.js,v 0.3 2012/08/23 19:14:37 dankogai Exp dankogai $
+ *
+ * use mocha to test me
+ * http://visionmedia.github.com/mocha/
+ */
+var assert, Base64;
+if (this['window'] !== this) {
+ assert = require("assert");
+ Base64 = require('../base64.js').Base64;
+}
+var is = function (a, e, m) {
+ return function () {
+ assert.equal(a, e, m)
+ }
+};
+var seed = function () {
+ var a, i;
+ for (a = [], i = 0; i < 256; i++) {
+ a.push(String.fromCharCode(i));
+ }
+ return a.join('');
+}();
+describe('Base64', function () {
+ for (var i = 0, str = seed; i < 16; str += str, i++) {
+ it(str.length, is(Base64.decode(Base64.encode(str)), str));
+ }
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/yoshinoya.js b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/yoshinoya.js
new file mode 100644
index 0000000..d21cead
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/js-base64/test/yoshinoya.js
@@ -0,0 +1,22 @@
+/*
+ * use mocha to test me
+ * http://visionmedia.github.com/mocha/
+ */
+var assert, Base64;
+if (this['window'] !== this) {
+ assert = require("assert");
+ Base64 = require('../base64.js').Base64;
+}
+var is = function (a, e, m) {
+ return function () {
+ assert.equal(a, e, m)
+ }
+};
+
+describe('Yoshinoya', function () {
+ it('.encode', is(Base64.encode('𠮷野家'), '8KCut+mHjuWutg=='));
+ it('.encodeURI', is(Base64.encodeURI('𠮷野家'), '8KCut-mHjuWutg'));
+ it('.decode', is(Base64.decode('8KCut+mHjuWutg=='), '𠮷野家'));
+ it('.decode', is(Base64.decode('8KCut-mHjuWutg'), '𠮷野家'));
+ it('.decode', is(Base64.decode('7aGC7b636YeO5a62'), '𠮷野家'));
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/.npmignore b/node_modules/csswring/node_modules/postcss/node_modules/source-map/.npmignore
new file mode 100644
index 0000000..3dddf3f
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/.npmignore
@@ -0,0 +1,2 @@
+dist/*
+node_modules/*
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/.travis.yml b/node_modules/csswring/node_modules/postcss/node_modules/source-map/.travis.yml
new file mode 100644
index 0000000..ddc9c4f
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.8
+ - "0.10"
\ No newline at end of file
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/CHANGELOG.md b/node_modules/csswring/node_modules/postcss/node_modules/source-map/CHANGELOG.md
new file mode 100644
index 0000000..2ce9d80
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/CHANGELOG.md
@@ -0,0 +1,201 @@
+# Change Log
+
+## 0.2.0
+
+* Support for consuming "indexed" source maps which do not have any remote
+ sections. See pull request #127. This introduces a minor backwards
+ incompatibility if you are monkey patching `SourceMapConsumer.prototype`
+ methods.
+
+## 0.1.43
+
+* Performance improvements for `SourceMapGenerator` and `SourceNode`. See issue
+ #148 for some discussion and issues #150, #151, and #152 for implementations.
+
+## 0.1.42
+
+* Fix an issue where `SourceNode`s from different versions of the source-map
+ library couldn't be used in conjunction with each other. See issue #142.
+
+## 0.1.41
+
+* Fix a bug with getting the source content of relative sources with a "./"
+ prefix. See issue #145 and [Bug 1090768](bugzil.la/1090768).
+
+* Add the `SourceMapConsumer.prototype.computeColumnSpans` method to compute the
+ column span of each mapping.
+
+* Add the `SourceMapConsumer.prototype.allGeneratedPositionsFor` method to find
+ all generated positions associated with a given original source and line.
+
+## 0.1.40
+
+* Performance improvements for parsing source maps in SourceMapConsumer.
+
+## 0.1.39
+
+* Fix a bug where setting a source's contents to null before any source content
+ had been set before threw a TypeError. See issue #131.
+
+## 0.1.38
+
+* Fix a bug where finding relative paths from an empty path were creating
+ absolute paths. See issue #129.
+
+## 0.1.37
+
+* Fix a bug where if the source root was an empty string, relative source paths
+ would turn into absolute source paths. Issue #124.
+
+## 0.1.36
+
+* Allow the `names` mapping property to be an empty string. Issue #121.
+
+## 0.1.35
+
+* A third optional parameter was added to `SourceNode.fromStringWithSourceMap`
+ to specify a path that relative sources in the second parameter should be
+ relative to. Issue #105.
+
+* If no file property is given to a `SourceMapGenerator`, then the resulting
+ source map will no longer have a `null` file property. The property will
+ simply not exist. Issue #104.
+
+* Fixed a bug where consecutive newlines were ignored in `SourceNode`s.
+ Issue #116.
+
+## 0.1.34
+
+* Make `SourceNode` work with windows style ("\r\n") newlines. Issue #103.
+
+* Fix bug involving source contents and the
+ `SourceMapGenerator.prototype.applySourceMap`. Issue #100.
+
+## 0.1.33
+
+* Fix some edge cases surrounding path joining and URL resolution.
+
+* Add a third parameter for relative path to
+ `SourceMapGenerator.prototype.applySourceMap`.
+
+* Fix issues with mappings and EOLs.
+
+## 0.1.32
+
+* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns
+ (issue 92).
+
+* Fixed test runner to actually report number of failed tests as its process
+ exit code.
+
+* Fixed a typo when reporting bad mappings (issue 87).
+
+## 0.1.31
+
+* Delay parsing the mappings in SourceMapConsumer until queried for a source
+ location.
+
+* Support Sass source maps (which at the time of writing deviate from the spec
+ in small ways) in SourceMapConsumer.
+
+## 0.1.30
+
+* Do not join source root with a source, when the source is a data URI.
+
+* Extend the test runner to allow running single specific test files at a time.
+
+* Performance improvements in `SourceNode.prototype.walk` and
+ `SourceMapConsumer.prototype.eachMapping`.
+
+* Source map browser builds will now work inside Workers.
+
+* Better error messages when attempting to add an invalid mapping to a
+ `SourceMapGenerator`.
+
+## 0.1.29
+
+* Allow duplicate entries in the `names` and `sources` arrays of source maps
+ (usually from TypeScript) we are parsing. Fixes github issue 72.
+
+## 0.1.28
+
+* Skip duplicate mappings when creating source maps from SourceNode; github
+ issue 75.
+
+## 0.1.27
+
+* Don't throw an error when the `file` property is missing in SourceMapConsumer,
+ we don't use it anyway.
+
+## 0.1.26
+
+* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70.
+
+## 0.1.25
+
+* Make compatible with browserify
+
+## 0.1.24
+
+* Fix issue with absolute paths and `file://` URIs. See
+ https://bugzilla.mozilla.org/show_bug.cgi?id=885597
+
+## 0.1.23
+
+* Fix issue with absolute paths and sourcesContent, github issue 64.
+
+## 0.1.22
+
+* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21.
+
+## 0.1.21
+
+* Fixed handling of sources that start with a slash so that they are relative to
+ the source root's host.
+
+## 0.1.20
+
+* Fixed github issue #43: absolute URLs aren't joined with the source root
+ anymore.
+
+## 0.1.19
+
+* Using Travis CI to run tests.
+
+## 0.1.18
+
+* Fixed a bug in the handling of sourceRoot.
+
+## 0.1.17
+
+* Added SourceNode.fromStringWithSourceMap.
+
+## 0.1.16
+
+* Added missing documentation.
+
+* Fixed the generating of empty mappings in SourceNode.
+
+## 0.1.15
+
+* Added SourceMapGenerator.applySourceMap.
+
+## 0.1.14
+
+* The sourceRoot is now handled consistently.
+
+## 0.1.13
+
+* Added SourceMapGenerator.fromSourceMap.
+
+## 0.1.12
+
+* SourceNode now generates empty mappings too.
+
+## 0.1.11
+
+* Added name support to SourceNode.
+
+## 0.1.10
+
+* Added sourcesContent support to the customer and generator.
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/LICENSE b/node_modules/csswring/node_modules/postcss/node_modules/source-map/LICENSE
new file mode 100644
index 0000000..ed1b7cf
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/LICENSE
@@ -0,0 +1,28 @@
+
+Copyright (c) 2009-2011, Mozilla Foundation and contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the names of the Mozilla Foundation nor the names of project
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/Makefile.dryice.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/Makefile.dryice.js
new file mode 100644
index 0000000..d6fc26a
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/Makefile.dryice.js
@@ -0,0 +1,166 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+var path = require('path');
+var fs = require('fs');
+var copy = require('dryice').copy;
+
+function removeAmdefine(src) {
+ src = String(src).replace(
+ /if\s*\(typeof\s*define\s*!==\s*'function'\)\s*{\s*var\s*define\s*=\s*require\('amdefine'\)\(module,\s*require\);\s*}\s*/g,
+ '');
+ src = src.replace(
+ /\b(define\(.*)('amdefine',?)/gm,
+ '$1');
+ return src;
+}
+removeAmdefine.onRead = true;
+
+function makeNonRelative(src) {
+ return src
+ .replace(/require\('.\//g, 'require(\'source-map/')
+ .replace(/\.\.\/\.\.\/lib\//g, '');
+}
+makeNonRelative.onRead = true;
+
+function buildBrowser() {
+ console.log('\nCreating dist/source-map.js');
+
+ var project = copy.createCommonJsProject({
+ roots: [ path.join(__dirname, 'lib') ]
+ });
+
+ copy({
+ source: [
+ 'build/mini-require.js',
+ {
+ project: project,
+ require: [ 'source-map/source-map-generator',
+ 'source-map/source-map-consumer',
+ 'source-map/source-node']
+ },
+ 'build/suffix-browser.js'
+ ],
+ filter: [
+ copy.filter.moduleDefines,
+ removeAmdefine
+ ],
+ dest: 'dist/source-map.js'
+ });
+}
+
+function buildBrowserMin() {
+ console.log('\nCreating dist/source-map.min.js');
+
+ copy({
+ source: 'dist/source-map.js',
+ filter: copy.filter.uglifyjs,
+ dest: 'dist/source-map.min.js'
+ });
+}
+
+function buildFirefox() {
+ console.log('\nCreating dist/SourceMap.jsm');
+
+ var project = copy.createCommonJsProject({
+ roots: [ path.join(__dirname, 'lib') ]
+ });
+
+ copy({
+ source: [
+ 'build/prefix-source-map.jsm',
+ {
+ project: project,
+ require: [ 'source-map/source-map-consumer',
+ 'source-map/source-map-generator',
+ 'source-map/source-node' ]
+ },
+ 'build/suffix-source-map.jsm'
+ ],
+ filter: [
+ copy.filter.moduleDefines,
+ removeAmdefine,
+ makeNonRelative
+ ],
+ dest: 'dist/SourceMap.jsm'
+ });
+
+ // Create dist/test/Utils.jsm
+ console.log('\nCreating dist/test/Utils.jsm');
+
+ project = copy.createCommonJsProject({
+ roots: [ __dirname, path.join(__dirname, 'lib') ]
+ });
+
+ copy({
+ source: [
+ 'build/prefix-utils.jsm',
+ 'build/assert-shim.js',
+ {
+ project: project,
+ require: [ 'test/source-map/util' ]
+ },
+ 'build/suffix-utils.jsm'
+ ],
+ filter: [
+ copy.filter.moduleDefines,
+ removeAmdefine,
+ makeNonRelative
+ ],
+ dest: 'dist/test/Utils.jsm'
+ });
+
+ function isTestFile(f) {
+ return /^test\-.*?\.js/.test(f);
+ }
+
+ var testFiles = fs.readdirSync(path.join(__dirname, 'test', 'source-map')).filter(isTestFile);
+
+ testFiles.forEach(function (testFile) {
+ console.log('\nCreating', path.join('dist', 'test', testFile.replace(/\-/g, '_')));
+
+ copy({
+ source: [
+ 'build/test-prefix.js',
+ path.join('test', 'source-map', testFile),
+ 'build/test-suffix.js'
+ ],
+ filter: [
+ removeAmdefine,
+ makeNonRelative,
+ function (input, source) {
+ return input.replace('define(',
+ 'define("'
+ + path.join('test', 'source-map', testFile.replace(/\.js$/, ''))
+ + '", ["require", "exports", "module"], ');
+ },
+ function (input, source) {
+ return input.replace('{THIS_MODULE}', function () {
+ return "test/source-map/" + testFile.replace(/\.js$/, '');
+ });
+ }
+ ],
+ dest: path.join('dist', 'test', testFile.replace(/\-/g, '_'))
+ });
+ });
+}
+
+function ensureDir(name) {
+ var dirExists = false;
+ try {
+ dirExists = fs.statSync(name).isDirectory();
+ } catch (err) {}
+
+ if (!dirExists) {
+ fs.mkdirSync(name, 0777);
+ }
+}
+
+ensureDir("dist");
+ensureDir("dist/test");
+buildFirefox();
+buildBrowser();
+buildBrowserMin();
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/README.md b/node_modules/csswring/node_modules/postcss/node_modules/source-map/README.md
new file mode 100644
index 0000000..450b514
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/README.md
@@ -0,0 +1,479 @@
+# Source Map
+
+This is a library to generate and consume the source map format
+[described here][format].
+
+This library is written in the Asynchronous Module Definition format, and works
+in the following environments:
+
+* Modern Browsers supporting ECMAScript 5 (either after the build, or with an
+ AMD loader such as RequireJS)
+
+* Inside Firefox (as a JSM file, after the build)
+
+* With NodeJS versions 0.8.X and higher
+
+## Node
+
+ $ npm install source-map
+
+## Building from Source (for everywhere else)
+
+Install Node and then run
+
+ $ git clone https://fitzgen@github.com/mozilla/source-map.git
+ $ cd source-map
+ $ npm link .
+
+Next, run
+
+ $ node Makefile.dryice.js
+
+This should spew a bunch of stuff to stdout, and create the following files:
+
+* `dist/source-map.js` - The unminified browser version.
+
+* `dist/source-map.min.js` - The minified browser version.
+
+* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source.
+
+## Examples
+
+### Consuming a source map
+
+ var rawSourceMap = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ sourceRoot: 'http://example.com/www/js/',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+
+ var smc = new SourceMapConsumer(rawSourceMap);
+
+ console.log(smc.sources);
+ // [ 'http://example.com/www/js/one.js',
+ // 'http://example.com/www/js/two.js' ]
+
+ console.log(smc.originalPositionFor({
+ line: 2,
+ column: 28
+ }));
+ // { source: 'http://example.com/www/js/two.js',
+ // line: 2,
+ // column: 10,
+ // name: 'n' }
+
+ console.log(smc.generatedPositionFor({
+ source: 'http://example.com/www/js/two.js',
+ line: 2,
+ column: 10
+ }));
+ // { line: 2, column: 28 }
+
+ smc.eachMapping(function (m) {
+ // ...
+ });
+
+### Generating a source map
+
+In depth guide:
+[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
+
+#### With SourceNode (high level API)
+
+ function compile(ast) {
+ switch (ast.type) {
+ case 'BinaryExpression':
+ return new SourceNode(
+ ast.location.line,
+ ast.location.column,
+ ast.location.source,
+ [compile(ast.left), " + ", compile(ast.right)]
+ );
+ case 'Literal':
+ return new SourceNode(
+ ast.location.line,
+ ast.location.column,
+ ast.location.source,
+ String(ast.value)
+ );
+ // ...
+ default:
+ throw new Error("Bad AST");
+ }
+ }
+
+ var ast = parse("40 + 2", "add.js");
+ console.log(compile(ast).toStringWithSourceMap({
+ file: 'add.js'
+ }));
+ // { code: '40 + 2',
+ // map: [object SourceMapGenerator] }
+
+#### With SourceMapGenerator (low level API)
+
+ var map = new SourceMapGenerator({
+ file: "source-mapped.js"
+ });
+
+ map.addMapping({
+ generated: {
+ line: 10,
+ column: 35
+ },
+ source: "foo.js",
+ original: {
+ line: 33,
+ column: 2
+ },
+ name: "christopher"
+ });
+
+ console.log(map.toString());
+ // '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
+
+## API
+
+Get a reference to the module:
+
+ // NodeJS
+ var sourceMap = require('source-map');
+
+ // Browser builds
+ var sourceMap = window.sourceMap;
+
+ // Inside Firefox
+ let sourceMap = {};
+ Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
+
+### SourceMapConsumer
+
+A SourceMapConsumer instance represents a parsed source map which we can query
+for information about the original file positions by giving it a file position
+in the generated source.
+
+#### new SourceMapConsumer(rawSourceMap)
+
+The only parameter is the raw source map (either as a string which can be
+`JSON.parse`'d, or an object). According to the spec, source maps have the
+following attributes:
+
+* `version`: Which version of the source map spec this map is following.
+
+* `sources`: An array of URLs to the original source files.
+
+* `names`: An array of identifiers which can be referrenced by individual
+ mappings.
+
+* `sourceRoot`: Optional. The URL root from which all sources are relative.
+
+* `sourcesContent`: Optional. An array of contents of the original source files.
+
+* `mappings`: A string of base64 VLQs which contain the actual mappings.
+
+* `file`: Optional. The generated filename this source map is associated with.
+
+#### SourceMapConsumer.prototype.computeColumnSpans()
+
+Compute the last column for each generated mapping. The last column is
+inclusive.
+
+#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
+
+Returns the original source, line, and column information for the generated
+source's line and column positions provided. The only argument is an object with
+the following properties:
+
+* `line`: The line number in the generated source.
+
+* `column`: The column number in the generated source.
+
+and an object is returned with the following properties:
+
+* `source`: The original source file, or null if this information is not
+ available.
+
+* `line`: The line number in the original source, or null if this information is
+ not available.
+
+* `column`: The column number in the original source, or null or null if this
+ information is not available.
+
+* `name`: The original identifier, or null if this information is not available.
+
+#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
+
+Returns the generated line and column information for the original source,
+line, and column positions provided. The only argument is an object with
+the following properties:
+
+* `source`: The filename of the original source.
+
+* `line`: The line number in the original source.
+
+* `column`: The column number in the original source.
+
+and an object is returned with the following properties:
+
+* `line`: The line number in the generated source, or null.
+
+* `column`: The column number in the generated source, or null.
+
+#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
+
+Returns all generated line and column information for the original source
+and line provided. The only argument is an object with the following
+properties:
+
+* `source`: The filename of the original source.
+
+* `line`: The line number in the original source.
+
+and an array of objects is returned, each with the following properties:
+
+* `line`: The line number in the generated source, or null.
+
+* `column`: The column number in the generated source, or null.
+
+#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
+
+Returns the original source content for the source provided. The only
+argument is the URL of the original source file.
+
+If the source content for the given source is not found, then an error is
+thrown. Optionally, pass `true` as the second param to have `null` returned
+instead.
+
+#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
+
+Iterate over each mapping between an original source/line/column and a
+generated line/column in this source map.
+
+* `callback`: The function that is called with each mapping. Mappings have the
+ form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
+ name }`
+
+* `context`: Optional. If specified, this object will be the value of `this`
+ every time that `callback` is called.
+
+* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or
+ `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over
+ the mappings sorted by the generated file's line/column order or the
+ original's source/line/column order, respectively. Defaults to
+ `SourceMapConsumer.GENERATED_ORDER`.
+
+### SourceMapGenerator
+
+An instance of the SourceMapGenerator represents a source map which is being
+built incrementally.
+
+#### new SourceMapGenerator([startOfSourceMap])
+
+You may pass an object with the following properties:
+
+* `file`: The filename of the generated source that this source map is
+ associated with.
+
+* `sourceRoot`: A root for all relative URLs in this source map.
+
+* `skipValidation`: Optional. When `true`, disables validation of mappings as
+ they are added. This can improve performance but should be used with
+ discretion, as a last resort. Even then, one should avoid using this flag when
+ running tests, if possible.
+
+#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)
+
+Creates a new SourceMapGenerator based on a SourceMapConsumer
+
+* `sourceMapConsumer` The SourceMap.
+
+#### SourceMapGenerator.prototype.addMapping(mapping)
+
+Add a single mapping from original source line and column to the generated
+source's line and column for this source map being created. The mapping object
+should have the following properties:
+
+* `generated`: An object with the generated line and column positions.
+
+* `original`: An object with the original line and column positions.
+
+* `source`: The original source file (relative to the sourceRoot).
+
+* `name`: An optional original token name for this mapping.
+
+#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
+
+Set the source content for an original source file.
+
+* `sourceFile` the URL of the original source file.
+
+* `sourceContent` the content of the source file.
+
+#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
+
+Applies a SourceMap for a source file to the SourceMap.
+Each mapping to the supplied source file is rewritten using the
+supplied SourceMap. Note: The resolution for the resulting mappings
+is the minimium of this map and the supplied map.
+
+* `sourceMapConsumer`: The SourceMap to be applied.
+
+* `sourceFile`: Optional. The filename of the source file.
+ If omitted, sourceMapConsumer.file will be used, if it exists.
+ Otherwise an error will be thrown.
+
+* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
+ to be applied. If relative, it is relative to the SourceMap.
+
+ This parameter is needed when the two SourceMaps aren't in the same
+ directory, and the SourceMap to be applied contains relative source
+ paths. If so, those relative source paths need to be rewritten
+ relative to the SourceMap.
+
+ If omitted, it is assumed that both SourceMaps are in the same directory,
+ thus not needing any rewriting. (Supplying `'.'` has the same effect.)
+
+#### SourceMapGenerator.prototype.toString()
+
+Renders the source map being generated to a string.
+
+### SourceNode
+
+SourceNodes provide a way to abstract over interpolating and/or concatenating
+snippets of generated JavaScript source code, while maintaining the line and
+column information associated between those snippets and the original source
+code. This is useful as the final intermediate representation a compiler might
+use before outputting the generated JS and source map.
+
+#### new SourceNode([line, column, source[, chunk[, name]]])
+
+* `line`: The original line number associated with this source node, or null if
+ it isn't associated with an original line.
+
+* `column`: The original column number associated with this source node, or null
+ if it isn't associated with an original column.
+
+* `source`: The original source's filename; null if no filename is provided.
+
+* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
+ below.
+
+* `name`: Optional. The original identifier.
+
+#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
+
+Creates a SourceNode from generated code and a SourceMapConsumer.
+
+* `code`: The generated code
+
+* `sourceMapConsumer` The SourceMap for the generated code
+
+* `relativePath` The optional path that relative sources in `sourceMapConsumer`
+ should be relative to.
+
+#### SourceNode.prototype.add(chunk)
+
+Add a chunk of generated JS to this source node.
+
+* `chunk`: A string snippet of generated JS code, another instance of
+ `SourceNode`, or an array where each member is one of those things.
+
+#### SourceNode.prototype.prepend(chunk)
+
+Prepend a chunk of generated JS to this source node.
+
+* `chunk`: A string snippet of generated JS code, another instance of
+ `SourceNode`, or an array where each member is one of those things.
+
+#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
+
+Set the source content for a source file. This will be added to the
+`SourceMap` in the `sourcesContent` field.
+
+* `sourceFile`: The filename of the source file
+
+* `sourceContent`: The content of the source file
+
+#### SourceNode.prototype.walk(fn)
+
+Walk over the tree of JS snippets in this node and its children. The walking
+function is called once for each snippet of JS and is passed that snippet and
+the its original associated source's line/column location.
+
+* `fn`: The traversal function.
+
+#### SourceNode.prototype.walkSourceContents(fn)
+
+Walk over the tree of SourceNodes. The walking function is called for each
+source file content and is passed the filename and source content.
+
+* `fn`: The traversal function.
+
+#### SourceNode.prototype.join(sep)
+
+Like `Array.prototype.join` except for SourceNodes. Inserts the separator
+between each of this source node's children.
+
+* `sep`: The separator.
+
+#### SourceNode.prototype.replaceRight(pattern, replacement)
+
+Call `String.prototype.replace` on the very right-most source snippet. Useful
+for trimming whitespace from the end of a source node, etc.
+
+* `pattern`: The pattern to replace.
+
+* `replacement`: The thing to replace the pattern with.
+
+#### SourceNode.prototype.toString()
+
+Return the string representation of this source node. Walks over the tree and
+concatenates all the various snippets together to one string.
+
+#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
+
+Returns the string representation of this tree of source nodes, plus a
+SourceMapGenerator which contains all the mappings between the generated and
+original sources.
+
+The arguments are the same as those to `new SourceMapGenerator`.
+
+## Tests
+
+[](https://travis-ci.org/mozilla/source-map)
+
+Install NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`.
+
+To add new tests, create a new file named `test/test-.js`
+and export your test functions with names that start with "test", for example
+
+ exports["test doing the foo bar"] = function (assert, util) {
+ ...
+ };
+
+The new test will be located automatically when you run the suite.
+
+The `util` argument is the test utility module located at `test/source-map/util`.
+
+The `assert` argument is a cut down version of node's assert module. You have
+access to the following assertion functions:
+
+* `doesNotThrow`
+
+* `equal`
+
+* `ok`
+
+* `strictEqual`
+
+* `throws`
+
+(The reason for the restricted set of test functions is because we need the
+tests to run inside Firefox's test suite as well and so the assert module is
+shimmed in that environment. See `build/assert-shim.js`.)
+
+[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
+[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap
+[Dryice]: https://github.com/mozilla/dryice
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/assert-shim.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/assert-shim.js
new file mode 100644
index 0000000..daa1a62
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/assert-shim.js
@@ -0,0 +1,56 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+define('test/source-map/assert', ['exports'], function (exports) {
+
+ let do_throw = function (msg) {
+ throw new Error(msg);
+ };
+
+ exports.init = function (throw_fn) {
+ do_throw = throw_fn;
+ };
+
+ exports.doesNotThrow = function (fn) {
+ try {
+ fn();
+ }
+ catch (e) {
+ do_throw(e.message);
+ }
+ };
+
+ exports.equal = function (actual, expected, msg) {
+ msg = msg || String(actual) + ' != ' + String(expected);
+ if (actual != expected) {
+ do_throw(msg);
+ }
+ };
+
+ exports.ok = function (val, msg) {
+ msg = msg || String(val) + ' is falsey';
+ if (!Boolean(val)) {
+ do_throw(msg);
+ }
+ };
+
+ exports.strictEqual = function (actual, expected, msg) {
+ msg = msg || String(actual) + ' !== ' + String(expected);
+ if (actual !== expected) {
+ do_throw(msg);
+ }
+ };
+
+ exports.throws = function (fn) {
+ try {
+ fn();
+ do_throw('Expected an error to be thrown, but it wasn\'t.');
+ }
+ catch (e) {
+ }
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/mini-require.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/mini-require.js
new file mode 100644
index 0000000..0daf453
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/mini-require.js
@@ -0,0 +1,152 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/**
+ * Define a module along with a payload.
+ * @param {string} moduleName Name for the payload
+ * @param {ignored} deps Ignored. For compatibility with CommonJS AMD Spec
+ * @param {function} payload Function with (require, exports, module) params
+ */
+function define(moduleName, deps, payload) {
+ if (typeof moduleName != "string") {
+ throw new TypeError('Expected string, got: ' + moduleName);
+ }
+
+ if (arguments.length == 2) {
+ payload = deps;
+ }
+
+ if (moduleName in define.modules) {
+ throw new Error("Module already defined: " + moduleName);
+ }
+ define.modules[moduleName] = payload;
+};
+
+/**
+ * The global store of un-instantiated modules
+ */
+define.modules = {};
+
+
+/**
+ * We invoke require() in the context of a Domain so we can have multiple
+ * sets of modules running separate from each other.
+ * This contrasts with JSMs which are singletons, Domains allows us to
+ * optionally load a CommonJS module twice with separate data each time.
+ * Perhaps you want 2 command lines with a different set of commands in each,
+ * for example.
+ */
+function Domain() {
+ this.modules = {};
+ this._currentModule = null;
+}
+
+(function () {
+
+ /**
+ * Lookup module names and resolve them by calling the definition function if
+ * needed.
+ * There are 2 ways to call this, either with an array of dependencies and a
+ * callback to call when the dependencies are found (which can happen
+ * asynchronously in an in-page context) or with a single string an no callback
+ * where the dependency is resolved synchronously and returned.
+ * The API is designed to be compatible with the CommonJS AMD spec and
+ * RequireJS.
+ * @param {string[]|string} deps A name, or names for the payload
+ * @param {function|undefined} callback Function to call when the dependencies
+ * are resolved
+ * @return {undefined|object} The module required or undefined for
+ * array/callback method
+ */
+ Domain.prototype.require = function(deps, callback) {
+ if (Array.isArray(deps)) {
+ var params = deps.map(function(dep) {
+ return this.lookup(dep);
+ }, this);
+ if (callback) {
+ callback.apply(null, params);
+ }
+ return undefined;
+ }
+ else {
+ return this.lookup(deps);
+ }
+ };
+
+ function normalize(path) {
+ var bits = path.split('/');
+ var i = 1;
+ while (i < bits.length) {
+ if (bits[i] === '..') {
+ bits.splice(i-1, 1);
+ } else if (bits[i] === '.') {
+ bits.splice(i, 1);
+ } else {
+ i++;
+ }
+ }
+ return bits.join('/');
+ }
+
+ function join(a, b) {
+ a = a.trim();
+ b = b.trim();
+ if (/^\//.test(b)) {
+ return b;
+ } else {
+ return a.replace(/\/*$/, '/') + b;
+ }
+ }
+
+ function dirname(path) {
+ var bits = path.split('/');
+ bits.pop();
+ return bits.join('/');
+ }
+
+ /**
+ * Lookup module names and resolve them by calling the definition function if
+ * needed.
+ * @param {string} moduleName A name for the payload to lookup
+ * @return {object} The module specified by aModuleName or null if not found.
+ */
+ Domain.prototype.lookup = function(moduleName) {
+ if (/^\./.test(moduleName)) {
+ moduleName = normalize(join(dirname(this._currentModule), moduleName));
+ }
+
+ if (moduleName in this.modules) {
+ var module = this.modules[moduleName];
+ return module;
+ }
+
+ if (!(moduleName in define.modules)) {
+ throw new Error("Module not defined: " + moduleName);
+ }
+
+ var module = define.modules[moduleName];
+
+ if (typeof module == "function") {
+ var exports = {};
+ var previousModule = this._currentModule;
+ this._currentModule = moduleName;
+ module(this.require.bind(this), exports, { id: moduleName, uri: "" });
+ this._currentModule = previousModule;
+ module = exports;
+ }
+
+ // cache the resulting module object for next time
+ this.modules[moduleName] = module;
+
+ return module;
+ };
+
+}());
+
+define.Domain = Domain;
+define.globalDomain = new Domain();
+var require = define.globalDomain.require.bind(define.globalDomain);
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm
new file mode 100644
index 0000000..ee2539d
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm
@@ -0,0 +1,20 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/*
+ * WARNING!
+ *
+ * Do not edit this file directly, it is built from the sources at
+ * https://github.com/mozilla/source-map/
+ */
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+this.EXPORTED_SYMBOLS = [ "SourceMapConsumer", "SourceMapGenerator", "SourceNode" ];
+
+Components.utils.import('resource://gre/modules/devtools/Require.jsm');
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm
new file mode 100644
index 0000000..80341d4
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm
@@ -0,0 +1,18 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/*
+ * WARNING!
+ *
+ * Do not edit this file directly, it is built from the sources at
+ * https://github.com/mozilla/source-map/
+ */
+
+Components.utils.import('resource://gre/modules/devtools/Require.jsm');
+Components.utils.import('resource://gre/modules/devtools/SourceMap.jsm');
+
+this.EXPORTED_SYMBOLS = [ "define", "runSourceMapTests" ];
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-browser.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-browser.js
new file mode 100644
index 0000000..fb29ff5
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-browser.js
@@ -0,0 +1,8 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+///////////////////////////////////////////////////////////////////////////////
+
+this.sourceMap = {
+ SourceMapConsumer: require('source-map/source-map-consumer').SourceMapConsumer,
+ SourceMapGenerator: require('source-map/source-map-generator').SourceMapGenerator,
+ SourceNode: require('source-map/source-node').SourceNode
+};
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm
new file mode 100644
index 0000000..cf3c2d8
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm
@@ -0,0 +1,6 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+///////////////////////////////////////////////////////////////////////////////
+
+this.SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer;
+this.SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator;
+this.SourceNode = require('source-map/source-node').SourceNode;
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm
new file mode 100644
index 0000000..b31b84c
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm
@@ -0,0 +1,21 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+function runSourceMapTests(modName, do_throw) {
+ let mod = require(modName);
+ let assert = require('test/source-map/assert');
+ let util = require('test/source-map/util');
+
+ assert.init(do_throw);
+
+ for (let k in mod) {
+ if (/^test/.test(k)) {
+ mod[k](assert, util);
+ }
+ }
+
+}
+this.runSourceMapTests = runSourceMapTests;
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/test-prefix.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/test-prefix.js
new file mode 100644
index 0000000..1b13f30
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/test-prefix.js
@@ -0,0 +1,8 @@
+/*
+ * WARNING!
+ *
+ * Do not edit this file directly, it is built from the sources at
+ * https://github.com/mozilla/source-map/
+ */
+
+Components.utils.import('resource://test/Utils.jsm');
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/test-suffix.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/test-suffix.js
new file mode 100644
index 0000000..bec2de3
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/build/test-suffix.js
@@ -0,0 +1,3 @@
+function run_test() {
+ runSourceMapTests('{THIS_MODULE}', do_throw);
+}
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map.js
new file mode 100644
index 0000000..121ad24
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map.js
@@ -0,0 +1,8 @@
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+exports.SourceMapGenerator = require('./source-map/source-map-generator').SourceMapGenerator;
+exports.SourceMapConsumer = require('./source-map/source-map-consumer').SourceMapConsumer;
+exports.SourceNode = require('./source-map/source-node').SourceNode;
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js
new file mode 100644
index 0000000..40f9a18
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js
@@ -0,0 +1,97 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+
+ /**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+ function ArraySet() {
+ this._array = [];
+ this._set = {};
+ }
+
+ /**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+ var set = new ArraySet();
+ for (var i = 0, len = aArray.length; i < len; i++) {
+ set.add(aArray[i], aAllowDuplicates);
+ }
+ return set;
+ };
+
+ /**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+ var isDuplicate = this.has(aStr);
+ var idx = this._array.length;
+ if (!isDuplicate || aAllowDuplicates) {
+ this._array.push(aStr);
+ }
+ if (!isDuplicate) {
+ this._set[util.toSetString(aStr)] = idx;
+ }
+ };
+
+ /**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.has = function ArraySet_has(aStr) {
+ return Object.prototype.hasOwnProperty.call(this._set,
+ util.toSetString(aStr));
+ };
+
+ /**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+ if (this.has(aStr)) {
+ return this._set[util.toSetString(aStr)];
+ }
+ throw new Error('"' + aStr + '" is not in the set.');
+ };
+
+ /**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ ArraySet.prototype.at = function ArraySet_at(aIdx) {
+ if (aIdx >= 0 && aIdx < this._array.length) {
+ return this._array[aIdx];
+ }
+ throw new Error('No element indexed by ' + aIdx);
+ };
+
+ /**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ ArraySet.prototype.toArray = function ArraySet_toArray() {
+ return this._array.slice();
+ };
+
+ exports.ArraySet = ArraySet;
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js
new file mode 100644
index 0000000..e22dcae
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js
@@ -0,0 +1,142 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var base64 = require('./base64');
+
+ // A single base 64 digit can contain 6 bits of data. For the base 64 variable
+ // length quantities we use in the source map spec, the first bit is the sign,
+ // the next four bits are the actual value, and the 6th bit is the
+ // continuation bit. The continuation bit tells us whether there are more
+ // digits in this value following this digit.
+ //
+ // Continuation
+ // | Sign
+ // | |
+ // V V
+ // 101011
+
+ var VLQ_BASE_SHIFT = 5;
+
+ // binary: 100000
+ var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+
+ // binary: 011111
+ var VLQ_BASE_MASK = VLQ_BASE - 1;
+
+ // binary: 100000
+ var VLQ_CONTINUATION_BIT = VLQ_BASE;
+
+ /**
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+ function toVLQSigned(aValue) {
+ return aValue < 0
+ ? ((-aValue) << 1) + 1
+ : (aValue << 1) + 0;
+ }
+
+ /**
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ */
+ function fromVLQSigned(aValue) {
+ var isNegative = (aValue & 1) === 1;
+ var shifted = aValue >> 1;
+ return isNegative
+ ? -shifted
+ : shifted;
+ }
+
+ /**
+ * Returns the base 64 VLQ encoded value.
+ */
+ exports.encode = function base64VLQ_encode(aValue) {
+ var encoded = "";
+ var digit;
+
+ var vlq = toVLQSigned(aValue);
+
+ do {
+ digit = vlq & VLQ_BASE_MASK;
+ vlq >>>= VLQ_BASE_SHIFT;
+ if (vlq > 0) {
+ // There are still more digits in this value, so we must make sure the
+ // continuation bit is marked.
+ digit |= VLQ_CONTINUATION_BIT;
+ }
+ encoded += base64.encode(digit);
+ } while (vlq > 0);
+
+ return encoded;
+ };
+
+ /**
+ * Decodes the next base 64 VLQ value from the given string and returns the
+ * value and the rest of the string via the out parameter.
+ */
+ exports.decode = function base64VLQ_decode(aStr, aOutParam) {
+ var i = 0;
+ var strLen = aStr.length;
+ var result = 0;
+ var shift = 0;
+ var continuation, digit;
+
+ do {
+ if (i >= strLen) {
+ throw new Error("Expected more digits in base 64 VLQ value.");
+ }
+ digit = base64.decode(aStr.charAt(i++));
+ continuation = !!(digit & VLQ_CONTINUATION_BIT);
+ digit &= VLQ_BASE_MASK;
+ result = result + (digit << shift);
+ shift += VLQ_BASE_SHIFT;
+ } while (continuation);
+
+ aOutParam.value = fromVLQSigned(result);
+ aOutParam.rest = aStr.slice(i);
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js
new file mode 100644
index 0000000..863cc46
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js
@@ -0,0 +1,42 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var charToIntMap = {};
+ var intToCharMap = {};
+
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+ .split('')
+ .forEach(function (ch, index) {
+ charToIntMap[ch] = index;
+ intToCharMap[index] = ch;
+ });
+
+ /**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+ exports.encode = function base64_encode(aNumber) {
+ if (aNumber in intToCharMap) {
+ return intToCharMap[aNumber];
+ }
+ throw new TypeError("Must be between 0 and 63: " + aNumber);
+ };
+
+ /**
+ * Decode a single base 64 digit to an integer.
+ */
+ exports.decode = function base64_decode(aChar) {
+ if (aChar in charToIntMap) {
+ return charToIntMap[aChar];
+ }
+ throw new TypeError("Not a valid base 64 digit: " + aChar);
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/basic-source-map-consumer.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/basic-source-map-consumer.js
new file mode 100644
index 0000000..f2dfb3e
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/basic-source-map-consumer.js
@@ -0,0 +1,420 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+ var binarySearch = require('./binary-search');
+ var ArraySet = require('./array-set').ArraySet;
+ var base64VLQ = require('./base64-vlq');
+ var SourceMapConsumer = require('./source-map-consumer').SourceMapConsumer;
+
+ /**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The only parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - sources: An array of URLs to the original source files.
+ * - names: An array of identifiers which can be referrenced by individual mappings.
+ * - sourceRoot: Optional. The URL root from which all sources are relative.
+ * - sourcesContent: Optional. An array of contents of the original source files.
+ * - mappings: A string of base64 VLQs which contain the actual mappings.
+ * - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ * {
+ * version : 3,
+ * file: "out.js",
+ * sourceRoot : "",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AA,AB;;ABCDE;"
+ * }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ */
+ function BasicSourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sources = util.getArg(sourceMap, 'sources');
+ // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+ // requires the array) to play nice here.
+ var names = util.getArg(sourceMap, 'names', []);
+ var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+ var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+ var mappings = util.getArg(sourceMap, 'mappings');
+ var file = util.getArg(sourceMap, 'file', null);
+
+ // Once again, Sass deviates from the spec and supplies the version as a
+ // string rather than a number, so we use loose equality checking here.
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ // Some source maps produce relative source paths like "./foo.js" instead of
+ // "foo.js". Normalize these first so that future comparisons will succeed.
+ // See bugzil.la/1090768.
+ sources = sources.map(util.normalize);
+
+ // Pass `true` below to allow duplicate names and sources. While source maps
+ // are intended to be compressed and deduplicated, the TypeScript compiler
+ // sometimes generates source maps with duplicates in them. See Github issue
+ // #72 and bugzil.la/889492.
+ this._names = ArraySet.fromArray(names, true);
+ this._sources = ArraySet.fromArray(sources, true);
+
+ this.sourceRoot = sourceRoot;
+ this.sourcesContent = sourcesContent;
+ this._mappings = mappings;
+ this.file = file;
+ }
+
+ BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+ BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+
+ /**
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+ *
+ * @param SourceMapGenerator aSourceMap
+ * The source map that will be consumed.
+ * @returns BasicSourceMapConsumer
+ */
+ BasicSourceMapConsumer.fromSourceMap =
+ function SourceMapConsumer_fromSourceMap(aSourceMap) {
+ var smc = Object.create(BasicSourceMapConsumer.prototype);
+
+ smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+ smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+ smc.sourceRoot = aSourceMap._sourceRoot;
+ smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+ smc.sourceRoot);
+ smc.file = aSourceMap._file;
+
+ smc.__generatedMappings = aSourceMap._mappings.toArray().slice();
+ smc.__originalMappings = aSourceMap._mappings.toArray().slice()
+ .sort(util.compareByOriginalPositions);
+
+ return smc;
+ };
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ BasicSourceMapConsumer.prototype._version = 3;
+
+ /**
+ * The list of original sources.
+ */
+ Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ return this._sources.toArray().map(function (s) {
+ return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
+ }, this);
+ }
+ });
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ BasicSourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ var generatedLine = 1;
+ var previousGeneratedColumn = 0;
+ var previousOriginalLine = 0;
+ var previousOriginalColumn = 0;
+ var previousSource = 0;
+ var previousName = 0;
+ var str = aStr;
+ var temp = {};
+ var mapping;
+
+ while (str.length > 0) {
+ if (str.charAt(0) === ';') {
+ generatedLine++;
+ str = str.slice(1);
+ previousGeneratedColumn = 0;
+ }
+ else if (str.charAt(0) === ',') {
+ str = str.slice(1);
+ }
+ else {
+ mapping = {};
+ mapping.generatedLine = generatedLine;
+
+ // Generated column.
+ base64VLQ.decode(str, temp);
+ mapping.generatedColumn = previousGeneratedColumn + temp.value;
+ previousGeneratedColumn = mapping.generatedColumn;
+ str = temp.rest;
+
+ if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) {
+ // Original source.
+ base64VLQ.decode(str, temp);
+ mapping.source = this._sources.at(previousSource + temp.value);
+ previousSource += temp.value;
+ str = temp.rest;
+ if (str.length === 0 || this._nextCharIsMappingSeparator(str)) {
+ throw new Error('Found a source, but no line and column');
+ }
+
+ // Original line.
+ base64VLQ.decode(str, temp);
+ mapping.originalLine = previousOriginalLine + temp.value;
+ previousOriginalLine = mapping.originalLine;
+ // Lines are stored 0-based
+ mapping.originalLine += 1;
+ str = temp.rest;
+ if (str.length === 0 || this._nextCharIsMappingSeparator(str)) {
+ throw new Error('Found a source and line, but no column');
+ }
+
+ // Original column.
+ base64VLQ.decode(str, temp);
+ mapping.originalColumn = previousOriginalColumn + temp.value;
+ previousOriginalColumn = mapping.originalColumn;
+ str = temp.rest;
+
+ if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) {
+ // Original name.
+ base64VLQ.decode(str, temp);
+ mapping.name = this._names.at(previousName + temp.value);
+ previousName += temp.value;
+ str = temp.rest;
+ }
+ }
+
+ this.__generatedMappings.push(mapping);
+ if (typeof mapping.originalLine === 'number') {
+ this.__originalMappings.push(mapping);
+ }
+ }
+ }
+
+ this.__generatedMappings.sort(util.compareByGeneratedPositions);
+ this.__originalMappings.sort(util.compareByOriginalPositions);
+ };
+
+ /**
+ * Find the mapping that best matches the hypothetical "needle" mapping that
+ * we are searching for in the given "haystack" of mappings.
+ */
+ BasicSourceMapConsumer.prototype._findMapping =
+ function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+ aColumnName, aComparator) {
+ // To return the position we are searching for, we must first find the
+ // mapping for the given position and then return the opposite position it
+ // points to. Because the mappings are sorted, we can use binary search to
+ // find the best mapping.
+
+ if (aNeedle[aLineName] <= 0) {
+ throw new TypeError('Line must be greater than or equal to 1, got '
+ + aNeedle[aLineName]);
+ }
+ if (aNeedle[aColumnName] < 0) {
+ throw new TypeError('Column must be greater than or equal to 0, got '
+ + aNeedle[aColumnName]);
+ }
+
+ return binarySearch.search(aNeedle, aMappings, aComparator);
+ };
+
+ /**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+ BasicSourceMapConsumer.prototype.computeColumnSpans =
+ function SourceMapConsumer_computeColumnSpans() {
+ for (var index = 0; index < this._generatedMappings.length; ++index) {
+ var mapping = this._generatedMappings[index];
+
+ // Mappings do not contain a field for the last generated columnt. We
+ // can come up with an optimistic estimate, however, by assuming that
+ // mappings are contiguous (i.e. given two consecutive mappings, the
+ // first mapping ends where the second one starts).
+ if (index + 1 < this._generatedMappings.length) {
+ var nextMapping = this._generatedMappings[index + 1];
+
+ if (mapping.generatedLine === nextMapping.generatedLine) {
+ mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+ continue;
+ }
+ }
+
+ // The last mapping for each line spans the entire line.
+ mapping.lastGeneratedColumn = Infinity;
+ }
+ };
+
+ /**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source.
+ * - column: The column number in the generated source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null.
+ * - column: The column number in the original source, or null.
+ * - name: The original identifier, or null.
+ */
+ BasicSourceMapConsumer.prototype.originalPositionFor =
+ function SourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ var index = this._findMapping(needle,
+ this._generatedMappings,
+ "generatedLine",
+ "generatedColumn",
+ util.compareByGeneratedPositions);
+
+ if (index >= 0) {
+ var mapping = this._generatedMappings[index];
+
+ if (mapping.generatedLine === needle.generatedLine) {
+ var source = util.getArg(mapping, 'source', null);
+ if (source != null && this.sourceRoot != null) {
+ source = util.join(this.sourceRoot, source);
+ }
+ return {
+ source: source,
+ line: util.getArg(mapping, 'originalLine', null),
+ column: util.getArg(mapping, 'originalColumn', null),
+ name: util.getArg(mapping, 'name', null)
+ };
+ }
+ }
+
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ };
+
+ /**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * availible.
+ */
+ BasicSourceMapConsumer.prototype.sourceContentFor =
+ function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ if (!this.sourcesContent) {
+ return null;
+ }
+
+ if (this.sourceRoot != null) {
+ aSource = util.relative(this.sourceRoot, aSource);
+ }
+
+ if (this._sources.has(aSource)) {
+ return this.sourcesContent[this._sources.indexOf(aSource)];
+ }
+
+ var url;
+ if (this.sourceRoot != null
+ && (url = util.urlParse(this.sourceRoot))) {
+ // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+ // many users. We can help them out when they expect file:// URIs to
+ // behave like it would if they were running a local HTTP server. See
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+ var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
+ if (url.scheme == "file"
+ && this._sources.has(fileUriAbsPath)) {
+ return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+ }
+
+ if ((!url.path || url.path == "/")
+ && this._sources.has("/" + aSource)) {
+ return this.sourcesContent[this._sources.indexOf("/" + aSource)];
+ }
+ }
+
+ // This function is used recursively from
+ // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+ // don't want to throw if we can't find the source - we just want to
+ // return null, so we provide a flag to exit gracefully.
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+ /**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: The column number in the original source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ BasicSourceMapConsumer.prototype.generatedPositionFor =
+ function SourceMapConsumer_generatedPositionFor(aArgs) {
+ var needle = {
+ source: util.getArg(aArgs, 'source'),
+ originalLine: util.getArg(aArgs, 'line'),
+ originalColumn: util.getArg(aArgs, 'column')
+ };
+
+ if (this.sourceRoot != null) {
+ needle.source = util.relative(this.sourceRoot, needle.source);
+ }
+
+ var index = this._findMapping(needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions);
+
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ return {
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ };
+ }
+
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ };
+
+ exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js
new file mode 100644
index 0000000..e085f81
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js
@@ -0,0 +1,80 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ /**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ */
+ function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) {
+ // This function terminates when one of the following is true:
+ //
+ // 1. We find the exact element we are looking for.
+ //
+ // 2. We did not find the exact element, but we can return the index of
+ // the next closest element that is less than that element.
+ //
+ // 3. We did not find the exact element, and there is no next-closest
+ // element which is less than the one we are searching for, so we
+ // return -1.
+ var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+ var cmp = aCompare(aNeedle, aHaystack[mid], true);
+ if (cmp === 0) {
+ // Found the element we are looking for.
+ return mid;
+ }
+ else if (cmp > 0) {
+ // aHaystack[mid] is greater than our needle.
+ if (aHigh - mid > 1) {
+ // The element is in the upper half.
+ return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare);
+ }
+ // We did not find an exact match, return the next closest one
+ // (termination case 2).
+ return mid;
+ }
+ else {
+ // aHaystack[mid] is less than our needle.
+ if (mid - aLow > 1) {
+ // The element is in the lower half.
+ return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare);
+ }
+ // The exact needle element was not found in this haystack. Determine if
+ // we are in termination case (2) or (3) and return the appropriate thing.
+ return aLow < 0 ? -1 : aLow;
+ }
+ }
+
+ /**
+ * This is an implementation of binary search which will always try and return
+ * the index of next lowest value checked if there is no exact hit. This is
+ * because mappings between original and generated line/col pairs are single
+ * points, and there is an implicit region between each of them, so a miss
+ * just means that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ * array and returns -1, 0, or 1 depending on whether the needle is less
+ * than, equal to, or greater than the element, respectively.
+ */
+ exports.search = function search(aNeedle, aHaystack, aCompare) {
+ if (aHaystack.length === 0) {
+ return -1;
+ }
+ return recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare)
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/indexed-source-map-consumer.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/indexed-source-map-consumer.js
new file mode 100644
index 0000000..c6449cd
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/indexed-source-map-consumer.js
@@ -0,0 +1,303 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+ var binarySearch = require('./binary-search');
+ var SourceMapConsumer = require('./source-map-consumer').SourceMapConsumer;
+ var BasicSourceMapConsumer = require('./basic-source-map-consumer').BasicSourceMapConsumer;
+
+ /**
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The only parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - file: Optional. The generated file this source map is associated with.
+ * - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ * - offset: The offset into the original specified at which this section
+ * begins to apply, defined as an object with a "line" and "column"
+ * field.
+ * - map: A source map definition. This source map could also be indexed,
+ * but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ * {
+ * version : 3,
+ * file: "app.js",
+ * sections: [{
+ * offset: {line:100, column:10},
+ * map: {
+ * version : 3,
+ * file: "section.js",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AAAA,E;;ABCDE;"
+ * }
+ * }],
+ * }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+ function IndexedSourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sections = util.getArg(sourceMap, 'sections');
+
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ var lastOffset = {
+ line: -1,
+ column: 0
+ };
+ this._sections = sections.map(function (s) {
+ if (s.url) {
+ // The url field will require support for asynchronicity.
+ // See https://github.com/mozilla/source-map/issues/16
+ throw new Error('Support for url field in sections not implemented.');
+ }
+ var offset = util.getArg(s, 'offset');
+ var offsetLine = util.getArg(offset, 'line');
+ var offsetColumn = util.getArg(offset, 'column');
+
+ if (offsetLine < lastOffset.line ||
+ (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+ throw new Error('Section offsets must be ordered and non-overlapping.');
+ }
+ lastOffset = offset;
+
+ return {
+ generatedOffset: {
+ // The offset fields are 0-based, but we use 1-based indices when
+ // encoding/decoding from VLQ.
+ generatedLine: offsetLine + 1,
+ generatedColumn: offsetColumn + 1
+ },
+ consumer: new SourceMapConsumer(util.getArg(s, 'map'))
+ }
+ });
+ }
+
+ IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+ IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ IndexedSourceMapConsumer.prototype._version = 3;
+
+ /**
+ * The list of original sources.
+ */
+ Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ var sources = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+ sources.push(this._sections[i].consumer.sources[j]);
+ }
+ };
+ return sources;
+ }
+ });
+
+ /**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source.
+ * - column: The column number in the generated source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null.
+ * - column: The column number in the original source, or null.
+ * - name: The original identifier, or null.
+ */
+ IndexedSourceMapConsumer.prototype.originalPositionFor =
+ function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ // Find the section containing the generated position we're trying to map
+ // to an original position.
+ var sectionIndex = binarySearch.search(needle, this._sections,
+ function(needle, section) {
+ var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ return (needle.generatedColumn -
+ section.generatedOffset.generatedColumn);
+ });
+ var section = this._sections[sectionIndex];
+
+ if (!section) {
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ }
+
+ return section.consumer.originalPositionFor({
+ line: needle.generatedLine -
+ (section.generatedOffset.generatedLine - 1),
+ column: needle.generatedColumn -
+ (section.generatedOffset.generatedLine === needle.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0)
+ });
+ };
+
+ /**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+ IndexedSourceMapConsumer.prototype.sourceContentFor =
+ function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ var content = section.consumer.sourceContentFor(aSource, true);
+ if (content) {
+ return content;
+ }
+ }
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+ /**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: The column number in the original source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ IndexedSourceMapConsumer.prototype.generatedPositionFor =
+ function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ // Only consider this section if the requested source is in the list of
+ // sources of the consumer.
+ if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
+ continue;
+ }
+ var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+ if (generatedPosition) {
+ var ret = {
+ line: generatedPosition.line +
+ (section.generatedOffset.generatedLine - 1),
+ column: generatedPosition.column +
+ (section.generatedOffset.generatedLine === generatedPosition.line
+ ? section.generatedOffset.generatedColumn - 1
+ : 0)
+ };
+ return ret;
+ }
+ }
+
+ return {
+ line: null,
+ column: null
+ };
+ };
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ IndexedSourceMapConsumer.prototype._parseMappings =
+ function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+ var sectionMappings = section.consumer._generatedMappings;
+ for (var j = 0; j < sectionMappings.length; j++) {
+ var mapping = sectionMappings[i];
+
+ var source = mapping.source;
+ var sourceRoot = section.consumer.sourceRoot;
+
+ if (source != null && sourceRoot != null) {
+ source = util.join(sourceRoot, source);
+ }
+
+ // The mappings coming from the consumer for the section have
+ // generated positions relative to the start of the section, so we
+ // need to offset them to be relative to the start of the concatenated
+ // generated file.
+ var adjustedMapping = {
+ source: source,
+ generatedLine: mapping.generatedLine +
+ (section.generatedOffset.generatedLine - 1),
+ generatedColumn: mapping.column +
+ (section.generatedOffset.generatedLine === mapping.generatedLine)
+ ? section.generatedOffset.generatedColumn - 1
+ : 0,
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: mapping.name
+ };
+
+ this.__generatedMappings.push(adjustedMapping);
+ if (typeof adjustedMapping.originalLine === 'number') {
+ this.__originalMappings.push(adjustedMapping);
+ }
+ };
+ };
+
+ this.__generatedMappings.sort(util.compareByGeneratedPositions);
+ this.__originalMappings.sort(util.compareByOriginalPositions);
+ };
+
+ exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/mapping-list.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/mapping-list.js
new file mode 100644
index 0000000..2a4eb61
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/mapping-list.js
@@ -0,0 +1,86 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+
+ /**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+ function generatedPositionAfter(mappingA, mappingB) {
+ // Optimized for most common case
+ var lineA = mappingA.generatedLine;
+ var lineB = mappingB.generatedLine;
+ var columnA = mappingA.generatedColumn;
+ var columnB = mappingB.generatedColumn;
+ return lineB > lineA || lineB == lineA && columnB >= columnA ||
+ util.compareByGeneratedPositions(mappingA, mappingB) <= 0;
+ }
+
+ /**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a neglibable overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+ function MappingList() {
+ this._array = [];
+ this._sorted = true;
+ // Serves as infimum
+ this._last = {generatedLine: -1, generatedColumn: 0};
+ }
+
+ /**
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
+ */
+ MappingList.prototype.unsortedForEach =
+ function MappingList_forEach(aCallback, aThisArg) {
+ this._array.forEach(aCallback, aThisArg);
+ };
+
+ /**
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
+ */
+ MappingList.prototype.add = function MappingList_add(aMapping) {
+ var mapping;
+ if (generatedPositionAfter(this._last, aMapping)) {
+ this._last = aMapping;
+ this._array.push(aMapping);
+ } else {
+ this._sorted = false;
+ this._array.push(aMapping);
+ }
+ };
+
+ /**
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
+ *
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
+ */
+ MappingList.prototype.toArray = function MappingList_toArray() {
+ if (!this._sorted) {
+ this._array.sort(util.compareByGeneratedPositions);
+ this._sorted = true;
+ }
+ return this._array;
+ };
+
+ exports.MappingList = MappingList;
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js
new file mode 100644
index 0000000..f3abade
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js
@@ -0,0 +1,222 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('./util');
+
+ function SourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ // We do late requires because the subclasses require() this file.
+ if (sourceMap.sections != null) {
+ var indexedSourceMapConsumer = require('./indexed-source-map-consumer');
+ return new indexedSourceMapConsumer.IndexedSourceMapConsumer(sourceMap);
+ } else {
+ var basicSourceMapConsumer = require('./basic-source-map-consumer');
+ return new basicSourceMapConsumer.BasicSourceMapConsumer(sourceMap);
+ }
+ }
+
+ SourceMapConsumer.fromSourceMap = function(aSourceMap) {
+ var basicSourceMapConsumer = require('./basic-source-map-consumer');
+ return basicSourceMapConsumer.BasicSourceMapConsumer
+ .fromSourceMap(aSourceMap);
+ }
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ SourceMapConsumer.prototype._version = 3;
+
+
+ // `__generatedMappings` and `__originalMappings` are arrays that hold the
+ // parsed mapping coordinates from the source map's "mappings" attribute. They
+ // are lazily instantiated, accessed via the `_generatedMappings` and
+ // `_originalMappings` getters respectively, and we only parse the mappings
+ // and create these arrays once queried for a source location. We jump through
+ // these hoops because there can be many thousands of mappings, and parsing
+ // them is expensive, so we only want to do it if we must.
+ //
+ // Each object in the arrays is of the form:
+ //
+ // {
+ // generatedLine: The line number in the generated code,
+ // generatedColumn: The column number in the generated code,
+ // source: The path to the original source file that generated this
+ // chunk of code,
+ // originalLine: The line number in the original source that
+ // corresponds to this chunk of generated code,
+ // originalColumn: The column number in the original source that
+ // corresponds to this chunk of generated code,
+ // name: The name of the original symbol which generated this chunk of
+ // code.
+ // }
+ //
+ // All properties except for `generatedLine` and `generatedColumn` can be
+ // `null`.
+ //
+ // `_generatedMappings` is ordered by the generated positions.
+ //
+ // `_originalMappings` is ordered by the original positions.
+
+ SourceMapConsumer.prototype.__generatedMappings = null;
+ Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+ get: function () {
+ if (!this.__generatedMappings) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__generatedMappings;
+ }
+ });
+
+ SourceMapConsumer.prototype.__originalMappings = null;
+ Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+ get: function () {
+ if (!this.__originalMappings) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__originalMappings;
+ }
+ });
+
+ SourceMapConsumer.prototype._nextCharIsMappingSeparator =
+ function SourceMapConsumer_nextCharIsMappingSeparator(aStr) {
+ var c = aStr.charAt(0);
+ return c === ";" || c === ",";
+ };
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ SourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ throw new Error("Subclasses must implement _parseMappings");
+ };
+
+ SourceMapConsumer.GENERATED_ORDER = 1;
+ SourceMapConsumer.ORIGINAL_ORDER = 2;
+
+ /**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ * The function that is called with each mapping.
+ * @param Object aContext
+ * Optional. If specified, this object will be the value of `this` every
+ * time that `aCallback` is called.
+ * @param aOrder
+ * Either `SourceMapConsumer.GENERATED_ORDER` or
+ * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ * iterate over the mappings sorted by the generated file's line/column
+ * order or the original's source/line/column order, respectively. Defaults to
+ * `SourceMapConsumer.GENERATED_ORDER`.
+ */
+ SourceMapConsumer.prototype.eachMapping =
+ function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+ var context = aContext || null;
+ var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+ var mappings;
+ switch (order) {
+ case SourceMapConsumer.GENERATED_ORDER:
+ mappings = this._generatedMappings;
+ break;
+ case SourceMapConsumer.ORIGINAL_ORDER:
+ mappings = this._originalMappings;
+ break;
+ default:
+ throw new Error("Unknown order of iteration.");
+ }
+
+ var sourceRoot = this.sourceRoot;
+ mappings.map(function (mapping) {
+ var source = mapping.source;
+ if (source != null && sourceRoot != null) {
+ source = util.join(sourceRoot, source);
+ }
+ return {
+ source: source,
+ generatedLine: mapping.generatedLine,
+ generatedColumn: mapping.generatedColumn,
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: mapping.name
+ };
+ }).forEach(aCallback, context);
+ };
+
+ /**
+ * Returns all generated line and column information for the original source
+ * and line provided. The only argument is an object with the following
+ * properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ SourceMapConsumer.prototype.allGeneratedPositionsFor =
+ function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+ // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+ // returns the index of the closest mapping less than the needle. By
+ // setting needle.originalColumn to Infinity, we thus find the last
+ // mapping for the given line, provided such a mapping exists.
+ var needle = {
+ source: util.getArg(aArgs, 'source'),
+ originalLine: util.getArg(aArgs, 'line'),
+ originalColumn: Infinity
+ };
+
+ if (this.sourceRoot != null) {
+ needle.source = util.relative(this.sourceRoot, needle.source);
+ }
+
+ var mappings = [];
+
+ var index = this._findMapping(needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions);
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ while (mapping && mapping.originalLine === needle.originalLine) {
+ mappings.push({
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ });
+
+ mapping = this._originalMappings[--index];
+ }
+ }
+
+ return mappings.reverse();
+ };
+
+ exports.SourceMapConsumer = SourceMapConsumer;
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js
new file mode 100644
index 0000000..1ab7a47
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js
@@ -0,0 +1,400 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var base64VLQ = require('./base64-vlq');
+ var util = require('./util');
+ var ArraySet = require('./array-set').ArraySet;
+ var MappingList = require('./mapping-list').MappingList;
+
+ /**
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ * - file: The filename of the generated source.
+ * - sourceRoot: A root for all relative URLs in this source map.
+ */
+ function SourceMapGenerator(aArgs) {
+ if (!aArgs) {
+ aArgs = {};
+ }
+ this._file = util.getArg(aArgs, 'file', null);
+ this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+ this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+ this._mappings = new MappingList();
+ this._sourcesContents = null;
+ }
+
+ SourceMapGenerator.prototype._version = 3;
+
+ /**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+ SourceMapGenerator.fromSourceMap =
+ function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+ var sourceRoot = aSourceMapConsumer.sourceRoot;
+ var generator = new SourceMapGenerator({
+ file: aSourceMapConsumer.file,
+ sourceRoot: sourceRoot
+ });
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ var newMapping = {
+ generated: {
+ line: mapping.generatedLine,
+ column: mapping.generatedColumn
+ }
+ };
+
+ if (mapping.source != null) {
+ newMapping.source = mapping.source;
+ if (sourceRoot != null) {
+ newMapping.source = util.relative(sourceRoot, newMapping.source);
+ }
+
+ newMapping.original = {
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ };
+
+ if (mapping.name != null) {
+ newMapping.name = mapping.name;
+ }
+ }
+
+ generator.addMapping(newMapping);
+ });
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ generator.setSourceContent(sourceFile, content);
+ }
+ });
+ return generator;
+ };
+
+ /**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ * - generated: An object with the generated line and column positions.
+ * - original: An object with the original line and column positions.
+ * - source: The original source file (relative to the sourceRoot).
+ * - name: An optional original token name for this mapping.
+ */
+ SourceMapGenerator.prototype.addMapping =
+ function SourceMapGenerator_addMapping(aArgs) {
+ var generated = util.getArg(aArgs, 'generated');
+ var original = util.getArg(aArgs, 'original', null);
+ var source = util.getArg(aArgs, 'source', null);
+ var name = util.getArg(aArgs, 'name', null);
+
+ if (!this._skipValidation) {
+ this._validateMapping(generated, original, source, name);
+ }
+
+ if (source != null && !this._sources.has(source)) {
+ this._sources.add(source);
+ }
+
+ if (name != null && !this._names.has(name)) {
+ this._names.add(name);
+ }
+
+ this._mappings.add({
+ generatedLine: generated.line,
+ generatedColumn: generated.column,
+ originalLine: original != null && original.line,
+ originalColumn: original != null && original.column,
+ source: source,
+ name: name
+ });
+ };
+
+ /**
+ * Set the source content for a source file.
+ */
+ SourceMapGenerator.prototype.setSourceContent =
+ function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+ var source = aSourceFile;
+ if (this._sourceRoot != null) {
+ source = util.relative(this._sourceRoot, source);
+ }
+
+ if (aSourceContent != null) {
+ // Add the source content to the _sourcesContents map.
+ // Create a new _sourcesContents map if the property is null.
+ if (!this._sourcesContents) {
+ this._sourcesContents = {};
+ }
+ this._sourcesContents[util.toSetString(source)] = aSourceContent;
+ } else if (this._sourcesContents) {
+ // Remove the source file from the _sourcesContents map.
+ // If the _sourcesContents map is empty, set the property to null.
+ delete this._sourcesContents[util.toSetString(source)];
+ if (Object.keys(this._sourcesContents).length === 0) {
+ this._sourcesContents = null;
+ }
+ }
+ };
+
+ /**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ * If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ * to be applied. If relative, it is relative to the SourceMapConsumer.
+ * This parameter is needed when the two source maps aren't in the same
+ * directory, and the source map to be applied contains relative source
+ * paths. If so, those relative source paths need to be rewritten
+ * relative to the SourceMapGenerator.
+ */
+ SourceMapGenerator.prototype.applySourceMap =
+ function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+ var sourceFile = aSourceFile;
+ // If aSourceFile is omitted, we will use the file property of the SourceMap
+ if (aSourceFile == null) {
+ if (aSourceMapConsumer.file == null) {
+ throw new Error(
+ 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+ 'or the source map\'s "file" property. Both were omitted.'
+ );
+ }
+ sourceFile = aSourceMapConsumer.file;
+ }
+ var sourceRoot = this._sourceRoot;
+ // Make "sourceFile" relative if an absolute Url is passed.
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ // Applying the SourceMap can add and remove items from the sources and
+ // the names array.
+ var newSources = new ArraySet();
+ var newNames = new ArraySet();
+
+ // Find mappings for the "sourceFile"
+ this._mappings.unsortedForEach(function (mapping) {
+ if (mapping.source === sourceFile && mapping.originalLine != null) {
+ // Check if it can be mapped by the source map, then update the mapping.
+ var original = aSourceMapConsumer.originalPositionFor({
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ });
+ if (original.source != null) {
+ // Copy mapping
+ mapping.source = original.source;
+ if (aSourceMapPath != null) {
+ mapping.source = util.join(aSourceMapPath, mapping.source)
+ }
+ if (sourceRoot != null) {
+ mapping.source = util.relative(sourceRoot, mapping.source);
+ }
+ mapping.originalLine = original.line;
+ mapping.originalColumn = original.column;
+ if (original.name != null) {
+ mapping.name = original.name;
+ }
+ }
+ }
+
+ var source = mapping.source;
+ if (source != null && !newSources.has(source)) {
+ newSources.add(source);
+ }
+
+ var name = mapping.name;
+ if (name != null && !newNames.has(name)) {
+ newNames.add(name);
+ }
+
+ }, this);
+ this._sources = newSources;
+ this._names = newNames;
+
+ // Copy sourcesContents of applied map.
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aSourceMapPath != null) {
+ sourceFile = util.join(aSourceMapPath, sourceFile);
+ }
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ this.setSourceContent(sourceFile, content);
+ }
+ }, this);
+ };
+
+ /**
+ * A mapping can have one of the three levels of data:
+ *
+ * 1. Just the generated position.
+ * 2. The Generated position, original position, and original source.
+ * 3. Generated and original position, original source, as well as a name
+ * token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+ SourceMapGenerator.prototype._validateMapping =
+ function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+ aName) {
+ if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && !aOriginal && !aSource && !aName) {
+ // Case 1.
+ return;
+ }
+ else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && aOriginal.line > 0 && aOriginal.column >= 0
+ && aSource) {
+ // Cases 2 and 3.
+ return;
+ }
+ else {
+ throw new Error('Invalid mapping: ' + JSON.stringify({
+ generated: aGenerated,
+ source: aSource,
+ original: aOriginal,
+ name: aName
+ }));
+ }
+ };
+
+ /**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+ SourceMapGenerator.prototype._serializeMappings =
+ function SourceMapGenerator_serializeMappings() {
+ var previousGeneratedColumn = 0;
+ var previousGeneratedLine = 1;
+ var previousOriginalColumn = 0;
+ var previousOriginalLine = 0;
+ var previousName = 0;
+ var previousSource = 0;
+ var result = '';
+ var mapping;
+
+ var mappings = this._mappings.toArray();
+
+ for (var i = 0, len = mappings.length; i < len; i++) {
+ mapping = mappings[i];
+
+ if (mapping.generatedLine !== previousGeneratedLine) {
+ previousGeneratedColumn = 0;
+ while (mapping.generatedLine !== previousGeneratedLine) {
+ result += ';';
+ previousGeneratedLine++;
+ }
+ }
+ else {
+ if (i > 0) {
+ if (!util.compareByGeneratedPositions(mapping, mappings[i - 1])) {
+ continue;
+ }
+ result += ',';
+ }
+ }
+
+ result += base64VLQ.encode(mapping.generatedColumn
+ - previousGeneratedColumn);
+ previousGeneratedColumn = mapping.generatedColumn;
+
+ if (mapping.source != null) {
+ result += base64VLQ.encode(this._sources.indexOf(mapping.source)
+ - previousSource);
+ previousSource = this._sources.indexOf(mapping.source);
+
+ // lines are stored 0-based in SourceMap spec version 3
+ result += base64VLQ.encode(mapping.originalLine - 1
+ - previousOriginalLine);
+ previousOriginalLine = mapping.originalLine - 1;
+
+ result += base64VLQ.encode(mapping.originalColumn
+ - previousOriginalColumn);
+ previousOriginalColumn = mapping.originalColumn;
+
+ if (mapping.name != null) {
+ result += base64VLQ.encode(this._names.indexOf(mapping.name)
+ - previousName);
+ previousName = this._names.indexOf(mapping.name);
+ }
+ }
+ }
+
+ return result;
+ };
+
+ SourceMapGenerator.prototype._generateSourcesContent =
+ function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+ return aSources.map(function (source) {
+ if (!this._sourcesContents) {
+ return null;
+ }
+ if (aSourceRoot != null) {
+ source = util.relative(aSourceRoot, source);
+ }
+ var key = util.toSetString(source);
+ return Object.prototype.hasOwnProperty.call(this._sourcesContents,
+ key)
+ ? this._sourcesContents[key]
+ : null;
+ }, this);
+ };
+
+ /**
+ * Externalize the source map.
+ */
+ SourceMapGenerator.prototype.toJSON =
+ function SourceMapGenerator_toJSON() {
+ var map = {
+ version: this._version,
+ sources: this._sources.toArray(),
+ names: this._names.toArray(),
+ mappings: this._serializeMappings()
+ };
+ if (this._file != null) {
+ map.file = this._file;
+ }
+ if (this._sourceRoot != null) {
+ map.sourceRoot = this._sourceRoot;
+ }
+ if (this._sourcesContents) {
+ map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+ }
+
+ return map;
+ };
+
+ /**
+ * Render the source map being generated to a string.
+ */
+ SourceMapGenerator.prototype.toString =
+ function SourceMapGenerator_toString() {
+ return JSON.stringify(this);
+ };
+
+ exports.SourceMapGenerator = SourceMapGenerator;
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js
new file mode 100644
index 0000000..9ee90bd
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js
@@ -0,0 +1,414 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
+ var util = require('./util');
+
+ // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+ // operating systems these days (capturing the result).
+ var REGEX_NEWLINE = /(\r?\n)/;
+
+ // Newline character code for charCodeAt() comparisons
+ var NEWLINE_CODE = 10;
+
+ // Private symbol for identifying `SourceNode`s when multiple versions of
+ // the source-map library are loaded. This MUST NOT CHANGE across
+ // versions!
+ var isSourceNode = "$$$isSourceNode$$$";
+
+ /**
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ * generated JS, or other SourceNodes.
+ * @param aName The original identifier.
+ */
+ function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+ this.children = [];
+ this.sourceContents = {};
+ this.line = aLine == null ? null : aLine;
+ this.column = aColumn == null ? null : aColumn;
+ this.source = aSource == null ? null : aSource;
+ this.name = aName == null ? null : aName;
+ this[isSourceNode] = true;
+ if (aChunks != null) this.add(aChunks);
+ }
+
+ /**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ * SourceMapConsumer should be relative to.
+ */
+ SourceNode.fromStringWithSourceMap =
+ function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+ // The SourceNode we want to fill with the generated code
+ // and the SourceMap
+ var node = new SourceNode();
+
+ // All even indices of this array are one line of the generated code,
+ // while all odd indices are the newlines between two adjacent lines
+ // (since `REGEX_NEWLINE` captures its match).
+ // Processed fragments are removed from this array, by calling `shiftNextLine`.
+ var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+ var shiftNextLine = function() {
+ var lineContents = remainingLines.shift();
+ // The last line of a file might not have a newline.
+ var newLine = remainingLines.shift() || "";
+ return lineContents + newLine;
+ };
+
+ // We need to remember the position of "remainingLines"
+ var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+
+ // The generate SourceNodes we need a code range.
+ // To extract it current and last mapping is used.
+ // Here we store the last mapping.
+ var lastMapping = null;
+
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ if (lastMapping !== null) {
+ // We add the code from "lastMapping" to "mapping":
+ // First check if there is a new line in between.
+ if (lastGeneratedLine < mapping.generatedLine) {
+ var code = "";
+ // Associate first line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ lastGeneratedLine++;
+ lastGeneratedColumn = 0;
+ // The remaining code is added without mapping
+ } else {
+ // There is no new line in between.
+ // Associate the code between "lastGeneratedColumn" and
+ // "mapping.generatedColumn" with "lastMapping"
+ var nextLine = remainingLines[0];
+ var code = nextLine.substr(0, mapping.generatedColumn -
+ lastGeneratedColumn);
+ remainingLines[0] = nextLine.substr(mapping.generatedColumn -
+ lastGeneratedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ addMappingWithCode(lastMapping, code);
+ // No more remaining code, continue
+ lastMapping = mapping;
+ return;
+ }
+ }
+ // We add the generated code until the first mapping
+ // to the SourceNode without any mapping.
+ // Each line is added as separate string.
+ while (lastGeneratedLine < mapping.generatedLine) {
+ node.add(shiftNextLine());
+ lastGeneratedLine++;
+ }
+ if (lastGeneratedColumn < mapping.generatedColumn) {
+ var nextLine = remainingLines[0];
+ node.add(nextLine.substr(0, mapping.generatedColumn));
+ remainingLines[0] = nextLine.substr(mapping.generatedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ }
+ lastMapping = mapping;
+ }, this);
+ // We have processed all mappings.
+ if (remainingLines.length > 0) {
+ if (lastMapping) {
+ // Associate the remaining code in the current line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ }
+ // and add the remaining lines without any mapping
+ node.add(remainingLines.join(""));
+ }
+
+ // Copy sourcesContent into SourceNode
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aRelativePath != null) {
+ sourceFile = util.join(aRelativePath, sourceFile);
+ }
+ node.setSourceContent(sourceFile, content);
+ }
+ });
+
+ return node;
+
+ function addMappingWithCode(mapping, code) {
+ if (mapping === null || mapping.source === undefined) {
+ node.add(code);
+ } else {
+ var source = aRelativePath
+ ? util.join(aRelativePath, mapping.source)
+ : mapping.source;
+ node.add(new SourceNode(mapping.originalLine,
+ mapping.originalColumn,
+ source,
+ code,
+ mapping.name));
+ }
+ }
+ };
+
+ /**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+ SourceNode.prototype.add = function SourceNode_add(aChunk) {
+ if (Array.isArray(aChunk)) {
+ aChunk.forEach(function (chunk) {
+ this.add(chunk);
+ }, this);
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ if (aChunk) {
+ this.children.push(aChunk);
+ }
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+ };
+
+ /**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+ SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+ if (Array.isArray(aChunk)) {
+ for (var i = aChunk.length-1; i >= 0; i--) {
+ this.prepend(aChunk[i]);
+ }
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ this.children.unshift(aChunk);
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+ };
+
+ /**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+ SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+ var chunk;
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ chunk = this.children[i];
+ if (chunk[isSourceNode]) {
+ chunk.walk(aFn);
+ }
+ else {
+ if (chunk !== '') {
+ aFn(chunk, { source: this.source,
+ line: this.line,
+ column: this.column,
+ name: this.name });
+ }
+ }
+ }
+ };
+
+ /**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+ SourceNode.prototype.join = function SourceNode_join(aSep) {
+ var newChildren;
+ var i;
+ var len = this.children.length;
+ if (len > 0) {
+ newChildren = [];
+ for (i = 0; i < len-1; i++) {
+ newChildren.push(this.children[i]);
+ newChildren.push(aSep);
+ }
+ newChildren.push(this.children[i]);
+ this.children = newChildren;
+ }
+ return this;
+ };
+
+ /**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+ SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+ var lastChild = this.children[this.children.length - 1];
+ if (lastChild[isSourceNode]) {
+ lastChild.replaceRight(aPattern, aReplacement);
+ }
+ else if (typeof lastChild === 'string') {
+ this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+ }
+ else {
+ this.children.push(''.replace(aPattern, aReplacement));
+ }
+ return this;
+ };
+
+ /**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+ SourceNode.prototype.setSourceContent =
+ function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+ this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+ };
+
+ /**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+ SourceNode.prototype.walkSourceContents =
+ function SourceNode_walkSourceContents(aFn) {
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ if (this.children[i][isSourceNode]) {
+ this.children[i].walkSourceContents(aFn);
+ }
+ }
+
+ var sources = Object.keys(this.sourceContents);
+ for (var i = 0, len = sources.length; i < len; i++) {
+ aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+ }
+ };
+
+ /**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+ SourceNode.prototype.toString = function SourceNode_toString() {
+ var str = "";
+ this.walk(function (chunk) {
+ str += chunk;
+ });
+ return str;
+ };
+
+ /**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+ SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+ var generated = {
+ code: "",
+ line: 1,
+ column: 0
+ };
+ var map = new SourceMapGenerator(aArgs);
+ var sourceMappingActive = false;
+ var lastOriginalSource = null;
+ var lastOriginalLine = null;
+ var lastOriginalColumn = null;
+ var lastOriginalName = null;
+ this.walk(function (chunk, original) {
+ generated.code += chunk;
+ if (original.source !== null
+ && original.line !== null
+ && original.column !== null) {
+ if(lastOriginalSource !== original.source
+ || lastOriginalLine !== original.line
+ || lastOriginalColumn !== original.column
+ || lastOriginalName !== original.name) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ lastOriginalSource = original.source;
+ lastOriginalLine = original.line;
+ lastOriginalColumn = original.column;
+ lastOriginalName = original.name;
+ sourceMappingActive = true;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ generated: {
+ line: generated.line,
+ column: generated.column
+ }
+ });
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ }
+ for (var idx = 0, length = chunk.length; idx < length; idx++) {
+ if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+ generated.line++;
+ generated.column = 0;
+ // Mappings end at eol
+ if (idx + 1 === length) {
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ } else {
+ generated.column++;
+ }
+ }
+ });
+ this.walkSourceContents(function (sourceFile, sourceContent) {
+ map.setSourceContent(sourceFile, sourceContent);
+ });
+
+ return { code: generated.code, map: map };
+ };
+
+ exports.SourceNode = SourceNode;
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/util.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/util.js
new file mode 100644
index 0000000..976f6ca
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/lib/source-map/util.js
@@ -0,0 +1,319 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ /**
+ * This is a helper function for getting values from parameter/options
+ * objects.
+ *
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
+ */
+ function getArg(aArgs, aName, aDefaultValue) {
+ if (aName in aArgs) {
+ return aArgs[aName];
+ } else if (arguments.length === 3) {
+ return aDefaultValue;
+ } else {
+ throw new Error('"' + aName + '" is a required argument.');
+ }
+ }
+ exports.getArg = getArg;
+
+ var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
+ var dataUrlRegexp = /^data:.+\,.+$/;
+
+ function urlParse(aUrl) {
+ var match = aUrl.match(urlRegexp);
+ if (!match) {
+ return null;
+ }
+ return {
+ scheme: match[1],
+ auth: match[2],
+ host: match[3],
+ port: match[4],
+ path: match[5]
+ };
+ }
+ exports.urlParse = urlParse;
+
+ function urlGenerate(aParsedUrl) {
+ var url = '';
+ if (aParsedUrl.scheme) {
+ url += aParsedUrl.scheme + ':';
+ }
+ url += '//';
+ if (aParsedUrl.auth) {
+ url += aParsedUrl.auth + '@';
+ }
+ if (aParsedUrl.host) {
+ url += aParsedUrl.host;
+ }
+ if (aParsedUrl.port) {
+ url += ":" + aParsedUrl.port
+ }
+ if (aParsedUrl.path) {
+ url += aParsedUrl.path;
+ }
+ return url;
+ }
+ exports.urlGenerate = urlGenerate;
+
+ /**
+ * Normalizes a path, or the path portion of a URL:
+ *
+ * - Replaces consequtive slashes with one slash.
+ * - Removes unnecessary '.' parts.
+ * - Removes unnecessary '/..' parts.
+ *
+ * Based on code in the Node.js 'path' core module.
+ *
+ * @param aPath The path or url to normalize.
+ */
+ function normalize(aPath) {
+ var path = aPath;
+ var url = urlParse(aPath);
+ if (url) {
+ if (!url.path) {
+ return aPath;
+ }
+ path = url.path;
+ }
+ var isAbsolute = (path.charAt(0) === '/');
+
+ var parts = path.split(/\/+/);
+ for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+ part = parts[i];
+ if (part === '.') {
+ parts.splice(i, 1);
+ } else if (part === '..') {
+ up++;
+ } else if (up > 0) {
+ if (part === '') {
+ // The first part is blank if the path is absolute. Trying to go
+ // above the root is a no-op. Therefore we can remove all '..' parts
+ // directly after the root.
+ parts.splice(i + 1, up);
+ up = 0;
+ } else {
+ parts.splice(i, 2);
+ up--;
+ }
+ }
+ }
+ path = parts.join('/');
+
+ if (path === '') {
+ path = isAbsolute ? '/' : '.';
+ }
+
+ if (url) {
+ url.path = path;
+ return urlGenerate(url);
+ }
+ return path;
+ }
+ exports.normalize = normalize;
+
+ /**
+ * Joins two paths/URLs.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be joined with the root.
+ *
+ * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+ * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+ * first.
+ * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+ * is updated with the result and aRoot is returned. Otherwise the result
+ * is returned.
+ * - If aPath is absolute, the result is aPath.
+ * - Otherwise the two paths are joined with a slash.
+ * - Joining for example 'http://' and 'www.example.com' is also supported.
+ */
+ function join(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+ if (aPath === "") {
+ aPath = ".";
+ }
+ var aPathUrl = urlParse(aPath);
+ var aRootUrl = urlParse(aRoot);
+ if (aRootUrl) {
+ aRoot = aRootUrl.path || '/';
+ }
+
+ // `join(foo, '//www.example.org')`
+ if (aPathUrl && !aPathUrl.scheme) {
+ if (aRootUrl) {
+ aPathUrl.scheme = aRootUrl.scheme;
+ }
+ return urlGenerate(aPathUrl);
+ }
+
+ if (aPathUrl || aPath.match(dataUrlRegexp)) {
+ return aPath;
+ }
+
+ // `join('http://', 'www.example.com')`
+ if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+ aRootUrl.host = aPath;
+ return urlGenerate(aRootUrl);
+ }
+
+ var joined = aPath.charAt(0) === '/'
+ ? aPath
+ : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+
+ if (aRootUrl) {
+ aRootUrl.path = joined;
+ return urlGenerate(aRootUrl);
+ }
+ return joined;
+ }
+ exports.join = join;
+
+ /**
+ * Make a path relative to a URL or another path.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ */
+ function relative(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+
+ aRoot = aRoot.replace(/\/$/, '');
+
+ // XXX: It is possible to remove this block, and the tests still pass!
+ var url = urlParse(aRoot);
+ if (aPath.charAt(0) == "/" && url && url.path == "/") {
+ return aPath.slice(1);
+ }
+
+ return aPath.indexOf(aRoot + '/') === 0
+ ? aPath.substr(aRoot.length + 1)
+ : aPath;
+ }
+ exports.relative = relative;
+
+ /**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+ function toSetString(aStr) {
+ return '$' + aStr;
+ }
+ exports.toSetString = toSetString;
+
+ function fromSetString(aStr) {
+ return aStr.substr(1);
+ }
+ exports.fromSetString = fromSetString;
+
+ function strcmp(aStr1, aStr2) {
+ var s1 = aStr1 || "";
+ var s2 = aStr2 || "";
+ return (s1 > s2) - (s1 < s2);
+ }
+
+ /**
+ * Comparator between two mappings where the original positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same original source/line/column, but different generated
+ * line and column the same. Useful when searching for a mapping with a
+ * stubbed out mapping.
+ */
+ function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+ var cmp;
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp || onlyCompareOriginal) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.name, mappingB.name);
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ return mappingA.generatedColumn - mappingB.generatedColumn;
+ };
+ exports.compareByOriginalPositions = compareByOriginalPositions;
+
+ /**
+ * Comparator between two mappings where the generated positions are
+ * compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same generated line and column, but different
+ * source/name/original line and column the same. Useful when searching for a
+ * mapping with a stubbed out mapping.
+ */
+ function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) {
+ var cmp;
+
+ cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp || onlyCompareGenerated) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+ };
+ exports.compareByGeneratedPositions = compareByGeneratedPositions;
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE
new file mode 100644
index 0000000..f33d665
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE
@@ -0,0 +1,58 @@
+amdefine is released under two licenses: new BSD, and MIT. You may pick the
+license that best suits your development needs. The text of both licenses are
+provided below.
+
+
+The "New" BSD License:
+----------------------
+
+Copyright (c) 2011, The Dojo Foundation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the Dojo Foundation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+MIT License
+-----------
+
+Copyright (c) 2011, The Dojo Foundation
+
+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/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md
new file mode 100644
index 0000000..c6995c0
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md
@@ -0,0 +1,171 @@
+# amdefine
+
+A module that can be used to implement AMD's define() in Node. This allows you
+to code to the AMD API and have the module work in node programs without
+requiring those other programs to use AMD.
+
+## Usage
+
+**1)** Update your package.json to indicate amdefine as a dependency:
+
+```javascript
+ "dependencies": {
+ "amdefine": ">=0.1.0"
+ }
+```
+
+Then run `npm install` to get amdefine into your project.
+
+**2)** At the top of each module that uses define(), place this code:
+
+```javascript
+if (typeof define !== 'function') { var define = require('amdefine')(module) }
+```
+
+**Only use these snippets** when loading amdefine. If you preserve the basic structure,
+with the braces, it will be stripped out when using the [RequireJS optimizer](#optimizer).
+
+You can add spaces, line breaks and even require amdefine with a local path, but
+keep the rest of the structure to get the stripping behavior.
+
+As you may know, because `if` statements in JavaScript don't have their own scope, the var
+declaration in the above snippet is made whether the `if` expression is truthy or not. If
+RequireJS is loaded then the declaration is superfluous because `define` is already already
+declared in the same scope in RequireJS. Fortunately JavaScript handles multiple `var`
+declarations of the same variable in the same scope gracefully.
+
+If you want to deliver amdefine.js with your code rather than specifying it as a dependency
+with npm, then just download the latest release and refer to it using a relative path:
+
+[Latest Version](https://github.com/jrburke/amdefine/raw/latest/amdefine.js)
+
+### amdefine/intercept
+
+Consider this very experimental.
+
+Instead of pasting the piece of text for the amdefine setup of a `define`
+variable in each module you create or consume, you can use `amdefine/intercept`
+instead. It will automatically insert the above snippet in each .js file loaded
+by Node.
+
+**Warning**: you should only use this if you are creating an application that
+is consuming AMD style defined()'d modules that are distributed via npm and want
+to run that code in Node.
+
+For library code where you are not sure if it will be used by others in Node or
+in the browser, then explicitly depending on amdefine and placing the code
+snippet above is suggested path, instead of using `amdefine/intercept`. The
+intercept module affects all .js files loaded in the Node app, and it is
+inconsiderate to modify global state like that unless you are also controlling
+the top level app.
+
+#### Why distribute AMD-style nodes via npm?
+
+npm has a lot of weaknesses for front-end use (installed layout is not great,
+should have better support for the `baseUrl + moduleID + '.js' style of loading,
+single file JS installs), but some people want a JS package manager and are
+willing to live with those constraints. If that is you, but still want to author
+in AMD style modules to get dynamic require([]), better direct source usage and
+powerful loader plugin support in the browser, then this tool can help.
+
+#### amdefine/intercept usage
+
+Just require it in your top level app module (for example index.js, server.js):
+
+```javascript
+require('amdefine/intercept');
+```
+
+The module does not return a value, so no need to assign the result to a local
+variable.
+
+Then just require() code as you normally would with Node's require(). Any .js
+loaded after the intercept require will have the amdefine check injected in
+the .js source as it is loaded. It does not modify the source on disk, just
+prepends some content to the text of the module as it is loaded by Node.
+
+#### How amdefine/intercept works
+
+It overrides the `Module._extensions['.js']` in Node to automatically prepend
+the amdefine snippet above. So, it will affect any .js file loaded by your
+app.
+
+## define() usage
+
+It is best if you use the anonymous forms of define() in your module:
+
+```javascript
+define(function (require) {
+ var dependency = require('dependency');
+});
+```
+
+or
+
+```javascript
+define(['dependency'], function (dependency) {
+
+});
+```
+
+## RequireJS optimizer integration.
+
+Version 1.0.3 of the [RequireJS optimizer](http://requirejs.org/docs/optimization.html)
+will have support for stripping the `if (typeof define !== 'function')` check
+mentioned above, so you can include this snippet for code that runs in the
+browser, but avoid taking the cost of the if() statement once the code is
+optimized for deployment.
+
+## Node 0.4 Support
+
+If you want to support Node 0.4, then add `require` as the second parameter to amdefine:
+
+```javascript
+//Only if you want Node 0.4. If using 0.5 or later, use the above snippet.
+if (typeof define !== 'function') { var define = require('amdefine')(module, require) }
+```
+
+## Limitations
+
+### Synchronous vs Asynchronous
+
+amdefine creates a define() function that is callable by your code. It will
+execute and trace dependencies and call the factory function *synchronously*,
+to keep the behavior in line with Node's synchronous dependency tracing.
+
+The exception: calling AMD's callback-style require() from inside a factory
+function. The require callback is called on process.nextTick():
+
+```javascript
+define(function (require) {
+ require(['a'], function(a) {
+ //'a' is loaded synchronously, but
+ //this callback is called on process.nextTick().
+ });
+});
+```
+
+### Loader Plugins
+
+Loader plugins are supported as long as they call their load() callbacks
+synchronously. So ones that do network requests will not work. However plugins
+like [text](http://requirejs.org/docs/api.html#text) can load text files locally.
+
+The plugin API's `load.fromText()` is **not supported** in amdefine, so this means
+transpiler plugins like the [CoffeeScript loader plugin](https://github.com/jrburke/require-cs)
+will not work. This may be fixable, but it is a bit complex, and I do not have
+enough node-fu to figure it out yet. See the source for amdefine.js if you want
+to get an idea of the issues involved.
+
+## Tests
+
+To run the tests, cd to **tests** and run:
+
+```
+node all.js
+node all-intercept.js
+```
+
+## License
+
+New BSD and MIT. Check the LICENSE file for all the details.
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js
new file mode 100644
index 0000000..53bf5a6
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js
@@ -0,0 +1,299 @@
+/** vim: et:ts=4:sw=4:sts=4
+ * @license amdefine 0.1.0 Copyright (c) 2011, The Dojo Foundation All Rights Reserved.
+ * Available via the MIT or new BSD license.
+ * see: http://github.com/jrburke/amdefine for details
+ */
+
+/*jslint node: true */
+/*global module, process */
+'use strict';
+
+/**
+ * Creates a define for node.
+ * @param {Object} module the "module" object that is defined by Node for the
+ * current module.
+ * @param {Function} [requireFn]. Node's require function for the current module.
+ * It only needs to be passed in Node versions before 0.5, when module.require
+ * did not exist.
+ * @returns {Function} a define function that is usable for the current node
+ * module.
+ */
+function amdefine(module, requireFn) {
+ 'use strict';
+ var defineCache = {},
+ loaderCache = {},
+ alreadyCalled = false,
+ path = require('path'),
+ makeRequire, stringRequire;
+
+ /**
+ * Trims the . and .. from an array of path segments.
+ * It will keep a leading path segment if a .. will become
+ * the first path segment, to help with module name lookups,
+ * which act like paths, but can be remapped. But the end result,
+ * all paths that use this function should look normalized.
+ * NOTE: this method MODIFIES the input array.
+ * @param {Array} ary the array of path segments.
+ */
+ function trimDots(ary) {
+ var i, part;
+ for (i = 0; ary[i]; i+= 1) {
+ part = ary[i];
+ if (part === '.') {
+ ary.splice(i, 1);
+ i -= 1;
+ } else if (part === '..') {
+ if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
+ //End of the line. Keep at least one non-dot
+ //path segment at the front so it can be mapped
+ //correctly to disk. Otherwise, there is likely
+ //no path mapping for a path starting with '..'.
+ //This can still fail, but catches the most reasonable
+ //uses of ..
+ break;
+ } else if (i > 0) {
+ ary.splice(i - 1, 2);
+ i -= 2;
+ }
+ }
+ }
+ }
+
+ function normalize(name, baseName) {
+ var baseParts;
+
+ //Adjust any relative paths.
+ if (name && name.charAt(0) === '.') {
+ //If have a base name, try to normalize against it,
+ //otherwise, assume it is a top-level require that will
+ //be relative to baseUrl in the end.
+ if (baseName) {
+ baseParts = baseName.split('/');
+ baseParts = baseParts.slice(0, baseParts.length - 1);
+ baseParts = baseParts.concat(name.split('/'));
+ trimDots(baseParts);
+ name = baseParts.join('/');
+ }
+ }
+
+ return name;
+ }
+
+ /**
+ * Create the normalize() function passed to a loader plugin's
+ * normalize method.
+ */
+ function makeNormalize(relName) {
+ return function (name) {
+ return normalize(name, relName);
+ };
+ }
+
+ function makeLoad(id) {
+ function load(value) {
+ loaderCache[id] = value;
+ }
+
+ load.fromText = function (id, text) {
+ //This one is difficult because the text can/probably uses
+ //define, and any relative paths and requires should be relative
+ //to that id was it would be found on disk. But this would require
+ //bootstrapping a module/require fairly deeply from node core.
+ //Not sure how best to go about that yet.
+ throw new Error('amdefine does not implement load.fromText');
+ };
+
+ return load;
+ }
+
+ makeRequire = function (systemRequire, exports, module, relId) {
+ function amdRequire(deps, callback) {
+ if (typeof deps === 'string') {
+ //Synchronous, single module require('')
+ return stringRequire(systemRequire, exports, module, deps, relId);
+ } else {
+ //Array of dependencies with a callback.
+
+ //Convert the dependencies to modules.
+ deps = deps.map(function (depName) {
+ return stringRequire(systemRequire, exports, module, depName, relId);
+ });
+
+ //Wait for next tick to call back the require call.
+ process.nextTick(function () {
+ callback.apply(null, deps);
+ });
+ }
+ }
+
+ amdRequire.toUrl = function (filePath) {
+ if (filePath.indexOf('.') === 0) {
+ return normalize(filePath, path.dirname(module.filename));
+ } else {
+ return filePath;
+ }
+ };
+
+ return amdRequire;
+ };
+
+ //Favor explicit value, passed in if the module wants to support Node 0.4.
+ requireFn = requireFn || function req() {
+ return module.require.apply(module, arguments);
+ };
+
+ function runFactory(id, deps, factory) {
+ var r, e, m, result;
+
+ if (id) {
+ e = loaderCache[id] = {};
+ m = {
+ id: id,
+ uri: __filename,
+ exports: e
+ };
+ r = makeRequire(requireFn, e, m, id);
+ } else {
+ //Only support one define call per file
+ if (alreadyCalled) {
+ throw new Error('amdefine with no module ID cannot be called more than once per file.');
+ }
+ alreadyCalled = true;
+
+ //Use the real variables from node
+ //Use module.exports for exports, since
+ //the exports in here is amdefine exports.
+ e = module.exports;
+ m = module;
+ r = makeRequire(requireFn, e, m, module.id);
+ }
+
+ //If there are dependencies, they are strings, so need
+ //to convert them to dependency values.
+ if (deps) {
+ deps = deps.map(function (depName) {
+ return r(depName);
+ });
+ }
+
+ //Call the factory with the right dependencies.
+ if (typeof factory === 'function') {
+ result = factory.apply(m.exports, deps);
+ } else {
+ result = factory;
+ }
+
+ if (result !== undefined) {
+ m.exports = result;
+ if (id) {
+ loaderCache[id] = m.exports;
+ }
+ }
+ }
+
+ stringRequire = function (systemRequire, exports, module, id, relId) {
+ //Split the ID by a ! so that
+ var index = id.indexOf('!'),
+ originalId = id,
+ prefix, plugin;
+
+ if (index === -1) {
+ id = normalize(id, relId);
+
+ //Straight module lookup. If it is one of the special dependencies,
+ //deal with it, otherwise, delegate to node.
+ if (id === 'require') {
+ return makeRequire(systemRequire, exports, module, relId);
+ } else if (id === 'exports') {
+ return exports;
+ } else if (id === 'module') {
+ return module;
+ } else if (loaderCache.hasOwnProperty(id)) {
+ return loaderCache[id];
+ } else if (defineCache[id]) {
+ runFactory.apply(null, defineCache[id]);
+ return loaderCache[id];
+ } else {
+ if(systemRequire) {
+ return systemRequire(originalId);
+ } else {
+ throw new Error('No module with ID: ' + id);
+ }
+ }
+ } else {
+ //There is a plugin in play.
+ prefix = id.substring(0, index);
+ id = id.substring(index + 1, id.length);
+
+ plugin = stringRequire(systemRequire, exports, module, prefix, relId);
+
+ if (plugin.normalize) {
+ id = plugin.normalize(id, makeNormalize(relId));
+ } else {
+ //Normalize the ID normally.
+ id = normalize(id, relId);
+ }
+
+ if (loaderCache[id]) {
+ return loaderCache[id];
+ } else {
+ plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {});
+
+ return loaderCache[id];
+ }
+ }
+ };
+
+ //Create a define function specific to the module asking for amdefine.
+ function define(id, deps, factory) {
+ if (Array.isArray(id)) {
+ factory = deps;
+ deps = id;
+ id = undefined;
+ } else if (typeof id !== 'string') {
+ factory = id;
+ id = deps = undefined;
+ }
+
+ if (deps && !Array.isArray(deps)) {
+ factory = deps;
+ deps = undefined;
+ }
+
+ if (!deps) {
+ deps = ['require', 'exports', 'module'];
+ }
+
+ //Set up properties for this module. If an ID, then use
+ //internal cache. If no ID, then use the external variables
+ //for this node module.
+ if (id) {
+ //Put the module in deep freeze until there is a
+ //require call for it.
+ defineCache[id] = [id, deps, factory];
+ } else {
+ runFactory(id, deps, factory);
+ }
+ }
+
+ //define.require, which has access to all the values in the
+ //cache. Useful for AMD modules that all have IDs in the file,
+ //but need to finally export a value to node based on one of those
+ //IDs.
+ define.require = function (id) {
+ if (loaderCache[id]) {
+ return loaderCache[id];
+ }
+
+ if (defineCache[id]) {
+ runFactory.apply(null, defineCache[id]);
+ return loaderCache[id];
+ }
+ };
+
+ define.amd = {};
+
+ return define;
+}
+
+module.exports = amdefine;
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js
new file mode 100644
index 0000000..771a983
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js
@@ -0,0 +1,36 @@
+/*jshint node: true */
+var inserted,
+ Module = require('module'),
+ fs = require('fs'),
+ existingExtFn = Module._extensions['.js'],
+ amdefineRegExp = /amdefine\.js/;
+
+inserted = "if (typeof define !== 'function') {var define = require('amdefine')(module)}";
+
+//From the node/lib/module.js source:
+function stripBOM(content) {
+ // Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
+ // because the buffer-to-string conversion in `fs.readFileSync()`
+ // translates it to FEFF, the UTF-16 BOM.
+ if (content.charCodeAt(0) === 0xFEFF) {
+ content = content.slice(1);
+ }
+ return content;
+}
+
+//Also adapted from the node/lib/module.js source:
+function intercept(module, filename) {
+ var content = stripBOM(fs.readFileSync(filename, 'utf8'));
+
+ if (!amdefineRegExp.test(module.id)) {
+ content = inserted + content;
+ }
+
+ module._compile(content, filename);
+}
+
+intercept._id = 'amdefine/intercept';
+
+if (!existingExtFn._id || existingExtFn._id !== intercept._id) {
+ Module._extensions['.js'] = intercept;
+}
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json
new file mode 100644
index 0000000..880c134
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "amdefine",
+ "description": "Provide AMD's define() API for declaring modules in the AMD format",
+ "version": "0.1.0",
+ "homepage": "http://github.com/jrburke/amdefine",
+ "author": {
+ "name": "James Burke",
+ "email": "jrburke@gmail.com",
+ "url": "http://github.com/jrburke"
+ },
+ "licenses": [
+ {
+ "type": "BSD",
+ "url": "https://github.com/jrburke/amdefine/blob/master/LICENSE"
+ },
+ {
+ "type": "MIT",
+ "url": "https://github.com/jrburke/amdefine/blob/master/LICENSE"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jrburke/amdefine.git"
+ },
+ "main": "./amdefine.js",
+ "engines": {
+ "node": ">=0.4.2"
+ },
+ "readme": "# amdefine\n\nA module that can be used to implement AMD's define() in Node. This allows you\nto code to the AMD API and have the module work in node programs without\nrequiring those other programs to use AMD.\n\n## Usage\n\n**1)** Update your package.json to indicate amdefine as a dependency:\n\n```javascript\n \"dependencies\": {\n \"amdefine\": \">=0.1.0\"\n }\n```\n\nThen run `npm install` to get amdefine into your project.\n\n**2)** At the top of each module that uses define(), place this code:\n\n```javascript\nif (typeof define !== 'function') { var define = require('amdefine')(module) }\n```\n\n**Only use these snippets** when loading amdefine. If you preserve the basic structure,\nwith the braces, it will be stripped out when using the [RequireJS optimizer](#optimizer).\n\nYou can add spaces, line breaks and even require amdefine with a local path, but\nkeep the rest of the structure to get the stripping behavior.\n\nAs you may know, because `if` statements in JavaScript don't have their own scope, the var\ndeclaration in the above snippet is made whether the `if` expression is truthy or not. If\nRequireJS is loaded then the declaration is superfluous because `define` is already already\ndeclared in the same scope in RequireJS. Fortunately JavaScript handles multiple `var`\ndeclarations of the same variable in the same scope gracefully.\n\nIf you want to deliver amdefine.js with your code rather than specifying it as a dependency\nwith npm, then just download the latest release and refer to it using a relative path:\n\n[Latest Version](https://github.com/jrburke/amdefine/raw/latest/amdefine.js)\n\n### amdefine/intercept\n\nConsider this very experimental.\n\nInstead of pasting the piece of text for the amdefine setup of a `define`\nvariable in each module you create or consume, you can use `amdefine/intercept`\ninstead. It will automatically insert the above snippet in each .js file loaded\nby Node.\n\n**Warning**: you should only use this if you are creating an application that\nis consuming AMD style defined()'d modules that are distributed via npm and want\nto run that code in Node.\n\nFor library code where you are not sure if it will be used by others in Node or\nin the browser, then explicitly depending on amdefine and placing the code\nsnippet above is suggested path, instead of using `amdefine/intercept`. The\nintercept module affects all .js files loaded in the Node app, and it is\ninconsiderate to modify global state like that unless you are also controlling\nthe top level app.\n\n#### Why distribute AMD-style nodes via npm?\n\nnpm has a lot of weaknesses for front-end use (installed layout is not great,\nshould have better support for the `baseUrl + moduleID + '.js' style of loading,\nsingle file JS installs), but some people want a JS package manager and are\nwilling to live with those constraints. If that is you, but still want to author\nin AMD style modules to get dynamic require([]), better direct source usage and\npowerful loader plugin support in the browser, then this tool can help.\n\n#### amdefine/intercept usage\n\nJust require it in your top level app module (for example index.js, server.js):\n\n```javascript\nrequire('amdefine/intercept');\n```\n\nThe module does not return a value, so no need to assign the result to a local\nvariable.\n\nThen just require() code as you normally would with Node's require(). Any .js\nloaded after the intercept require will have the amdefine check injected in\nthe .js source as it is loaded. It does not modify the source on disk, just\nprepends some content to the text of the module as it is loaded by Node.\n\n#### How amdefine/intercept works\n\nIt overrides the `Module._extensions['.js']` in Node to automatically prepend\nthe amdefine snippet above. So, it will affect any .js file loaded by your\napp.\n\n## define() usage\n\nIt is best if you use the anonymous forms of define() in your module:\n\n```javascript\ndefine(function (require) {\n var dependency = require('dependency');\n});\n```\n\nor\n\n```javascript\ndefine(['dependency'], function (dependency) {\n\n});\n```\n\n## RequireJS optimizer integration. \n\nVersion 1.0.3 of the [RequireJS optimizer](http://requirejs.org/docs/optimization.html)\nwill have support for stripping the `if (typeof define !== 'function')` check\nmentioned above, so you can include this snippet for code that runs in the\nbrowser, but avoid taking the cost of the if() statement once the code is\noptimized for deployment.\n\n## Node 0.4 Support\n\nIf you want to support Node 0.4, then add `require` as the second parameter to amdefine:\n\n```javascript\n//Only if you want Node 0.4. If using 0.5 or later, use the above snippet.\nif (typeof define !== 'function') { var define = require('amdefine')(module, require) }\n```\n\n## Limitations\n\n### Synchronous vs Asynchronous\n\namdefine creates a define() function that is callable by your code. It will\nexecute and trace dependencies and call the factory function *synchronously*,\nto keep the behavior in line with Node's synchronous dependency tracing.\n\nThe exception: calling AMD's callback-style require() from inside a factory\nfunction. The require callback is called on process.nextTick():\n\n```javascript\ndefine(function (require) {\n require(['a'], function(a) {\n //'a' is loaded synchronously, but\n //this callback is called on process.nextTick().\n });\n});\n```\n\n### Loader Plugins\n\nLoader plugins are supported as long as they call their load() callbacks\nsynchronously. So ones that do network requests will not work. However plugins\nlike [text](http://requirejs.org/docs/api.html#text) can load text files locally.\n\nThe plugin API's `load.fromText()` is **not supported** in amdefine, so this means\ntranspiler plugins like the [CoffeeScript loader plugin](https://github.com/jrburke/require-cs)\nwill not work. This may be fixable, but it is a bit complex, and I do not have\nenough node-fu to figure it out yet. See the source for amdefine.js if you want\nto get an idea of the issues involved.\n\n## Tests\n\nTo run the tests, cd to **tests** and run:\n\n```\nnode all.js\nnode all-intercept.js\n```\n\n## License\n\nNew BSD and MIT. Check the LICENSE file for all the details.\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/jrburke/amdefine/issues"
+ },
+ "_id": "amdefine@0.1.0",
+ "dist": {
+ "shasum": "3ca9735cf1dde0edf7a4bf6641709c8024f9b227",
+ "tarball": "http://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+ },
+ "_from": "amdefine@>=0.0.4",
+ "_npmVersion": "1.3.8",
+ "_npmUser": {
+ "name": "jrburke",
+ "email": "jrburke@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jrburke",
+ "email": "jrburke@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_shasum": "3ca9735cf1dde0edf7a4bf6641709c8024f9b227",
+ "_resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz",
+ "scripts": {}
+}
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/package.json b/node_modules/csswring/node_modules/postcss/node_modules/source-map/package.json
new file mode 100644
index 0000000..9bcc2d9
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/package.json
@@ -0,0 +1,190 @@
+{
+ "name": "source-map",
+ "description": "Generates and consumes source maps",
+ "version": "0.2.0",
+ "homepage": "https://github.com/mozilla/source-map",
+ "author": {
+ "name": "Nick Fitzgerald",
+ "email": "nfitzgerald@mozilla.com"
+ },
+ "contributors": [
+ {
+ "name": "Tobias Koppers",
+ "email": "tobias.koppers@googlemail.com"
+ },
+ {
+ "name": "Duncan Beevers",
+ "email": "duncan@dweebd.com"
+ },
+ {
+ "name": "Stephen Crane",
+ "email": "scrane@mozilla.com"
+ },
+ {
+ "name": "Ryan Seddon",
+ "email": "seddon.ryan@gmail.com"
+ },
+ {
+ "name": "Miles Elam",
+ "email": "miles.elam@deem.com"
+ },
+ {
+ "name": "Mihai Bazon",
+ "email": "mihai.bazon@gmail.com"
+ },
+ {
+ "name": "Michael Ficarra",
+ "email": "github.public.email@michael.ficarra.me"
+ },
+ {
+ "name": "Todd Wolfson",
+ "email": "todd@twolfson.com"
+ },
+ {
+ "name": "Alexander Solovyov",
+ "email": "alexander@solovyov.net"
+ },
+ {
+ "name": "Felix Gnass",
+ "email": "fgnass@gmail.com"
+ },
+ {
+ "name": "Conrad Irwin",
+ "email": "conrad.irwin@gmail.com"
+ },
+ {
+ "name": "usrbincc",
+ "email": "usrbincc@yahoo.com"
+ },
+ {
+ "name": "David Glasser",
+ "email": "glasser@davidglasser.net"
+ },
+ {
+ "name": "Chase Douglas",
+ "email": "chase@newrelic.com"
+ },
+ {
+ "name": "Evan Wallace",
+ "email": "evan.exe@gmail.com"
+ },
+ {
+ "name": "Heather Arthur",
+ "email": "fayearthur@gmail.com"
+ },
+ {
+ "name": "Hugh Kennedy",
+ "email": "hughskennedy@gmail.com"
+ },
+ {
+ "name": "David Glasser",
+ "email": "glasser@davidglasser.net"
+ },
+ {
+ "name": "Simon Lydell",
+ "email": "simon.lydell@gmail.com"
+ },
+ {
+ "name": "Jmeas Smith",
+ "email": "jellyes2@gmail.com"
+ },
+ {
+ "name": "Michael Z Goddard",
+ "email": "mzgoddard@gmail.com"
+ },
+ {
+ "name": "azu",
+ "email": "azu@users.noreply.github.com"
+ },
+ {
+ "name": "John Gozde",
+ "email": "john@gozde.ca"
+ },
+ {
+ "name": "Adam Kirkton",
+ "email": "akirkton@truefitinnovation.com"
+ },
+ {
+ "name": "Chris Montgomery",
+ "email": "christopher.montgomery@dowjones.com"
+ },
+ {
+ "name": "J. Ryan Stinnett",
+ "email": "jryans@gmail.com"
+ },
+ {
+ "name": "Jack Herrington",
+ "email": "jherrington@walmartlabs.com"
+ },
+ {
+ "name": "Chris Truter",
+ "email": "jeffpalentine@gmail.com"
+ },
+ {
+ "name": "Daniel Espeset",
+ "email": "daniel@danielespeset.com"
+ },
+ {
+ "name": "Jamie Wong",
+ "email": "jamie.lf.wong@gmail.com"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "http://github.com/mozilla/source-map.git"
+ },
+ "directories": {
+ "lib": "./lib"
+ },
+ "main": "./lib/source-map.js",
+ "engines": {
+ "node": ">=0.8.0"
+ },
+ "licenses": [
+ {
+ "type": "BSD",
+ "url": "http://opensource.org/licenses/BSD-3-Clause"
+ }
+ ],
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "devDependencies": {
+ "dryice": ">=0.4.8"
+ },
+ "scripts": {
+ "test": "node test/run-tests.js",
+ "build": "node Makefile.dryice.js"
+ },
+ "bugs": {
+ "url": "https://github.com/mozilla/source-map/issues"
+ },
+ "_id": "source-map@0.2.0",
+ "_shasum": "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d",
+ "_from": "source-map@~0.2.0",
+ "_npmVersion": "1.4.9",
+ "_npmUser": {
+ "name": "nickfitzgerald",
+ "email": "fitzgen@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "mozilla-devtools",
+ "email": "mozilla-developer-tools@googlegroups.com"
+ },
+ {
+ "name": "mozilla",
+ "email": "dherman@mozilla.com"
+ },
+ {
+ "name": "nickfitzgerald",
+ "email": "fitzgen@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d",
+ "tarball": "http://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/run-tests.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/run-tests.js
new file mode 100755
index 0000000..64a7c3a
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/run-tests.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+var assert = require('assert');
+var fs = require('fs');
+var path = require('path');
+var util = require('./source-map/util');
+
+function run(tests) {
+ var total = 0;
+ var passed = 0;
+
+ for (var i = 0; i < tests.length; i++) {
+ for (var k in tests[i].testCase) {
+ if (/^test/.test(k)) {
+ total++;
+ try {
+ tests[i].testCase[k](assert, util);
+ passed++;
+ }
+ catch (e) {
+ console.log('FAILED ' + tests[i].name + ': ' + k + '!');
+ console.log(e.stack);
+ }
+ }
+ }
+ }
+
+ console.log('');
+ console.log(passed + ' / ' + total + ' tests passed.');
+ console.log('');
+
+ return total - passed;
+}
+
+function isTestFile(f) {
+ var testToRun = process.argv[2];
+ return testToRun
+ ? path.basename(testToRun) === f
+ : /^test\-.*?\.js/.test(f);
+}
+
+function toModule(f) {
+ return './source-map/' + f.replace(/\.js$/, '');
+}
+
+var requires = fs.readdirSync(path.join(__dirname, 'source-map'))
+ .filter(isTestFile)
+ .map(toModule);
+
+var code = run(requires.map(require).map(function (mod, i) {
+ return {
+ name: requires[i],
+ testCase: mod
+ };
+}));
+
+process.exit(code);
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js
new file mode 100644
index 0000000..3801233
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js
@@ -0,0 +1,26 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2012 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var sourceMap;
+ try {
+ sourceMap = require('../../lib/source-map');
+ } catch (e) {
+ sourceMap = {};
+ Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
+ }
+
+ exports['test that the api is properly exposed in the top level'] = function (assert, util) {
+ assert.equal(typeof sourceMap.SourceMapGenerator, "function");
+ assert.equal(typeof sourceMap.SourceMapConsumer, "function");
+ assert.equal(typeof sourceMap.SourceNode, "function");
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js
new file mode 100644
index 0000000..b5797ed
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js
@@ -0,0 +1,104 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var ArraySet = require('../../lib/source-map/array-set').ArraySet;
+
+ function makeTestSet() {
+ var set = new ArraySet();
+ for (var i = 0; i < 100; i++) {
+ set.add(String(i));
+ }
+ return set;
+ }
+
+ exports['test .has() membership'] = function (assert, util) {
+ var set = makeTestSet();
+ for (var i = 0; i < 100; i++) {
+ assert.ok(set.has(String(i)));
+ }
+ };
+
+ exports['test .indexOf() elements'] = function (assert, util) {
+ var set = makeTestSet();
+ for (var i = 0; i < 100; i++) {
+ assert.strictEqual(set.indexOf(String(i)), i);
+ }
+ };
+
+ exports['test .at() indexing'] = function (assert, util) {
+ var set = makeTestSet();
+ for (var i = 0; i < 100; i++) {
+ assert.strictEqual(set.at(i), String(i));
+ }
+ };
+
+ exports['test creating from an array'] = function (assert, util) {
+ var set = ArraySet.fromArray(['foo', 'bar', 'baz', 'quux', 'hasOwnProperty']);
+
+ assert.ok(set.has('foo'));
+ assert.ok(set.has('bar'));
+ assert.ok(set.has('baz'));
+ assert.ok(set.has('quux'));
+ assert.ok(set.has('hasOwnProperty'));
+
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.indexOf('bar'), 1);
+ assert.strictEqual(set.indexOf('baz'), 2);
+ assert.strictEqual(set.indexOf('quux'), 3);
+
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.at(1), 'bar');
+ assert.strictEqual(set.at(2), 'baz');
+ assert.strictEqual(set.at(3), 'quux');
+ };
+
+ exports['test that you can add __proto__; see github issue #30'] = function (assert, util) {
+ var set = new ArraySet();
+ set.add('__proto__');
+ assert.ok(set.has('__proto__'));
+ assert.strictEqual(set.at(0), '__proto__');
+ assert.strictEqual(set.indexOf('__proto__'), 0);
+ };
+
+ exports['test .fromArray() with duplicates'] = function (assert, util) {
+ var set = ArraySet.fromArray(['foo', 'foo']);
+ assert.ok(set.has('foo'));
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.toArray().length, 1);
+
+ set = ArraySet.fromArray(['foo', 'foo'], true);
+ assert.ok(set.has('foo'));
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.at(1), 'foo');
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.toArray().length, 2);
+ };
+
+ exports['test .add() with duplicates'] = function (assert, util) {
+ var set = new ArraySet();
+ set.add('foo');
+
+ set.add('foo');
+ assert.ok(set.has('foo'));
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.toArray().length, 1);
+
+ set.add('foo', true);
+ assert.ok(set.has('foo'));
+ assert.strictEqual(set.at(0), 'foo');
+ assert.strictEqual(set.at(1), 'foo');
+ assert.strictEqual(set.indexOf('foo'), 0);
+ assert.strictEqual(set.toArray().length, 2);
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js
new file mode 100644
index 0000000..6fd0d99
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js
@@ -0,0 +1,23 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var base64VLQ = require('../../lib/source-map/base64-vlq');
+
+ exports['test normal encoding and decoding'] = function (assert, util) {
+ var result = {};
+ for (var i = -255; i < 256; i++) {
+ base64VLQ.decode(base64VLQ.encode(i), result);
+ assert.equal(result.value, i);
+ assert.equal(result.rest, "");
+ }
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js
new file mode 100644
index 0000000..ff3a244
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js
@@ -0,0 +1,35 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var base64 = require('../../lib/source-map/base64');
+
+ exports['test out of range encoding'] = function (assert, util) {
+ assert.throws(function () {
+ base64.encode(-1);
+ });
+ assert.throws(function () {
+ base64.encode(64);
+ });
+ };
+
+ exports['test out of range decoding'] = function (assert, util) {
+ assert.throws(function () {
+ base64.decode('=');
+ });
+ };
+
+ exports['test normal encoding and decoding'] = function (assert, util) {
+ for (var i = 0; i < 64; i++) {
+ assert.equal(base64.decode(base64.encode(i)), i);
+ }
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js
new file mode 100644
index 0000000..f1c9e0f
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js
@@ -0,0 +1,54 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var binarySearch = require('../../lib/source-map/binary-search');
+
+ function numberCompare(a, b) {
+ return a - b;
+ }
+
+ exports['test too high'] = function (assert, util) {
+ var needle = 30;
+ var haystack = [2,4,6,8,10,12,14,16,18,20];
+
+ assert.doesNotThrow(function () {
+ binarySearch.search(needle, haystack, numberCompare);
+ });
+
+ assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 20);
+ };
+
+ exports['test too low'] = function (assert, util) {
+ var needle = 1;
+ var haystack = [2,4,6,8,10,12,14,16,18,20];
+
+ assert.doesNotThrow(function () {
+ binarySearch.search(needle, haystack, numberCompare);
+ });
+
+ assert.equal(binarySearch.search(needle, haystack, numberCompare), -1);
+ };
+
+ exports['test exact search'] = function (assert, util) {
+ var needle = 4;
+ var haystack = [2,4,6,8,10,12,14,16,18,20];
+
+ assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 4);
+ };
+
+ exports['test fuzzy search'] = function (assert, util) {
+ var needle = 19;
+ var haystack = [2,4,6,8,10,12,14,16,18,20];
+
+ assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 18);
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js
new file mode 100644
index 0000000..26757b2
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js
@@ -0,0 +1,84 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
+ var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
+
+ exports['test eating our own dog food'] = function (assert, util) {
+ var smg = new SourceMapGenerator({
+ file: 'testing.js',
+ sourceRoot: '/wu/tang'
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 1, column: 0 },
+ generated: { line: 2, column: 2 }
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 2, column: 0 },
+ generated: { line: 3, column: 2 }
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 3, column: 0 },
+ generated: { line: 4, column: 2 }
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 4, column: 0 },
+ generated: { line: 5, column: 2 }
+ });
+
+ smg.addMapping({
+ source: 'gza.coffee',
+ original: { line: 5, column: 10 },
+ generated: { line: 6, column: 12 }
+ });
+
+ var smc = new SourceMapConsumer(smg.toString());
+
+ // Exact
+ util.assertMapping(2, 2, '/wu/tang/gza.coffee', 1, 0, null, smc, assert);
+ util.assertMapping(3, 2, '/wu/tang/gza.coffee', 2, 0, null, smc, assert);
+ util.assertMapping(4, 2, '/wu/tang/gza.coffee', 3, 0, null, smc, assert);
+ util.assertMapping(5, 2, '/wu/tang/gza.coffee', 4, 0, null, smc, assert);
+ util.assertMapping(6, 12, '/wu/tang/gza.coffee', 5, 10, null, smc, assert);
+
+ // Fuzzy
+
+ // Generated to original
+ util.assertMapping(2, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(2, 9, '/wu/tang/gza.coffee', 1, 0, null, smc, assert, true);
+ util.assertMapping(3, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(3, 9, '/wu/tang/gza.coffee', 2, 0, null, smc, assert, true);
+ util.assertMapping(4, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(4, 9, '/wu/tang/gza.coffee', 3, 0, null, smc, assert, true);
+ util.assertMapping(5, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(5, 9, '/wu/tang/gza.coffee', 4, 0, null, smc, assert, true);
+ util.assertMapping(6, 0, null, null, null, null, smc, assert, true);
+ util.assertMapping(6, 9, null, null, null, null, smc, assert, true);
+ util.assertMapping(6, 13, '/wu/tang/gza.coffee', 5, 10, null, smc, assert, true);
+
+ // Original to generated
+ util.assertMapping(2, 2, '/wu/tang/gza.coffee', 1, 1, null, smc, assert, null, true);
+ util.assertMapping(3, 2, '/wu/tang/gza.coffee', 2, 3, null, smc, assert, null, true);
+ util.assertMapping(4, 2, '/wu/tang/gza.coffee', 3, 6, null, smc, assert, null, true);
+ util.assertMapping(5, 2, '/wu/tang/gza.coffee', 4, 9, null, smc, assert, null, true);
+ util.assertMapping(5, 2, '/wu/tang/gza.coffee', 5, 9, null, smc, assert, null, true);
+ util.assertMapping(6, 12, '/wu/tang/gza.coffee', 6, 19, null, smc, assert, null, true);
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js
new file mode 100644
index 0000000..4a4842a
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js
@@ -0,0 +1,874 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
+ var IndexedSourceMapConsumer = require('../../lib/source-map/indexed-source-map-consumer').IndexedSourceMapConsumer;
+ var BasicSourceMapConsumer = require('../../lib/source-map/basic-source-map-consumer').BasicSourceMapConsumer;
+ var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
+
+ exports['test that we can instantiate with a string or an object'] = function (assert, util) {
+ assert.doesNotThrow(function () {
+ var map = new SourceMapConsumer(util.testMap);
+ });
+ assert.doesNotThrow(function () {
+ var map = new SourceMapConsumer(JSON.stringify(util.testMap));
+ });
+ };
+
+ exports['test that the object returned from new SourceMapConsumer inherits from SourceMapConsumer'] = function (assert, util) {
+ assert.ok(new SourceMapConsumer(util.testMap) instanceof SourceMapConsumer);
+ }
+
+ exports['test that a BasicSourceMapConsumer is returned for sourcemaps without sections'] = function(assert, util) {
+ assert.ok(new SourceMapConsumer(util.testMap) instanceof BasicSourceMapConsumer);
+ };
+
+ exports['test that an IndexedSourceMapConsumer is returned for sourcemaps with sections'] = function(assert, util) {
+ assert.ok(new SourceMapConsumer(util.indexedTestMap) instanceof IndexedSourceMapConsumer);
+ };
+
+ exports['test that the `sources` field has the original sources'] = function (assert, util) {
+ var map;
+ var sources;
+
+ map = new SourceMapConsumer(util.testMap);
+ sources = map.sources;
+ assert.equal(sources[0], '/the/root/one.js');
+ assert.equal(sources[1], '/the/root/two.js');
+ assert.equal(sources.length, 2);
+
+ map = new SourceMapConsumer(util.indexedTestMap);
+ sources = map.sources;
+ assert.equal(sources[0], '/the/root/one.js');
+ assert.equal(sources[1], '/the/root/two.js');
+ assert.equal(sources.length, 2);
+
+ map = new SourceMapConsumer(util.indexedTestMapDifferentSourceRoots);
+ sources = map.sources;
+ assert.equal(sources[0], '/the/root/one.js');
+ assert.equal(sources[1], '/different/root/two.js');
+ assert.equal(sources.length, 2);
+
+ map = new SourceMapConsumer(util.testMapNoSourceRoot);
+ sources = map.sources;
+ assert.equal(sources[0], 'one.js');
+ assert.equal(sources[1], 'two.js');
+ assert.equal(sources.length, 2);
+
+ map = new SourceMapConsumer(util.testMapEmptySourceRoot);
+ sources = map.sources;
+ assert.equal(sources[0], 'one.js');
+ assert.equal(sources[1], 'two.js');
+ assert.equal(sources.length, 2);
+ };
+
+ exports['test that the source root is reflected in a mapping\'s source field'] = function (assert, util) {
+ var map;
+ var mapping;
+
+ map = new SourceMapConsumer(util.testMap);
+
+ mapping = map.originalPositionFor({
+ line: 2,
+ column: 1
+ });
+ assert.equal(mapping.source, '/the/root/two.js');
+
+ mapping = map.originalPositionFor({
+ line: 1,
+ column: 1
+ });
+ assert.equal(mapping.source, '/the/root/one.js');
+
+
+ map = new SourceMapConsumer(util.testMapNoSourceRoot);
+
+ mapping = map.originalPositionFor({
+ line: 2,
+ column: 1
+ });
+ assert.equal(mapping.source, 'two.js');
+
+ mapping = map.originalPositionFor({
+ line: 1,
+ column: 1
+ });
+ assert.equal(mapping.source, 'one.js');
+
+
+ map = new SourceMapConsumer(util.testMapEmptySourceRoot);
+
+ mapping = map.originalPositionFor({
+ line: 2,
+ column: 1
+ });
+ assert.equal(mapping.source, 'two.js');
+
+ mapping = map.originalPositionFor({
+ line: 1,
+ column: 1
+ });
+ assert.equal(mapping.source, 'one.js');
+ };
+
+ exports['test mapping tokens back exactly'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+
+ util.assertMapping(1, 1, '/the/root/one.js', 1, 1, null, map, assert);
+ util.assertMapping(1, 5, '/the/root/one.js', 1, 5, null, map, assert);
+ util.assertMapping(1, 9, '/the/root/one.js', 1, 11, null, map, assert);
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 21, 'bar', map, assert);
+ util.assertMapping(1, 21, '/the/root/one.js', 2, 3, null, map, assert);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 10, 'baz', map, assert);
+ util.assertMapping(1, 32, '/the/root/one.js', 2, 14, 'bar', map, assert);
+
+ util.assertMapping(2, 1, '/the/root/two.js', 1, 1, null, map, assert);
+ util.assertMapping(2, 5, '/the/root/two.js', 1, 5, null, map, assert);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 11, null, map, assert);
+ util.assertMapping(2, 18, '/the/root/two.js', 1, 21, 'n', map, assert);
+ util.assertMapping(2, 21, '/the/root/two.js', 2, 3, null, map, assert);
+ util.assertMapping(2, 28, '/the/root/two.js', 2, 10, 'n', map, assert);
+ };
+
+ exports['test mapping tokens back exactly in indexed source map'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+
+ util.assertMapping(1, 1, '/the/root/one.js', 1, 1, null, map, assert);
+ util.assertMapping(1, 5, '/the/root/one.js', 1, 5, null, map, assert);
+ util.assertMapping(1, 9, '/the/root/one.js', 1, 11, null, map, assert);
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 21, 'bar', map, assert);
+ util.assertMapping(1, 21, '/the/root/one.js', 2, 3, null, map, assert);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 10, 'baz', map, assert);
+ util.assertMapping(1, 32, '/the/root/one.js', 2, 14, 'bar', map, assert);
+
+ util.assertMapping(2, 1, '/the/root/two.js', 1, 1, null, map, assert);
+ util.assertMapping(2, 5, '/the/root/two.js', 1, 5, null, map, assert);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 11, null, map, assert);
+ util.assertMapping(2, 18, '/the/root/two.js', 1, 21, 'n', map, assert);
+ util.assertMapping(2, 21, '/the/root/two.js', 2, 3, null, map, assert);
+ util.assertMapping(2, 28, '/the/root/two.js', 2, 10, 'n', map, assert);
+ };
+
+
+ exports['test mapping tokens back exactly'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+
+ util.assertMapping(1, 1, '/the/root/one.js', 1, 1, null, map, assert);
+ util.assertMapping(1, 5, '/the/root/one.js', 1, 5, null, map, assert);
+ util.assertMapping(1, 9, '/the/root/one.js', 1, 11, null, map, assert);
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 21, 'bar', map, assert);
+ util.assertMapping(1, 21, '/the/root/one.js', 2, 3, null, map, assert);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 10, 'baz', map, assert);
+ util.assertMapping(1, 32, '/the/root/one.js', 2, 14, 'bar', map, assert);
+
+ util.assertMapping(2, 1, '/the/root/two.js', 1, 1, null, map, assert);
+ util.assertMapping(2, 5, '/the/root/two.js', 1, 5, null, map, assert);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 11, null, map, assert);
+ util.assertMapping(2, 18, '/the/root/two.js', 1, 21, 'n', map, assert);
+ util.assertMapping(2, 21, '/the/root/two.js', 2, 3, null, map, assert);
+ util.assertMapping(2, 28, '/the/root/two.js', 2, 10, 'n', map, assert);
+ };
+
+ exports['test mapping tokens fuzzy'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+
+ // Finding original positions
+ util.assertMapping(1, 20, '/the/root/one.js', 1, 21, 'bar', map, assert, true);
+ util.assertMapping(1, 30, '/the/root/one.js', 2, 10, 'baz', map, assert, true);
+ util.assertMapping(2, 12, '/the/root/two.js', 1, 11, null, map, assert, true);
+
+ // Finding generated positions
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 22, 'bar', map, assert, null, true);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 13, 'baz', map, assert, null, true);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 16, null, map, assert, null, true);
+ };
+
+ exports['test mapping tokens fuzzy in indexed source map'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+
+ // Finding original positions
+ util.assertMapping(1, 20, '/the/root/one.js', 1, 21, 'bar', map, assert, true);
+ util.assertMapping(1, 30, '/the/root/one.js', 2, 10, 'baz', map, assert, true);
+ util.assertMapping(2, 12, '/the/root/two.js', 1, 11, null, map, assert, true);
+
+ // Finding generated positions
+ util.assertMapping(1, 18, '/the/root/one.js', 1, 22, 'bar', map, assert, null, true);
+ util.assertMapping(1, 28, '/the/root/one.js', 2, 13, 'baz', map, assert, null, true);
+ util.assertMapping(2, 9, '/the/root/two.js', 1, 16, null, map, assert, null, true);
+ };
+
+ exports['test mappings and end of lines'] = function (assert, util) {
+ var smg = new SourceMapGenerator({
+ file: 'foo.js'
+ });
+ smg.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 1, column: 1 },
+ source: 'bar.js'
+ });
+ smg.addMapping({
+ original: { line: 2, column: 2 },
+ generated: { line: 2, column: 2 },
+ source: 'bar.js'
+ });
+
+ var map = SourceMapConsumer.fromSourceMap(smg);
+
+ // When finding original positions, mappings end at the end of the line.
+ util.assertMapping(2, 1, null, null, null, null, map, assert, true)
+
+ // When finding generated positions, mappings do not end at the end of the line.
+ util.assertMapping(1, 1, 'bar.js', 2, 1, null, map, assert, null, true);
+ };
+
+ exports['test creating source map consumers with )]}\' prefix'] = function (assert, util) {
+ assert.doesNotThrow(function () {
+ var map = new SourceMapConsumer(")]}'" + JSON.stringify(util.testMap));
+ });
+ };
+
+ exports['test eachMapping'] = function (assert, util) {
+ var map;
+
+ map = new SourceMapConsumer(util.testMap);
+ var previousLine = -Infinity;
+ var previousColumn = -Infinity;
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.generatedLine >= previousLine);
+
+ assert.ok(mapping.source === '/the/root/one.js' || mapping.source === '/the/root/two.js');
+
+ if (mapping.generatedLine === previousLine) {
+ assert.ok(mapping.generatedColumn >= previousColumn);
+ previousColumn = mapping.generatedColumn;
+ }
+ else {
+ previousLine = mapping.generatedLine;
+ previousColumn = -Infinity;
+ }
+ });
+
+ map = new SourceMapConsumer(util.testMapNoSourceRoot);
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.source === 'one.js' || mapping.source === 'two.js');
+ });
+
+ map = new SourceMapConsumer(util.testMapEmptySourceRoot);
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.source === 'one.js' || mapping.source === 'two.js');
+ });
+ };
+
+ exports['test eachMapping for indexed source maps'] = function(assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+ var previousLine = -Infinity;
+ var previousColumn = -Infinity;
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.generatedLine >= previousLine);
+
+ if (mapping.source) {
+ assert.equal(mapping.source.indexOf(util.testMap.sourceRoot), 0);
+ }
+
+ if (mapping.generatedLine === previousLine) {
+ assert.ok(mapping.generatedColumn >= previousColumn);
+ previousColumn = mapping.generatedColumn;
+ }
+ else {
+ previousLine = mapping.generatedLine;
+ previousColumn = -Infinity;
+ }
+ });
+ };
+
+
+ exports['test iterating over mappings in a different order'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+ var previousLine = -Infinity;
+ var previousColumn = -Infinity;
+ var previousSource = "";
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.source >= previousSource);
+
+ if (mapping.source === previousSource) {
+ assert.ok(mapping.originalLine >= previousLine);
+
+ if (mapping.originalLine === previousLine) {
+ assert.ok(mapping.originalColumn >= previousColumn);
+ previousColumn = mapping.originalColumn;
+ }
+ else {
+ previousLine = mapping.originalLine;
+ previousColumn = -Infinity;
+ }
+ }
+ else {
+ previousSource = mapping.source;
+ previousLine = -Infinity;
+ previousColumn = -Infinity;
+ }
+ }, null, SourceMapConsumer.ORIGINAL_ORDER);
+ };
+
+ exports['test iterating over mappings in a different order in indexed source maps'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+ var previousLine = -Infinity;
+ var previousColumn = -Infinity;
+ var previousSource = "";
+ map.eachMapping(function (mapping) {
+ assert.ok(mapping.source >= previousSource);
+
+ if (mapping.source === previousSource) {
+ assert.ok(mapping.originalLine >= previousLine);
+
+ if (mapping.originalLine === previousLine) {
+ assert.ok(mapping.originalColumn >= previousColumn);
+ previousColumn = mapping.originalColumn;
+ }
+ else {
+ previousLine = mapping.originalLine;
+ previousColumn = -Infinity;
+ }
+ }
+ else {
+ previousSource = mapping.source;
+ previousLine = -Infinity;
+ previousColumn = -Infinity;
+ }
+ }, null, SourceMapConsumer.ORIGINAL_ORDER);
+ };
+
+ exports['test that we can set the context for `this` in eachMapping'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMap);
+ var context = {};
+ map.eachMapping(function () {
+ assert.equal(this, context);
+ }, context);
+ };
+
+ exports['test that we can set the context for `this` in eachMapping in indexed source maps'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+ var context = {};
+ map.eachMapping(function () {
+ assert.equal(this, context);
+ }, context);
+ };
+
+ exports['test that the `sourcesContent` field has the original sources'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMapWithSourcesContent);
+ var sourcesContent = map.sourcesContent;
+
+ assert.equal(sourcesContent[0], ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(sourcesContent[1], ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.equal(sourcesContent.length, 2);
+ };
+
+ exports['test that we can get the original sources for the sources'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMapWithSourcesContent);
+ var sources = map.sources;
+
+ assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.throws(function () {
+ map.sourceContentFor("");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("/the/root/three.js");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("three.js");
+ }, Error);
+ };
+
+ exports['test that we can get the original source content with relative source paths'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.testMapRelativeSources);
+ var sources = map.sources;
+
+ assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.throws(function () {
+ map.sourceContentFor("");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("/the/root/three.js");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("three.js");
+ }, Error);
+ };
+
+ exports['test that we can get the original source content for the sources on an indexed source map'] = function (assert, util) {
+ var map = new SourceMapConsumer(util.indexedTestMap);
+ var sources = map.sources;
+
+ assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
+ assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };');
+ assert.throws(function () {
+ map.sourceContentFor("");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("/the/root/three.js");
+ }, Error);
+ assert.throws(function () {
+ map.sourceContentFor("three.js");
+ }, Error);
+ };
+
+
+ exports['test sourceRoot + generatedPositionFor'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'foo/bar',
+ file: 'baz.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bang.coffee'
+ });
+ map.addMapping({
+ original: { line: 5, column: 5 },
+ generated: { line: 6, column: 6 },
+ source: 'bang.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ // Should handle without sourceRoot.
+ var pos = map.generatedPositionFor({
+ line: 1,
+ column: 1,
+ source: 'bang.coffee'
+ });
+
+ assert.equal(pos.line, 2);
+ assert.equal(pos.column, 2);
+
+ // Should handle with sourceRoot.
+ var pos = map.generatedPositionFor({
+ line: 1,
+ column: 1,
+ source: 'foo/bar/bang.coffee'
+ });
+
+ assert.equal(pos.line, 2);
+ assert.equal(pos.column, 2);
+ };
+
+ exports['test allGeneratedPositionsFor'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bar.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 1 },
+ generated: { line: 3, column: 2 },
+ source: 'bar.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 2 },
+ generated: { line: 3, column: 3 },
+ source: 'bar.coffee'
+ });
+ map.addMapping({
+ original: { line: 3, column: 1 },
+ generated: { line: 4, column: 2 },
+ source: 'bar.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 2,
+ source: 'bar.coffee'
+ });
+
+ assert.equal(mappings.length, 2);
+ assert.equal(mappings[0].line, 3);
+ assert.equal(mappings[0].column, 2);
+ assert.equal(mappings[1].line, 3);
+ assert.equal(mappings[1].column, 3);
+ };
+
+ exports['test allGeneratedPositionsFor for line with no mappings'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bar.coffee'
+ });
+ map.addMapping({
+ original: { line: 3, column: 1 },
+ generated: { line: 4, column: 2 },
+ source: 'bar.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 2,
+ source: 'bar.coffee'
+ });
+
+ assert.equal(mappings.length, 0);
+ };
+
+ exports['test allGeneratedPositionsFor source map with no mappings'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated.js'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 2,
+ source: 'bar.coffee'
+ });
+
+ assert.equal(mappings.length, 0);
+ };
+
+ exports['test computeColumnSpans'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 1, column: 1 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 1 },
+ generated: { line: 2, column: 1 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 2 },
+ generated: { line: 2, column: 10 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 2, column: 3 },
+ generated: { line: 2, column: 20 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 3, column: 1 },
+ generated: { line: 3, column: 1 },
+ source: 'foo.coffee'
+ });
+ map.addMapping({
+ original: { line: 3, column: 2 },
+ generated: { line: 3, column: 2 },
+ source: 'foo.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ map.computeColumnSpans();
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 1,
+ source: 'foo.coffee'
+ });
+
+ assert.equal(mappings.length, 1);
+ assert.equal(mappings[0].lastColumn, Infinity);
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 2,
+ source: 'foo.coffee'
+ });
+
+ assert.equal(mappings.length, 3);
+ assert.equal(mappings[0].lastColumn, 9);
+ assert.equal(mappings[1].lastColumn, 19);
+ assert.equal(mappings[2].lastColumn, Infinity);
+
+ var mappings = map.allGeneratedPositionsFor({
+ line: 3,
+ source: 'foo.coffee'
+ });
+
+ assert.equal(mappings.length, 2);
+ assert.equal(mappings[0].lastColumn, 1);
+ assert.equal(mappings[1].lastColumn, Infinity);
+ };
+
+ exports['test sourceRoot + originalPositionFor'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'foo/bar',
+ file: 'baz.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bang.coffee'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var pos = map.originalPositionFor({
+ line: 2,
+ column: 2,
+ });
+
+ // Should always have the prepended source root
+ assert.equal(pos.source, 'foo/bar/bang.coffee');
+ assert.equal(pos.line, 1);
+ assert.equal(pos.column, 1);
+ };
+
+ exports['test github issue #56'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'http://',
+ file: 'www.example.com/foo.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'www.example.com/original.js'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var sources = map.sources;
+ assert.equal(sources.length, 1);
+ assert.equal(sources[0], 'http://www.example.com/original.js');
+ };
+
+ exports['test github issue #43'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'http://example.com',
+ file: 'foo.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'http://cdn.example.com/original.js'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var sources = map.sources;
+ assert.equal(sources.length, 1,
+ 'Should only be one source.');
+ assert.equal(sources[0], 'http://cdn.example.com/original.js',
+ 'Should not be joined with the sourceRoot.');
+ };
+
+ exports['test absolute path, but same host sources'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ sourceRoot: 'http://example.com/foo/bar',
+ file: 'foo.js'
+ });
+ map.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: '/original.js'
+ });
+ map = new SourceMapConsumer(map.toString());
+
+ var sources = map.sources;
+ assert.equal(sources.length, 1,
+ 'Should only be one source.');
+ assert.equal(sources[0], 'http://example.com/original.js',
+ 'Source should be relative the host of the source root.');
+ };
+
+ exports['test indexed source map errors when sections are out of order by line'] = function(assert, util) {
+ // Make a deep copy of the indexedTestMap
+ var misorderedIndexedTestMap = JSON.parse(JSON.stringify(util.indexedTestMap));
+
+ misorderedIndexedTestMap.sections[0].offset = {
+ line: 2,
+ column: 0
+ };
+
+ assert.throws(function() {
+ new SourceMapConsumer(misorderedIndexedTestMap);
+ }, Error);
+ };
+
+ exports['test github issue #64'] = function (assert, util) {
+ var map = new SourceMapConsumer({
+ "version": 3,
+ "file": "foo.js",
+ "sourceRoot": "http://example.com/",
+ "sources": ["/a"],
+ "names": [],
+ "mappings": "AACA",
+ "sourcesContent": ["foo"]
+ });
+
+ assert.equal(map.sourceContentFor("a"), "foo");
+ assert.equal(map.sourceContentFor("/a"), "foo");
+ };
+
+ exports['test bug 885597'] = function (assert, util) {
+ var map = new SourceMapConsumer({
+ "version": 3,
+ "file": "foo.js",
+ "sourceRoot": "file:///Users/AlGore/Invented/The/Internet/",
+ "sources": ["/a"],
+ "names": [],
+ "mappings": "AACA",
+ "sourcesContent": ["foo"]
+ });
+
+ var s = map.sources[0];
+ assert.equal(map.sourceContentFor(s), "foo");
+ };
+
+ exports['test github issue #72, duplicate sources'] = function (assert, util) {
+ var map = new SourceMapConsumer({
+ "version": 3,
+ "file": "foo.js",
+ "sources": ["source1.js", "source1.js", "source3.js"],
+ "names": [],
+ "mappings": ";EAAC;;IAEE;;MEEE",
+ "sourceRoot": "http://example.com"
+ });
+
+ var pos = map.originalPositionFor({
+ line: 2,
+ column: 2
+ });
+ assert.equal(pos.source, 'http://example.com/source1.js');
+ assert.equal(pos.line, 1);
+ assert.equal(pos.column, 1);
+
+ var pos = map.originalPositionFor({
+ line: 4,
+ column: 4
+ });
+ assert.equal(pos.source, 'http://example.com/source1.js');
+ assert.equal(pos.line, 3);
+ assert.equal(pos.column, 3);
+
+ var pos = map.originalPositionFor({
+ line: 6,
+ column: 6
+ });
+ assert.equal(pos.source, 'http://example.com/source3.js');
+ assert.equal(pos.line, 5);
+ assert.equal(pos.column, 5);
+ };
+
+ exports['test github issue #72, duplicate names'] = function (assert, util) {
+ var map = new SourceMapConsumer({
+ "version": 3,
+ "file": "foo.js",
+ "sources": ["source.js"],
+ "names": ["name1", "name1", "name3"],
+ "mappings": ";EAACA;;IAEEA;;MAEEE",
+ "sourceRoot": "http://example.com"
+ });
+
+ var pos = map.originalPositionFor({
+ line: 2,
+ column: 2
+ });
+ assert.equal(pos.name, 'name1');
+ assert.equal(pos.line, 1);
+ assert.equal(pos.column, 1);
+
+ var pos = map.originalPositionFor({
+ line: 4,
+ column: 4
+ });
+ assert.equal(pos.name, 'name1');
+ assert.equal(pos.line, 3);
+ assert.equal(pos.column, 3);
+
+ var pos = map.originalPositionFor({
+ line: 6,
+ column: 6
+ });
+ assert.equal(pos.name, 'name3');
+ assert.equal(pos.line, 5);
+ assert.equal(pos.column, 5);
+ };
+
+ exports['test SourceMapConsumer.fromSourceMap'] = function (assert, util) {
+ var smg = new SourceMapGenerator({
+ sourceRoot: 'http://example.com/',
+ file: 'foo.js'
+ });
+ smg.addMapping({
+ original: { line: 1, column: 1 },
+ generated: { line: 2, column: 2 },
+ source: 'bar.js'
+ });
+ smg.addMapping({
+ original: { line: 2, column: 2 },
+ generated: { line: 4, column: 4 },
+ source: 'baz.js',
+ name: 'dirtMcGirt'
+ });
+ smg.setSourceContent('baz.js', 'baz.js content');
+
+ var smc = SourceMapConsumer.fromSourceMap(smg);
+ assert.equal(smc.file, 'foo.js');
+ assert.equal(smc.sourceRoot, 'http://example.com/');
+ assert.equal(smc.sources.length, 2);
+ assert.equal(smc.sources[0], 'http://example.com/bar.js');
+ assert.equal(smc.sources[1], 'http://example.com/baz.js');
+ assert.equal(smc.sourceContentFor('baz.js'), 'baz.js content');
+
+ var pos = smc.originalPositionFor({
+ line: 2,
+ column: 2
+ });
+ assert.equal(pos.line, 1);
+ assert.equal(pos.column, 1);
+ assert.equal(pos.source, 'http://example.com/bar.js');
+ assert.equal(pos.name, null);
+
+ pos = smc.generatedPositionFor({
+ line: 1,
+ column: 1,
+ source: 'http://example.com/bar.js'
+ });
+ assert.equal(pos.line, 2);
+ assert.equal(pos.column, 2);
+
+ pos = smc.originalPositionFor({
+ line: 4,
+ column: 4
+ });
+ assert.equal(pos.line, 2);
+ assert.equal(pos.column, 2);
+ assert.equal(pos.source, 'http://example.com/baz.js');
+ assert.equal(pos.name, 'dirtMcGirt');
+
+ pos = smc.generatedPositionFor({
+ line: 2,
+ column: 2,
+ source: 'http://example.com/baz.js'
+ });
+ assert.equal(pos.line, 4);
+ assert.equal(pos.column, 4);
+ };
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js
new file mode 100644
index 0000000..d748bb1
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js
@@ -0,0 +1,679 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
+ var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
+ var SourceNode = require('../../lib/source-map/source-node').SourceNode;
+ var util = require('./util');
+
+ exports['test some simple stuff'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'foo.js',
+ sourceRoot: '.'
+ });
+ assert.ok(true);
+
+ var map = new SourceMapGenerator().toJSON();
+ assert.ok(!('file' in map));
+ assert.ok(!('sourceRoot' in map));
+ };
+
+ exports['test JSON serialization'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'foo.js',
+ sourceRoot: '.'
+ });
+ assert.equal(map.toString(), JSON.stringify(map));
+ };
+
+ exports['test adding mappings (case 1)'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ assert.doesNotThrow(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 }
+ });
+ });
+ };
+
+ exports['test adding mappings (case 2)'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ assert.doesNotThrow(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ source: 'bar.js',
+ original: { line: 1, column: 1 }
+ });
+ });
+ };
+
+ exports['test adding mappings (case 3)'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ assert.doesNotThrow(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ source: 'bar.js',
+ original: { line: 1, column: 1 },
+ name: 'someToken'
+ });
+ });
+ };
+
+ exports['test adding mappings (invalid)'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ // Not enough info.
+ assert.throws(function () {
+ map.addMapping({});
+ });
+
+ // Original file position, but no source.
+ assert.throws(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 1, column: 1 }
+ });
+ });
+ };
+
+ exports['test adding mappings with skipValidation'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.',
+ skipValidation: true
+ });
+
+ // Not enough info, caught by `util.getArgs`
+ assert.throws(function () {
+ map.addMapping({});
+ });
+
+ // Original file position, but no source. Not checked.
+ assert.doesNotThrow(function () {
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 1, column: 1 }
+ });
+ });
+ };
+
+ exports['test that the correct mappings are being generated'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'min.js',
+ sourceRoot: '/the/root'
+ });
+
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 1, column: 1 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 5 },
+ original: { line: 1, column: 5 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 9 },
+ original: { line: 1, column: 11 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 18 },
+ original: { line: 1, column: 21 },
+ source: 'one.js',
+ name: 'bar'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 21 },
+ original: { line: 2, column: 3 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 28 },
+ original: { line: 2, column: 10 },
+ source: 'one.js',
+ name: 'baz'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 32 },
+ original: { line: 2, column: 14 },
+ source: 'one.js',
+ name: 'bar'
+ });
+
+ map.addMapping({
+ generated: { line: 2, column: 1 },
+ original: { line: 1, column: 1 },
+ source: 'two.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 5 },
+ original: { line: 1, column: 5 },
+ source: 'two.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 9 },
+ original: { line: 1, column: 11 },
+ source: 'two.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 18 },
+ original: { line: 1, column: 21 },
+ source: 'two.js',
+ name: 'n'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 21 },
+ original: { line: 2, column: 3 },
+ source: 'two.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 28 },
+ original: { line: 2, column: 10 },
+ source: 'two.js',
+ name: 'n'
+ });
+
+ map = JSON.parse(map.toString());
+
+ util.assertEqualMaps(assert, map, util.testMap);
+ };
+
+ exports['test that adding a mapping with an empty string name does not break generation'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'generated-foo.js',
+ sourceRoot: '.'
+ });
+
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ source: 'bar.js',
+ original: { line: 1, column: 1 },
+ name: ''
+ });
+
+ assert.doesNotThrow(function () {
+ JSON.parse(map.toString());
+ });
+ };
+
+ exports['test that source content can be set'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'min.js',
+ sourceRoot: '/the/root'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 1, column: 1 },
+ source: 'one.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 1 },
+ original: { line: 1, column: 1 },
+ source: 'two.js'
+ });
+ map.setSourceContent('one.js', 'one file content');
+
+ map = JSON.parse(map.toString());
+ assert.equal(map.sources[0], 'one.js');
+ assert.equal(map.sources[1], 'two.js');
+ assert.equal(map.sourcesContent[0], 'one file content');
+ assert.equal(map.sourcesContent[1], null);
+ };
+
+ exports['test .fromSourceMap'] = function (assert, util) {
+ var map = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(util.testMap));
+ util.assertEqualMaps(assert, map.toJSON(), util.testMap);
+ };
+
+ exports['test .fromSourceMap with sourcesContent'] = function (assert, util) {
+ var map = SourceMapGenerator.fromSourceMap(
+ new SourceMapConsumer(util.testMapWithSourcesContent));
+ util.assertEqualMaps(assert, map.toJSON(), util.testMapWithSourcesContent);
+ };
+
+ exports['test applySourceMap'] = function (assert, util) {
+ var node = new SourceNode(null, null, null, [
+ new SourceNode(2, 0, 'fileX', 'lineX2\n'),
+ 'genA1\n',
+ new SourceNode(2, 0, 'fileY', 'lineY2\n'),
+ 'genA2\n',
+ new SourceNode(1, 0, 'fileX', 'lineX1\n'),
+ 'genA3\n',
+ new SourceNode(1, 0, 'fileY', 'lineY1\n')
+ ]);
+ var mapStep1 = node.toStringWithSourceMap({
+ file: 'fileA'
+ }).map;
+ mapStep1.setSourceContent('fileX', 'lineX1\nlineX2\n');
+ mapStep1 = mapStep1.toJSON();
+
+ node = new SourceNode(null, null, null, [
+ 'gen1\n',
+ new SourceNode(1, 0, 'fileA', 'lineA1\n'),
+ new SourceNode(2, 0, 'fileA', 'lineA2\n'),
+ new SourceNode(3, 0, 'fileA', 'lineA3\n'),
+ new SourceNode(4, 0, 'fileA', 'lineA4\n'),
+ new SourceNode(1, 0, 'fileB', 'lineB1\n'),
+ new SourceNode(2, 0, 'fileB', 'lineB2\n'),
+ 'gen2\n'
+ ]);
+ var mapStep2 = node.toStringWithSourceMap({
+ file: 'fileGen'
+ }).map;
+ mapStep2.setSourceContent('fileB', 'lineB1\nlineB2\n');
+ mapStep2 = mapStep2.toJSON();
+
+ node = new SourceNode(null, null, null, [
+ 'gen1\n',
+ new SourceNode(2, 0, 'fileX', 'lineA1\n'),
+ new SourceNode(2, 0, 'fileA', 'lineA2\n'),
+ new SourceNode(2, 0, 'fileY', 'lineA3\n'),
+ new SourceNode(4, 0, 'fileA', 'lineA4\n'),
+ new SourceNode(1, 0, 'fileB', 'lineB1\n'),
+ new SourceNode(2, 0, 'fileB', 'lineB2\n'),
+ 'gen2\n'
+ ]);
+ var expectedMap = node.toStringWithSourceMap({
+ file: 'fileGen'
+ }).map;
+ expectedMap.setSourceContent('fileX', 'lineX1\nlineX2\n');
+ expectedMap.setSourceContent('fileB', 'lineB1\nlineB2\n');
+ expectedMap = expectedMap.toJSON();
+
+ // apply source map "mapStep1" to "mapStep2"
+ var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(mapStep2));
+ generator.applySourceMap(new SourceMapConsumer(mapStep1));
+ var actualMap = generator.toJSON();
+
+ util.assertEqualMaps(assert, actualMap, expectedMap);
+ };
+
+ exports['test applySourceMap throws when file is missing'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'test.js'
+ });
+ var map2 = new SourceMapGenerator();
+ assert.throws(function() {
+ map.applySourceMap(new SourceMapConsumer(map2.toJSON()));
+ });
+ };
+
+ exports['test the two additional parameters of applySourceMap'] = function (assert, util) {
+ // Assume the following directory structure:
+ //
+ // http://foo.org/
+ // bar.coffee
+ // app/
+ // coffee/
+ // foo.coffee
+ // temp/
+ // bundle.js
+ // temp_maps/
+ // bundle.js.map
+ // public/
+ // bundle.min.js
+ // bundle.min.js.map
+ //
+ // http://www.example.com/
+ // baz.coffee
+
+ var bundleMap = new SourceMapGenerator({
+ file: 'bundle.js'
+ });
+ bundleMap.addMapping({
+ generated: { line: 3, column: 3 },
+ original: { line: 2, column: 2 },
+ source: '../../coffee/foo.coffee'
+ });
+ bundleMap.setSourceContent('../../coffee/foo.coffee', 'foo coffee');
+ bundleMap.addMapping({
+ generated: { line: 13, column: 13 },
+ original: { line: 12, column: 12 },
+ source: '/bar.coffee'
+ });
+ bundleMap.setSourceContent('/bar.coffee', 'bar coffee');
+ bundleMap.addMapping({
+ generated: { line: 23, column: 23 },
+ original: { line: 22, column: 22 },
+ source: 'http://www.example.com/baz.coffee'
+ });
+ bundleMap.setSourceContent(
+ 'http://www.example.com/baz.coffee',
+ 'baz coffee'
+ );
+ bundleMap = new SourceMapConsumer(bundleMap.toJSON());
+
+ var minifiedMap = new SourceMapGenerator({
+ file: 'bundle.min.js',
+ sourceRoot: '..'
+ });
+ minifiedMap.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 3, column: 3 },
+ source: 'temp/bundle.js'
+ });
+ minifiedMap.addMapping({
+ generated: { line: 11, column: 11 },
+ original: { line: 13, column: 13 },
+ source: 'temp/bundle.js'
+ });
+ minifiedMap.addMapping({
+ generated: { line: 21, column: 21 },
+ original: { line: 23, column: 23 },
+ source: 'temp/bundle.js'
+ });
+ minifiedMap = new SourceMapConsumer(minifiedMap.toJSON());
+
+ var expectedMap = function (sources) {
+ var map = new SourceMapGenerator({
+ file: 'bundle.min.js',
+ sourceRoot: '..'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 2, column: 2 },
+ source: sources[0]
+ });
+ map.setSourceContent(sources[0], 'foo coffee');
+ map.addMapping({
+ generated: { line: 11, column: 11 },
+ original: { line: 12, column: 12 },
+ source: sources[1]
+ });
+ map.setSourceContent(sources[1], 'bar coffee');
+ map.addMapping({
+ generated: { line: 21, column: 21 },
+ original: { line: 22, column: 22 },
+ source: sources[2]
+ });
+ map.setSourceContent(sources[2], 'baz coffee');
+ return map.toJSON();
+ }
+
+ var actualMap = function (aSourceMapPath) {
+ var map = SourceMapGenerator.fromSourceMap(minifiedMap);
+ // Note that relying on `bundleMap.file` (which is simply 'bundle.js')
+ // instead of supplying the second parameter wouldn't work here.
+ map.applySourceMap(bundleMap, '../temp/bundle.js', aSourceMapPath);
+ return map.toJSON();
+ }
+
+ util.assertEqualMaps(assert, actualMap('../temp/temp_maps'), expectedMap([
+ 'coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap('/app/temp/temp_maps'), expectedMap([
+ '/app/coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap('http://foo.org/app/temp/temp_maps'), expectedMap([
+ 'http://foo.org/app/coffee/foo.coffee',
+ 'http://foo.org/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ // If the third parameter is omitted or set to the current working
+ // directory we get incorrect source paths:
+
+ util.assertEqualMaps(assert, actualMap(), expectedMap([
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap(''), expectedMap([
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap('.'), expectedMap([
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+
+ util.assertEqualMaps(assert, actualMap('./'), expectedMap([
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee'
+ ]));
+ };
+
+ exports['test applySourceMap name handling'] = function (assert, util) {
+ // Imagine some CoffeeScript code being compiled into JavaScript and then
+ // minified.
+
+ var assertName = function(coffeeName, jsName, expectedName) {
+ var minifiedMap = new SourceMapGenerator({
+ file: 'test.js.min'
+ });
+ minifiedMap.addMapping({
+ generated: { line: 1, column: 4 },
+ original: { line: 1, column: 4 },
+ source: 'test.js',
+ name: jsName
+ });
+
+ var coffeeMap = new SourceMapGenerator({
+ file: 'test.js'
+ });
+ coffeeMap.addMapping({
+ generated: { line: 1, column: 4 },
+ original: { line: 1, column: 0 },
+ source: 'test.coffee',
+ name: coffeeName
+ });
+
+ minifiedMap.applySourceMap(new SourceMapConsumer(coffeeMap.toJSON()));
+
+ new SourceMapConsumer(minifiedMap.toJSON()).eachMapping(function(mapping) {
+ assert.equal(mapping.name, expectedName);
+ });
+ };
+
+ // `foo = 1` -> `var foo = 1;` -> `var a=1`
+ // CoffeeScript doesn’t rename variables, so there’s no need for it to
+ // provide names in its source maps. Minifiers do rename variables and
+ // therefore do provide names in their source maps. So that name should be
+ // retained if the original map lacks names.
+ assertName(null, 'foo', 'foo');
+
+ // `foo = 1` -> `var coffee$foo = 1;` -> `var a=1`
+ // Imagine that CoffeeScript prefixed all variables with `coffee$`. Even
+ // though the minifier then also provides a name, the original name is
+ // what corresponds to the source.
+ assertName('foo', 'coffee$foo', 'foo');
+
+ // `foo = 1` -> `var coffee$foo = 1;` -> `var coffee$foo=1`
+ // Minifiers can turn off variable mangling. Then there’s no need to
+ // provide names in the source map, but the names from the original map are
+ // still needed.
+ assertName('foo', null, 'foo');
+
+ // `foo = 1` -> `var foo = 1;` -> `var foo=1`
+ // No renaming at all.
+ assertName(null, null, null);
+ };
+
+ exports['test sorting with duplicate generated mappings'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'test.js'
+ });
+ map.addMapping({
+ generated: { line: 3, column: 0 },
+ original: { line: 2, column: 0 },
+ source: 'a.js'
+ });
+ map.addMapping({
+ generated: { line: 2, column: 0 }
+ });
+ map.addMapping({
+ generated: { line: 2, column: 0 }
+ });
+ map.addMapping({
+ generated: { line: 1, column: 0 },
+ original: { line: 1, column: 0 },
+ source: 'a.js'
+ });
+
+ util.assertEqualMaps(assert, map.toJSON(), {
+ version: 3,
+ file: 'test.js',
+ sources: ['a.js'],
+ names: [],
+ mappings: 'AAAA;A;AACA'
+ });
+ };
+
+ exports['test ignore duplicate mappings.'] = function (assert, util) {
+ var init = { file: 'min.js', sourceRoot: '/the/root' };
+ var map1, map2;
+
+ // null original source location
+ var nullMapping1 = {
+ generated: { line: 1, column: 0 }
+ };
+ var nullMapping2 = {
+ generated: { line: 2, column: 2 }
+ };
+
+ map1 = new SourceMapGenerator(init);
+ map2 = new SourceMapGenerator(init);
+
+ map1.addMapping(nullMapping1);
+ map1.addMapping(nullMapping1);
+
+ map2.addMapping(nullMapping1);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ map1.addMapping(nullMapping2);
+ map1.addMapping(nullMapping1);
+
+ map2.addMapping(nullMapping2);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ // original source location
+ var srcMapping1 = {
+ generated: { line: 1, column: 0 },
+ original: { line: 11, column: 0 },
+ source: 'srcMapping1.js'
+ };
+ var srcMapping2 = {
+ generated: { line: 2, column: 2 },
+ original: { line: 11, column: 0 },
+ source: 'srcMapping2.js'
+ };
+
+ map1 = new SourceMapGenerator(init);
+ map2 = new SourceMapGenerator(init);
+
+ map1.addMapping(srcMapping1);
+ map1.addMapping(srcMapping1);
+
+ map2.addMapping(srcMapping1);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ map1.addMapping(srcMapping2);
+ map1.addMapping(srcMapping1);
+
+ map2.addMapping(srcMapping2);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ // full original source and name information
+ var fullMapping1 = {
+ generated: { line: 1, column: 0 },
+ original: { line: 11, column: 0 },
+ source: 'fullMapping1.js',
+ name: 'fullMapping1'
+ };
+ var fullMapping2 = {
+ generated: { line: 2, column: 2 },
+ original: { line: 11, column: 0 },
+ source: 'fullMapping2.js',
+ name: 'fullMapping2'
+ };
+
+ map1 = new SourceMapGenerator(init);
+ map2 = new SourceMapGenerator(init);
+
+ map1.addMapping(fullMapping1);
+ map1.addMapping(fullMapping1);
+
+ map2.addMapping(fullMapping1);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+
+ map1.addMapping(fullMapping2);
+ map1.addMapping(fullMapping1);
+
+ map2.addMapping(fullMapping2);
+
+ util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
+ };
+
+ exports['test github issue #72, check for duplicate names or sources'] = function (assert, util) {
+ var map = new SourceMapGenerator({
+ file: 'test.js'
+ });
+ map.addMapping({
+ generated: { line: 1, column: 1 },
+ original: { line: 2, column: 2 },
+ source: 'a.js',
+ name: 'foo'
+ });
+ map.addMapping({
+ generated: { line: 3, column: 3 },
+ original: { line: 4, column: 4 },
+ source: 'a.js',
+ name: 'foo'
+ });
+ util.assertEqualMaps(assert, map.toJSON(), {
+ version: 3,
+ file: 'test.js',
+ sources: ['a.js'],
+ names: ['foo'],
+ mappings: 'CACEA;;GAEEA'
+ });
+ };
+
+ exports['test setting sourcesContent to null when already null'] = function (assert, util) {
+ var smg = new SourceMapGenerator({ file: "foo.js" });
+ assert.doesNotThrow(function() {
+ smg.setSourceContent("bar.js", null);
+ });
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js
new file mode 100644
index 0000000..139af4e
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js
@@ -0,0 +1,612 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
+ var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
+ var SourceNode = require('../../lib/source-map/source-node').SourceNode;
+
+ function forEachNewline(fn) {
+ return function (assert, util) {
+ ['\n', '\r\n'].forEach(fn.bind(null, assert, util));
+ }
+ }
+
+ exports['test .add()'] = function (assert, util) {
+ var node = new SourceNode(null, null, null);
+
+ // Adding a string works.
+ node.add('function noop() {}');
+
+ // Adding another source node works.
+ node.add(new SourceNode(null, null, null));
+
+ // Adding an array works.
+ node.add(['function foo() {',
+ new SourceNode(null, null, null,
+ 'return 10;'),
+ '}']);
+
+ // Adding other stuff doesn't.
+ assert.throws(function () {
+ node.add({});
+ });
+ assert.throws(function () {
+ node.add(function () {});
+ });
+ };
+
+ exports['test .prepend()'] = function (assert, util) {
+ var node = new SourceNode(null, null, null);
+
+ // Prepending a string works.
+ node.prepend('function noop() {}');
+ assert.equal(node.children[0], 'function noop() {}');
+ assert.equal(node.children.length, 1);
+
+ // Prepending another source node works.
+ node.prepend(new SourceNode(null, null, null));
+ assert.equal(node.children[0], '');
+ assert.equal(node.children[1], 'function noop() {}');
+ assert.equal(node.children.length, 2);
+
+ // Prepending an array works.
+ node.prepend(['function foo() {',
+ new SourceNode(null, null, null,
+ 'return 10;'),
+ '}']);
+ assert.equal(node.children[0], 'function foo() {');
+ assert.equal(node.children[1], 'return 10;');
+ assert.equal(node.children[2], '}');
+ assert.equal(node.children[3], '');
+ assert.equal(node.children[4], 'function noop() {}');
+ assert.equal(node.children.length, 5);
+
+ // Prepending other stuff doesn't.
+ assert.throws(function () {
+ node.prepend({});
+ });
+ assert.throws(function () {
+ node.prepend(function () {});
+ });
+ };
+
+ exports['test .toString()'] = function (assert, util) {
+ assert.equal((new SourceNode(null, null, null,
+ ['function foo() {',
+ new SourceNode(null, null, null, 'return 10;'),
+ '}'])).toString(),
+ 'function foo() {return 10;}');
+ };
+
+ exports['test .join()'] = function (assert, util) {
+ assert.equal((new SourceNode(null, null, null,
+ ['a', 'b', 'c', 'd'])).join(', ').toString(),
+ 'a, b, c, d');
+ };
+
+ exports['test .walk()'] = function (assert, util) {
+ var node = new SourceNode(null, null, null,
+ ['(function () {\n',
+ ' ', new SourceNode(1, 0, 'a.js', ['someCall()']), ';\n',
+ ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n',
+ '}());']);
+ var expected = [
+ { str: '(function () {\n', source: null, line: null, column: null },
+ { str: ' ', source: null, line: null, column: null },
+ { str: 'someCall()', source: 'a.js', line: 1, column: 0 },
+ { str: ';\n', source: null, line: null, column: null },
+ { str: ' ', source: null, line: null, column: null },
+ { str: 'if (foo) bar()', source: 'b.js', line: 2, column: 0 },
+ { str: ';\n', source: null, line: null, column: null },
+ { str: '}());', source: null, line: null, column: null },
+ ];
+ var i = 0;
+ node.walk(function (chunk, loc) {
+ assert.equal(expected[i].str, chunk);
+ assert.equal(expected[i].source, loc.source);
+ assert.equal(expected[i].line, loc.line);
+ assert.equal(expected[i].column, loc.column);
+ i++;
+ });
+ };
+
+ exports['test .replaceRight'] = function (assert, util) {
+ var node;
+
+ // Not nested
+ node = new SourceNode(null, null, null, 'hello world');
+ node.replaceRight(/world/, 'universe');
+ assert.equal(node.toString(), 'hello universe');
+
+ // Nested
+ node = new SourceNode(null, null, null,
+ [new SourceNode(null, null, null, 'hey sexy mama, '),
+ new SourceNode(null, null, null, 'want to kill all humans?')]);
+ node.replaceRight(/kill all humans/, 'watch Futurama');
+ assert.equal(node.toString(), 'hey sexy mama, want to watch Futurama?');
+ };
+
+ exports['test .toStringWithSourceMap()'] = forEachNewline(function (assert, util, nl) {
+ var node = new SourceNode(null, null, null,
+ ['(function () {' + nl,
+ ' ',
+ new SourceNode(1, 0, 'a.js', 'someCall', 'originalCall'),
+ new SourceNode(1, 8, 'a.js', '()'),
+ ';' + nl,
+ ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';' + nl,
+ '}());']);
+ var result = node.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ assert.equal(result.code, [
+ '(function () {',
+ ' someCall();',
+ ' if (foo) bar();',
+ '}());'
+ ].join(nl));
+
+ var map = result.map;
+ var mapWithoutOptions = node.toStringWithSourceMap().map;
+
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ assert.ok(mapWithoutOptions instanceof SourceMapGenerator, 'mapWithoutOptions instanceof SourceMapGenerator');
+ assert.ok(!('file' in mapWithoutOptions));
+ mapWithoutOptions._file = 'foo.js';
+ util.assertEqualMaps(assert, map.toJSON(), mapWithoutOptions.toJSON());
+
+ map = new SourceMapConsumer(map.toString());
+
+ var actual;
+
+ actual = map.originalPositionFor({
+ line: 1,
+ column: 4
+ });
+ assert.equal(actual.source, null);
+ assert.equal(actual.line, null);
+ assert.equal(actual.column, null);
+
+ actual = map.originalPositionFor({
+ line: 2,
+ column: 2
+ });
+ assert.equal(actual.source, 'a.js');
+ assert.equal(actual.line, 1);
+ assert.equal(actual.column, 0);
+ assert.equal(actual.name, 'originalCall');
+
+ actual = map.originalPositionFor({
+ line: 3,
+ column: 2
+ });
+ assert.equal(actual.source, 'b.js');
+ assert.equal(actual.line, 2);
+ assert.equal(actual.column, 0);
+
+ actual = map.originalPositionFor({
+ line: 3,
+ column: 16
+ });
+ assert.equal(actual.source, null);
+ assert.equal(actual.line, null);
+ assert.equal(actual.column, null);
+
+ actual = map.originalPositionFor({
+ line: 4,
+ column: 2
+ });
+ assert.equal(actual.source, null);
+ assert.equal(actual.line, null);
+ assert.equal(actual.column, null);
+ });
+
+ exports['test .fromStringWithSourceMap()'] = forEachNewline(function (assert, util, nl) {
+ var testCode = util.testGeneratedCode.replace(/\n/g, nl);
+ var node = SourceNode.fromStringWithSourceMap(
+ testCode,
+ new SourceMapConsumer(util.testMap));
+
+ var result = node.toStringWithSourceMap({
+ file: 'min.js'
+ });
+ var map = result.map;
+ var code = result.code;
+
+ assert.equal(code, testCode);
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ map = map.toJSON();
+ assert.equal(map.version, util.testMap.version);
+ assert.equal(map.file, util.testMap.file);
+ assert.equal(map.mappings, util.testMap.mappings);
+ });
+
+ exports['test .fromStringWithSourceMap() empty map'] = forEachNewline(function (assert, util, nl) {
+ var node = SourceNode.fromStringWithSourceMap(
+ util.testGeneratedCode.replace(/\n/g, nl),
+ new SourceMapConsumer(util.emptyMap));
+ var result = node.toStringWithSourceMap({
+ file: 'min.js'
+ });
+ var map = result.map;
+ var code = result.code;
+
+ assert.equal(code, util.testGeneratedCode.replace(/\n/g, nl));
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ map = map.toJSON();
+ assert.equal(map.version, util.emptyMap.version);
+ assert.equal(map.file, util.emptyMap.file);
+ assert.equal(map.mappings.length, util.emptyMap.mappings.length);
+ assert.equal(map.mappings, util.emptyMap.mappings);
+ });
+
+ exports['test .fromStringWithSourceMap() complex version'] = forEachNewline(function (assert, util, nl) {
+ var input = new SourceNode(null, null, null, [
+ "(function() {" + nl,
+ " var Test = {};" + nl,
+ " ", new SourceNode(1, 0, "a.js", "Test.A = { value: 1234 };" + nl),
+ " ", new SourceNode(2, 0, "a.js", "Test.A.x = 'xyz';"), nl,
+ "}());" + nl,
+ "/* Generated Source */"]);
+ input = input.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ var node = SourceNode.fromStringWithSourceMap(
+ input.code,
+ new SourceMapConsumer(input.map.toString()));
+
+ var result = node.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+ var map = result.map;
+ var code = result.code;
+
+ assert.equal(code, input.code);
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ map = map.toJSON();
+ var inputMap = input.map.toJSON();
+ util.assertEqualMaps(assert, map, inputMap);
+ });
+
+ exports['test .fromStringWithSourceMap() third argument'] = function (assert, util) {
+ // Assume the following directory structure:
+ //
+ // http://foo.org/
+ // bar.coffee
+ // app/
+ // coffee/
+ // foo.coffee
+ // coffeeBundle.js # Made from {foo,bar,baz}.coffee
+ // maps/
+ // coffeeBundle.js.map
+ // js/
+ // foo.js
+ // public/
+ // app.js # Made from {foo,coffeeBundle}.js
+ // app.js.map
+ //
+ // http://www.example.com/
+ // baz.coffee
+
+ var coffeeBundle = new SourceNode(1, 0, 'foo.coffee', 'foo(coffee);\n');
+ coffeeBundle.setSourceContent('foo.coffee', 'foo coffee');
+ coffeeBundle.add(new SourceNode(2, 0, '/bar.coffee', 'bar(coffee);\n'));
+ coffeeBundle.add(new SourceNode(3, 0, 'http://www.example.com/baz.coffee', 'baz(coffee);'));
+ coffeeBundle = coffeeBundle.toStringWithSourceMap({
+ file: 'foo.js',
+ sourceRoot: '..'
+ });
+
+ var foo = new SourceNode(1, 0, 'foo.js', 'foo(js);');
+
+ var test = function(relativePath, expectedSources) {
+ var app = new SourceNode();
+ app.add(SourceNode.fromStringWithSourceMap(
+ coffeeBundle.code,
+ new SourceMapConsumer(coffeeBundle.map.toString()),
+ relativePath));
+ app.add(foo);
+ var i = 0;
+ app.walk(function (chunk, loc) {
+ assert.equal(loc.source, expectedSources[i]);
+ i++;
+ });
+ app.walkSourceContents(function (sourceFile, sourceContent) {
+ assert.equal(sourceFile, expectedSources[0]);
+ assert.equal(sourceContent, 'foo coffee');
+ })
+ };
+
+ test('../coffee/maps', [
+ '../coffee/foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+
+ // If the third parameter is omitted or set to the current working
+ // directory we get incorrect source paths:
+
+ test(undefined, [
+ '../foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+
+ test('', [
+ '../foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+
+ test('.', [
+ '../foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+
+ test('./', [
+ '../foo.coffee',
+ '/bar.coffee',
+ 'http://www.example.com/baz.coffee',
+ 'foo.js'
+ ]);
+ };
+
+ exports['test .toStringWithSourceMap() merging duplicate mappings'] = forEachNewline(function (assert, util, nl) {
+ var input = new SourceNode(null, null, null, [
+ new SourceNode(1, 0, "a.js", "(function"),
+ new SourceNode(1, 0, "a.js", "() {" + nl),
+ " ",
+ new SourceNode(1, 0, "a.js", "var Test = "),
+ new SourceNode(1, 0, "b.js", "{};" + nl),
+ new SourceNode(2, 0, "b.js", "Test"),
+ new SourceNode(2, 0, "b.js", ".A", "A"),
+ new SourceNode(2, 20, "b.js", " = { value: ", "A"),
+ "1234",
+ new SourceNode(2, 40, "b.js", " };" + nl, "A"),
+ "}());" + nl,
+ "/* Generated Source */"
+ ]);
+ input = input.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ assert.equal(input.code, [
+ "(function() {",
+ " var Test = {};",
+ "Test.A = { value: 1234 };",
+ "}());",
+ "/* Generated Source */"
+ ].join(nl))
+
+ var correctMap = new SourceMapGenerator({
+ file: 'foo.js'
+ });
+ correctMap.addMapping({
+ generated: { line: 1, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ // Here is no need for a empty mapping,
+ // because mappings ends at eol
+ correctMap.addMapping({
+ generated: { line: 2, column: 2 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 2, column: 13 },
+ source: 'b.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 0 },
+ source: 'b.js',
+ original: { line: 2, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 4 },
+ source: 'b.js',
+ name: 'A',
+ original: { line: 2, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 6 },
+ source: 'b.js',
+ name: 'A',
+ original: { line: 2, column: 20 }
+ });
+ // This empty mapping is required,
+ // because there is a hole in the middle of the line
+ correctMap.addMapping({
+ generated: { line: 3, column: 18 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 22 },
+ source: 'b.js',
+ name: 'A',
+ original: { line: 2, column: 40 }
+ });
+ // Here is no need for a empty mapping,
+ // because mappings ends at eol
+
+ var inputMap = input.map.toJSON();
+ correctMap = correctMap.toJSON();
+ util.assertEqualMaps(assert, inputMap, correctMap);
+ });
+
+ exports['test .toStringWithSourceMap() multi-line SourceNodes'] = forEachNewline(function (assert, util, nl) {
+ var input = new SourceNode(null, null, null, [
+ new SourceNode(1, 0, "a.js", "(function() {" + nl + "var nextLine = 1;" + nl + "anotherLine();" + nl),
+ new SourceNode(2, 2, "b.js", "Test.call(this, 123);" + nl),
+ new SourceNode(2, 2, "b.js", "this['stuff'] = 'v';" + nl),
+ new SourceNode(2, 2, "b.js", "anotherLine();" + nl),
+ "/*" + nl + "Generated" + nl + "Source" + nl + "*/" + nl,
+ new SourceNode(3, 4, "c.js", "anotherLine();" + nl),
+ "/*" + nl + "Generated" + nl + "Source" + nl + "*/"
+ ]);
+ input = input.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ assert.equal(input.code, [
+ "(function() {",
+ "var nextLine = 1;",
+ "anotherLine();",
+ "Test.call(this, 123);",
+ "this['stuff'] = 'v';",
+ "anotherLine();",
+ "/*",
+ "Generated",
+ "Source",
+ "*/",
+ "anotherLine();",
+ "/*",
+ "Generated",
+ "Source",
+ "*/"
+ ].join(nl));
+
+ var correctMap = new SourceMapGenerator({
+ file: 'foo.js'
+ });
+ correctMap.addMapping({
+ generated: { line: 1, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 2, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 4, column: 0 },
+ source: 'b.js',
+ original: { line: 2, column: 2 }
+ });
+ correctMap.addMapping({
+ generated: { line: 5, column: 0 },
+ source: 'b.js',
+ original: { line: 2, column: 2 }
+ });
+ correctMap.addMapping({
+ generated: { line: 6, column: 0 },
+ source: 'b.js',
+ original: { line: 2, column: 2 }
+ });
+ correctMap.addMapping({
+ generated: { line: 11, column: 0 },
+ source: 'c.js',
+ original: { line: 3, column: 4 }
+ });
+
+ var inputMap = input.map.toJSON();
+ correctMap = correctMap.toJSON();
+ util.assertEqualMaps(assert, inputMap, correctMap);
+ });
+
+ exports['test .toStringWithSourceMap() with empty string'] = function (assert, util) {
+ var node = new SourceNode(1, 0, 'empty.js', '');
+ var result = node.toStringWithSourceMap();
+ assert.equal(result.code, '');
+ };
+
+ exports['test .toStringWithSourceMap() with consecutive newlines'] = forEachNewline(function (assert, util, nl) {
+ var input = new SourceNode(null, null, null, [
+ "/***/" + nl + nl,
+ new SourceNode(1, 0, "a.js", "'use strict';" + nl),
+ new SourceNode(2, 0, "a.js", "a();"),
+ ]);
+ input = input.toStringWithSourceMap({
+ file: 'foo.js'
+ });
+
+ assert.equal(input.code, [
+ "/***/",
+ "",
+ "'use strict';",
+ "a();",
+ ].join(nl));
+
+ var correctMap = new SourceMapGenerator({
+ file: 'foo.js'
+ });
+ correctMap.addMapping({
+ generated: { line: 3, column: 0 },
+ source: 'a.js',
+ original: { line: 1, column: 0 }
+ });
+ correctMap.addMapping({
+ generated: { line: 4, column: 0 },
+ source: 'a.js',
+ original: { line: 2, column: 0 }
+ });
+
+ var inputMap = input.map.toJSON();
+ correctMap = correctMap.toJSON();
+ util.assertEqualMaps(assert, inputMap, correctMap);
+ });
+
+ exports['test setSourceContent with toStringWithSourceMap'] = function (assert, util) {
+ var aNode = new SourceNode(1, 1, 'a.js', 'a');
+ aNode.setSourceContent('a.js', 'someContent');
+ var node = new SourceNode(null, null, null,
+ ['(function () {\n',
+ ' ', aNode,
+ ' ', new SourceNode(1, 1, 'b.js', 'b'),
+ '}());']);
+ node.setSourceContent('b.js', 'otherContent');
+ var map = node.toStringWithSourceMap({
+ file: 'foo.js'
+ }).map;
+
+ assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
+ map = new SourceMapConsumer(map.toString());
+
+ assert.equal(map.sources.length, 2);
+ assert.equal(map.sources[0], 'a.js');
+ assert.equal(map.sources[1], 'b.js');
+ assert.equal(map.sourcesContent.length, 2);
+ assert.equal(map.sourcesContent[0], 'someContent');
+ assert.equal(map.sourcesContent[1], 'otherContent');
+ };
+
+ exports['test walkSourceContents'] = function (assert, util) {
+ var aNode = new SourceNode(1, 1, 'a.js', 'a');
+ aNode.setSourceContent('a.js', 'someContent');
+ var node = new SourceNode(null, null, null,
+ ['(function () {\n',
+ ' ', aNode,
+ ' ', new SourceNode(1, 1, 'b.js', 'b'),
+ '}());']);
+ node.setSourceContent('b.js', 'otherContent');
+ var results = [];
+ node.walkSourceContents(function (sourceFile, sourceContent) {
+ results.push([sourceFile, sourceContent]);
+ });
+ assert.equal(results.length, 2);
+ assert.equal(results[0][0], 'a.js');
+ assert.equal(results[0][1], 'someContent');
+ assert.equal(results[1][0], 'b.js');
+ assert.equal(results[1][1], 'otherContent');
+ };
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js
new file mode 100644
index 0000000..997d1a2
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js
@@ -0,0 +1,216 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var libUtil = require('../../lib/source-map/util');
+
+ exports['test urls'] = function (assert, util) {
+ var assertUrl = function (url) {
+ assert.equal(url, libUtil.urlGenerate(libUtil.urlParse(url)));
+ };
+ assertUrl('http://');
+ assertUrl('http://www.example.com');
+ assertUrl('http://user:pass@www.example.com');
+ assertUrl('http://www.example.com:80');
+ assertUrl('http://www.example.com/');
+ assertUrl('http://www.example.com/foo/bar');
+ assertUrl('http://www.example.com/foo/bar/');
+ assertUrl('http://user:pass@www.example.com:80/foo/bar/');
+
+ assertUrl('//');
+ assertUrl('//www.example.com');
+ assertUrl('file:///www.example.com');
+
+ assert.equal(libUtil.urlParse(''), null);
+ assert.equal(libUtil.urlParse('.'), null);
+ assert.equal(libUtil.urlParse('..'), null);
+ assert.equal(libUtil.urlParse('a'), null);
+ assert.equal(libUtil.urlParse('a/b'), null);
+ assert.equal(libUtil.urlParse('a//b'), null);
+ assert.equal(libUtil.urlParse('/a'), null);
+ assert.equal(libUtil.urlParse('data:foo,bar'), null);
+ };
+
+ exports['test normalize()'] = function (assert, util) {
+ assert.equal(libUtil.normalize('/..'), '/');
+ assert.equal(libUtil.normalize('/../'), '/');
+ assert.equal(libUtil.normalize('/../../../..'), '/');
+ assert.equal(libUtil.normalize('/../../../../a/b/c'), '/a/b/c');
+ assert.equal(libUtil.normalize('/a/b/c/../../../d/../../e'), '/e');
+
+ assert.equal(libUtil.normalize('..'), '..');
+ assert.equal(libUtil.normalize('../'), '../');
+ assert.equal(libUtil.normalize('../../a/'), '../../a/');
+ assert.equal(libUtil.normalize('a/..'), '.');
+ assert.equal(libUtil.normalize('a/../../..'), '../..');
+
+ assert.equal(libUtil.normalize('/.'), '/');
+ assert.equal(libUtil.normalize('/./'), '/');
+ assert.equal(libUtil.normalize('/./././.'), '/');
+ assert.equal(libUtil.normalize('/././././a/b/c'), '/a/b/c');
+ assert.equal(libUtil.normalize('/a/b/c/./././d/././e'), '/a/b/c/d/e');
+
+ assert.equal(libUtil.normalize(''), '.');
+ assert.equal(libUtil.normalize('.'), '.');
+ assert.equal(libUtil.normalize('./'), '.');
+ assert.equal(libUtil.normalize('././a'), 'a');
+ assert.equal(libUtil.normalize('a/./'), 'a/');
+ assert.equal(libUtil.normalize('a/././.'), 'a');
+
+ assert.equal(libUtil.normalize('/a/b//c////d/////'), '/a/b/c/d/');
+ assert.equal(libUtil.normalize('///a/b//c////d/////'), '///a/b/c/d/');
+ assert.equal(libUtil.normalize('a/b//c////d'), 'a/b/c/d');
+
+ assert.equal(libUtil.normalize('.///.././../a/b//./..'), '../../a')
+
+ assert.equal(libUtil.normalize('http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.normalize('http://www.example.com/'), 'http://www.example.com/');
+ assert.equal(libUtil.normalize('http://www.example.com/./..//a/b/c/.././d//'), 'http://www.example.com/a/b/d/');
+ };
+
+ exports['test join()'] = function (assert, util) {
+ assert.equal(libUtil.join('a', 'b'), 'a/b');
+ assert.equal(libUtil.join('a/', 'b'), 'a/b');
+ assert.equal(libUtil.join('a//', 'b'), 'a/b');
+ assert.equal(libUtil.join('a', 'b/'), 'a/b/');
+ assert.equal(libUtil.join('a', 'b//'), 'a/b/');
+ assert.equal(libUtil.join('a/', '/b'), '/b');
+ assert.equal(libUtil.join('a//', '//b'), '//b');
+
+ assert.equal(libUtil.join('a', '..'), '.');
+ assert.equal(libUtil.join('a', '../b'), 'b');
+ assert.equal(libUtil.join('a/b', '../c'), 'a/c');
+
+ assert.equal(libUtil.join('a', '.'), 'a');
+ assert.equal(libUtil.join('a', './b'), 'a/b');
+ assert.equal(libUtil.join('a/b', './c'), 'a/b/c');
+
+ assert.equal(libUtil.join('a', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('a', 'data:foo,bar'), 'data:foo,bar');
+
+
+ assert.equal(libUtil.join('', 'b'), 'b');
+ assert.equal(libUtil.join('.', 'b'), 'b');
+ assert.equal(libUtil.join('', 'b/'), 'b/');
+ assert.equal(libUtil.join('.', 'b/'), 'b/');
+ assert.equal(libUtil.join('', 'b//'), 'b/');
+ assert.equal(libUtil.join('.', 'b//'), 'b/');
+
+ assert.equal(libUtil.join('', '..'), '..');
+ assert.equal(libUtil.join('.', '..'), '..');
+ assert.equal(libUtil.join('', '../b'), '../b');
+ assert.equal(libUtil.join('.', '../b'), '../b');
+
+ assert.equal(libUtil.join('', '.'), '.');
+ assert.equal(libUtil.join('.', '.'), '.');
+ assert.equal(libUtil.join('', './b'), 'b');
+ assert.equal(libUtil.join('.', './b'), 'b');
+
+ assert.equal(libUtil.join('', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('.', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('', 'data:foo,bar'), 'data:foo,bar');
+ assert.equal(libUtil.join('.', 'data:foo,bar'), 'data:foo,bar');
+
+
+ assert.equal(libUtil.join('..', 'b'), '../b');
+ assert.equal(libUtil.join('..', 'b/'), '../b/');
+ assert.equal(libUtil.join('..', 'b//'), '../b/');
+
+ assert.equal(libUtil.join('..', '..'), '../..');
+ assert.equal(libUtil.join('..', '../b'), '../../b');
+
+ assert.equal(libUtil.join('..', '.'), '..');
+ assert.equal(libUtil.join('..', './b'), '../b');
+
+ assert.equal(libUtil.join('..', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('..', 'data:foo,bar'), 'data:foo,bar');
+
+
+ assert.equal(libUtil.join('a', ''), 'a');
+ assert.equal(libUtil.join('a', '.'), 'a');
+ assert.equal(libUtil.join('a/', ''), 'a');
+ assert.equal(libUtil.join('a/', '.'), 'a');
+ assert.equal(libUtil.join('a//', ''), 'a');
+ assert.equal(libUtil.join('a//', '.'), 'a');
+ assert.equal(libUtil.join('/a', ''), '/a');
+ assert.equal(libUtil.join('/a', '.'), '/a');
+ assert.equal(libUtil.join('', ''), '.');
+ assert.equal(libUtil.join('.', ''), '.');
+ assert.equal(libUtil.join('.', ''), '.');
+ assert.equal(libUtil.join('.', '.'), '.');
+ assert.equal(libUtil.join('..', ''), '..');
+ assert.equal(libUtil.join('..', '.'), '..');
+ assert.equal(libUtil.join('http://foo.org/a', ''), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a', '.'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a/', ''), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a/', '.'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a//', ''), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a//', '.'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org', ''), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org', '.'), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org/', ''), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org/', '.'), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org//', ''), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org//', '.'), 'http://foo.org/');
+ assert.equal(libUtil.join('//www.example.com', ''), '//www.example.com/');
+ assert.equal(libUtil.join('//www.example.com', '.'), '//www.example.com/');
+
+
+ assert.equal(libUtil.join('http://foo.org/a', 'b'), 'http://foo.org/a/b');
+ assert.equal(libUtil.join('http://foo.org/a/', 'b'), 'http://foo.org/a/b');
+ assert.equal(libUtil.join('http://foo.org/a//', 'b'), 'http://foo.org/a/b');
+ assert.equal(libUtil.join('http://foo.org/a', 'b/'), 'http://foo.org/a/b/');
+ assert.equal(libUtil.join('http://foo.org/a', 'b//'), 'http://foo.org/a/b/');
+ assert.equal(libUtil.join('http://foo.org/a/', '/b'), 'http://foo.org/b');
+ assert.equal(libUtil.join('http://foo.org/a//', '//b'), 'http://b');
+
+ assert.equal(libUtil.join('http://foo.org/a', '..'), 'http://foo.org/');
+ assert.equal(libUtil.join('http://foo.org/a', '../b'), 'http://foo.org/b');
+ assert.equal(libUtil.join('http://foo.org/a/b', '../c'), 'http://foo.org/a/c');
+
+ assert.equal(libUtil.join('http://foo.org/a', '.'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/a', './b'), 'http://foo.org/a/b');
+ assert.equal(libUtil.join('http://foo.org/a/b', './c'), 'http://foo.org/a/b/c');
+
+ assert.equal(libUtil.join('http://foo.org/a', 'http://www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('http://foo.org/a', 'data:foo,bar'), 'data:foo,bar');
+
+
+ assert.equal(libUtil.join('http://foo.org', 'a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/', 'a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org//', 'a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org', '/a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org/', '/a'), 'http://foo.org/a');
+ assert.equal(libUtil.join('http://foo.org//', '/a'), 'http://foo.org/a');
+
+
+ assert.equal(libUtil.join('http://', 'www.example.com'), 'http://www.example.com');
+ assert.equal(libUtil.join('file:///', 'www.example.com'), 'file:///www.example.com');
+ assert.equal(libUtil.join('http://', 'ftp://example.com'), 'ftp://example.com');
+
+ assert.equal(libUtil.join('http://www.example.com', '//foo.org/bar'), 'http://foo.org/bar');
+ assert.equal(libUtil.join('//www.example.com', '//foo.org/bar'), '//foo.org/bar');
+ };
+
+ // TODO Issue #128: Define and test this function properly.
+ exports['test relative()'] = function (assert, util) {
+ assert.equal(libUtil.relative('/the/root', '/the/root/one.js'), 'one.js');
+ assert.equal(libUtil.relative('/the/root', '/the/rootone.js'), '/the/rootone.js');
+
+ assert.equal(libUtil.relative('', '/the/root/one.js'), '/the/root/one.js');
+ assert.equal(libUtil.relative('.', '/the/root/one.js'), '/the/root/one.js');
+ assert.equal(libUtil.relative('', 'the/root/one.js'), 'the/root/one.js');
+ assert.equal(libUtil.relative('.', 'the/root/one.js'), 'the/root/one.js');
+
+ assert.equal(libUtil.relative('/', '/the/root/one.js'), 'the/root/one.js');
+ assert.equal(libUtil.relative('/', 'the/root/one.js'), 'the/root/one.js');
+ };
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/util.js b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/util.js
new file mode 100644
index 0000000..c1a7388
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/node_modules/source-map/test/source-map/util.js
@@ -0,0 +1,299 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+if (typeof define !== 'function') {
+ var define = require('amdefine')(module, require);
+}
+define(function (require, exports, module) {
+
+ var util = require('../../lib/source-map/util');
+
+ // This is a test mapping which maps functions from two different files
+ // (one.js and two.js) to a minified generated source.
+ //
+ // Here is one.js:
+ //
+ // ONE.foo = function (bar) {
+ // return baz(bar);
+ // };
+ //
+ // Here is two.js:
+ //
+ // TWO.inc = function (n) {
+ // return n + 1;
+ // };
+ //
+ // And here is the generated code (min.js):
+ //
+ // ONE.foo=function(a){return baz(a);};
+ // TWO.inc=function(a){return a+1;};
+ exports.testGeneratedCode = " ONE.foo=function(a){return baz(a);};\n"+
+ " TWO.inc=function(a){return a+1;};";
+ exports.testMap = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ sourceRoot: '/the/root',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ exports.testMapNoSourceRoot = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ exports.testMapEmptySourceRoot = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ sourceRoot: '',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ // This mapping is identical to above, but uses the indexed format instead.
+ exports.indexedTestMap = {
+ version: 3,
+ file: 'min.js',
+ sections: [
+ {
+ offset: {
+ line: 0,
+ column: 0
+ },
+ map: {
+ version: 3,
+ sources: [
+ "one.js"
+ ],
+ sourcesContent: [
+ ' ONE.foo = function (bar) {\n' +
+ ' return baz(bar);\n' +
+ ' };',
+ ],
+ names: [
+ "bar",
+ "baz"
+ ],
+ mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID",
+ file: "min.js",
+ sourceRoot: "/the/root"
+ }
+ },
+ {
+ offset: {
+ line: 1,
+ column: 0
+ },
+ map: {
+ version: 3,
+ sources: [
+ "two.js"
+ ],
+ sourcesContent: [
+ ' TWO.inc = function (n) {\n' +
+ ' return n + 1;\n' +
+ ' };'
+ ],
+ names: [
+ "n"
+ ],
+ mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOA",
+ file: "min.js",
+ sourceRoot: "/the/root"
+ }
+ }
+ ]
+ };
+ exports.indexedTestMapDifferentSourceRoots = {
+ version: 3,
+ file: 'min.js',
+ sections: [
+ {
+ offset: {
+ line: 0,
+ column: 0
+ },
+ map: {
+ version: 3,
+ sources: [
+ "one.js"
+ ],
+ sourcesContent: [
+ ' ONE.foo = function (bar) {\n' +
+ ' return baz(bar);\n' +
+ ' };',
+ ],
+ names: [
+ "bar",
+ "baz"
+ ],
+ mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID",
+ file: "min.js",
+ sourceRoot: "/the/root"
+ }
+ },
+ {
+ offset: {
+ line: 1,
+ column: 0
+ },
+ map: {
+ version: 3,
+ sources: [
+ "two.js"
+ ],
+ sourcesContent: [
+ ' TWO.inc = function (n) {\n' +
+ ' return n + 1;\n' +
+ ' };'
+ ],
+ names: [
+ "n"
+ ],
+ mappings: "CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOA",
+ file: "min.js",
+ sourceRoot: "/different/root"
+ }
+ }
+ ]
+ };
+ exports.testMapWithSourcesContent = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['one.js', 'two.js'],
+ sourcesContent: [
+ ' ONE.foo = function (bar) {\n' +
+ ' return baz(bar);\n' +
+ ' };',
+ ' TWO.inc = function (n) {\n' +
+ ' return n + 1;\n' +
+ ' };'
+ ],
+ sourceRoot: '/the/root',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ exports.testMapRelativeSources = {
+ version: 3,
+ file: 'min.js',
+ names: ['bar', 'baz', 'n'],
+ sources: ['./one.js', './two.js'],
+ sourcesContent: [
+ ' ONE.foo = function (bar) {\n' +
+ ' return baz(bar);\n' +
+ ' };',
+ ' TWO.inc = function (n) {\n' +
+ ' return n + 1;\n' +
+ ' };'
+ ],
+ sourceRoot: '/the/root',
+ mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+ };
+ exports.emptyMap = {
+ version: 3,
+ file: 'min.js',
+ names: [],
+ sources: [],
+ mappings: ''
+ };
+
+
+ function assertMapping(generatedLine, generatedColumn, originalSource,
+ originalLine, originalColumn, name, map, assert,
+ dontTestGenerated, dontTestOriginal) {
+ if (!dontTestOriginal) {
+ var origMapping = map.originalPositionFor({
+ line: generatedLine,
+ column: generatedColumn
+ });
+ assert.equal(origMapping.name, name,
+ 'Incorrect name, expected ' + JSON.stringify(name)
+ + ', got ' + JSON.stringify(origMapping.name));
+ assert.equal(origMapping.line, originalLine,
+ 'Incorrect line, expected ' + JSON.stringify(originalLine)
+ + ', got ' + JSON.stringify(origMapping.line));
+ assert.equal(origMapping.column, originalColumn,
+ 'Incorrect column, expected ' + JSON.stringify(originalColumn)
+ + ', got ' + JSON.stringify(origMapping.column));
+
+ var expectedSource;
+
+ if (originalSource && map.sourceRoot && originalSource.indexOf(map.sourceRoot) === 0) {
+ expectedSource = originalSource;
+ } else if (originalSource) {
+ expectedSource = map.sourceRoot
+ ? util.join(map.sourceRoot, originalSource)
+ : originalSource;
+ } else {
+ expectedSource = null;
+ }
+
+ assert.equal(origMapping.source, expectedSource,
+ 'Incorrect source, expected ' + JSON.stringify(expectedSource)
+ + ', got ' + JSON.stringify(origMapping.source));
+ }
+
+ if (!dontTestGenerated) {
+ var genMapping = map.generatedPositionFor({
+ source: originalSource,
+ line: originalLine,
+ column: originalColumn
+ });
+ assert.equal(genMapping.line, generatedLine,
+ 'Incorrect line, expected ' + JSON.stringify(generatedLine)
+ + ', got ' + JSON.stringify(genMapping.line));
+ assert.equal(genMapping.column, generatedColumn,
+ 'Incorrect column, expected ' + JSON.stringify(generatedColumn)
+ + ', got ' + JSON.stringify(genMapping.column));
+ }
+ }
+ exports.assertMapping = assertMapping;
+
+ function assertEqualMaps(assert, actualMap, expectedMap) {
+ assert.equal(actualMap.version, expectedMap.version, "version mismatch");
+ assert.equal(actualMap.file, expectedMap.file, "file mismatch");
+ assert.equal(actualMap.names.length,
+ expectedMap.names.length,
+ "names length mismatch: " +
+ actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
+ for (var i = 0; i < actualMap.names.length; i++) {
+ assert.equal(actualMap.names[i],
+ expectedMap.names[i],
+ "names[" + i + "] mismatch: " +
+ actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
+ }
+ assert.equal(actualMap.sources.length,
+ expectedMap.sources.length,
+ "sources length mismatch: " +
+ actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
+ for (var i = 0; i < actualMap.sources.length; i++) {
+ assert.equal(actualMap.sources[i],
+ expectedMap.sources[i],
+ "sources[" + i + "] length mismatch: " +
+ actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
+ }
+ assert.equal(actualMap.sourceRoot,
+ expectedMap.sourceRoot,
+ "sourceRoot mismatch: " +
+ actualMap.sourceRoot + " != " + expectedMap.sourceRoot);
+ assert.equal(actualMap.mappings, expectedMap.mappings,
+ "mappings mismatch:\nActual: " + actualMap.mappings + "\nExpected: " + expectedMap.mappings);
+ if (actualMap.sourcesContent) {
+ assert.equal(actualMap.sourcesContent.length,
+ expectedMap.sourcesContent.length,
+ "sourcesContent length mismatch");
+ for (var i = 0; i < actualMap.sourcesContent.length; i++) {
+ assert.equal(actualMap.sourcesContent[i],
+ expectedMap.sourcesContent[i],
+ "sourcesContent[" + i + "] mismatch");
+ }
+ }
+ }
+ exports.assertEqualMaps = assertEqualMaps;
+
+});
diff --git a/node_modules/csswring/node_modules/postcss/package.json b/node_modules/csswring/node_modules/postcss/package.json
new file mode 100644
index 0000000..3cbec1b
--- /dev/null
+++ b/node_modules/csswring/node_modules/postcss/package.json
@@ -0,0 +1,88 @@
+{
+ "name": "postcss",
+ "version": "4.0.6",
+ "description": "Tool for transforming CSS with JS plugins",
+ "keywords": [
+ "css",
+ "postproccessor",
+ "parser",
+ "source map",
+ "transform",
+ "manipulation",
+ "preprocess",
+ "transpiler"
+ ],
+ "author": {
+ "name": "Andrey Sitnik",
+ "email": "andrey@sitnik.ru"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/postcss/postcss.git"
+ },
+ "dependencies": {
+ "source-map": "~0.2.0",
+ "js-base64": "~2.1.7"
+ },
+ "devDependencies": {
+ "concat-with-sourcemaps": "1.0.0",
+ "gulp-bench-summary": "0.1.0",
+ "gulp-json-editor": "2.2.1",
+ "jshint-stylish": "1.0.0",
+ "gulp-jshint": "1.9.2",
+ "gonzales-pe": "3.0.0-26",
+ "browserify": "9.0.3",
+ "gulp-babel": "4.0.0",
+ "gulp-bench": "1.1.0",
+ "gulp-mocha": "2.0.0",
+ "node-sass": "2.0.1",
+ "gulp-util": "3.0.3",
+ "execSync": "1.0.2",
+ "fs-extra": "0.16.3",
+ "gonzales": "1.0.7",
+ "through2": "0.6.3",
+ "stylecow": "4.2.4",
+ "request": "2.53.0",
+ "cssnext": "1.0.1",
+ "rework": "1.0.1",
+ "mensch": "0.3.1",
+ "stylus": "0.50.0",
+ "mocha": "2.1.0",
+ "cssom": "0.3.0",
+ "gulp": "3.8.11",
+ "less": "2.4.0",
+ "chai": "2.1.0",
+ "babel": "4.4.6"
+ },
+ "scripts": {
+ "test": "gulp"
+ },
+ "main": "lib/postcss",
+ "bugs": {
+ "url": "https://github.com/postcss/postcss/issues"
+ },
+ "homepage": "https://github.com/postcss/postcss",
+ "_id": "postcss@4.0.6",
+ "_shasum": "1bd1e8a99f73efdb46d11bf5c206079e2d306538",
+ "_from": "postcss@~4.0.6",
+ "_npmVersion": "2.5.0",
+ "_nodeVersion": "1.3.0",
+ "_npmUser": {
+ "name": "ai",
+ "email": "andrey@sitnik.ru"
+ },
+ "maintainers": [
+ {
+ "name": "ai",
+ "email": "andrey@sitnik.ru"
+ }
+ ],
+ "dist": {
+ "shasum": "1bd1e8a99f73efdb46d11bf5c206079e2d306538",
+ "tarball": "http://registry.npmjs.org/postcss/-/postcss-4.0.6.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/postcss/-/postcss-4.0.6.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/package.json b/node_modules/csswring/package.json
new file mode 100644
index 0000000..767e9df
--- /dev/null
+++ b/node_modules/csswring/package.json
@@ -0,0 +1,80 @@
+{
+ "name": "csswring",
+ "description": "Minify CSS file with source maps. That's only.",
+ "version": "3.0.2",
+ "author": {
+ "name": "Kyo Nagashima",
+ "email": "hail2u@gmail.com",
+ "url": "https://kyonagashima.com/"
+ },
+ "bin": {
+ "csswring": "./bin/csswring"
+ },
+ "bugs": {
+ "url": "https://github.com/hail2u/node-csswring/issues"
+ },
+ "dependencies": {
+ "fs-extra": "^0.16.0",
+ "minimist": "^1.1.0",
+ "onecolor": "^2.4.0",
+ "postcss": "^4.0.0"
+ },
+ "devDependencies": {
+ "nodeunit": "^0.9.0"
+ },
+ "files": [
+ "README.md",
+ "bin",
+ "index.js",
+ "lib",
+ "package.json",
+ "tasks",
+ "test"
+ ],
+ "homepage": "https://github.com/hail2u/node-csswring",
+ "keywords": [
+ "css",
+ "minifier",
+ "minification",
+ "sourcemap",
+ "source",
+ "map",
+ "postcss",
+ "gruntplugin"
+ ],
+ "license": {
+ "type": "MIT",
+ "url": "http://hail2u.mit-license.org/2014"
+ },
+ "main": "index.js",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/hail2u/node-csswring.git"
+ },
+ "scripts": {
+ "test": "nodeunit test"
+ },
+ "gitHead": "28b79ead1ab24a2cbc3761b4e1bdb39624427d5f",
+ "_id": "csswring@3.0.2",
+ "_shasum": "9e47da856e8d61b794daf45ebba66dd937cb6a00",
+ "_from": "csswring@",
+ "_npmVersion": "2.6.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "hail2u",
+ "email": "hail2u@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "hail2u",
+ "email": "kyo@hail2u.net"
+ }
+ ],
+ "dist": {
+ "shasum": "9e47da856e8d61b794daf45ebba66dd937cb6a00",
+ "tarball": "http://registry.npmjs.org/csswring/-/csswring-3.0.2.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/csswring/-/csswring-3.0.2.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/node_modules/csswring/tasks/csswring.js b/node_modules/csswring/tasks/csswring.js
new file mode 100644
index 0000000..defd547
--- /dev/null
+++ b/node_modules/csswring/tasks/csswring.js
@@ -0,0 +1,42 @@
+'use strict';
+
+module.exports = function (grunt) {
+ var pkg = require('../package.json');
+
+ grunt.registerMultiTask(pkg.name, pkg.description, function () {
+ var csswring = require('../index');
+ var fs = require('fs-extra');
+
+ var options = this.options({});
+
+ this.files.forEach(function (file) {
+ if (file.src.length !== 1) {
+ grunt.fail.warn('This Grunt plugin does not support multiple source files.');
+ }
+
+ var src = file.src[0];
+ var dest = file.dest;
+
+ if (!fs.existsSync(src)) {
+ grunt.log.warn('Source file "' + src + '" not found.');
+
+ return;
+ }
+
+ if (options.map) {
+ options.from = src;
+ options.to = dest;
+ }
+
+ var processed = csswring.wring(fs.readFileSync(src, 'utf8'), options);
+ fs.outputFileSync(dest, processed.css);
+ grunt.log.writeln('File "' + dest + '" created.');
+
+ if (processed.map) {
+ var map = dest + '.map';
+ fs.outputFileSync(map, processed.map);
+ grunt.log.writeln('File "' + map + '" created.');
+ }
+ });
+ });
+};
diff --git a/node_modules/csswring/test/csswring_test.js b/node_modules/csswring/test/csswring_test.js
new file mode 100644
index 0000000..0cda128
--- /dev/null
+++ b/node_modules/csswring/test/csswring_test.js
@@ -0,0 +1,153 @@
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+var postcss = require('postcss');
+
+var csswring = require('../index');
+
+exports['Public API'] = function (test) {
+ var expected;
+ var input = '.foo{color:black}';
+ expected = postcss().process(input).css;
+
+ test.expect(4);
+
+ test.strictEqual(
+ csswring.wring(input).css,
+ expected
+ );
+
+ test.strictEqual(
+ csswring().wring(input).css,
+ expected
+ );
+
+ test.strictEqual(
+ postcss().use(csswring.postcss).process(input).css,
+ expected
+ );
+
+ test.strictEqual(
+ postcss().use(csswring().postcss).process(input).css,
+ expected
+ );
+
+ test.done();
+};
+
+exports['Option: PostCSS options'] = function (test) {
+ var expected;
+ var input = '.foo{color:black}';
+ var opts = {
+ from: 'from.css',
+ map: {
+ inline: false
+ }
+ };
+ var processed = csswring.wring(input, opts);
+ expected = postcss().process(input, opts);
+
+ test.expect(2);
+
+ test.strictEqual(
+ processed.css,
+ expected.css
+ );
+
+ test.deepEqual(
+ processed.map,
+ expected.map
+ );
+
+ test.done();
+};
+
+exports['Option: preserveHacks'] = function (test) {
+ var a;
+ var b = csswring();
+ var expected = '.hacks{*color:black;_background:white;font-size/**/:big}';
+ var input = '.hacks{*color:black;_background:white;font-size/**/:big}';
+ var opts = {
+ preserveHacks: true
+ };
+ a = csswring(opts);
+
+ test.expect(4);
+
+ test.notStrictEqual(
+ csswring.wring(input).css,
+ expected
+ );
+
+ test.strictEqual(
+ csswring(opts).wring(input).css,
+ expected
+ );
+
+ test.strictEqual(
+ csswring.wring(input, opts).css,
+ expected
+ );
+
+ test.notStrictEqual(
+ postcss().use(a.postcss).process(input).css,
+ postcss().use(b.postcss).process(input).css
+ );
+
+ test.done();
+};
+
+exports['Option: removeAllComments'] = function (test) {
+ var expected = '.foo{display:block}\n/*# sourceMappingURL=to.css.map */';
+ var input = '/*!comment*/.foo{display:block}\n/*# sourceMappingURL=to.css.map */';
+ var opts = {
+ map: {
+ inline: false
+ }
+ };
+
+ test.expect(2);
+
+ test.notStrictEqual(
+ csswring.wring(input, opts).css,
+ expected
+ );
+
+ test.strictEqual(
+ csswring({
+ removeAllComments: true
+ }).wring(input, opts).css,
+ expected
+ );
+
+ test.done();
+};
+
+exports['Real CSS'] = function (test) {
+ var testCases = fs.readdirSync(path.join(__dirname, 'fixtures'));
+
+ var loadExpected = function (file) {
+ file = path.join(__dirname, 'expected', file);
+
+ return fs.readFileSync(file, 'utf8').trim();
+ };
+
+ var loadInput = function (file) {
+ file = path.join(__dirname, 'fixtures', file);
+
+ return fs.readFileSync(file, 'utf8');
+ };
+
+ test.expect(testCases.length);
+
+ testCases.forEach(function (testCase) {
+ test.strictEqual(
+ csswring.wring(loadInput(testCase)).css,
+ loadExpected(testCase),
+ testCase
+ );
+ });
+
+ test.done();
+};
diff --git a/node_modules/csswring/test/expected/at-import-url.css b/node_modules/csswring/test/expected/at-import-url.css
new file mode 100644
index 0000000..ddffdbd
--- /dev/null
+++ b/node_modules/csswring/test/expected/at-import-url.css
@@ -0,0 +1 @@
+@import"foo.css";@import"bar.css";@import'baz.css';@import"qux.css";@import'quux.css';@import"corge.css"print,screen and (min-width:999px)
diff --git a/node_modules/csswring/test/expected/at-import.css b/node_modules/csswring/test/expected/at-import.css
new file mode 100644
index 0000000..dfc1569
--- /dev/null
+++ b/node_modules/csswring/test/expected/at-import.css
@@ -0,0 +1 @@
+@import"foo.css";.foo{display:block}.bar{display:block}
diff --git a/node_modules/csswring/test/expected/at-keyframes-name.css b/node_modules/csswring/test/expected/at-keyframes-name.css
new file mode 100644
index 0000000..d44c178
--- /dev/null
+++ b/node_modules/csswring/test/expected/at-keyframes-name.css
@@ -0,0 +1 @@
+@keyframes foo{from{top:0}to{top:100px}}
diff --git a/node_modules/csswring/test/expected/at-media-params.css b/node_modules/csswring/test/expected/at-media-params.css
new file mode 100644
index 0000000..0a2f1e1
--- /dev/null
+++ b/node_modules/csswring/test/expected/at-media-params.css
@@ -0,0 +1 @@
+@media(min-width:99px)and (max-width:999px){.at-media-params{display:auto}}
diff --git a/node_modules/csswring/test/expected/at-namespace-url.css b/node_modules/csswring/test/expected/at-namespace-url.css
new file mode 100644
index 0000000..bf0b931
--- /dev/null
+++ b/node_modules/csswring/test/expected/at-namespace-url.css
@@ -0,0 +1 @@
+@namespace"foo.css";@namespace"bar.css";@namespace'baz.css';@namespace"qux.css";@namespace'quux.css';@namespace corge"corge.css"
diff --git a/node_modules/csswring/test/expected/at-rule-aftername.css b/node_modules/csswring/test/expected/at-rule-aftername.css
new file mode 100644
index 0000000..04b3083
--- /dev/null
+++ b/node_modules/csswring/test/expected/at-rule-aftername.css
@@ -0,0 +1 @@
+@import"foo.css";@media screen{.bar{display:block}}@media(min-width:99px){.baz{display:block}}@font-face{font-family:Qux;src:url(qux.woff) format("woff")}
diff --git a/node_modules/csswring/test/expected/at-supports-condition.css b/node_modules/csswring/test/expected/at-supports-condition.css
new file mode 100644
index 0000000..82a740c
--- /dev/null
+++ b/node_modules/csswring/test/expected/at-supports-condition.css
@@ -0,0 +1 @@
+@supports(color:#fff) and (margin:0){.foo{display:block}}@supports(top:0) or (line-height:.9){.bar{display:block}}
diff --git a/node_modules/csswring/test/expected/calc.css b/node_modules/csswring/test/expected/calc.css
new file mode 100644
index 0000000..985c44f
--- /dev/null
+++ b/node_modules/csswring/test/expected/calc.css
@@ -0,0 +1 @@
+.foo{width:calc(100vw + 12px);min-width:calc(10em - 10px);max-width:calc((100vw + 10em/2)*12 - 10px)}
diff --git a/node_modules/csswring/test/expected/color.css b/node_modules/csswring/test/expected/color.css
new file mode 100644
index 0000000..30a84f6
--- /dev/null
+++ b/node_modules/csswring/test/expected/color.css
@@ -0,0 +1 @@
+.foo{border-top-color:#369;border-right-color:#844d2e;border-bottom-color:#a0e;border-left-color:red;border-color:khaki;background-image:linear-gradient(#fff,#000)}.bar{border-color:rgba(128,128,128,.5);color:rgba(128,128,128,.5);background-color:transparent}
diff --git a/node_modules/csswring/test/expected/comment.css b/node_modules/csswring/test/expected/comment.css
new file mode 100644
index 0000000..3ceee0e
--- /dev/null
+++ b/node_modules/csswring/test/expected/comment.css
@@ -0,0 +1,3 @@
+/*!
+ * This comment will *NOT* strip.
+ */.foo{display:block}
\ No newline at end of file
diff --git a/node_modules/csswring/test/expected/content.css b/node_modules/csswring/test/expected/content.css
new file mode 100644
index 0000000..5826646
--- /dev/null
+++ b/node_modules/csswring/test/expected/content.css
@@ -0,0 +1 @@
+.foo{content:'0em 0.111 rgb(0, 0, 0)'}
diff --git a/node_modules/csswring/test/expected/decimal-with-zeros.css b/node_modules/csswring/test/expected/decimal-with-zeros.css
new file mode 100644
index 0000000..f5d3d1b
--- /dev/null
+++ b/node_modules/csswring/test/expected/decimal-with-zeros.css
@@ -0,0 +1 @@
+.foo{line-height:.6;transform:rotate(-.9deg)}
diff --git a/node_modules/csswring/test/expected/duplicate-decl.css b/node_modules/csswring/test/expected/duplicate-decl.css
new file mode 100644
index 0000000..956de37
--- /dev/null
+++ b/node_modules/csswring/test/expected/duplicate-decl.css
@@ -0,0 +1 @@
+.duplicate-decl{color:white;color:black}
diff --git a/node_modules/csswring/test/expected/duplicate-selector.css b/node_modules/csswring/test/expected/duplicate-selector.css
new file mode 100644
index 0000000..4e9531e
--- /dev/null
+++ b/node_modules/csswring/test/expected/duplicate-selector.css
@@ -0,0 +1 @@
+.foo{display:block}
diff --git a/node_modules/csswring/test/expected/empty-at-rule-block.css b/node_modules/csswring/test/expected/empty-at-rule-block.css
new file mode 100644
index 0000000..4e86e7b
--- /dev/null
+++ b/node_modules/csswring/test/expected/empty-at-rule-block.css
@@ -0,0 +1 @@
+.foo{display:block}@keyframes baz{/*! not empty */}
diff --git a/node_modules/csswring/test/expected/empty-ruleset.css b/node_modules/csswring/test/expected/empty-ruleset.css
new file mode 100644
index 0000000..aa5640b
--- /dev/null
+++ b/node_modules/csswring/test/expected/empty-ruleset.css
@@ -0,0 +1 @@
+.foo{display:block}.qux{/*! not empty */}
diff --git a/node_modules/csswring/test/expected/extra-semicolon.css b/node_modules/csswring/test/expected/extra-semicolon.css
new file mode 100644
index 0000000..bc0de85
--- /dev/null
+++ b/node_modules/csswring/test/expected/extra-semicolon.css
@@ -0,0 +1 @@
+.foo{color:red;background-color:cyan}
diff --git a/node_modules/csswring/test/expected/font-face.css b/node_modules/csswring/test/expected/font-face.css
new file mode 100644
index 0000000..4218c66
--- /dev/null
+++ b/node_modules/csswring/test/expected/font-face.css
@@ -0,0 +1 @@
+@font-face{font-family:Foo;src:url(foo.woff) format("woff")}@font-face{font-family:Bar;src:url(bar.woff) format("woff")}
diff --git a/node_modules/csswring/test/expected/font-family.css b/node_modules/csswring/test/expected/font-family.css
new file mode 100644
index 0000000..ffa5345
--- /dev/null
+++ b/node_modules/csswring/test/expected/font-family.css
@@ -0,0 +1 @@
+.foo{font-family:Hoefler Text,Constantia,Georgia,serif}.bar{font-family:"0font","--font","-0font",serif}.baz{font-family:Glyphicons Halflings,serif}
diff --git a/node_modules/csswring/test/expected/font-weight.css b/node_modules/csswring/test/expected/font-weight.css
new file mode 100644
index 0000000..189624d
--- /dev/null
+++ b/node_modules/csswring/test/expected/font-weight.css
@@ -0,0 +1 @@
+.foo{font-weight:400}.bar{font-weight:700}
diff --git a/node_modules/csswring/test/expected/invalid-at-rule.css b/node_modules/csswring/test/expected/invalid-at-rule.css
new file mode 100644
index 0000000..ce3e9df
--- /dev/null
+++ b/node_modules/csswring/test/expected/invalid-at-rule.css
@@ -0,0 +1 @@
+/*! Special comment */@charset "UTF-8";@import"foo.css";.bar{display:block}.qux{display:block}
diff --git a/node_modules/csswring/test/expected/invalid-keyframe.css b/node_modules/csswring/test/expected/invalid-keyframe.css
new file mode 100644
index 0000000..c1e5f94
--- /dev/null
+++ b/node_modules/csswring/test/expected/invalid-keyframe.css
@@ -0,0 +1 @@
+@keyframes foo{from{top:0}50%,to{top:100px}25%,75%{top:50px}}
diff --git a/node_modules/csswring/test/expected/issue11.css b/node_modules/csswring/test/expected/issue11.css
new file mode 100644
index 0000000..81d9397
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue11.css
@@ -0,0 +1 @@
+.issue11{transition:0s;transition:0ms}
diff --git a/node_modules/csswring/test/expected/issue13.css b/node_modules/csswring/test/expected/issue13.css
new file mode 100644
index 0000000..6602be9
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue13.css
@@ -0,0 +1 @@
+.foo{background-image:url(1.png),url(2.png),linear-gradient(to bottom,#000 0,#fff 100%)}@font-face{font-family:f;src:url(f.eot#a) format("embedded-opentype"),url(f.woff) format("woff"),url(f.ttf) format("truetype"),url(f.svg#b) format("svg")}
diff --git a/node_modules/csswring/test/expected/issue17.css b/node_modules/csswring/test/expected/issue17.css
new file mode 100644
index 0000000..ee77e4c
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue17.css
@@ -0,0 +1 @@
+.foo .bar .baz{display:auto}
diff --git a/node_modules/csswring/test/expected/issue19.css b/node_modules/csswring/test/expected/issue19.css
new file mode 100644
index 0000000..4bd8b2a
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue19.css
@@ -0,0 +1 @@
+@media(min-width:99px){.issue19,#issue19{display:auto}}
diff --git a/node_modules/csswring/test/expected/issue3.css b/node_modules/csswring/test/expected/issue3.css
new file mode 100644
index 0000000..c6e1808
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue3.css
@@ -0,0 +1 @@
+.issue3{border:1px solid #666}
diff --git a/node_modules/csswring/test/expected/issue30.css b/node_modules/csswring/test/expected/issue30.css
new file mode 100644
index 0000000..cc13843
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue30.css
@@ -0,0 +1 @@
+.foo{background-image:url("data:image/svg+xml, ")}.bar{background-image:url('data:image/svg+xml, ')}
diff --git a/node_modules/csswring/test/expected/issue34.css b/node_modules/csswring/test/expected/issue34.css
new file mode 100644
index 0000000..428b0cd
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue34.css
@@ -0,0 +1 @@
+.foo{background-image:linear-gradient(green 0,green 100%)}
diff --git a/node_modules/csswring/test/expected/issue36.css b/node_modules/csswring/test/expected/issue36.css
new file mode 100644
index 0000000..e1b6b76
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue36.css
@@ -0,0 +1 @@
+@font-face{font-family:Foo;src:url(foo.woff) format("woff")}
diff --git a/node_modules/csswring/test/expected/issue37.css b/node_modules/csswring/test/expected/issue37.css
new file mode 100644
index 0000000..1a07d88
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue37.css
@@ -0,0 +1 @@
+.foo[att=foo],.bar[att=bar],.baz[att="baz?"],.qux[att="q u x"]{display:block}
diff --git a/node_modules/csswring/test/expected/issue40.css b/node_modules/csswring/test/expected/issue40.css
new file mode 100644
index 0000000..3f66120
--- /dev/null
+++ b/node_modules/csswring/test/expected/issue40.css
@@ -0,0 +1 @@
+.foo{font-family:"ヒラギノ角ゴ Pro W3",serif}.bar[att="ほげ"]{display:block}
diff --git a/node_modules/csswring/test/expected/multiple-values.css b/node_modules/csswring/test/expected/multiple-values.css
new file mode 100644
index 0000000..f387588
--- /dev/null
+++ b/node_modules/csswring/test/expected/multiple-values.css
@@ -0,0 +1 @@
+.foo{margin:1px 2px 3px;padding:1px 2px;border-color:#000 #fff;border-radius:1px;border-spacing:1px;border-style:solid double solid inset;border-width:1px;background-position:0 0;-webkit-transform-origin:0 0}
diff --git a/node_modules/csswring/test/expected/number-leading-zeros.css b/node_modules/csswring/test/expected/number-leading-zeros.css
new file mode 100644
index 0000000..50b5fc8
--- /dev/null
+++ b/node_modules/csswring/test/expected/number-leading-zeros.css
@@ -0,0 +1 @@
+.foo{top:10.7px}
diff --git a/node_modules/csswring/test/expected/ruleset-without-selector.css b/node_modules/csswring/test/expected/ruleset-without-selector.css
new file mode 100644
index 0000000..4e9531e
--- /dev/null
+++ b/node_modules/csswring/test/expected/ruleset-without-selector.css
@@ -0,0 +1 @@
+.foo{display:block}
diff --git a/node_modules/csswring/test/expected/selector-att.css b/node_modules/csswring/test/expected/selector-att.css
new file mode 100644
index 0000000..76d59ca
--- /dev/null
+++ b/node_modules/csswring/test/expected/selector-att.css
@@ -0,0 +1 @@
+[foo],[bar=bar],[baz*=baz],[qux~='qu]x'],[quux|="qu\]ux"],[corge=corge][grault]{display:block}
diff --git a/node_modules/csswring/test/expected/selector-combinator.css b/node_modules/csswring/test/expected/selector-combinator.css
new file mode 100644
index 0000000..48b52c5
--- /dev/null
+++ b/node_modules/csswring/test/expected/selector-combinator.css
@@ -0,0 +1 @@
+.foo>.bar{display:block}.foo+.baz{display:block}.foo~.qux{display:block}.foo .\{display:block}
diff --git a/node_modules/csswring/test/expected/selector-function.css b/node_modules/csswring/test/expected/selector-function.css
new file mode 100644
index 0000000..1460895
--- /dev/null
+++ b/node_modules/csswring/test/expected/selector-function.css
@@ -0,0 +1 @@
+.foo:lang(ja-JP),.bar:nth-child(2n+1),.baz:nth-last-child(-1n-1),.qux:nth-of-type(odd),.quux:not(bar),.corge:not([class^="corge corge-"]){display:block}
diff --git a/node_modules/csswring/test/expected/url.css b/node_modules/csswring/test/expected/url.css
new file mode 100644
index 0000000..b22a9aa
--- /dev/null
+++ b/node_modules/csswring/test/expected/url.css
@@ -0,0 +1 @@
+.foo{list-style:circle url(foo.png);background-image:url(foo.png);background:url(foo.png) #eee no-repeat fixed;cursor:url("open(parens.cur"),auto;border-image:url("escaped-close\)parens.png") 30 30 repeat}
diff --git a/node_modules/csswring/test/expected/white-space.css b/node_modules/csswring/test/expected/white-space.css
new file mode 100644
index 0000000..ff91584
--- /dev/null
+++ b/node_modules/csswring/test/expected/white-space.css
@@ -0,0 +1 @@
+.foo,.bar,.baz{display:block}@media screen and (min-width:99px){.bar{display:block!important;background-image:url(bar.png)}}
diff --git a/node_modules/csswring/test/expected/zero-value-unit.css b/node_modules/csswring/test/expected/zero-value-unit.css
new file mode 100644
index 0000000..f9d4e40
--- /dev/null
+++ b/node_modules/csswring/test/expected/zero-value-unit.css
@@ -0,0 +1 @@
+.foo{border:0 solid red}
diff --git a/node_modules/csswring/test/fixtures/at-import-url.css b/node_modules/csswring/test/fixtures/at-import-url.css
new file mode 100644
index 0000000..122600f
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/at-import-url.css
@@ -0,0 +1,7 @@
+@import url(foo.css);
+@import url("bar.css");
+@import url('baz.css');
+@import "qux.css";
+@import 'quux.css';
+@import url("corge.css") print,
+ screen and ( min-width: 999px ) ;
diff --git a/node_modules/csswring/test/fixtures/at-import.css b/node_modules/csswring/test/fixtures/at-import.css
new file mode 100644
index 0000000..8afe4e9
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/at-import.css
@@ -0,0 +1,11 @@
+@import "foo.css";
+
+.foo {
+ display: block;
+}
+
+@import "bar.css";
+
+.bar {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/at-keyframes-name.css b/node_modules/csswring/test/fixtures/at-keyframes-name.css
new file mode 100644
index 0000000..a9caf9f
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/at-keyframes-name.css
@@ -0,0 +1,9 @@
+@keyframes "foo" {
+ from {
+ top: 0px;
+ }
+
+ to {
+ top: 100px;
+ }
+}
diff --git a/node_modules/csswring/test/fixtures/at-media-params.css b/node_modules/csswring/test/fixtures/at-media-params.css
new file mode 100644
index 0000000..15aa2b1
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/at-media-params.css
@@ -0,0 +1,6 @@
+@media /* foo */ ( min-width: 99px ) and
+( max-width: 999px ) {
+ .at-media-params {
+ display: auto;
+ }
+}
\ No newline at end of file
diff --git a/node_modules/csswring/test/fixtures/at-namespace-url.css b/node_modules/csswring/test/fixtures/at-namespace-url.css
new file mode 100644
index 0000000..6630c2b
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/at-namespace-url.css
@@ -0,0 +1,6 @@
+@namespace url(foo.css);
+@namespace url("bar.css");
+@namespace url('baz.css');
+@namespace "qux.css";
+@namespace 'quux.css';
+@namespace corge url("corge.css");
diff --git a/node_modules/csswring/test/fixtures/at-rule-aftername.css b/node_modules/csswring/test/fixtures/at-rule-aftername.css
new file mode 100644
index 0000000..9884d11
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/at-rule-aftername.css
@@ -0,0 +1,20 @@
+@import "foo.css";
+
+@media screen {
+ .bar {
+ display: block;
+ }
+}
+
+@media
+ (min-width: 99px) {
+ .baz {
+ display: block;
+ }
+}
+
+@font-face
+{
+ font-family: "Qux";
+ src: url("qux.woff") format("woff");
+}
diff --git a/node_modules/csswring/test/fixtures/at-supports-condition.css b/node_modules/csswring/test/fixtures/at-supports-condition.css
new file mode 100644
index 0000000..07f7a07
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/at-supports-condition.css
@@ -0,0 +1,11 @@
+@supports (color: rgb(255, 255, 255)) and (margin: 0 0 0 0) {
+ .foo {
+ display: block;
+ }
+}
+
+@supports (top: 0px) or (line-height: 0.9) {
+ .bar {
+ display: block;
+ }
+}
diff --git a/node_modules/csswring/test/fixtures/calc.css b/node_modules/csswring/test/fixtures/calc.css
new file mode 100644
index 0000000..6cc3696
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/calc.css
@@ -0,0 +1,5 @@
+.foo {
+ width: calc( 100vw + 12px);
+ min-width: calc(10em - 10px );
+ max-width: calc( (100vw + 10em / 2) * 12 - 10px );
+}
diff --git a/node_modules/csswring/test/fixtures/color.css b/node_modules/csswring/test/fixtures/color.css
new file mode 100644
index 0000000..0bfef36
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/color.css
@@ -0,0 +1,14 @@
+.foo {
+ border-top-color: rGb(51, 102, 153);
+ border-right-color: hsL(22, 48.245823%, 34.8592227%);
+ border-bottom-color: #aa00EE;
+ border-left-color: rgb(255, 0, 0);
+ border-color: #f0e68c;
+ background-image: linear-gradient(rgb(255, 255, 255),#000000);
+}
+
+.bar {
+ border-color: hslA(0, 0%, 50.2%, 0.5);
+ color: rgba(128, 128, 128, 0.5);
+ background-color: rgba(0, 0, 0, 0);
+}
diff --git a/node_modules/csswring/test/fixtures/comment.css b/node_modules/csswring/test/fixtures/comment.css
new file mode 100644
index 0000000..f969033
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/comment.css
@@ -0,0 +1,11 @@
+/*
+ * This comment will strip!
+ */
+
+/*!
+ * This comment will *NOT* strip.
+ */
+
+.foo {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/content.css b/node_modules/csswring/test/fixtures/content.css
new file mode 100644
index 0000000..3b98acb
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/content.css
@@ -0,0 +1,3 @@
+.foo {
+ content: '0em 0.111 rgb(0, 0, 0)';
+}
diff --git a/node_modules/csswring/test/fixtures/decimal-with-zeros.css b/node_modules/csswring/test/fixtures/decimal-with-zeros.css
new file mode 100644
index 0000000..1c21a8a
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/decimal-with-zeros.css
@@ -0,0 +1,4 @@
+.foo {
+ line-height: 0.60;
+ transform: rotate(-0.90deg);
+}
diff --git a/node_modules/csswring/test/fixtures/duplicate-decl.css b/node_modules/csswring/test/fixtures/duplicate-decl.css
new file mode 100644
index 0000000..9ecd41e
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/duplicate-decl.css
@@ -0,0 +1,5 @@
+.duplicate-decl {
+ color: black;
+ color: white;
+ color: black;
+}
diff --git a/node_modules/csswring/test/fixtures/duplicate-selector.css b/node_modules/csswring/test/fixtures/duplicate-selector.css
new file mode 100644
index 0000000..f40d1e9
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/duplicate-selector.css
@@ -0,0 +1,4 @@
+.foo,
+.foo {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/empty-at-rule-block.css b/node_modules/csswring/test/fixtures/empty-at-rule-block.css
new file mode 100644
index 0000000..1ef9bd0
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/empty-at-rule-block.css
@@ -0,0 +1,22 @@
+.foo {
+ display: block;
+}
+
+@media (min-width: 99px) {
+}
+
+@font-face {
+ font-style: normal;
+}
+
+@supports (margin: 0) {
+ .bar {}
+}
+
+@page {
+ /* empty */
+}
+
+@keyframes baz {
+ /*! not empty */
+}
diff --git a/node_modules/csswring/test/fixtures/empty-ruleset.css b/node_modules/csswring/test/fixtures/empty-ruleset.css
new file mode 100644
index 0000000..d53a55f
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/empty-ruleset.css
@@ -0,0 +1,15 @@
+.foo {
+ display: block;
+}
+
+.bar {
+ ;
+}
+
+.baz {
+ /* empty */
+}
+
+.qux {
+ /*! not empty */
+}
diff --git a/node_modules/csswring/test/fixtures/extra-semicolon.css b/node_modules/csswring/test/fixtures/extra-semicolon.css
new file mode 100644
index 0000000..ca41950
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/extra-semicolon.css
@@ -0,0 +1,4 @@
+.foo {
+ color: red;;;;;;;;
+ background-color: cyan;
+}
diff --git a/node_modules/csswring/test/fixtures/font-face.css b/node_modules/csswring/test/fixtures/font-face.css
new file mode 100644
index 0000000..dfd34b4
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/font-face.css
@@ -0,0 +1,17 @@
+@font-face {
+ font-family: "Foo";
+ src: url("foo.woff") format("woff");
+ font-style: normal;
+ font-weight: normal;
+ font-stretch: normal;
+ unicode-range: U+0-10FFFF;
+ font-variant: normal;
+ font-feature-settings: normal;
+}
+
+@font-face {
+ font-family: "Bar";
+ src: url("bar.woff") format("woff");
+ unicode-range: U+000000-10FFFF;
+ font-weight: 400;
+}
diff --git a/node_modules/csswring/test/fixtures/font-family.css b/node_modules/csswring/test/fixtures/font-family.css
new file mode 100644
index 0000000..580380c
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/font-family.css
@@ -0,0 +1,11 @@
+.foo {
+ font-family: "Hoefler Text", "Constantia", "Georgia", serif;
+}
+
+.bar {
+ font-family: "0font", "--font", "-0font", serif;
+}
+
+.baz {
+ font-family: 'Glyphicons Halflings', serif;
+}
diff --git a/node_modules/csswring/test/fixtures/font-weight.css b/node_modules/csswring/test/fixtures/font-weight.css
new file mode 100644
index 0000000..43e6a44
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/font-weight.css
@@ -0,0 +1,7 @@
+.foo {
+ font-weight: normal;
+}
+
+.bar {
+ font-weight: bold;
+}
diff --git a/node_modules/csswring/test/fixtures/invalid-at-rule.css b/node_modules/csswring/test/fixtures/invalid-at-rule.css
new file mode 100644
index 0000000..d185aeb
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/invalid-at-rule.css
@@ -0,0 +1,18 @@
+/*! Special comment */
+@charset "UTF-8";
+
+@charset "EUC-JP";
+
+@import "foo.css";
+
+.bar {
+ display: block;
+}
+
+@charset "Shift_JIS";
+
+@import "baz.css";
+
+.qux {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/invalid-keyframe.css b/node_modules/csswring/test/fixtures/invalid-keyframe.css
new file mode 100644
index 0000000..43a4999
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/invalid-keyframe.css
@@ -0,0 +1,21 @@
+@keyframes foo {
+ from {
+ top: 0px;
+ }
+
+ 50%, to {
+ top: 100px;
+ }
+
+ bar {
+ top: 999px;
+ }
+
+ 101% {
+ top: 101px;
+ }
+
+ 25%, 75%, -25% {
+ top: 50px;
+ }
+}
diff --git a/node_modules/csswring/test/fixtures/issue11.css b/node_modules/csswring/test/fixtures/issue11.css
new file mode 100644
index 0000000..5b330b4
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue11.css
@@ -0,0 +1,4 @@
+.issue11 {
+ transition: 0s;
+ transition: 0ms;
+}
diff --git a/node_modules/csswring/test/fixtures/issue13.css b/node_modules/csswring/test/fixtures/issue13.css
new file mode 100644
index 0000000..af60057
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue13.css
@@ -0,0 +1,18 @@
+.foo {
+ background-image: url("1.png"),
+ url("2.png"),
+ linear-gradient(
+ to bottom,
+ #000 0%,
+ #fff 100%
+ )
+ ;
+}
+
+@font-face {
+ font-family: "f";
+ src: url("f.eot#a") format("embedded-opentype"),
+ url("f.woff") format("woff"),
+ url("f.ttf") format("truetype"),
+ url("f.svg#b") format("svg");
+}
diff --git a/node_modules/csswring/test/fixtures/issue17.css b/node_modules/csswring/test/fixtures/issue17.css
new file mode 100644
index 0000000..4a73f29
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue17.css
@@ -0,0 +1,6 @@
+.foo
+ .bar
+ .baz
+ {
+ display: auto;
+}
diff --git a/node_modules/csswring/test/fixtures/issue19.css b/node_modules/csswring/test/fixtures/issue19.css
new file mode 100644
index 0000000..72e2208
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue19.css
@@ -0,0 +1,6 @@
+@media /* a */ (min-width: 99px) {
+ .issue19 /* b */, #issue19 {
+ display: auto
+ ;
+ }
+}
diff --git a/node_modules/csswring/test/fixtures/issue3.css b/node_modules/csswring/test/fixtures/issue3.css
new file mode 100644
index 0000000..f5629e2
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue3.css
@@ -0,0 +1,3 @@
+.issue3 {
+ border: 1px solid rgb(102, 102, 102);
+}
diff --git a/node_modules/csswring/test/fixtures/issue30.css b/node_modules/csswring/test/fixtures/issue30.css
new file mode 100644
index 0000000..7ff1804
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue30.css
@@ -0,0 +1,7 @@
+.foo {
+ background-image: url("data:image/svg+xml, ");
+}
+
+.bar {
+ background-image: url('data:image/svg+xml, ');
+}
diff --git a/node_modules/csswring/test/fixtures/issue34.css b/node_modules/csswring/test/fixtures/issue34.css
new file mode 100644
index 0000000..efdedfb
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue34.css
@@ -0,0 +1,3 @@
+.foo {
+ background-image: linear-gradient(rgb(0,128,0)0%,rgb(0,128,0)100%);
+}
diff --git a/node_modules/csswring/test/fixtures/issue36.css b/node_modules/csswring/test/fixtures/issue36.css
new file mode 100644
index 0000000..752798c
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue36.css
@@ -0,0 +1,4 @@
+@font-face{
+ font-family: "Foo";
+ src: url("foo.woff") format("woff");
+}
diff --git a/node_modules/csswring/test/fixtures/issue37.css b/node_modules/csswring/test/fixtures/issue37.css
new file mode 100644
index 0000000..b0eb063
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue37.css
@@ -0,0 +1,6 @@
+.foo[att="foo"],
+.bar[att=bar],
+.baz[att="baz?"],
+.qux[att="q u x"] {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/issue40.css b/node_modules/csswring/test/fixtures/issue40.css
new file mode 100644
index 0000000..08a3774
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/issue40.css
@@ -0,0 +1,7 @@
+.foo {
+ font-family: "ヒラギノ角ゴ Pro W3", serif;
+}
+
+.bar[att="ほげ"] {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/multiple-values.css b/node_modules/csswring/test/fixtures/multiple-values.css
new file mode 100644
index 0000000..d635fff
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/multiple-values.css
@@ -0,0 +1,11 @@
+.foo {
+ margin: 1px 2px 3px 2px;
+ padding: 1px 2px 1px 2px;
+ border-color: #000 #fff #000;
+ border-radius: 1px 1px 1px;
+ border-spacing: 1px 1px;
+ border-style: solid double solid inset;
+ border-width: 1px 1px 1px 1px;
+ background-position: 0 0;
+ -webkit-transform-origin: 0 0;
+}
diff --git a/node_modules/csswring/test/fixtures/number-leading-zeros.css b/node_modules/csswring/test/fixtures/number-leading-zeros.css
new file mode 100644
index 0000000..11b1f51
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/number-leading-zeros.css
@@ -0,0 +1,3 @@
+.foo {
+ top: 00010.7px;
+}
diff --git a/node_modules/csswring/test/fixtures/ruleset-without-selector.css b/node_modules/csswring/test/fixtures/ruleset-without-selector.css
new file mode 100644
index 0000000..b250196
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/ruleset-without-selector.css
@@ -0,0 +1,7 @@
+.foo {
+ display: block;
+}
+
+{
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/selector-att.css b/node_modules/csswring/test/fixtures/selector-att.css
new file mode 100644
index 0000000..df711b6
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/selector-att.css
@@ -0,0 +1,8 @@
+[ foo ],
+[ bar = "bar" ],
+[ baz *= "baz" ],
+[ qux ~= 'qu]x'],
+[quux |= qu\]ux],
+[corge="corge"][grault] {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/selector-combinator.css b/node_modules/csswring/test/fixtures/selector-combinator.css
new file mode 100644
index 0000000..669e16d
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/selector-combinator.css
@@ -0,0 +1,15 @@
+.foo > .bar {
+ display: block;
+}
+
+.foo + .baz {
+ display: block;
+}
+
+.foo ~ .qux {
+ display: block;
+}
+
+.foo .\ {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/selector-function.css b/node_modules/csswring/test/fixtures/selector-function.css
new file mode 100644
index 0000000..a845b72
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/selector-function.css
@@ -0,0 +1,8 @@
+.foo:lang(ja-JP),
+.bar:nth-child(2n + 1),
+.baz:nth-last-child( -1n - 1),
+.qux:nth-of-type(odd ),
+.quux:not( bar ),
+.corge:not([class^="corge corge-"]) {
+ display: block;
+}
diff --git a/node_modules/csswring/test/fixtures/url.css b/node_modules/csswring/test/fixtures/url.css
new file mode 100644
index 0000000..eab2ee0
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/url.css
@@ -0,0 +1,7 @@
+.foo {
+ list-style: circle url("foo.png");
+ background-image: url('foo.png');
+ background: url(foo.png) rgb(238, 238, 238) no-repeat fixed;
+ cursor: url("open(parens.cur"), auto;
+ border-image: url(escaped-close\)parens.png) 30 30 repeat;
+}
diff --git a/node_modules/csswring/test/fixtures/white-space.css b/node_modules/csswring/test/fixtures/white-space.css
new file mode 100644
index 0000000..adcc0f3
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/white-space.css
@@ -0,0 +1,26 @@
+
+.foo, .bar,
+
+
+.baz {
+
+ display :
+ block ;
+}
+
+ @media screen and
+ (
+ min-width : 99px ) {
+ .bar
+ {
+ display
+ : block
+ !important;
+ background-image: url(
+ "bar.png"
+ ); }
+}
+
+
+
+
diff --git a/node_modules/csswring/test/fixtures/zero-value-unit.css b/node_modules/csswring/test/fixtures/zero-value-unit.css
new file mode 100644
index 0000000..403d144
--- /dev/null
+++ b/node_modules/csswring/test/fixtures/zero-value-unit.css
@@ -0,0 +1,3 @@
+.foo {
+ border: 0px solid red;
+}
diff --git a/node_modules/grunt-concurrent/node_modules/async/.travis.yml b/node_modules/grunt-concurrent/node_modules/async/.travis.yml
new file mode 100644
index 0000000..6e5919d
--- /dev/null
+++ b/node_modules/grunt-concurrent/node_modules/async/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - "0.10"
diff --git a/node_modules/grunt-concurrent/node_modules/async/LICENSE b/node_modules/grunt-concurrent/node_modules/async/LICENSE
new file mode 100644
index 0000000..8f29698
--- /dev/null
+++ b/node_modules/grunt-concurrent/node_modules/async/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2010-2014 Caolan McMahon
+
+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/node_modules/grunt-concurrent/node_modules/async/README.md b/node_modules/grunt-concurrent/node_modules/async/README.md
new file mode 100644
index 0000000..0bea531
--- /dev/null
+++ b/node_modules/grunt-concurrent/node_modules/async/README.md
@@ -0,0 +1,1646 @@
+# Async.js
+
+[](https://travis-ci.org/caolan/async)
+
+
+Async is a utility module which provides straight-forward, powerful functions
+for working with asynchronous JavaScript. Although originally designed for
+use with [Node.js](http://nodejs.org), it can also be used directly in the
+browser. Also supports [component](https://github.com/component/component).
+
+Async provides around 20 functions that include the usual 'functional'
+suspects (`map`, `reduce`, `filter`, `each`…) as well as some common patterns
+for asynchronous control flow (`parallel`, `series`, `waterfall`…). All these
+functions assume you follow the Node.js convention of providing a single
+callback as the last argument of your `async` function.
+
+
+## Quick Examples
+
+```javascript
+async.map(['file1','file2','file3'], fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+
+async.filter(['file1','file2','file3'], fs.exists, function(results){
+ // results now equals an array of the existing files
+});
+
+async.parallel([
+ function(){ ... },
+ function(){ ... }
+], callback);
+
+async.series([
+ function(){ ... },
+ function(){ ... }
+]);
+```
+
+There are many more functions available so take a look at the docs below for a
+full list. This module aims to be comprehensive, so if you feel anything is
+missing please create a GitHub issue for it.
+
+## Common Pitfalls
+
+### Binding a context to an iterator
+
+This section is really about `bind`, not about `async`. If you are wondering how to
+make `async` execute your iterators in a given context, or are confused as to why
+a method of another library isn't working as an iterator, study this example:
+
+```js
+// Here is a simple object with an (unnecessarily roundabout) squaring method
+var AsyncSquaringLibrary = {
+ squareExponent: 2,
+ square: function(number, callback){
+ var result = Math.pow(number, this.squareExponent);
+ setTimeout(function(){
+ callback(null, result);
+ }, 200);
+ }
+};
+
+async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){
+ // result is [NaN, NaN, NaN]
+ // This fails because the `this.squareExponent` expression in the square
+ // function is not evaluated in the context of AsyncSquaringLibrary, and is
+ // therefore undefined.
+});
+
+async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){
+ // result is [1, 4, 9]
+ // With the help of bind we can attach a context to the iterator before
+ // passing it to async. Now the square function will be executed in its
+ // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`
+ // will be as expected.
+});
+```
+
+## Download
+
+The source is available for download from
+[GitHub](http://github.com/caolan/async).
+Alternatively, you can install using Node Package Manager (`npm`):
+
+ npm install async
+
+__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed
+
+## In the Browser
+
+So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5.
+
+Usage:
+
+```html
+
+
+```
+
+## Documentation
+
+### Collections
+
+* [`each`](#each)
+* [`eachSeries`](#eachSeries)
+* [`eachLimit`](#eachLimit)
+* [`map`](#map)
+* [`mapSeries`](#mapSeries)
+* [`mapLimit`](#mapLimit)
+* [`filter`](#filter)
+* [`filterSeries`](#filterSeries)
+* [`reject`](#reject)
+* [`rejectSeries`](#rejectSeries)
+* [`reduce`](#reduce)
+* [`reduceRight`](#reduceRight)
+* [`detect`](#detect)
+* [`detectSeries`](#detectSeries)
+* [`sortBy`](#sortBy)
+* [`some`](#some)
+* [`every`](#every)
+* [`concat`](#concat)
+* [`concatSeries`](#concatSeries)
+
+### Control Flow
+
+* [`series`](#seriestasks-callback)
+* [`parallel`](#parallel)
+* [`parallelLimit`](#parallellimittasks-limit-callback)
+* [`whilst`](#whilst)
+* [`doWhilst`](#doWhilst)
+* [`until`](#until)
+* [`doUntil`](#doUntil)
+* [`forever`](#forever)
+* [`waterfall`](#waterfall)
+* [`compose`](#compose)
+* [`seq`](#seq)
+* [`applyEach`](#applyEach)
+* [`applyEachSeries`](#applyEachSeries)
+* [`queue`](#queue)
+* [`priorityQueue`](#priorityQueue)
+* [`cargo`](#cargo)
+* [`auto`](#auto)
+* [`retry`](#retry)
+* [`iterator`](#iterator)
+* [`apply`](#apply)
+* [`nextTick`](#nextTick)
+* [`times`](#times)
+* [`timesSeries`](#timesSeries)
+
+### Utils
+
+* [`memoize`](#memoize)
+* [`unmemoize`](#unmemoize)
+* [`log`](#log)
+* [`dir`](#dir)
+* [`noConflict`](#noConflict)
+
+
+## Collections
+
+
+
+### each(arr, iterator, callback)
+
+Applies the function `iterator` to each item in `arr`, in parallel.
+The `iterator` is called with an item from the list, and a callback for when it
+has finished. If the `iterator` passes an error to its `callback`, the main
+`callback` (for the `each` function) is immediately called with the error.
+
+Note, that since this function applies `iterator` to each item in parallel,
+there is no guarantee that the iterator functions will complete in order.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err)` which must be called once it has
+ completed. If no error has occured, the `callback` should be run without
+ arguments or with an explicit `null` argument.
+* `callback(err)` - A callback which is called when all `iterator` functions
+ have finished, or an error occurs.
+
+__Examples__
+
+
+```js
+// assuming openFiles is an array of file names and saveFile is a function
+// to save the modified contents of that file:
+
+async.each(openFiles, saveFile, function(err){
+ // if any of the saves produced an error, err would equal that error
+});
+```
+
+```js
+// assuming openFiles is an array of file names
+
+async.each(openFiles, function( file, callback) {
+
+ // Perform operation on file here.
+ console.log('Processing file ' + file);
+
+ if( file.length > 32 ) {
+ console.log('This file name is too long');
+ callback('File name too long');
+ } else {
+ // Do work to process file here
+ console.log('File processed');
+ callback();
+ }
+}, function(err){
+ // if any of the file processing produced an error, err would equal that error
+ if( err ) {
+ // One of the iterations produced an error.
+ // All processing will now stop.
+ console.log('A file failed to process');
+ } else {
+ console.log('All files have been processed successfully');
+ }
+});
+```
+
+---------------------------------------
+
+
+
+### eachSeries(arr, iterator, callback)
+
+The same as [`each`](#each), only `iterator` is applied to each item in `arr` in
+series. The next `iterator` is only called once the current one has completed.
+This means the `iterator` functions will complete in order.
+
+
+---------------------------------------
+
+
+
+### eachLimit(arr, limit, iterator, callback)
+
+The same as [`each`](#each), only no more than `limit` `iterator`s will be simultaneously
+running at any time.
+
+Note that the items in `arr` are not processed in batches, so there is no guarantee that
+the first `limit` `iterator` functions will complete before any others are started.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `limit` - The maximum number of `iterator`s to run at any time.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err)` which must be called once it has
+ completed. If no error has occured, the callback should be run without
+ arguments or with an explicit `null` argument.
+* `callback(err)` - A callback which is called when all `iterator` functions
+ have finished, or an error occurs.
+
+__Example__
+
+```js
+// Assume documents is an array of JSON objects and requestApi is a
+// function that interacts with a rate-limited REST api.
+
+async.eachLimit(documents, 20, requestApi, function(err){
+ // if any of the saves produced an error, err would equal that error
+});
+```
+
+---------------------------------------
+
+
+### map(arr, iterator, callback)
+
+Produces a new array of values by mapping each value in `arr` through
+the `iterator` function. The `iterator` is called with an item from `arr` and a
+callback for when it has finished processing. Each of these callback takes 2 arguments:
+an `error`, and the transformed item from `arr`. If `iterator` passes an error to this
+callback, the main `callback` (for the `map` function) is immediately called with the error.
+
+Note, that since this function applies the `iterator` to each item in parallel,
+there is no guarantee that the `iterator` functions will complete in order.
+However, the results array will be in the same order as the original `arr`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, transformed)` which must be called once
+ it has completed with an error (which can be `null`) and a transformed item.
+* `callback(err, results)` - A callback which is called when all `iterator`
+ functions have finished, or an error occurs. Results is an array of the
+ transformed items from the `arr`.
+
+__Example__
+
+```js
+async.map(['file1','file2','file3'], fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+```
+
+---------------------------------------
+
+
+### mapSeries(arr, iterator, callback)
+
+The same as [`map`](#map), only the `iterator` is applied to each item in `arr` in
+series. The next `iterator` is only called once the current one has completed.
+The results array will be in the same order as the original.
+
+
+---------------------------------------
+
+
+### mapLimit(arr, limit, iterator, callback)
+
+The same as [`map`](#map), only no more than `limit` `iterator`s will be simultaneously
+running at any time.
+
+Note that the items are not processed in batches, so there is no guarantee that
+the first `limit` `iterator` functions will complete before any others are started.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `limit` - The maximum number of `iterator`s to run at any time.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, transformed)` which must be called once
+ it has completed with an error (which can be `null`) and a transformed item.
+* `callback(err, results)` - A callback which is called when all `iterator`
+ calls have finished, or an error occurs. The result is an array of the
+ transformed items from the original `arr`.
+
+__Example__
+
+```js
+async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+```
+
+---------------------------------------
+
+
+
+### filter(arr, iterator, callback)
+
+__Alias:__ `select`
+
+Returns a new array of all the values in `arr` which pass an async truth test.
+_The callback for each `iterator` call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`. This operation is
+performed in parallel, but the results array will be in the same order as the
+original.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in `arr`.
+ The `iterator` is passed a `callback(truthValue)`, which must be called with a
+ boolean argument once it has completed.
+* `callback(results)` - A callback which is called after all the `iterator`
+ functions have finished.
+
+__Example__
+
+```js
+async.filter(['file1','file2','file3'], fs.exists, function(results){
+ // results now equals an array of the existing files
+});
+```
+
+---------------------------------------
+
+
+
+### filterSeries(arr, iterator, callback)
+
+__Alias:__ `selectSeries`
+
+The same as [`filter`](#filter) only the `iterator` is applied to each item in `arr` in
+series. The next `iterator` is only called once the current one has completed.
+The results array will be in the same order as the original.
+
+---------------------------------------
+
+
+### reject(arr, iterator, callback)
+
+The opposite of [`filter`](#filter). Removes values that pass an `async` truth test.
+
+---------------------------------------
+
+
+### rejectSeries(arr, iterator, callback)
+
+The same as [`reject`](#reject), only the `iterator` is applied to each item in `arr`
+in series.
+
+
+---------------------------------------
+
+
+### reduce(arr, memo, iterator, callback)
+
+__Aliases:__ `inject`, `foldl`
+
+Reduces `arr` into a single value using an async `iterator` to return
+each successive step. `memo` is the initial state of the reduction.
+This function only operates in series.
+
+For performance reasons, it may make sense to split a call to this function into
+a parallel map, and then use the normal `Array.prototype.reduce` on the results.
+This function is for situations where each step in the reduction needs to be async;
+if you can get the data before reducing it, then it's probably a good idea to do so.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `memo` - The initial state of the reduction.
+* `iterator(memo, item, callback)` - A function applied to each item in the
+ array to produce the next step in the reduction. The `iterator` is passed a
+ `callback(err, reduction)` which accepts an optional error as its first
+ argument, and the state of the reduction as the second. If an error is
+ passed to the callback, the reduction is stopped and the main `callback` is
+ immediately called with the error.
+* `callback(err, result)` - A callback which is called after all the `iterator`
+ functions have finished. Result is the reduced value.
+
+__Example__
+
+```js
+async.reduce([1,2,3], 0, function(memo, item, callback){
+ // pointless async:
+ process.nextTick(function(){
+ callback(null, memo + item)
+ });
+}, function(err, result){
+ // result is now equal to the last value of memo, which is 6
+});
+```
+
+---------------------------------------
+
+
+### reduceRight(arr, memo, iterator, callback)
+
+__Alias:__ `foldr`
+
+Same as [`reduce`](#reduce), only operates on `arr` in reverse order.
+
+
+---------------------------------------
+
+
+### detect(arr, iterator, callback)
+
+Returns the first value in `arr` that passes an async truth test. The
+`iterator` is applied in parallel, meaning the first iterator to return `true` will
+fire the detect `callback` with that result. That means the result might not be
+the first item in the original `arr` (in terms of order) that passes the test.
+
+If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries).
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in `arr`.
+ The iterator is passed a `callback(truthValue)` which must be called with a
+ boolean argument once it has completed.
+* `callback(result)` - A callback which is called as soon as any iterator returns
+ `true`, or after all the `iterator` functions have finished. Result will be
+ the first item in the array that passes the truth test (iterator) or the
+ value `undefined` if none passed.
+
+__Example__
+
+```js
+async.detect(['file1','file2','file3'], fs.exists, function(result){
+ // result now equals the first file in the list that exists
+});
+```
+
+---------------------------------------
+
+
+### detectSeries(arr, iterator, callback)
+
+The same as [`detect`](#detect), only the `iterator` is applied to each item in `arr`
+in series. This means the result is always the first in the original `arr` (in
+terms of array order) that passes the truth test.
+
+
+---------------------------------------
+
+
+### sortBy(arr, iterator, callback)
+
+Sorts a list by the results of running each `arr` value through an async `iterator`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, sortValue)` which must be called once it
+ has completed with an error (which can be `null`) and a value to use as the sort
+ criteria.
+* `callback(err, results)` - A callback which is called after all the `iterator`
+ functions have finished, or an error occurs. Results is the items from
+ the original `arr` sorted by the values returned by the `iterator` calls.
+
+__Example__
+
+```js
+async.sortBy(['file1','file2','file3'], function(file, callback){
+ fs.stat(file, function(err, stats){
+ callback(err, stats.mtime);
+ });
+}, function(err, results){
+ // results is now the original array of files sorted by
+ // modified date
+});
+```
+
+__Sort Order__
+
+By modifying the callback parameter the sorting order can be influenced:
+
+```js
+//ascending order
+async.sortBy([1,9,3,5], function(x, callback){
+ callback(err, x);
+}, function(err,result){
+ //result callback
+} );
+
+//descending order
+async.sortBy([1,9,3,5], function(x, callback){
+ callback(err, x*-1); //<- x*-1 instead of x, turns the order around
+}, function(err,result){
+ //result callback
+} );
+```
+
+---------------------------------------
+
+
+### some(arr, iterator, callback)
+
+__Alias:__ `any`
+
+Returns `true` if at least one element in the `arr` satisfies an async test.
+_The callback for each iterator call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`. Once any iterator
+call returns `true`, the main `callback` is immediately called.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in the array
+ in parallel. The iterator is passed a callback(truthValue) which must be
+ called with a boolean argument once it has completed.
+* `callback(result)` - A callback which is called as soon as any iterator returns
+ `true`, or after all the iterator functions have finished. Result will be
+ either `true` or `false` depending on the values of the async tests.
+
+__Example__
+
+```js
+async.some(['file1','file2','file3'], fs.exists, function(result){
+ // if result is true then at least one of the files exists
+});
+```
+
+---------------------------------------
+
+
+### every(arr, iterator, callback)
+
+__Alias:__ `all`
+
+Returns `true` if every element in `arr` satisfies an async test.
+_The callback for each `iterator` call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in the array
+ in parallel. The iterator is passed a callback(truthValue) which must be
+ called with a boolean argument once it has completed.
+* `callback(result)` - A callback which is called after all the `iterator`
+ functions have finished. Result will be either `true` or `false` depending on
+ the values of the async tests.
+
+__Example__
+
+```js
+async.every(['file1','file2','file3'], fs.exists, function(result){
+ // if result is true then every file exists
+});
+```
+
+---------------------------------------
+
+
+### concat(arr, iterator, callback)
+
+Applies `iterator` to each item in `arr`, concatenating the results. Returns the
+concatenated list. The `iterator`s are called in parallel, and the results are
+concatenated as they return. There is no guarantee that the results array will
+be returned in the original order of `arr` passed to the `iterator` function.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, results)` which must be called once it
+ has completed with an error (which can be `null`) and an array of results.
+* `callback(err, results)` - A callback which is called after all the `iterator`
+ functions have finished, or an error occurs. Results is an array containing
+ the concatenated results of the `iterator` function.
+
+__Example__
+
+```js
+async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){
+ // files is now a list of filenames that exist in the 3 directories
+});
+```
+
+---------------------------------------
+
+
+### concatSeries(arr, iterator, callback)
+
+Same as [`concat`](#concat), but executes in series instead of parallel.
+
+
+## Control Flow
+
+
+### series(tasks, [callback])
+
+Run the functions in the `tasks` array in series, each one running once the previous
+function has completed. If any functions in the series pass an error to its
+callback, no more functions are run, and `callback` is immediately called with the value of the error.
+Otherwise, `callback` receives an array of results when `tasks` have completed.
+
+It is also possible to use an object instead of an array. Each property will be
+run as a function, and the results will be passed to the final `callback` as an object
+instead of an array. This can be a more readable way of handling results from
+[`series`](#series).
+
+**Note** that while many implementations preserve the order of object properties, the
+[ECMAScript Language Specifcation](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)
+explicitly states that
+
+> The mechanics and order of enumerating the properties is not specified.
+
+So if you rely on the order in which your series of functions are executed, and want
+this to work on all platforms, consider using an array.
+
+__Arguments__
+
+* `tasks` - An array or object containing functions to run, each function is passed
+ a `callback(err, result)` it must call on completion with an error `err` (which can
+ be `null`) and an optional `result` value.
+* `callback(err, results)` - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the `task` callbacks.
+
+__Example__
+
+```js
+async.series([
+ function(callback){
+ // do some stuff ...
+ callback(null, 'one');
+ },
+ function(callback){
+ // do some more stuff ...
+ callback(null, 'two');
+ }
+],
+// optional callback
+function(err, results){
+ // results is now equal to ['one', 'two']
+});
+
+
+// an example using an object instead of an array
+async.series({
+ one: function(callback){
+ setTimeout(function(){
+ callback(null, 1);
+ }, 200);
+ },
+ two: function(callback){
+ setTimeout(function(){
+ callback(null, 2);
+ }, 100);
+ }
+},
+function(err, results) {
+ // results is now equal to: {one: 1, two: 2}
+});
+```
+
+---------------------------------------
+
+
+### parallel(tasks, [callback])
+
+Run the `tasks` array of functions in parallel, without waiting until the previous
+function has completed. If any of the functions pass an error to its
+callback, the main `callback` is immediately called with the value of the error.
+Once the `tasks` have completed, the results are passed to the final `callback` as an
+array.
+
+It is also possible to use an object instead of an array. Each property will be
+run as a function and the results will be passed to the final `callback` as an object
+instead of an array. This can be a more readable way of handling results from
+[`parallel`](#parallel).
+
+
+__Arguments__
+
+* `tasks` - An array or object containing functions to run. Each function is passed
+ a `callback(err, result)` which it must call on completion with an error `err`
+ (which can be `null`) and an optional `result` value.
+* `callback(err, results)` - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the task callbacks.
+
+__Example__
+
+```js
+async.parallel([
+ function(callback){
+ setTimeout(function(){
+ callback(null, 'one');
+ }, 200);
+ },
+ function(callback){
+ setTimeout(function(){
+ callback(null, 'two');
+ }, 100);
+ }
+],
+// optional callback
+function(err, results){
+ // the results array will equal ['one','two'] even though
+ // the second function had a shorter timeout.
+});
+
+
+// an example using an object instead of an array
+async.parallel({
+ one: function(callback){
+ setTimeout(function(){
+ callback(null, 1);
+ }, 200);
+ },
+ two: function(callback){
+ setTimeout(function(){
+ callback(null, 2);
+ }, 100);
+ }
+},
+function(err, results) {
+ // results is now equals to: {one: 1, two: 2}
+});
+```
+
+---------------------------------------
+
+
+### parallelLimit(tasks, limit, [callback])
+
+The same as [`parallel`](#parallel), only `tasks` are executed in parallel
+with a maximum of `limit` tasks executing at any time.
+
+Note that the `tasks` are not executed in batches, so there is no guarantee that
+the first `limit` tasks will complete before any others are started.
+
+__Arguments__
+
+* `tasks` - An array or object containing functions to run, each function is passed
+ a `callback(err, result)` it must call on completion with an error `err` (which can
+ be `null`) and an optional `result` value.
+* `limit` - The maximum number of `tasks` to run at any time.
+* `callback(err, results)` - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the `task` callbacks.
+
+---------------------------------------
+
+
+### whilst(test, fn, callback)
+
+Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped,
+or an error occurs.
+
+__Arguments__
+
+* `test()` - synchronous truth test to perform before each execution of `fn`.
+* `fn(callback)` - A function which is called each time `test` passes. The function is
+ passed a `callback(err)`, which must be called once it has completed with an
+ optional `err` argument.
+* `callback(err)` - A callback which is called after the test fails and repeated
+ execution of `fn` has stopped.
+
+__Example__
+
+```js
+var count = 0;
+
+async.whilst(
+ function () { return count < 5; },
+ function (callback) {
+ count++;
+ setTimeout(callback, 1000);
+ },
+ function (err) {
+ // 5 seconds have passed
+ }
+);
+```
+
+---------------------------------------
+
+
+### doWhilst(fn, test, callback)
+
+The post-check version of [`whilst`](#whilst). To reflect the difference in
+the order of operations, the arguments `test` and `fn` are switched.
+
+`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.
+
+---------------------------------------
+
+
+### until(test, fn, callback)
+
+Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped,
+or an error occurs.
+
+The inverse of [`whilst`](#whilst).
+
+---------------------------------------
+
+
+### doUntil(fn, test, callback)
+
+Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`.
+
+---------------------------------------
+
+
+### forever(fn, errback)
+
+Calls the asynchronous function `fn` with a callback parameter that allows it to
+call itself again, in series, indefinitely.
+
+If an error is passed to the callback then `errback` is called with the
+error, and execution stops, otherwise it will never be called.
+
+```js
+async.forever(
+ function(next) {
+ // next is suitable for passing to things that need a callback(err [, whatever]);
+ // it will result in this function being called again.
+ },
+ function(err) {
+ // if next is called with a value in its first parameter, it will appear
+ // in here as 'err', and execution will stop.
+ }
+);
+```
+
+---------------------------------------
+
+
+### waterfall(tasks, [callback])
+
+Runs the `tasks` array of functions in series, each passing their results to the next in
+the array. However, if any of the `tasks` pass an error to their own callback, the
+next function is not executed, and the main `callback` is immediately called with
+the error.
+
+__Arguments__
+
+* `tasks` - An array of functions to run, each function is passed a
+ `callback(err, result1, result2, ...)` it must call on completion. The first
+ argument is an error (which can be `null`) and any further arguments will be
+ passed as arguments in order to the next task.
+* `callback(err, [results])` - An optional callback to run once all the functions
+ have completed. This will be passed the results of the last task's callback.
+
+
+
+__Example__
+
+```js
+async.waterfall([
+ function(callback){
+ callback(null, 'one', 'two');
+ },
+ function(arg1, arg2, callback){
+ // arg1 now equals 'one' and arg2 now equals 'two'
+ callback(null, 'three');
+ },
+ function(arg1, callback){
+ // arg1 now equals 'three'
+ callback(null, 'done');
+ }
+], function (err, result) {
+ // result now equals 'done'
+});
+```
+
+---------------------------------------
+
+### compose(fn1, fn2...)
+
+Creates a function which is a composition of the passed asynchronous
+functions. Each function consumes the return value of the function that
+follows. Composing functions `f()`, `g()`, and `h()` would produce the result of
+`f(g(h()))`, only this version uses callbacks to obtain the return values.
+
+Each function is executed with the `this` binding of the composed function.
+
+__Arguments__
+
+* `functions...` - the asynchronous functions to compose
+
+
+__Example__
+
+```js
+function add1(n, callback) {
+ setTimeout(function () {
+ callback(null, n + 1);
+ }, 10);
+}
+
+function mul3(n, callback) {
+ setTimeout(function () {
+ callback(null, n * 3);
+ }, 10);
+}
+
+var add1mul3 = async.compose(mul3, add1);
+
+add1mul3(4, function (err, result) {
+ // result now equals 15
+});
+```
+
+---------------------------------------
+
+### seq(fn1, fn2...)
+
+Version of the compose function that is more natural to read.
+Each following function consumes the return value of the latter function.
+
+Each function is executed with the `this` binding of the composed function.
+
+__Arguments__
+
+* functions... - the asynchronous functions to compose
+
+
+__Example__
+
+```js
+// Requires lodash (or underscore), express3 and dresende's orm2.
+// Part of an app, that fetches cats of the logged user.
+// This example uses `seq` function to avoid overnesting and error
+// handling clutter.
+app.get('/cats', function(request, response) {
+ function handleError(err, data, callback) {
+ if (err) {
+ console.error(err);
+ response.json({ status: 'error', message: err.message });
+ }
+ else {
+ callback(data);
+ }
+ }
+ var User = request.models.User;
+ async.seq(
+ _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data))
+ handleError,
+ function(user, fn) {
+ user.getCats(fn); // 'getCats' has signature (callback(err, data))
+ },
+ handleError,
+ function(cats) {
+ response.json({ status: 'ok', message: 'Cats found', data: cats });
+ }
+ )(req.session.user_id);
+ }
+});
+```
+
+---------------------------------------
+
+### applyEach(fns, args..., callback)
+
+Applies the provided arguments to each function in the array, calling
+`callback` after all functions have completed. If you only provide the first
+argument, then it will return a function which lets you pass in the
+arguments as if it were a single function call.
+
+__Arguments__
+
+* `fns` - the asynchronous functions to all call with the same arguments
+* `args...` - any number of separate arguments to pass to the function
+* `callback` - the final argument should be the callback, called when all
+ functions have completed processing
+
+
+__Example__
+
+```js
+async.applyEach([enableSearch, updateSchema], 'bucket', callback);
+
+// partial application example:
+async.each(
+ buckets,
+ async.applyEach([enableSearch, updateSchema]),
+ callback
+);
+```
+
+---------------------------------------
+
+
+### applyEachSeries(arr, iterator, callback)
+
+The same as [`applyEach`](#applyEach) only the functions are applied in series.
+
+---------------------------------------
+
+
+### queue(worker, concurrency)
+
+Creates a `queue` object with the specified `concurrency`. Tasks added to the
+`queue` are processed in parallel (up to the `concurrency` limit). If all
+`worker`s are in progress, the task is queued until one becomes available.
+Once a `worker` completes a `task`, that `task`'s callback is called.
+
+__Arguments__
+
+* `worker(task, callback)` - An asynchronous function for processing a queued
+ task, which must call its `callback(err)` argument when finished, with an
+ optional `error` as an argument.
+* `concurrency` - An `integer` for determining how many `worker` functions should be
+ run in parallel.
+
+__Queue objects__
+
+The `queue` object returned by this function has the following properties and
+methods:
+
+* `length()` - a function returning the number of items waiting to be processed.
+* `started` - a function returning whether or not any items have been pushed and processed by the queue
+* `running()` - a function returning the number of items currently being processed.
+* `idle()` - a function returning false if there are items waiting or being processed, or true if not.
+* `concurrency` - an integer for determining how many `worker` functions should be
+ run in parallel. This property can be changed after a `queue` is created to
+ alter the concurrency on-the-fly.
+* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once
+ the `worker` has finished processing the task. Instead of a single task, a `tasks` array
+ can be submitted. The respective callback is used for every task in the list.
+* `unshift(task, [callback])` - add a new task to the front of the `queue`.
+* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit,
+ and further tasks will be queued.
+* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`.
+* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`.
+* `paused` - a boolean for determining whether the queue is in a paused state
+* `pause()` - a function that pauses the processing of tasks until `resume()` is called.
+* `resume()` - a function that resumes the processing of queued tasks when the queue is paused.
+* `kill()` - a function that empties remaining tasks from the queue forcing it to go idle.
+
+__Example__
+
+```js
+// create a queue object with concurrency 2
+
+var q = async.queue(function (task, callback) {
+ console.log('hello ' + task.name);
+ callback();
+}, 2);
+
+
+// assign a callback
+q.drain = function() {
+ console.log('all items have been processed');
+}
+
+// add some items to the queue
+
+q.push({name: 'foo'}, function (err) {
+ console.log('finished processing foo');
+});
+q.push({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+
+// add some items to the queue (batch-wise)
+
+q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {
+ console.log('finished processing bar');
+});
+
+// add some items to the front of the queue
+
+q.unshift({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+```
+
+
+---------------------------------------
+
+
+### priorityQueue(worker, concurrency)
+
+The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects:
+
+* `push(task, priority, [callback])` - `priority` should be a number. If an array of
+ `tasks` is given, all tasks will be assigned the same priority.
+* The `unshift` method was removed.
+
+---------------------------------------
+
+
+### cargo(worker, [payload])
+
+Creates a `cargo` object with the specified payload. Tasks added to the
+cargo will be processed altogether (up to the `payload` limit). If the
+`worker` is in progress, the task is queued until it becomes available. Once
+the `worker` has completed some tasks, each callback of those tasks is called.
+Check out [this animation](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) for how `cargo` and `queue` work.
+
+While [queue](#queue) passes only one task to one of a group of workers
+at a time, cargo passes an array of tasks to a single worker, repeating
+when the worker is finished.
+
+__Arguments__
+
+* `worker(tasks, callback)` - An asynchronous function for processing an array of
+ queued tasks, which must call its `callback(err)` argument when finished, with
+ an optional `err` argument.
+* `payload` - An optional `integer` for determining how many tasks should be
+ processed per round; if omitted, the default is unlimited.
+
+__Cargo objects__
+
+The `cargo` object returned by this function has the following properties and
+methods:
+
+* `length()` - A function returning the number of items waiting to be processed.
+* `payload` - An `integer` for determining how many tasks should be
+ process per round. This property can be changed after a `cargo` is created to
+ alter the payload on-the-fly.
+* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called
+ once the `worker` has finished processing the task. Instead of a single task, an array of `tasks`
+ can be submitted. The respective callback is used for every task in the list.
+* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued.
+* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`.
+* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`.
+
+__Example__
+
+```js
+// create a cargo object with payload 2
+
+var cargo = async.cargo(function (tasks, callback) {
+ for(var i=0; i
+### auto(tasks, [callback])
+
+Determines the best order for running the functions in `tasks`, based on their
+requirements. Each function can optionally depend on other functions being completed
+first, and each function is run as soon as its requirements are satisfied.
+
+If any of the functions pass an error to their callback, it will not
+complete (so any other functions depending on it will not run), and the main
+`callback` is immediately called with the error. Functions also receive an
+object containing the results of functions which have completed so far.
+
+Note, all functions are called with a `results` object as a second argument,
+so it is unsafe to pass functions in the `tasks` object which cannot handle the
+extra argument.
+
+For example, this snippet of code:
+
+```js
+async.auto({
+ readData: async.apply(fs.readFile, 'data.txt', 'utf-8')
+}, callback);
+```
+
+will have the effect of calling `readFile` with the results object as the last
+argument, which will fail:
+
+```js
+fs.readFile('data.txt', 'utf-8', cb, {});
+```
+
+Instead, wrap the call to `readFile` in a function which does not forward the
+`results` object:
+
+```js
+async.auto({
+ readData: function(cb, results){
+ fs.readFile('data.txt', 'utf-8', cb);
+ }
+}, callback);
+```
+
+__Arguments__
+
+* `tasks` - An object. Each of its properties is either a function or an array of
+ requirements, with the function itself the last item in the array. The object's key
+ of a property serves as the name of the task defined by that property,
+ i.e. can be used when specifying requirements for other tasks.
+ The function receives two arguments: (1) a `callback(err, result)` which must be
+ called when finished, passing an `error` (which can be `null`) and the result of
+ the function's execution, and (2) a `results` object, containing the results of
+ the previously executed functions.
+* `callback(err, results)` - An optional callback which is called when all the
+ tasks have been completed. It receives the `err` argument if any `tasks`
+ pass an error to their callback. Results are always returned; however, if
+ an error occurs, no further `tasks` will be performed, and the results
+ object will only contain partial results.
+
+
+__Example__
+
+```js
+async.auto({
+ get_data: function(callback){
+ console.log('in get_data');
+ // async code to get some data
+ callback(null, 'data', 'converted to array');
+ },
+ make_folder: function(callback){
+ console.log('in make_folder');
+ // async code to create a directory to store a file in
+ // this is run at the same time as getting the data
+ callback(null, 'folder');
+ },
+ write_file: ['get_data', 'make_folder', function(callback, results){
+ console.log('in write_file', JSON.stringify(results));
+ // once there is some data and the directory exists,
+ // write the data to a file in the directory
+ callback(null, 'filename');
+ }],
+ email_link: ['write_file', function(callback, results){
+ console.log('in email_link', JSON.stringify(results));
+ // once the file is written let's email a link to it...
+ // results.write_file contains the filename returned by write_file.
+ callback(null, {'file':results.write_file, 'email':'user@example.com'});
+ }]
+}, function(err, results) {
+ console.log('err = ', err);
+ console.log('results = ', results);
+});
+```
+
+This is a fairly trivial example, but to do this using the basic parallel and
+series functions would look like this:
+
+```js
+async.parallel([
+ function(callback){
+ console.log('in get_data');
+ // async code to get some data
+ callback(null, 'data', 'converted to array');
+ },
+ function(callback){
+ console.log('in make_folder');
+ // async code to create a directory to store a file in
+ // this is run at the same time as getting the data
+ callback(null, 'folder');
+ }
+],
+function(err, results){
+ async.series([
+ function(callback){
+ console.log('in write_file', JSON.stringify(results));
+ // once there is some data and the directory exists,
+ // write the data to a file in the directory
+ results.push('filename');
+ callback(null);
+ },
+ function(callback){
+ console.log('in email_link', JSON.stringify(results));
+ // once the file is written let's email a link to it...
+ callback(null, {'file':results.pop(), 'email':'user@example.com'});
+ }
+ ]);
+});
+```
+
+For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding
+new tasks much easier (and the code more readable).
+
+
+---------------------------------------
+
+
+### retry([times = 5], task, [callback])
+
+Attempts to get a successful response from `task` no more than `times` times before
+returning an error. If the task is successful, the `callback` will be passed the result
+of the successfull task. If all attemps fail, the callback will be passed the error and
+result (if any) of the final attempt.
+
+__Arguments__
+
+* `times` - An integer indicating how many times to attempt the `task` before giving up. Defaults to 5.
+* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)`
+ which must be called when finished, passing `err` (which can be `null`) and the `result` of
+ the function's execution, and (2) a `results` object, containing the results of
+ the previously executed functions (if nested inside another control flow).
+* `callback(err, results)` - An optional callback which is called when the
+ task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`.
+
+The [`retry`](#retry) function can be used as a stand-alone control flow by passing a
+callback, as shown below:
+
+```js
+async.retry(3, apiMethod, function(err, result) {
+ // do something with the result
+});
+```
+
+It can also be embeded within other control flow functions to retry individual methods
+that are not as reliable, like this:
+
+```js
+async.auto({
+ users: api.getUsers.bind(api),
+ payments: async.retry(3, api.getPayments.bind(api))
+}, function(err, results) {
+ // do something with the results
+});
+```
+
+
+---------------------------------------
+
+
+### iterator(tasks)
+
+Creates an iterator function which calls the next function in the `tasks` array,
+returning a continuation to call the next one after that. It's also possible to
+“peek” at the next iterator with `iterator.next()`.
+
+This function is used internally by the `async` module, but can be useful when
+you want to manually control the flow of functions in series.
+
+__Arguments__
+
+* `tasks` - An array of functions to run.
+
+__Example__
+
+```js
+var iterator = async.iterator([
+ function(){ sys.p('one'); },
+ function(){ sys.p('two'); },
+ function(){ sys.p('three'); }
+]);
+
+node> var iterator2 = iterator();
+'one'
+node> var iterator3 = iterator2();
+'two'
+node> iterator3();
+'three'
+node> var nextfn = iterator2.next();
+node> nextfn();
+'three'
+```
+
+---------------------------------------
+
+
+### apply(function, arguments..)
+
+Creates a continuation function with some arguments already applied.
+
+Useful as a shorthand when combined with other control flow functions. Any arguments
+passed to the returned function are added to the arguments originally passed
+to apply.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to automatically apply when the
+ continuation is called.
+
+__Example__
+
+```js
+// using apply
+
+async.parallel([
+ async.apply(fs.writeFile, 'testfile1', 'test1'),
+ async.apply(fs.writeFile, 'testfile2', 'test2'),
+]);
+
+
+// the same process without using apply
+
+async.parallel([
+ function(callback){
+ fs.writeFile('testfile1', 'test1', callback);
+ },
+ function(callback){
+ fs.writeFile('testfile2', 'test2', callback);
+ }
+]);
+```
+
+It's possible to pass any number of additional arguments when calling the
+continuation:
+
+```js
+node> var fn = async.apply(sys.puts, 'one');
+node> fn('two', 'three');
+one
+two
+three
+```
+
+---------------------------------------
+
+
+### nextTick(callback)
+
+Calls `callback` on a later loop around the event loop. In Node.js this just
+calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)`
+if available, otherwise `setTimeout(callback, 0)`, which means other higher priority
+events may precede the execution of `callback`.
+
+This is used internally for browser-compatibility purposes.
+
+__Arguments__
+
+* `callback` - The function to call on a later loop around the event loop.
+
+__Example__
+
+```js
+var call_order = [];
+async.nextTick(function(){
+ call_order.push('two');
+ // call_order now equals ['one','two']
+});
+call_order.push('one')
+```
+
+
+### times(n, callback)
+
+Calls the `callback` function `n` times, and accumulates results in the same manner
+you would use with [`map`](#map).
+
+__Arguments__
+
+* `n` - The number of times to run the function.
+* `callback` - The function to call `n` times.
+
+__Example__
+
+```js
+// Pretend this is some complicated async factory
+var createUser = function(id, callback) {
+ callback(null, {
+ id: 'user' + id
+ })
+}
+// generate 5 users
+async.times(5, function(n, next){
+ createUser(n, function(err, user) {
+ next(err, user)
+ })
+}, function(err, users) {
+ // we should now have 5 users
+});
+```
+
+
+### timesSeries(n, callback)
+
+The same as [`times`](#times), only the iterator is applied to each item in `arr` in
+series. The next `iterator` is only called once the current one has completed.
+The results array will be in the same order as the original.
+
+
+## Utils
+
+
+### memoize(fn, [hasher])
+
+Caches the results of an `async` function. When creating a hash to store function
+results against, the callback is omitted from the hash and an optional hash
+function can be used.
+
+The cache of results is exposed as the `memo` property of the function returned
+by `memoize`.
+
+__Arguments__
+
+* `fn` - The function to proxy and cache results from.
+* `hasher` - Tn optional function for generating a custom hash for storing
+ results. It has all the arguments applied to it apart from the callback, and
+ must be synchronous.
+
+__Example__
+
+```js
+var slow_fn = function (name, callback) {
+ // do something
+ callback(null, result);
+};
+var fn = async.memoize(slow_fn);
+
+// fn can now be used as if it were slow_fn
+fn('some name', function () {
+ // callback
+});
+```
+
+
+### unmemoize(fn)
+
+Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized
+form. Handy for testing.
+
+__Arguments__
+
+* `fn` - the memoized function
+
+
+### log(function, arguments)
+
+Logs the result of an `async` function to the `console`. Only works in Node.js or
+in browsers that support `console.log` and `console.error` (such as FF and Chrome).
+If multiple arguments are returned from the async function, `console.log` is
+called on each argument in order.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to apply to the function.
+
+__Example__
+
+```js
+var hello = function(name, callback){
+ setTimeout(function(){
+ callback(null, 'hello ' + name);
+ }, 1000);
+};
+```
+```js
+node> async.log(hello, 'world');
+'hello world'
+```
+
+---------------------------------------
+
+
+### dir(function, arguments)
+
+Logs the result of an `async` function to the `console` using `console.dir` to
+display the properties of the resulting object. Only works in Node.js or
+in browsers that support `console.dir` and `console.error` (such as FF and Chrome).
+If multiple arguments are returned from the async function, `console.dir` is
+called on each argument in order.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to apply to the function.
+
+__Example__
+
+```js
+var hello = function(name, callback){
+ setTimeout(function(){
+ callback(null, {hello: name});
+ }, 1000);
+};
+```
+```js
+node> async.dir(hello, 'world');
+{hello: 'world'}
+```
+
+---------------------------------------
+
+
+### noConflict()
+
+Changes the value of `async` back to its original value, returning a reference to the
+`async` object.
diff --git a/node_modules/grunt-concurrent/node_modules/async/component.json b/node_modules/grunt-concurrent/node_modules/async/component.json
new file mode 100644
index 0000000..bbb0115
--- /dev/null
+++ b/node_modules/grunt-concurrent/node_modules/async/component.json
@@ -0,0 +1,11 @@
+{
+ "name": "async",
+ "repo": "caolan/async",
+ "description": "Higher-order functions and common patterns for asynchronous code",
+ "version": "0.1.23",
+ "keywords": [],
+ "dependencies": {},
+ "development": {},
+ "main": "lib/async.js",
+ "scripts": [ "lib/async.js" ]
+}
diff --git a/node_modules/grunt-concurrent/node_modules/async/lib/async.js b/node_modules/grunt-concurrent/node_modules/async/lib/async.js
new file mode 100755
index 0000000..01e8afc
--- /dev/null
+++ b/node_modules/grunt-concurrent/node_modules/async/lib/async.js
@@ -0,0 +1,1123 @@
+/*!
+ * async
+ * https://github.com/caolan/async
+ *
+ * Copyright 2010-2014 Caolan McMahon
+ * Released under the MIT license
+ */
+/*jshint onevar: false, indent:4 */
+/*global setImmediate: false, setTimeout: false, console: false */
+(function () {
+
+ var async = {};
+
+ // global on the server, window in the browser
+ var root, previous_async;
+
+ root = this;
+ if (root != null) {
+ previous_async = root.async;
+ }
+
+ async.noConflict = function () {
+ root.async = previous_async;
+ return async;
+ };
+
+ function only_once(fn) {
+ var called = false;
+ return function() {
+ if (called) throw new Error("Callback was already called.");
+ called = true;
+ fn.apply(root, arguments);
+ }
+ }
+
+ //// cross-browser compatiblity functions ////
+
+ var _toString = Object.prototype.toString;
+
+ var _isArray = Array.isArray || function (obj) {
+ return _toString.call(obj) === '[object Array]';
+ };
+
+ var _each = function (arr, iterator) {
+ if (arr.forEach) {
+ return arr.forEach(iterator);
+ }
+ for (var i = 0; i < arr.length; i += 1) {
+ iterator(arr[i], i, arr);
+ }
+ };
+
+ var _map = function (arr, iterator) {
+ if (arr.map) {
+ return arr.map(iterator);
+ }
+ var results = [];
+ _each(arr, function (x, i, a) {
+ results.push(iterator(x, i, a));
+ });
+ return results;
+ };
+
+ var _reduce = function (arr, iterator, memo) {
+ if (arr.reduce) {
+ return arr.reduce(iterator, memo);
+ }
+ _each(arr, function (x, i, a) {
+ memo = iterator(memo, x, i, a);
+ });
+ return memo;
+ };
+
+ var _keys = function (obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ }
+ var keys = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ return keys;
+ };
+
+ //// exported async module functions ////
+
+ //// nextTick implementation with browser-compatible fallback ////
+ if (typeof process === 'undefined' || !(process.nextTick)) {
+ if (typeof setImmediate === 'function') {
+ async.nextTick = function (fn) {
+ // not a direct alias for IE10 compatibility
+ setImmediate(fn);
+ };
+ async.setImmediate = async.nextTick;
+ }
+ else {
+ async.nextTick = function (fn) {
+ setTimeout(fn, 0);
+ };
+ async.setImmediate = async.nextTick;
+ }
+ }
+ else {
+ async.nextTick = process.nextTick;
+ if (typeof setImmediate !== 'undefined') {
+ async.setImmediate = function (fn) {
+ // not a direct alias for IE10 compatibility
+ setImmediate(fn);
+ };
+ }
+ else {
+ async.setImmediate = async.nextTick;
+ }
+ }
+
+ async.each = function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ _each(arr, function (x) {
+ iterator(x, only_once(done) );
+ });
+ function done(err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ }
+ }
+ };
+ async.forEach = async.each;
+
+ async.eachSeries = function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ var iterate = function () {
+ iterator(arr[completed], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ else {
+ iterate();
+ }
+ }
+ });
+ };
+ iterate();
+ };
+ async.forEachSeries = async.eachSeries;
+
+ async.eachLimit = function (arr, limit, iterator, callback) {
+ var fn = _eachLimit(limit);
+ fn.apply(null, [arr, iterator, callback]);
+ };
+ async.forEachLimit = async.eachLimit;
+
+ var _eachLimit = function (limit) {
+
+ return function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length || limit <= 0) {
+ return callback();
+ }
+ var completed = 0;
+ var started = 0;
+ var running = 0;
+
+ (function replenish () {
+ if (completed >= arr.length) {
+ return callback();
+ }
+
+ while (running < limit && started < arr.length) {
+ started += 1;
+ running += 1;
+ iterator(arr[started - 1], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ running -= 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ else {
+ replenish();
+ }
+ }
+ });
+ }
+ })();
+ };
+ };
+
+
+ var doParallel = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [async.each].concat(args));
+ };
+ };
+ var doParallelLimit = function(limit, fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [_eachLimit(limit)].concat(args));
+ };
+ };
+ var doSeries = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [async.eachSeries].concat(args));
+ };
+ };
+
+
+ var _asyncMap = function (eachfn, arr, iterator, callback) {
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ if (!callback) {
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (err) {
+ callback(err);
+ });
+ });
+ } else {
+ var results = [];
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (err, v) {
+ results[x.index] = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+ async.map = doParallel(_asyncMap);
+ async.mapSeries = doSeries(_asyncMap);
+ async.mapLimit = function (arr, limit, iterator, callback) {
+ return _mapLimit(limit)(arr, iterator, callback);
+ };
+
+ var _mapLimit = function(limit) {
+ return doParallelLimit(limit, _asyncMap);
+ };
+
+ // reduce only has a series version, as doing reduce in parallel won't
+ // work in many situations.
+ async.reduce = function (arr, memo, iterator, callback) {
+ async.eachSeries(arr, function (x, callback) {
+ iterator(memo, x, function (err, v) {
+ memo = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, memo);
+ });
+ };
+ // inject alias
+ async.inject = async.reduce;
+ // foldl alias
+ async.foldl = async.reduce;
+
+ async.reduceRight = function (arr, memo, iterator, callback) {
+ var reversed = _map(arr, function (x) {
+ return x;
+ }).reverse();
+ async.reduce(reversed, memo, iterator, callback);
+ };
+ // foldr alias
+ async.foldr = async.reduceRight;
+
+ var _filter = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (v) {
+ if (v) {
+ results.push(x);
+ }
+ callback();
+ });
+ }, function (err) {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ };
+ async.filter = doParallel(_filter);
+ async.filterSeries = doSeries(_filter);
+ // select alias
+ async.select = async.filter;
+ async.selectSeries = async.filterSeries;
+
+ var _reject = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (v) {
+ if (!v) {
+ results.push(x);
+ }
+ callback();
+ });
+ }, function (err) {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ };
+ async.reject = doParallel(_reject);
+ async.rejectSeries = doSeries(_reject);
+
+ var _detect = function (eachfn, arr, iterator, main_callback) {
+ eachfn(arr, function (x, callback) {
+ iterator(x, function (result) {
+ if (result) {
+ main_callback(x);
+ main_callback = function () {};
+ }
+ else {
+ callback();
+ }
+ });
+ }, function (err) {
+ main_callback();
+ });
+ };
+ async.detect = doParallel(_detect);
+ async.detectSeries = doSeries(_detect);
+
+ async.some = function (arr, iterator, main_callback) {
+ async.each(arr, function (x, callback) {
+ iterator(x, function (v) {
+ if (v) {
+ main_callback(true);
+ main_callback = function () {};
+ }
+ callback();
+ });
+ }, function (err) {
+ main_callback(false);
+ });
+ };
+ // any alias
+ async.any = async.some;
+
+ async.every = function (arr, iterator, main_callback) {
+ async.each(arr, function (x, callback) {
+ iterator(x, function (v) {
+ if (!v) {
+ main_callback(false);
+ main_callback = function () {};
+ }
+ callback();
+ });
+ }, function (err) {
+ main_callback(true);
+ });
+ };
+ // all alias
+ async.all = async.every;
+
+ async.sortBy = function (arr, iterator, callback) {
+ async.map(arr, function (x, callback) {
+ iterator(x, function (err, criteria) {
+ if (err) {
+ callback(err);
+ }
+ else {
+ callback(null, {value: x, criteria: criteria});
+ }
+ });
+ }, function (err, results) {
+ if (err) {
+ return callback(err);
+ }
+ else {
+ var fn = function (left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ };
+ callback(null, _map(results.sort(fn), function (x) {
+ return x.value;
+ }));
+ }
+ });
+ };
+
+ async.auto = function (tasks, callback) {
+ callback = callback || function () {};
+ var keys = _keys(tasks);
+ var remainingTasks = keys.length
+ if (!remainingTasks) {
+ return callback();
+ }
+
+ var results = {};
+
+ var listeners = [];
+ var addListener = function (fn) {
+ listeners.unshift(fn);
+ };
+ var removeListener = function (fn) {
+ for (var i = 0; i < listeners.length; i += 1) {
+ if (listeners[i] === fn) {
+ listeners.splice(i, 1);
+ return;
+ }
+ }
+ };
+ var taskComplete = function () {
+ remainingTasks--
+ _each(listeners.slice(0), function (fn) {
+ fn();
+ });
+ };
+
+ addListener(function () {
+ if (!remainingTasks) {
+ var theCallback = callback;
+ // prevent final callback from calling itself if it errors
+ callback = function () {};
+
+ theCallback(null, results);
+ }
+ });
+
+ _each(keys, function (k) {
+ var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]];
+ var taskCallback = function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ if (err) {
+ var safeResults = {};
+ _each(_keys(results), function(rkey) {
+ safeResults[rkey] = results[rkey];
+ });
+ safeResults[k] = args;
+ callback(err, safeResults);
+ // stop subsequent errors hitting callback multiple times
+ callback = function () {};
+ }
+ else {
+ results[k] = args;
+ async.setImmediate(taskComplete);
+ }
+ };
+ var requires = task.slice(0, Math.abs(task.length - 1)) || [];
+ var ready = function () {
+ return _reduce(requires, function (a, x) {
+ return (a && results.hasOwnProperty(x));
+ }, true) && !results.hasOwnProperty(k);
+ };
+ if (ready()) {
+ task[task.length - 1](taskCallback, results);
+ }
+ else {
+ var listener = function () {
+ if (ready()) {
+ removeListener(listener);
+ task[task.length - 1](taskCallback, results);
+ }
+ };
+ addListener(listener);
+ }
+ });
+ };
+
+ async.retry = function(times, task, callback) {
+ var DEFAULT_TIMES = 5;
+ var attempts = [];
+ // Use defaults if times not passed
+ if (typeof times === 'function') {
+ callback = task;
+ task = times;
+ times = DEFAULT_TIMES;
+ }
+ // Make sure times is a number
+ times = parseInt(times, 10) || DEFAULT_TIMES;
+ var wrappedTask = function(wrappedCallback, wrappedResults) {
+ var retryAttempt = function(task, finalAttempt) {
+ return function(seriesCallback) {
+ task(function(err, result){
+ seriesCallback(!err || finalAttempt, {err: err, result: result});
+ }, wrappedResults);
+ };
+ };
+ while (times) {
+ attempts.push(retryAttempt(task, !(times-=1)));
+ }
+ async.series(attempts, function(done, data){
+ data = data[data.length - 1];
+ (wrappedCallback || callback)(data.err, data.result);
+ });
+ }
+ // If a callback is passed, run this as a controll flow
+ return callback ? wrappedTask() : wrappedTask
+ };
+
+ async.waterfall = function (tasks, callback) {
+ callback = callback || function () {};
+ if (!_isArray(tasks)) {
+ var err = new Error('First argument to waterfall must be an array of functions');
+ return callback(err);
+ }
+ if (!tasks.length) {
+ return callback();
+ }
+ var wrapIterator = function (iterator) {
+ return function (err) {
+ if (err) {
+ callback.apply(null, arguments);
+ callback = function () {};
+ }
+ else {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var next = iterator.next();
+ if (next) {
+ args.push(wrapIterator(next));
+ }
+ else {
+ args.push(callback);
+ }
+ async.setImmediate(function () {
+ iterator.apply(null, args);
+ });
+ }
+ };
+ };
+ wrapIterator(async.iterator(tasks))();
+ };
+
+ var _parallel = function(eachfn, tasks, callback) {
+ callback = callback || function () {};
+ if (_isArray(tasks)) {
+ eachfn.map(tasks, function (fn, callback) {
+ if (fn) {
+ fn(function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ callback.call(null, err, args);
+ });
+ }
+ }, callback);
+ }
+ else {
+ var results = {};
+ eachfn.each(_keys(tasks), function (k, callback) {
+ tasks[k](function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[k] = args;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+
+ async.parallel = function (tasks, callback) {
+ _parallel({ map: async.map, each: async.each }, tasks, callback);
+ };
+
+ async.parallelLimit = function(tasks, limit, callback) {
+ _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback);
+ };
+
+ async.series = function (tasks, callback) {
+ callback = callback || function () {};
+ if (_isArray(tasks)) {
+ async.mapSeries(tasks, function (fn, callback) {
+ if (fn) {
+ fn(function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ callback.call(null, err, args);
+ });
+ }
+ }, callback);
+ }
+ else {
+ var results = {};
+ async.eachSeries(_keys(tasks), function (k, callback) {
+ tasks[k](function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[k] = args;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+
+ async.iterator = function (tasks) {
+ var makeCallback = function (index) {
+ var fn = function () {
+ if (tasks.length) {
+ tasks[index].apply(null, arguments);
+ }
+ return fn.next();
+ };
+ fn.next = function () {
+ return (index < tasks.length - 1) ? makeCallback(index + 1): null;
+ };
+ return fn;
+ };
+ return makeCallback(0);
+ };
+
+ async.apply = function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function () {
+ return fn.apply(
+ null, args.concat(Array.prototype.slice.call(arguments))
+ );
+ };
+ };
+
+ var _concat = function (eachfn, arr, fn, callback) {
+ var r = [];
+ eachfn(arr, function (x, cb) {
+ fn(x, function (err, y) {
+ r = r.concat(y || []);
+ cb(err);
+ });
+ }, function (err) {
+ callback(err, r);
+ });
+ };
+ async.concat = doParallel(_concat);
+ async.concatSeries = doSeries(_concat);
+
+ async.whilst = function (test, iterator, callback) {
+ if (test()) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ async.whilst(test, iterator, callback);
+ });
+ }
+ else {
+ callback();
+ }
+ };
+
+ async.doWhilst = function (iterator, test, callback) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (test.apply(null, args)) {
+ async.doWhilst(iterator, test, callback);
+ }
+ else {
+ callback();
+ }
+ });
+ };
+
+ async.until = function (test, iterator, callback) {
+ if (!test()) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ async.until(test, iterator, callback);
+ });
+ }
+ else {
+ callback();
+ }
+ };
+
+ async.doUntil = function (iterator, test, callback) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (!test.apply(null, args)) {
+ async.doUntil(iterator, test, callback);
+ }
+ else {
+ callback();
+ }
+ });
+ };
+
+ async.queue = function (worker, concurrency) {
+ if (concurrency === undefined) {
+ concurrency = 1;
+ }
+ function _insert(q, data, pos, callback) {
+ if (!q.started){
+ q.started = true;
+ }
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ if(data.length == 0) {
+ // call drain immediately if there are no tasks
+ return async.setImmediate(function() {
+ if (q.drain) {
+ q.drain();
+ }
+ });
+ }
+ _each(data, function(task) {
+ var item = {
+ data: task,
+ callback: typeof callback === 'function' ? callback : null
+ };
+
+ if (pos) {
+ q.tasks.unshift(item);
+ } else {
+ q.tasks.push(item);
+ }
+
+ if (q.saturated && q.tasks.length === q.concurrency) {
+ q.saturated();
+ }
+ async.setImmediate(q.process);
+ });
+ }
+
+ var workers = 0;
+ var q = {
+ tasks: [],
+ concurrency: concurrency,
+ saturated: null,
+ empty: null,
+ drain: null,
+ started: false,
+ paused: false,
+ push: function (data, callback) {
+ _insert(q, data, false, callback);
+ },
+ kill: function () {
+ q.drain = null;
+ q.tasks = [];
+ },
+ unshift: function (data, callback) {
+ _insert(q, data, true, callback);
+ },
+ process: function () {
+ if (!q.paused && workers < q.concurrency && q.tasks.length) {
+ var task = q.tasks.shift();
+ if (q.empty && q.tasks.length === 0) {
+ q.empty();
+ }
+ workers += 1;
+ var next = function () {
+ workers -= 1;
+ if (task.callback) {
+ task.callback.apply(task, arguments);
+ }
+ if (q.drain && q.tasks.length + workers === 0) {
+ q.drain();
+ }
+ q.process();
+ };
+ var cb = only_once(next);
+ worker(task.data, cb);
+ }
+ },
+ length: function () {
+ return q.tasks.length;
+ },
+ running: function () {
+ return workers;
+ },
+ idle: function() {
+ return q.tasks.length + workers === 0;
+ },
+ pause: function () {
+ if (q.paused === true) { return; }
+ q.paused = true;
+ q.process();
+ },
+ resume: function () {
+ if (q.paused === false) { return; }
+ q.paused = false;
+ q.process();
+ }
+ };
+ return q;
+ };
+
+ async.priorityQueue = function (worker, concurrency) {
+
+ function _compareTasks(a, b){
+ return a.priority - b.priority;
+ };
+
+ function _binarySearch(sequence, item, compare) {
+ var beg = -1,
+ end = sequence.length - 1;
+ while (beg < end) {
+ var mid = beg + ((end - beg + 1) >>> 1);
+ if (compare(item, sequence[mid]) >= 0) {
+ beg = mid;
+ } else {
+ end = mid - 1;
+ }
+ }
+ return beg;
+ }
+
+ function _insert(q, data, priority, callback) {
+ if (!q.started){
+ q.started = true;
+ }
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ if(data.length == 0) {
+ // call drain immediately if there are no tasks
+ return async.setImmediate(function() {
+ if (q.drain) {
+ q.drain();
+ }
+ });
+ }
+ _each(data, function(task) {
+ var item = {
+ data: task,
+ priority: priority,
+ callback: typeof callback === 'function' ? callback : null
+ };
+
+ q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item);
+
+ if (q.saturated && q.tasks.length === q.concurrency) {
+ q.saturated();
+ }
+ async.setImmediate(q.process);
+ });
+ }
+
+ // Start with a normal queue
+ var q = async.queue(worker, concurrency);
+
+ // Override push to accept second parameter representing priority
+ q.push = function (data, priority, callback) {
+ _insert(q, data, priority, callback);
+ };
+
+ // Remove unshift function
+ delete q.unshift;
+
+ return q;
+ };
+
+ async.cargo = function (worker, payload) {
+ var working = false,
+ tasks = [];
+
+ var cargo = {
+ tasks: tasks,
+ payload: payload,
+ saturated: null,
+ empty: null,
+ drain: null,
+ drained: true,
+ push: function (data, callback) {
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ _each(data, function(task) {
+ tasks.push({
+ data: task,
+ callback: typeof callback === 'function' ? callback : null
+ });
+ cargo.drained = false;
+ if (cargo.saturated && tasks.length === payload) {
+ cargo.saturated();
+ }
+ });
+ async.setImmediate(cargo.process);
+ },
+ process: function process() {
+ if (working) return;
+ if (tasks.length === 0) {
+ if(cargo.drain && !cargo.drained) cargo.drain();
+ cargo.drained = true;
+ return;
+ }
+
+ var ts = typeof payload === 'number'
+ ? tasks.splice(0, payload)
+ : tasks.splice(0, tasks.length);
+
+ var ds = _map(ts, function (task) {
+ return task.data;
+ });
+
+ if(cargo.empty) cargo.empty();
+ working = true;
+ worker(ds, function () {
+ working = false;
+
+ var args = arguments;
+ _each(ts, function (data) {
+ if (data.callback) {
+ data.callback.apply(null, args);
+ }
+ });
+
+ process();
+ });
+ },
+ length: function () {
+ return tasks.length;
+ },
+ running: function () {
+ return working;
+ }
+ };
+ return cargo;
+ };
+
+ var _console_fn = function (name) {
+ return function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ fn.apply(null, args.concat([function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (typeof console !== 'undefined') {
+ if (err) {
+ if (console.error) {
+ console.error(err);
+ }
+ }
+ else if (console[name]) {
+ _each(args, function (x) {
+ console[name](x);
+ });
+ }
+ }
+ }]));
+ };
+ };
+ async.log = _console_fn('log');
+ async.dir = _console_fn('dir');
+ /*async.info = _console_fn('info');
+ async.warn = _console_fn('warn');
+ async.error = _console_fn('error');*/
+
+ async.memoize = function (fn, hasher) {
+ var memo = {};
+ var queues = {};
+ hasher = hasher || function (x) {
+ return x;
+ };
+ var memoized = function () {
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ var key = hasher.apply(null, args);
+ if (key in memo) {
+ async.nextTick(function () {
+ callback.apply(null, memo[key]);
+ });
+ }
+ else if (key in queues) {
+ queues[key].push(callback);
+ }
+ else {
+ queues[key] = [callback];
+ fn.apply(null, args.concat([function () {
+ memo[key] = arguments;
+ var q = queues[key];
+ delete queues[key];
+ for (var i = 0, l = q.length; i < l; i++) {
+ q[i].apply(null, arguments);
+ }
+ }]));
+ }
+ };
+ memoized.memo = memo;
+ memoized.unmemoized = fn;
+ return memoized;
+ };
+
+ async.unmemoize = function (fn) {
+ return function () {
+ return (fn.unmemoized || fn).apply(null, arguments);
+ };
+ };
+
+ async.times = function (count, iterator, callback) {
+ var counter = [];
+ for (var i = 0; i < count; i++) {
+ counter.push(i);
+ }
+ return async.map(counter, iterator, callback);
+ };
+
+ async.timesSeries = function (count, iterator, callback) {
+ var counter = [];
+ for (var i = 0; i < count; i++) {
+ counter.push(i);
+ }
+ return async.mapSeries(counter, iterator, callback);
+ };
+
+ async.seq = function (/* functions... */) {
+ var fns = arguments;
+ return function () {
+ var that = this;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ async.reduce(fns, args, function (newargs, fn, cb) {
+ fn.apply(that, newargs.concat([function () {
+ var err = arguments[0];
+ var nextargs = Array.prototype.slice.call(arguments, 1);
+ cb(err, nextargs);
+ }]))
+ },
+ function (err, results) {
+ callback.apply(that, [err].concat(results));
+ });
+ };
+ };
+
+ async.compose = function (/* functions... */) {
+ return async.seq.apply(null, Array.prototype.reverse.call(arguments));
+ };
+
+ var _applyEach = function (eachfn, fns /*args...*/) {
+ var go = function () {
+ var that = this;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ return eachfn(fns, function (fn, cb) {
+ fn.apply(that, args.concat([cb]));
+ },
+ callback);
+ };
+ if (arguments.length > 2) {
+ var args = Array.prototype.slice.call(arguments, 2);
+ return go.apply(this, args);
+ }
+ else {
+ return go;
+ }
+ };
+ async.applyEach = doParallel(_applyEach);
+ async.applyEachSeries = doSeries(_applyEach);
+
+ async.forever = function (fn, callback) {
+ function next(err) {
+ if (err) {
+ if (callback) {
+ return callback(err);
+ }
+ throw err;
+ }
+ fn(next);
+ }
+ next();
+ };
+
+ // Node.js
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = async;
+ }
+ // AMD / RequireJS
+ else if (typeof define !== 'undefined' && define.amd) {
+ define([], function () {
+ return async;
+ });
+ }
+ // included directly via
+
+```
+
+## Documentation
+
+### Collections
+
+* [`each`](#each)
+* [`eachSeries`](#eachSeries)
+* [`eachLimit`](#eachLimit)
+* [`map`](#map)
+* [`mapSeries`](#mapSeries)
+* [`mapLimit`](#mapLimit)
+* [`filter`](#filter)
+* [`filterSeries`](#filterSeries)
+* [`reject`](#reject)
+* [`rejectSeries`](#rejectSeries)
+* [`reduce`](#reduce)
+* [`reduceRight`](#reduceRight)
+* [`detect`](#detect)
+* [`detectSeries`](#detectSeries)
+* [`sortBy`](#sortBy)
+* [`some`](#some)
+* [`every`](#every)
+* [`concat`](#concat)
+* [`concatSeries`](#concatSeries)
+
+### Control Flow
+
+* [`series`](#seriestasks-callback)
+* [`parallel`](#parallel)
+* [`parallelLimit`](#parallellimittasks-limit-callback)
+* [`whilst`](#whilst)
+* [`doWhilst`](#doWhilst)
+* [`until`](#until)
+* [`doUntil`](#doUntil)
+* [`forever`](#forever)
+* [`waterfall`](#waterfall)
+* [`compose`](#compose)
+* [`seq`](#seq)
+* [`applyEach`](#applyEach)
+* [`applyEachSeries`](#applyEachSeries)
+* [`queue`](#queue)
+* [`priorityQueue`](#priorityQueue)
+* [`cargo`](#cargo)
+* [`auto`](#auto)
+* [`retry`](#retry)
+* [`iterator`](#iterator)
+* [`apply`](#apply)
+* [`nextTick`](#nextTick)
+* [`times`](#times)
+* [`timesSeries`](#timesSeries)
+
+### Utils
+
+* [`memoize`](#memoize)
+* [`unmemoize`](#unmemoize)
+* [`log`](#log)
+* [`dir`](#dir)
+* [`noConflict`](#noConflict)
+
+
+## Collections
+
+
+
+### each(arr, iterator, callback)
+
+Applies the function `iterator` to each item in `arr`, in parallel.
+The `iterator` is called with an item from the list, and a callback for when it
+has finished. If the `iterator` passes an error to its `callback`, the main
+`callback` (for the `each` function) is immediately called with the error.
+
+Note, that since this function applies `iterator` to each item in parallel,
+there is no guarantee that the iterator functions will complete in order.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err)` which must be called once it has
+ completed. If no error has occured, the `callback` should be run without
+ arguments or with an explicit `null` argument.
+* `callback(err)` - A callback which is called when all `iterator` functions
+ have finished, or an error occurs.
+
+__Examples__
+
+
+```js
+// assuming openFiles is an array of file names and saveFile is a function
+// to save the modified contents of that file:
+
+async.each(openFiles, saveFile, function(err){
+ // if any of the saves produced an error, err would equal that error
+});
+```
+
+```js
+// assuming openFiles is an array of file names
+
+async.each(openFiles, function( file, callback) {
+
+ // Perform operation on file here.
+ console.log('Processing file ' + file);
+
+ if( file.length > 32 ) {
+ console.log('This file name is too long');
+ callback('File name too long');
+ } else {
+ // Do work to process file here
+ console.log('File processed');
+ callback();
+ }
+}, function(err){
+ // if any of the file processing produced an error, err would equal that error
+ if( err ) {
+ // One of the iterations produced an error.
+ // All processing will now stop.
+ console.log('A file failed to process');
+ } else {
+ console.log('All files have been processed successfully');
+ }
+});
+```
+
+---------------------------------------
+
+
+
+### eachSeries(arr, iterator, callback)
+
+The same as [`each`](#each), only `iterator` is applied to each item in `arr` in
+series. The next `iterator` is only called once the current one has completed.
+This means the `iterator` functions will complete in order.
+
+
+---------------------------------------
+
+
+
+### eachLimit(arr, limit, iterator, callback)
+
+The same as [`each`](#each), only no more than `limit` `iterator`s will be simultaneously
+running at any time.
+
+Note that the items in `arr` are not processed in batches, so there is no guarantee that
+the first `limit` `iterator` functions will complete before any others are started.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `limit` - The maximum number of `iterator`s to run at any time.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err)` which must be called once it has
+ completed. If no error has occured, the callback should be run without
+ arguments or with an explicit `null` argument.
+* `callback(err)` - A callback which is called when all `iterator` functions
+ have finished, or an error occurs.
+
+__Example__
+
+```js
+// Assume documents is an array of JSON objects and requestApi is a
+// function that interacts with a rate-limited REST api.
+
+async.eachLimit(documents, 20, requestApi, function(err){
+ // if any of the saves produced an error, err would equal that error
+});
+```
+
+---------------------------------------
+
+
+### map(arr, iterator, callback)
+
+Produces a new array of values by mapping each value in `arr` through
+the `iterator` function. The `iterator` is called with an item from `arr` and a
+callback for when it has finished processing. Each of these callback takes 2 arguments:
+an `error`, and the transformed item from `arr`. If `iterator` passes an error to this
+callback, the main `callback` (for the `map` function) is immediately called with the error.
+
+Note, that since this function applies the `iterator` to each item in parallel,
+there is no guarantee that the `iterator` functions will complete in order.
+However, the results array will be in the same order as the original `arr`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, transformed)` which must be called once
+ it has completed with an error (which can be `null`) and a transformed item.
+* `callback(err, results)` - A callback which is called when all `iterator`
+ functions have finished, or an error occurs. Results is an array of the
+ transformed items from the `arr`.
+
+__Example__
+
+```js
+async.map(['file1','file2','file3'], fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+```
+
+---------------------------------------
+
+
+### mapSeries(arr, iterator, callback)
+
+The same as [`map`](#map), only the `iterator` is applied to each item in `arr` in
+series. The next `iterator` is only called once the current one has completed.
+The results array will be in the same order as the original.
+
+
+---------------------------------------
+
+
+### mapLimit(arr, limit, iterator, callback)
+
+The same as [`map`](#map), only no more than `limit` `iterator`s will be simultaneously
+running at any time.
+
+Note that the items are not processed in batches, so there is no guarantee that
+the first `limit` `iterator` functions will complete before any others are started.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `limit` - The maximum number of `iterator`s to run at any time.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, transformed)` which must be called once
+ it has completed with an error (which can be `null`) and a transformed item.
+* `callback(err, results)` - A callback which is called when all `iterator`
+ calls have finished, or an error occurs. The result is an array of the
+ transformed items from the original `arr`.
+
+__Example__
+
+```js
+async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+```
+
+---------------------------------------
+
+
+
+### filter(arr, iterator, callback)
+
+__Alias:__ `select`
+
+Returns a new array of all the values in `arr` which pass an async truth test.
+_The callback for each `iterator` call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`. This operation is
+performed in parallel, but the results array will be in the same order as the
+original.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in `arr`.
+ The `iterator` is passed a `callback(truthValue)`, which must be called with a
+ boolean argument once it has completed.
+* `callback(results)` - A callback which is called after all the `iterator`
+ functions have finished.
+
+__Example__
+
+```js
+async.filter(['file1','file2','file3'], fs.exists, function(results){
+ // results now equals an array of the existing files
+});
+```
+
+---------------------------------------
+
+
+
+### filterSeries(arr, iterator, callback)
+
+__Alias:__ `selectSeries`
+
+The same as [`filter`](#filter) only the `iterator` is applied to each item in `arr` in
+series. The next `iterator` is only called once the current one has completed.
+The results array will be in the same order as the original.
+
+---------------------------------------
+
+
+### reject(arr, iterator, callback)
+
+The opposite of [`filter`](#filter). Removes values that pass an `async` truth test.
+
+---------------------------------------
+
+
+### rejectSeries(arr, iterator, callback)
+
+The same as [`reject`](#reject), only the `iterator` is applied to each item in `arr`
+in series.
+
+
+---------------------------------------
+
+
+### reduce(arr, memo, iterator, callback)
+
+__Aliases:__ `inject`, `foldl`
+
+Reduces `arr` into a single value using an async `iterator` to return
+each successive step. `memo` is the initial state of the reduction.
+This function only operates in series.
+
+For performance reasons, it may make sense to split a call to this function into
+a parallel map, and then use the normal `Array.prototype.reduce` on the results.
+This function is for situations where each step in the reduction needs to be async;
+if you can get the data before reducing it, then it's probably a good idea to do so.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `memo` - The initial state of the reduction.
+* `iterator(memo, item, callback)` - A function applied to each item in the
+ array to produce the next step in the reduction. The `iterator` is passed a
+ `callback(err, reduction)` which accepts an optional error as its first
+ argument, and the state of the reduction as the second. If an error is
+ passed to the callback, the reduction is stopped and the main `callback` is
+ immediately called with the error.
+* `callback(err, result)` - A callback which is called after all the `iterator`
+ functions have finished. Result is the reduced value.
+
+__Example__
+
+```js
+async.reduce([1,2,3], 0, function(memo, item, callback){
+ // pointless async:
+ process.nextTick(function(){
+ callback(null, memo + item)
+ });
+}, function(err, result){
+ // result is now equal to the last value of memo, which is 6
+});
+```
+
+---------------------------------------
+
+
+### reduceRight(arr, memo, iterator, callback)
+
+__Alias:__ `foldr`
+
+Same as [`reduce`](#reduce), only operates on `arr` in reverse order.
+
+
+---------------------------------------
+
+
+### detect(arr, iterator, callback)
+
+Returns the first value in `arr` that passes an async truth test. The
+`iterator` is applied in parallel, meaning the first iterator to return `true` will
+fire the detect `callback` with that result. That means the result might not be
+the first item in the original `arr` (in terms of order) that passes the test.
+
+If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries).
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in `arr`.
+ The iterator is passed a `callback(truthValue)` which must be called with a
+ boolean argument once it has completed.
+* `callback(result)` - A callback which is called as soon as any iterator returns
+ `true`, or after all the `iterator` functions have finished. Result will be
+ the first item in the array that passes the truth test (iterator) or the
+ value `undefined` if none passed.
+
+__Example__
+
+```js
+async.detect(['file1','file2','file3'], fs.exists, function(result){
+ // result now equals the first file in the list that exists
+});
+```
+
+---------------------------------------
+
+
+### detectSeries(arr, iterator, callback)
+
+The same as [`detect`](#detect), only the `iterator` is applied to each item in `arr`
+in series. This means the result is always the first in the original `arr` (in
+terms of array order) that passes the truth test.
+
+
+---------------------------------------
+
+
+### sortBy(arr, iterator, callback)
+
+Sorts a list by the results of running each `arr` value through an async `iterator`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, sortValue)` which must be called once it
+ has completed with an error (which can be `null`) and a value to use as the sort
+ criteria.
+* `callback(err, results)` - A callback which is called after all the `iterator`
+ functions have finished, or an error occurs. Results is the items from
+ the original `arr` sorted by the values returned by the `iterator` calls.
+
+__Example__
+
+```js
+async.sortBy(['file1','file2','file3'], function(file, callback){
+ fs.stat(file, function(err, stats){
+ callback(err, stats.mtime);
+ });
+}, function(err, results){
+ // results is now the original array of files sorted by
+ // modified date
+});
+```
+
+__Sort Order__
+
+By modifying the callback parameter the sorting order can be influenced:
+
+```js
+//ascending order
+async.sortBy([1,9,3,5], function(x, callback){
+ callback(err, x);
+}, function(err,result){
+ //result callback
+} );
+
+//descending order
+async.sortBy([1,9,3,5], function(x, callback){
+ callback(err, x*-1); //<- x*-1 instead of x, turns the order around
+}, function(err,result){
+ //result callback
+} );
+```
+
+---------------------------------------
+
+
+### some(arr, iterator, callback)
+
+__Alias:__ `any`
+
+Returns `true` if at least one element in the `arr` satisfies an async test.
+_The callback for each iterator call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`. Once any iterator
+call returns `true`, the main `callback` is immediately called.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in the array
+ in parallel. The iterator is passed a callback(truthValue) which must be
+ called with a boolean argument once it has completed.
+* `callback(result)` - A callback which is called as soon as any iterator returns
+ `true`, or after all the iterator functions have finished. Result will be
+ either `true` or `false` depending on the values of the async tests.
+
+__Example__
+
+```js
+async.some(['file1','file2','file3'], fs.exists, function(result){
+ // if result is true then at least one of the files exists
+});
+```
+
+---------------------------------------
+
+
+### every(arr, iterator, callback)
+
+__Alias:__ `all`
+
+Returns `true` if every element in `arr` satisfies an async test.
+_The callback for each `iterator` call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in the array
+ in parallel. The iterator is passed a callback(truthValue) which must be
+ called with a boolean argument once it has completed.
+* `callback(result)` - A callback which is called after all the `iterator`
+ functions have finished. Result will be either `true` or `false` depending on
+ the values of the async tests.
+
+__Example__
+
+```js
+async.every(['file1','file2','file3'], fs.exists, function(result){
+ // if result is true then every file exists
+});
+```
+
+---------------------------------------
+
+
+### concat(arr, iterator, callback)
+
+Applies `iterator` to each item in `arr`, concatenating the results. Returns the
+concatenated list. The `iterator`s are called in parallel, and the results are
+concatenated as they return. There is no guarantee that the results array will
+be returned in the original order of `arr` passed to the `iterator` function.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, results)` which must be called once it
+ has completed with an error (which can be `null`) and an array of results.
+* `callback(err, results)` - A callback which is called after all the `iterator`
+ functions have finished, or an error occurs. Results is an array containing
+ the concatenated results of the `iterator` function.
+
+__Example__
+
+```js
+async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){
+ // files is now a list of filenames that exist in the 3 directories
+});
+```
+
+---------------------------------------
+
+
+### concatSeries(arr, iterator, callback)
+
+Same as [`concat`](#concat), but executes in series instead of parallel.
+
+
+## Control Flow
+
+
+### series(tasks, [callback])
+
+Run the functions in the `tasks` array in series, each one running once the previous
+function has completed. If any functions in the series pass an error to its
+callback, no more functions are run, and `callback` is immediately called with the value of the error.
+Otherwise, `callback` receives an array of results when `tasks` have completed.
+
+It is also possible to use an object instead of an array. Each property will be
+run as a function, and the results will be passed to the final `callback` as an object
+instead of an array. This can be a more readable way of handling results from
+[`series`](#series).
+
+**Note** that while many implementations preserve the order of object properties, the
+[ECMAScript Language Specifcation](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)
+explicitly states that
+
+> The mechanics and order of enumerating the properties is not specified.
+
+So if you rely on the order in which your series of functions are executed, and want
+this to work on all platforms, consider using an array.
+
+__Arguments__
+
+* `tasks` - An array or object containing functions to run, each function is passed
+ a `callback(err, result)` it must call on completion with an error `err` (which can
+ be `null`) and an optional `result` value.
+* `callback(err, results)` - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the `task` callbacks.
+
+__Example__
+
+```js
+async.series([
+ function(callback){
+ // do some stuff ...
+ callback(null, 'one');
+ },
+ function(callback){
+ // do some more stuff ...
+ callback(null, 'two');
+ }
+],
+// optional callback
+function(err, results){
+ // results is now equal to ['one', 'two']
+});
+
+
+// an example using an object instead of an array
+async.series({
+ one: function(callback){
+ setTimeout(function(){
+ callback(null, 1);
+ }, 200);
+ },
+ two: function(callback){
+ setTimeout(function(){
+ callback(null, 2);
+ }, 100);
+ }
+},
+function(err, results) {
+ // results is now equal to: {one: 1, two: 2}
+});
+```
+
+---------------------------------------
+
+
+### parallel(tasks, [callback])
+
+Run the `tasks` array of functions in parallel, without waiting until the previous
+function has completed. If any of the functions pass an error to its
+callback, the main `callback` is immediately called with the value of the error.
+Once the `tasks` have completed, the results are passed to the final `callback` as an
+array.
+
+It is also possible to use an object instead of an array. Each property will be
+run as a function and the results will be passed to the final `callback` as an object
+instead of an array. This can be a more readable way of handling results from
+[`parallel`](#parallel).
+
+
+__Arguments__
+
+* `tasks` - An array or object containing functions to run. Each function is passed
+ a `callback(err, result)` which it must call on completion with an error `err`
+ (which can be `null`) and an optional `result` value.
+* `callback(err, results)` - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the task callbacks.
+
+__Example__
+
+```js
+async.parallel([
+ function(callback){
+ setTimeout(function(){
+ callback(null, 'one');
+ }, 200);
+ },
+ function(callback){
+ setTimeout(function(){
+ callback(null, 'two');
+ }, 100);
+ }
+],
+// optional callback
+function(err, results){
+ // the results array will equal ['one','two'] even though
+ // the second function had a shorter timeout.
+});
+
+
+// an example using an object instead of an array
+async.parallel({
+ one: function(callback){
+ setTimeout(function(){
+ callback(null, 1);
+ }, 200);
+ },
+ two: function(callback){
+ setTimeout(function(){
+ callback(null, 2);
+ }, 100);
+ }
+},
+function(err, results) {
+ // results is now equals to: {one: 1, two: 2}
+});
+```
+
+---------------------------------------
+
+
+### parallelLimit(tasks, limit, [callback])
+
+The same as [`parallel`](#parallel), only `tasks` are executed in parallel
+with a maximum of `limit` tasks executing at any time.
+
+Note that the `tasks` are not executed in batches, so there is no guarantee that
+the first `limit` tasks will complete before any others are started.
+
+__Arguments__
+
+* `tasks` - An array or object containing functions to run, each function is passed
+ a `callback(err, result)` it must call on completion with an error `err` (which can
+ be `null`) and an optional `result` value.
+* `limit` - The maximum number of `tasks` to run at any time.
+* `callback(err, results)` - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the `task` callbacks.
+
+---------------------------------------
+
+
+### whilst(test, fn, callback)
+
+Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped,
+or an error occurs.
+
+__Arguments__
+
+* `test()` - synchronous truth test to perform before each execution of `fn`.
+* `fn(callback)` - A function which is called each time `test` passes. The function is
+ passed a `callback(err)`, which must be called once it has completed with an
+ optional `err` argument.
+* `callback(err)` - A callback which is called after the test fails and repeated
+ execution of `fn` has stopped.
+
+__Example__
+
+```js
+var count = 0;
+
+async.whilst(
+ function () { return count < 5; },
+ function (callback) {
+ count++;
+ setTimeout(callback, 1000);
+ },
+ function (err) {
+ // 5 seconds have passed
+ }
+);
+```
+
+---------------------------------------
+
+
+### doWhilst(fn, test, callback)
+
+The post-check version of [`whilst`](#whilst). To reflect the difference in
+the order of operations, the arguments `test` and `fn` are switched.
+
+`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.
+
+---------------------------------------
+
+
+### until(test, fn, callback)
+
+Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped,
+or an error occurs.
+
+The inverse of [`whilst`](#whilst).
+
+---------------------------------------
+
+
+### doUntil(fn, test, callback)
+
+Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`.
+
+---------------------------------------
+
+
+### forever(fn, errback)
+
+Calls the asynchronous function `fn` with a callback parameter that allows it to
+call itself again, in series, indefinitely.
+
+If an error is passed to the callback then `errback` is called with the
+error, and execution stops, otherwise it will never be called.
+
+```js
+async.forever(
+ function(next) {
+ // next is suitable for passing to things that need a callback(err [, whatever]);
+ // it will result in this function being called again.
+ },
+ function(err) {
+ // if next is called with a value in its first parameter, it will appear
+ // in here as 'err', and execution will stop.
+ }
+);
+```
+
+---------------------------------------
+
+
+### waterfall(tasks, [callback])
+
+Runs the `tasks` array of functions in series, each passing their results to the next in
+the array. However, if any of the `tasks` pass an error to their own callback, the
+next function is not executed, and the main `callback` is immediately called with
+the error.
+
+__Arguments__
+
+* `tasks` - An array of functions to run, each function is passed a
+ `callback(err, result1, result2, ...)` it must call on completion. The first
+ argument is an error (which can be `null`) and any further arguments will be
+ passed as arguments in order to the next task.
+* `callback(err, [results])` - An optional callback to run once all the functions
+ have completed. This will be passed the results of the last task's callback.
+
+
+
+__Example__
+
+```js
+async.waterfall([
+ function(callback){
+ callback(null, 'one', 'two');
+ },
+ function(arg1, arg2, callback){
+ // arg1 now equals 'one' and arg2 now equals 'two'
+ callback(null, 'three');
+ },
+ function(arg1, callback){
+ // arg1 now equals 'three'
+ callback(null, 'done');
+ }
+], function (err, result) {
+ // result now equals 'done'
+});
+```
+
+---------------------------------------
+
+### compose(fn1, fn2...)
+
+Creates a function which is a composition of the passed asynchronous
+functions. Each function consumes the return value of the function that
+follows. Composing functions `f()`, `g()`, and `h()` would produce the result of
+`f(g(h()))`, only this version uses callbacks to obtain the return values.
+
+Each function is executed with the `this` binding of the composed function.
+
+__Arguments__
+
+* `functions...` - the asynchronous functions to compose
+
+
+__Example__
+
+```js
+function add1(n, callback) {
+ setTimeout(function () {
+ callback(null, n + 1);
+ }, 10);
+}
+
+function mul3(n, callback) {
+ setTimeout(function () {
+ callback(null, n * 3);
+ }, 10);
+}
+
+var add1mul3 = async.compose(mul3, add1);
+
+add1mul3(4, function (err, result) {
+ // result now equals 15
+});
+```
+
+---------------------------------------
+
+### seq(fn1, fn2...)
+
+Version of the compose function that is more natural to read.
+Each following function consumes the return value of the latter function.
+
+Each function is executed with the `this` binding of the composed function.
+
+__Arguments__
+
+* functions... - the asynchronous functions to compose
+
+
+__Example__
+
+```js
+// Requires lodash (or underscore), express3 and dresende's orm2.
+// Part of an app, that fetches cats of the logged user.
+// This example uses `seq` function to avoid overnesting and error
+// handling clutter.
+app.get('/cats', function(request, response) {
+ function handleError(err, data, callback) {
+ if (err) {
+ console.error(err);
+ response.json({ status: 'error', message: err.message });
+ }
+ else {
+ callback(data);
+ }
+ }
+ var User = request.models.User;
+ async.seq(
+ _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data))
+ handleError,
+ function(user, fn) {
+ user.getCats(fn); // 'getCats' has signature (callback(err, data))
+ },
+ handleError,
+ function(cats) {
+ response.json({ status: 'ok', message: 'Cats found', data: cats });
+ }
+ )(req.session.user_id);
+ }
+});
+```
+
+---------------------------------------
+
+### applyEach(fns, args..., callback)
+
+Applies the provided arguments to each function in the array, calling
+`callback` after all functions have completed. If you only provide the first
+argument, then it will return a function which lets you pass in the
+arguments as if it were a single function call.
+
+__Arguments__
+
+* `fns` - the asynchronous functions to all call with the same arguments
+* `args...` - any number of separate arguments to pass to the function
+* `callback` - the final argument should be the callback, called when all
+ functions have completed processing
+
+
+__Example__
+
+```js
+async.applyEach([enableSearch, updateSchema], 'bucket', callback);
+
+// partial application example:
+async.each(
+ buckets,
+ async.applyEach([enableSearch, updateSchema]),
+ callback
+);
+```
+
+---------------------------------------
+
+
+### applyEachSeries(arr, iterator, callback)
+
+The same as [`applyEach`](#applyEach) only the functions are applied in series.
+
+---------------------------------------
+
+
+### queue(worker, concurrency)
+
+Creates a `queue` object with the specified `concurrency`. Tasks added to the
+`queue` are processed in parallel (up to the `concurrency` limit). If all
+`worker`s are in progress, the task is queued until one becomes available.
+Once a `worker` completes a `task`, that `task`'s callback is called.
+
+__Arguments__
+
+* `worker(task, callback)` - An asynchronous function for processing a queued
+ task, which must call its `callback(err)` argument when finished, with an
+ optional `error` as an argument.
+* `concurrency` - An `integer` for determining how many `worker` functions should be
+ run in parallel.
+
+__Queue objects__
+
+The `queue` object returned by this function has the following properties and
+methods:
+
+* `length()` - a function returning the number of items waiting to be processed.
+* `started` - a function returning whether or not any items have been pushed and processed by the queue
+* `running()` - a function returning the number of items currently being processed.
+* `idle()` - a function returning false if there are items waiting or being processed, or true if not.
+* `concurrency` - an integer for determining how many `worker` functions should be
+ run in parallel. This property can be changed after a `queue` is created to
+ alter the concurrency on-the-fly.
+* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once
+ the `worker` has finished processing the task. Instead of a single task, a `tasks` array
+ can be submitted. The respective callback is used for every task in the list.
+* `unshift(task, [callback])` - add a new task to the front of the `queue`.
+* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit,
+ and further tasks will be queued.
+* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`.
+* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`.
+* `paused` - a boolean for determining whether the queue is in a paused state
+* `pause()` - a function that pauses the processing of tasks until `resume()` is called.
+* `resume()` - a function that resumes the processing of queued tasks when the queue is paused.
+* `kill()` - a function that empties remaining tasks from the queue forcing it to go idle.
+
+__Example__
+
+```js
+// create a queue object with concurrency 2
+
+var q = async.queue(function (task, callback) {
+ console.log('hello ' + task.name);
+ callback();
+}, 2);
+
+
+// assign a callback
+q.drain = function() {
+ console.log('all items have been processed');
+}
+
+// add some items to the queue
+
+q.push({name: 'foo'}, function (err) {
+ console.log('finished processing foo');
+});
+q.push({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+
+// add some items to the queue (batch-wise)
+
+q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {
+ console.log('finished processing bar');
+});
+
+// add some items to the front of the queue
+
+q.unshift({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+```
+
+
+---------------------------------------
+
+
+### priorityQueue(worker, concurrency)
+
+The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects:
+
+* `push(task, priority, [callback])` - `priority` should be a number. If an array of
+ `tasks` is given, all tasks will be assigned the same priority.
+* The `unshift` method was removed.
+
+---------------------------------------
+
+
+### cargo(worker, [payload])
+
+Creates a `cargo` object with the specified payload. Tasks added to the
+cargo will be processed altogether (up to the `payload` limit). If the
+`worker` is in progress, the task is queued until it becomes available. Once
+the `worker` has completed some tasks, each callback of those tasks is called.
+Check out [this animation](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) for how `cargo` and `queue` work.
+
+While [queue](#queue) passes only one task to one of a group of workers
+at a time, cargo passes an array of tasks to a single worker, repeating
+when the worker is finished.
+
+__Arguments__
+
+* `worker(tasks, callback)` - An asynchronous function for processing an array of
+ queued tasks, which must call its `callback(err)` argument when finished, with
+ an optional `err` argument.
+* `payload` - An optional `integer` for determining how many tasks should be
+ processed per round; if omitted, the default is unlimited.
+
+__Cargo objects__
+
+The `cargo` object returned by this function has the following properties and
+methods:
+
+* `length()` - A function returning the number of items waiting to be processed.
+* `payload` - An `integer` for determining how many tasks should be
+ process per round. This property can be changed after a `cargo` is created to
+ alter the payload on-the-fly.
+* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called
+ once the `worker` has finished processing the task. Instead of a single task, an array of `tasks`
+ can be submitted. The respective callback is used for every task in the list.
+* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued.
+* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`.
+* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`.
+
+__Example__
+
+```js
+// create a cargo object with payload 2
+
+var cargo = async.cargo(function (tasks, callback) {
+ for(var i=0; i
+### auto(tasks, [callback])
+
+Determines the best order for running the functions in `tasks`, based on their
+requirements. Each function can optionally depend on other functions being completed
+first, and each function is run as soon as its requirements are satisfied.
+
+If any of the functions pass an error to their callback, it will not
+complete (so any other functions depending on it will not run), and the main
+`callback` is immediately called with the error. Functions also receive an
+object containing the results of functions which have completed so far.
+
+Note, all functions are called with a `results` object as a second argument,
+so it is unsafe to pass functions in the `tasks` object which cannot handle the
+extra argument.
+
+For example, this snippet of code:
+
+```js
+async.auto({
+ readData: async.apply(fs.readFile, 'data.txt', 'utf-8')
+}, callback);
+```
+
+will have the effect of calling `readFile` with the results object as the last
+argument, which will fail:
+
+```js
+fs.readFile('data.txt', 'utf-8', cb, {});
+```
+
+Instead, wrap the call to `readFile` in a function which does not forward the
+`results` object:
+
+```js
+async.auto({
+ readData: function(cb, results){
+ fs.readFile('data.txt', 'utf-8', cb);
+ }
+}, callback);
+```
+
+__Arguments__
+
+* `tasks` - An object. Each of its properties is either a function or an array of
+ requirements, with the function itself the last item in the array. The object's key
+ of a property serves as the name of the task defined by that property,
+ i.e. can be used when specifying requirements for other tasks.
+ The function receives two arguments: (1) a `callback(err, result)` which must be
+ called when finished, passing an `error` (which can be `null`) and the result of
+ the function's execution, and (2) a `results` object, containing the results of
+ the previously executed functions.
+* `callback(err, results)` - An optional callback which is called when all the
+ tasks have been completed. It receives the `err` argument if any `tasks`
+ pass an error to their callback. Results are always returned; however, if
+ an error occurs, no further `tasks` will be performed, and the results
+ object will only contain partial results.
+
+
+__Example__
+
+```js
+async.auto({
+ get_data: function(callback){
+ console.log('in get_data');
+ // async code to get some data
+ callback(null, 'data', 'converted to array');
+ },
+ make_folder: function(callback){
+ console.log('in make_folder');
+ // async code to create a directory to store a file in
+ // this is run at the same time as getting the data
+ callback(null, 'folder');
+ },
+ write_file: ['get_data', 'make_folder', function(callback, results){
+ console.log('in write_file', JSON.stringify(results));
+ // once there is some data and the directory exists,
+ // write the data to a file in the directory
+ callback(null, 'filename');
+ }],
+ email_link: ['write_file', function(callback, results){
+ console.log('in email_link', JSON.stringify(results));
+ // once the file is written let's email a link to it...
+ // results.write_file contains the filename returned by write_file.
+ callback(null, {'file':results.write_file, 'email':'user@example.com'});
+ }]
+}, function(err, results) {
+ console.log('err = ', err);
+ console.log('results = ', results);
+});
+```
+
+This is a fairly trivial example, but to do this using the basic parallel and
+series functions would look like this:
+
+```js
+async.parallel([
+ function(callback){
+ console.log('in get_data');
+ // async code to get some data
+ callback(null, 'data', 'converted to array');
+ },
+ function(callback){
+ console.log('in make_folder');
+ // async code to create a directory to store a file in
+ // this is run at the same time as getting the data
+ callback(null, 'folder');
+ }
+],
+function(err, results){
+ async.series([
+ function(callback){
+ console.log('in write_file', JSON.stringify(results));
+ // once there is some data and the directory exists,
+ // write the data to a file in the directory
+ results.push('filename');
+ callback(null);
+ },
+ function(callback){
+ console.log('in email_link', JSON.stringify(results));
+ // once the file is written let's email a link to it...
+ callback(null, {'file':results.pop(), 'email':'user@example.com'});
+ }
+ ]);
+});
+```
+
+For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding
+new tasks much easier (and the code more readable).
+
+
+---------------------------------------
+
+
+### retry([times = 5], task, [callback])
+
+Attempts to get a successful response from `task` no more than `times` times before
+returning an error. If the task is successful, the `callback` will be passed the result
+of the successfull task. If all attemps fail, the callback will be passed the error and
+result (if any) of the final attempt.
+
+__Arguments__
+
+* `times` - An integer indicating how many times to attempt the `task` before giving up. Defaults to 5.
+* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)`
+ which must be called when finished, passing `err` (which can be `null`) and the `result` of
+ the function's execution, and (2) a `results` object, containing the results of
+ the previously executed functions (if nested inside another control flow).
+* `callback(err, results)` - An optional callback which is called when the
+ task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`.
+
+The [`retry`](#retry) function can be used as a stand-alone control flow by passing a
+callback, as shown below:
+
+```js
+async.retry(3, apiMethod, function(err, result) {
+ // do something with the result
+});
+```
+
+It can also be embeded within other control flow functions to retry individual methods
+that are not as reliable, like this:
+
+```js
+async.auto({
+ users: api.getUsers.bind(api),
+ payments: async.retry(3, api.getPayments.bind(api))
+}, function(err, results) {
+ // do something with the results
+});
+```
+
+
+---------------------------------------
+
+
+### iterator(tasks)
+
+Creates an iterator function which calls the next function in the `tasks` array,
+returning a continuation to call the next one after that. It's also possible to
+“peek” at the next iterator with `iterator.next()`.
+
+This function is used internally by the `async` module, but can be useful when
+you want to manually control the flow of functions in series.
+
+__Arguments__
+
+* `tasks` - An array of functions to run.
+
+__Example__
+
+```js
+var iterator = async.iterator([
+ function(){ sys.p('one'); },
+ function(){ sys.p('two'); },
+ function(){ sys.p('three'); }
+]);
+
+node> var iterator2 = iterator();
+'one'
+node> var iterator3 = iterator2();
+'two'
+node> iterator3();
+'three'
+node> var nextfn = iterator2.next();
+node> nextfn();
+'three'
+```
+
+---------------------------------------
+
+
+### apply(function, arguments..)
+
+Creates a continuation function with some arguments already applied.
+
+Useful as a shorthand when combined with other control flow functions. Any arguments
+passed to the returned function are added to the arguments originally passed
+to apply.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to automatically apply when the
+ continuation is called.
+
+__Example__
+
+```js
+// using apply
+
+async.parallel([
+ async.apply(fs.writeFile, 'testfile1', 'test1'),
+ async.apply(fs.writeFile, 'testfile2', 'test2'),
+]);
+
+
+// the same process without using apply
+
+async.parallel([
+ function(callback){
+ fs.writeFile('testfile1', 'test1', callback);
+ },
+ function(callback){
+ fs.writeFile('testfile2', 'test2', callback);
+ }
+]);
+```
+
+It's possible to pass any number of additional arguments when calling the
+continuation:
+
+```js
+node> var fn = async.apply(sys.puts, 'one');
+node> fn('two', 'three');
+one
+two
+three
+```
+
+---------------------------------------
+
+
+### nextTick(callback)
+
+Calls `callback` on a later loop around the event loop. In Node.js this just
+calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)`
+if available, otherwise `setTimeout(callback, 0)`, which means other higher priority
+events may precede the execution of `callback`.
+
+This is used internally for browser-compatibility purposes.
+
+__Arguments__
+
+* `callback` - The function to call on a later loop around the event loop.
+
+__Example__
+
+```js
+var call_order = [];
+async.nextTick(function(){
+ call_order.push('two');
+ // call_order now equals ['one','two']
+});
+call_order.push('one')
+```
+
+
+### times(n, callback)
+
+Calls the `callback` function `n` times, and accumulates results in the same manner
+you would use with [`map`](#map).
+
+__Arguments__
+
+* `n` - The number of times to run the function.
+* `callback` - The function to call `n` times.
+
+__Example__
+
+```js
+// Pretend this is some complicated async factory
+var createUser = function(id, callback) {
+ callback(null, {
+ id: 'user' + id
+ })
+}
+// generate 5 users
+async.times(5, function(n, next){
+ createUser(n, function(err, user) {
+ next(err, user)
+ })
+}, function(err, users) {
+ // we should now have 5 users
+});
+```
+
+
+### timesSeries(n, callback)
+
+The same as [`times`](#times), only the iterator is applied to each item in `arr` in
+series. The next `iterator` is only called once the current one has completed.
+The results array will be in the same order as the original.
+
+
+## Utils
+
+
+### memoize(fn, [hasher])
+
+Caches the results of an `async` function. When creating a hash to store function
+results against, the callback is omitted from the hash and an optional hash
+function can be used.
+
+The cache of results is exposed as the `memo` property of the function returned
+by `memoize`.
+
+__Arguments__
+
+* `fn` - The function to proxy and cache results from.
+* `hasher` - Tn optional function for generating a custom hash for storing
+ results. It has all the arguments applied to it apart from the callback, and
+ must be synchronous.
+
+__Example__
+
+```js
+var slow_fn = function (name, callback) {
+ // do something
+ callback(null, result);
+};
+var fn = async.memoize(slow_fn);
+
+// fn can now be used as if it were slow_fn
+fn('some name', function () {
+ // callback
+});
+```
+
+
+### unmemoize(fn)
+
+Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized
+form. Handy for testing.
+
+__Arguments__
+
+* `fn` - the memoized function
+
+
+### log(function, arguments)
+
+Logs the result of an `async` function to the `console`. Only works in Node.js or
+in browsers that support `console.log` and `console.error` (such as FF and Chrome).
+If multiple arguments are returned from the async function, `console.log` is
+called on each argument in order.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to apply to the function.
+
+__Example__
+
+```js
+var hello = function(name, callback){
+ setTimeout(function(){
+ callback(null, 'hello ' + name);
+ }, 1000);
+};
+```
+```js
+node> async.log(hello, 'world');
+'hello world'
+```
+
+---------------------------------------
+
+
+### dir(function, arguments)
+
+Logs the result of an `async` function to the `console` using `console.dir` to
+display the properties of the resulting object. Only works in Node.js or
+in browsers that support `console.dir` and `console.error` (such as FF and Chrome).
+If multiple arguments are returned from the async function, `console.dir` is
+called on each argument in order.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to apply to the function.
+
+__Example__
+
+```js
+var hello = function(name, callback){
+ setTimeout(function(){
+ callback(null, {hello: name});
+ }, 1000);
+};
+```
+```js
+node> async.dir(hello, 'world');
+{hello: 'world'}
+```
+
+---------------------------------------
+
+
+### noConflict()
+
+Changes the value of `async` back to its original value, returning a reference to the
+`async` object.
diff --git a/node_modules/grunt-contrib-sass/node_modules/async/component.json b/node_modules/grunt-contrib-sass/node_modules/async/component.json
new file mode 100644
index 0000000..bbb0115
--- /dev/null
+++ b/node_modules/grunt-contrib-sass/node_modules/async/component.json
@@ -0,0 +1,11 @@
+{
+ "name": "async",
+ "repo": "caolan/async",
+ "description": "Higher-order functions and common patterns for asynchronous code",
+ "version": "0.1.23",
+ "keywords": [],
+ "dependencies": {},
+ "development": {},
+ "main": "lib/async.js",
+ "scripts": [ "lib/async.js" ]
+}
diff --git a/node_modules/grunt-contrib-sass/node_modules/async/lib/async.js b/node_modules/grunt-contrib-sass/node_modules/async/lib/async.js
new file mode 100755
index 0000000..01e8afc
--- /dev/null
+++ b/node_modules/grunt-contrib-sass/node_modules/async/lib/async.js
@@ -0,0 +1,1123 @@
+/*!
+ * async
+ * https://github.com/caolan/async
+ *
+ * Copyright 2010-2014 Caolan McMahon
+ * Released under the MIT license
+ */
+/*jshint onevar: false, indent:4 */
+/*global setImmediate: false, setTimeout: false, console: false */
+(function () {
+
+ var async = {};
+
+ // global on the server, window in the browser
+ var root, previous_async;
+
+ root = this;
+ if (root != null) {
+ previous_async = root.async;
+ }
+
+ async.noConflict = function () {
+ root.async = previous_async;
+ return async;
+ };
+
+ function only_once(fn) {
+ var called = false;
+ return function() {
+ if (called) throw new Error("Callback was already called.");
+ called = true;
+ fn.apply(root, arguments);
+ }
+ }
+
+ //// cross-browser compatiblity functions ////
+
+ var _toString = Object.prototype.toString;
+
+ var _isArray = Array.isArray || function (obj) {
+ return _toString.call(obj) === '[object Array]';
+ };
+
+ var _each = function (arr, iterator) {
+ if (arr.forEach) {
+ return arr.forEach(iterator);
+ }
+ for (var i = 0; i < arr.length; i += 1) {
+ iterator(arr[i], i, arr);
+ }
+ };
+
+ var _map = function (arr, iterator) {
+ if (arr.map) {
+ return arr.map(iterator);
+ }
+ var results = [];
+ _each(arr, function (x, i, a) {
+ results.push(iterator(x, i, a));
+ });
+ return results;
+ };
+
+ var _reduce = function (arr, iterator, memo) {
+ if (arr.reduce) {
+ return arr.reduce(iterator, memo);
+ }
+ _each(arr, function (x, i, a) {
+ memo = iterator(memo, x, i, a);
+ });
+ return memo;
+ };
+
+ var _keys = function (obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ }
+ var keys = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ return keys;
+ };
+
+ //// exported async module functions ////
+
+ //// nextTick implementation with browser-compatible fallback ////
+ if (typeof process === 'undefined' || !(process.nextTick)) {
+ if (typeof setImmediate === 'function') {
+ async.nextTick = function (fn) {
+ // not a direct alias for IE10 compatibility
+ setImmediate(fn);
+ };
+ async.setImmediate = async.nextTick;
+ }
+ else {
+ async.nextTick = function (fn) {
+ setTimeout(fn, 0);
+ };
+ async.setImmediate = async.nextTick;
+ }
+ }
+ else {
+ async.nextTick = process.nextTick;
+ if (typeof setImmediate !== 'undefined') {
+ async.setImmediate = function (fn) {
+ // not a direct alias for IE10 compatibility
+ setImmediate(fn);
+ };
+ }
+ else {
+ async.setImmediate = async.nextTick;
+ }
+ }
+
+ async.each = function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ _each(arr, function (x) {
+ iterator(x, only_once(done) );
+ });
+ function done(err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ }
+ }
+ };
+ async.forEach = async.each;
+
+ async.eachSeries = function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ var iterate = function () {
+ iterator(arr[completed], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ else {
+ iterate();
+ }
+ }
+ });
+ };
+ iterate();
+ };
+ async.forEachSeries = async.eachSeries;
+
+ async.eachLimit = function (arr, limit, iterator, callback) {
+ var fn = _eachLimit(limit);
+ fn.apply(null, [arr, iterator, callback]);
+ };
+ async.forEachLimit = async.eachLimit;
+
+ var _eachLimit = function (limit) {
+
+ return function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length || limit <= 0) {
+ return callback();
+ }
+ var completed = 0;
+ var started = 0;
+ var running = 0;
+
+ (function replenish () {
+ if (completed >= arr.length) {
+ return callback();
+ }
+
+ while (running < limit && started < arr.length) {
+ started += 1;
+ running += 1;
+ iterator(arr[started - 1], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ running -= 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ else {
+ replenish();
+ }
+ }
+ });
+ }
+ })();
+ };
+ };
+
+
+ var doParallel = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [async.each].concat(args));
+ };
+ };
+ var doParallelLimit = function(limit, fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [_eachLimit(limit)].concat(args));
+ };
+ };
+ var doSeries = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [async.eachSeries].concat(args));
+ };
+ };
+
+
+ var _asyncMap = function (eachfn, arr, iterator, callback) {
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ if (!callback) {
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (err) {
+ callback(err);
+ });
+ });
+ } else {
+ var results = [];
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (err, v) {
+ results[x.index] = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+ async.map = doParallel(_asyncMap);
+ async.mapSeries = doSeries(_asyncMap);
+ async.mapLimit = function (arr, limit, iterator, callback) {
+ return _mapLimit(limit)(arr, iterator, callback);
+ };
+
+ var _mapLimit = function(limit) {
+ return doParallelLimit(limit, _asyncMap);
+ };
+
+ // reduce only has a series version, as doing reduce in parallel won't
+ // work in many situations.
+ async.reduce = function (arr, memo, iterator, callback) {
+ async.eachSeries(arr, function (x, callback) {
+ iterator(memo, x, function (err, v) {
+ memo = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, memo);
+ });
+ };
+ // inject alias
+ async.inject = async.reduce;
+ // foldl alias
+ async.foldl = async.reduce;
+
+ async.reduceRight = function (arr, memo, iterator, callback) {
+ var reversed = _map(arr, function (x) {
+ return x;
+ }).reverse();
+ async.reduce(reversed, memo, iterator, callback);
+ };
+ // foldr alias
+ async.foldr = async.reduceRight;
+
+ var _filter = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (v) {
+ if (v) {
+ results.push(x);
+ }
+ callback();
+ });
+ }, function (err) {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ };
+ async.filter = doParallel(_filter);
+ async.filterSeries = doSeries(_filter);
+ // select alias
+ async.select = async.filter;
+ async.selectSeries = async.filterSeries;
+
+ var _reject = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (v) {
+ if (!v) {
+ results.push(x);
+ }
+ callback();
+ });
+ }, function (err) {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ };
+ async.reject = doParallel(_reject);
+ async.rejectSeries = doSeries(_reject);
+
+ var _detect = function (eachfn, arr, iterator, main_callback) {
+ eachfn(arr, function (x, callback) {
+ iterator(x, function (result) {
+ if (result) {
+ main_callback(x);
+ main_callback = function () {};
+ }
+ else {
+ callback();
+ }
+ });
+ }, function (err) {
+ main_callback();
+ });
+ };
+ async.detect = doParallel(_detect);
+ async.detectSeries = doSeries(_detect);
+
+ async.some = function (arr, iterator, main_callback) {
+ async.each(arr, function (x, callback) {
+ iterator(x, function (v) {
+ if (v) {
+ main_callback(true);
+ main_callback = function () {};
+ }
+ callback();
+ });
+ }, function (err) {
+ main_callback(false);
+ });
+ };
+ // any alias
+ async.any = async.some;
+
+ async.every = function (arr, iterator, main_callback) {
+ async.each(arr, function (x, callback) {
+ iterator(x, function (v) {
+ if (!v) {
+ main_callback(false);
+ main_callback = function () {};
+ }
+ callback();
+ });
+ }, function (err) {
+ main_callback(true);
+ });
+ };
+ // all alias
+ async.all = async.every;
+
+ async.sortBy = function (arr, iterator, callback) {
+ async.map(arr, function (x, callback) {
+ iterator(x, function (err, criteria) {
+ if (err) {
+ callback(err);
+ }
+ else {
+ callback(null, {value: x, criteria: criteria});
+ }
+ });
+ }, function (err, results) {
+ if (err) {
+ return callback(err);
+ }
+ else {
+ var fn = function (left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ };
+ callback(null, _map(results.sort(fn), function (x) {
+ return x.value;
+ }));
+ }
+ });
+ };
+
+ async.auto = function (tasks, callback) {
+ callback = callback || function () {};
+ var keys = _keys(tasks);
+ var remainingTasks = keys.length
+ if (!remainingTasks) {
+ return callback();
+ }
+
+ var results = {};
+
+ var listeners = [];
+ var addListener = function (fn) {
+ listeners.unshift(fn);
+ };
+ var removeListener = function (fn) {
+ for (var i = 0; i < listeners.length; i += 1) {
+ if (listeners[i] === fn) {
+ listeners.splice(i, 1);
+ return;
+ }
+ }
+ };
+ var taskComplete = function () {
+ remainingTasks--
+ _each(listeners.slice(0), function (fn) {
+ fn();
+ });
+ };
+
+ addListener(function () {
+ if (!remainingTasks) {
+ var theCallback = callback;
+ // prevent final callback from calling itself if it errors
+ callback = function () {};
+
+ theCallback(null, results);
+ }
+ });
+
+ _each(keys, function (k) {
+ var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]];
+ var taskCallback = function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ if (err) {
+ var safeResults = {};
+ _each(_keys(results), function(rkey) {
+ safeResults[rkey] = results[rkey];
+ });
+ safeResults[k] = args;
+ callback(err, safeResults);
+ // stop subsequent errors hitting callback multiple times
+ callback = function () {};
+ }
+ else {
+ results[k] = args;
+ async.setImmediate(taskComplete);
+ }
+ };
+ var requires = task.slice(0, Math.abs(task.length - 1)) || [];
+ var ready = function () {
+ return _reduce(requires, function (a, x) {
+ return (a && results.hasOwnProperty(x));
+ }, true) && !results.hasOwnProperty(k);
+ };
+ if (ready()) {
+ task[task.length - 1](taskCallback, results);
+ }
+ else {
+ var listener = function () {
+ if (ready()) {
+ removeListener(listener);
+ task[task.length - 1](taskCallback, results);
+ }
+ };
+ addListener(listener);
+ }
+ });
+ };
+
+ async.retry = function(times, task, callback) {
+ var DEFAULT_TIMES = 5;
+ var attempts = [];
+ // Use defaults if times not passed
+ if (typeof times === 'function') {
+ callback = task;
+ task = times;
+ times = DEFAULT_TIMES;
+ }
+ // Make sure times is a number
+ times = parseInt(times, 10) || DEFAULT_TIMES;
+ var wrappedTask = function(wrappedCallback, wrappedResults) {
+ var retryAttempt = function(task, finalAttempt) {
+ return function(seriesCallback) {
+ task(function(err, result){
+ seriesCallback(!err || finalAttempt, {err: err, result: result});
+ }, wrappedResults);
+ };
+ };
+ while (times) {
+ attempts.push(retryAttempt(task, !(times-=1)));
+ }
+ async.series(attempts, function(done, data){
+ data = data[data.length - 1];
+ (wrappedCallback || callback)(data.err, data.result);
+ });
+ }
+ // If a callback is passed, run this as a controll flow
+ return callback ? wrappedTask() : wrappedTask
+ };
+
+ async.waterfall = function (tasks, callback) {
+ callback = callback || function () {};
+ if (!_isArray(tasks)) {
+ var err = new Error('First argument to waterfall must be an array of functions');
+ return callback(err);
+ }
+ if (!tasks.length) {
+ return callback();
+ }
+ var wrapIterator = function (iterator) {
+ return function (err) {
+ if (err) {
+ callback.apply(null, arguments);
+ callback = function () {};
+ }
+ else {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var next = iterator.next();
+ if (next) {
+ args.push(wrapIterator(next));
+ }
+ else {
+ args.push(callback);
+ }
+ async.setImmediate(function () {
+ iterator.apply(null, args);
+ });
+ }
+ };
+ };
+ wrapIterator(async.iterator(tasks))();
+ };
+
+ var _parallel = function(eachfn, tasks, callback) {
+ callback = callback || function () {};
+ if (_isArray(tasks)) {
+ eachfn.map(tasks, function (fn, callback) {
+ if (fn) {
+ fn(function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ callback.call(null, err, args);
+ });
+ }
+ }, callback);
+ }
+ else {
+ var results = {};
+ eachfn.each(_keys(tasks), function (k, callback) {
+ tasks[k](function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[k] = args;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+
+ async.parallel = function (tasks, callback) {
+ _parallel({ map: async.map, each: async.each }, tasks, callback);
+ };
+
+ async.parallelLimit = function(tasks, limit, callback) {
+ _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback);
+ };
+
+ async.series = function (tasks, callback) {
+ callback = callback || function () {};
+ if (_isArray(tasks)) {
+ async.mapSeries(tasks, function (fn, callback) {
+ if (fn) {
+ fn(function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ callback.call(null, err, args);
+ });
+ }
+ }, callback);
+ }
+ else {
+ var results = {};
+ async.eachSeries(_keys(tasks), function (k, callback) {
+ tasks[k](function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[k] = args;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+
+ async.iterator = function (tasks) {
+ var makeCallback = function (index) {
+ var fn = function () {
+ if (tasks.length) {
+ tasks[index].apply(null, arguments);
+ }
+ return fn.next();
+ };
+ fn.next = function () {
+ return (index < tasks.length - 1) ? makeCallback(index + 1): null;
+ };
+ return fn;
+ };
+ return makeCallback(0);
+ };
+
+ async.apply = function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function () {
+ return fn.apply(
+ null, args.concat(Array.prototype.slice.call(arguments))
+ );
+ };
+ };
+
+ var _concat = function (eachfn, arr, fn, callback) {
+ var r = [];
+ eachfn(arr, function (x, cb) {
+ fn(x, function (err, y) {
+ r = r.concat(y || []);
+ cb(err);
+ });
+ }, function (err) {
+ callback(err, r);
+ });
+ };
+ async.concat = doParallel(_concat);
+ async.concatSeries = doSeries(_concat);
+
+ async.whilst = function (test, iterator, callback) {
+ if (test()) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ async.whilst(test, iterator, callback);
+ });
+ }
+ else {
+ callback();
+ }
+ };
+
+ async.doWhilst = function (iterator, test, callback) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (test.apply(null, args)) {
+ async.doWhilst(iterator, test, callback);
+ }
+ else {
+ callback();
+ }
+ });
+ };
+
+ async.until = function (test, iterator, callback) {
+ if (!test()) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ async.until(test, iterator, callback);
+ });
+ }
+ else {
+ callback();
+ }
+ };
+
+ async.doUntil = function (iterator, test, callback) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (!test.apply(null, args)) {
+ async.doUntil(iterator, test, callback);
+ }
+ else {
+ callback();
+ }
+ });
+ };
+
+ async.queue = function (worker, concurrency) {
+ if (concurrency === undefined) {
+ concurrency = 1;
+ }
+ function _insert(q, data, pos, callback) {
+ if (!q.started){
+ q.started = true;
+ }
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ if(data.length == 0) {
+ // call drain immediately if there are no tasks
+ return async.setImmediate(function() {
+ if (q.drain) {
+ q.drain();
+ }
+ });
+ }
+ _each(data, function(task) {
+ var item = {
+ data: task,
+ callback: typeof callback === 'function' ? callback : null
+ };
+
+ if (pos) {
+ q.tasks.unshift(item);
+ } else {
+ q.tasks.push(item);
+ }
+
+ if (q.saturated && q.tasks.length === q.concurrency) {
+ q.saturated();
+ }
+ async.setImmediate(q.process);
+ });
+ }
+
+ var workers = 0;
+ var q = {
+ tasks: [],
+ concurrency: concurrency,
+ saturated: null,
+ empty: null,
+ drain: null,
+ started: false,
+ paused: false,
+ push: function (data, callback) {
+ _insert(q, data, false, callback);
+ },
+ kill: function () {
+ q.drain = null;
+ q.tasks = [];
+ },
+ unshift: function (data, callback) {
+ _insert(q, data, true, callback);
+ },
+ process: function () {
+ if (!q.paused && workers < q.concurrency && q.tasks.length) {
+ var task = q.tasks.shift();
+ if (q.empty && q.tasks.length === 0) {
+ q.empty();
+ }
+ workers += 1;
+ var next = function () {
+ workers -= 1;
+ if (task.callback) {
+ task.callback.apply(task, arguments);
+ }
+ if (q.drain && q.tasks.length + workers === 0) {
+ q.drain();
+ }
+ q.process();
+ };
+ var cb = only_once(next);
+ worker(task.data, cb);
+ }
+ },
+ length: function () {
+ return q.tasks.length;
+ },
+ running: function () {
+ return workers;
+ },
+ idle: function() {
+ return q.tasks.length + workers === 0;
+ },
+ pause: function () {
+ if (q.paused === true) { return; }
+ q.paused = true;
+ q.process();
+ },
+ resume: function () {
+ if (q.paused === false) { return; }
+ q.paused = false;
+ q.process();
+ }
+ };
+ return q;
+ };
+
+ async.priorityQueue = function (worker, concurrency) {
+
+ function _compareTasks(a, b){
+ return a.priority - b.priority;
+ };
+
+ function _binarySearch(sequence, item, compare) {
+ var beg = -1,
+ end = sequence.length - 1;
+ while (beg < end) {
+ var mid = beg + ((end - beg + 1) >>> 1);
+ if (compare(item, sequence[mid]) >= 0) {
+ beg = mid;
+ } else {
+ end = mid - 1;
+ }
+ }
+ return beg;
+ }
+
+ function _insert(q, data, priority, callback) {
+ if (!q.started){
+ q.started = true;
+ }
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ if(data.length == 0) {
+ // call drain immediately if there are no tasks
+ return async.setImmediate(function() {
+ if (q.drain) {
+ q.drain();
+ }
+ });
+ }
+ _each(data, function(task) {
+ var item = {
+ data: task,
+ priority: priority,
+ callback: typeof callback === 'function' ? callback : null
+ };
+
+ q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item);
+
+ if (q.saturated && q.tasks.length === q.concurrency) {
+ q.saturated();
+ }
+ async.setImmediate(q.process);
+ });
+ }
+
+ // Start with a normal queue
+ var q = async.queue(worker, concurrency);
+
+ // Override push to accept second parameter representing priority
+ q.push = function (data, priority, callback) {
+ _insert(q, data, priority, callback);
+ };
+
+ // Remove unshift function
+ delete q.unshift;
+
+ return q;
+ };
+
+ async.cargo = function (worker, payload) {
+ var working = false,
+ tasks = [];
+
+ var cargo = {
+ tasks: tasks,
+ payload: payload,
+ saturated: null,
+ empty: null,
+ drain: null,
+ drained: true,
+ push: function (data, callback) {
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ _each(data, function(task) {
+ tasks.push({
+ data: task,
+ callback: typeof callback === 'function' ? callback : null
+ });
+ cargo.drained = false;
+ if (cargo.saturated && tasks.length === payload) {
+ cargo.saturated();
+ }
+ });
+ async.setImmediate(cargo.process);
+ },
+ process: function process() {
+ if (working) return;
+ if (tasks.length === 0) {
+ if(cargo.drain && !cargo.drained) cargo.drain();
+ cargo.drained = true;
+ return;
+ }
+
+ var ts = typeof payload === 'number'
+ ? tasks.splice(0, payload)
+ : tasks.splice(0, tasks.length);
+
+ var ds = _map(ts, function (task) {
+ return task.data;
+ });
+
+ if(cargo.empty) cargo.empty();
+ working = true;
+ worker(ds, function () {
+ working = false;
+
+ var args = arguments;
+ _each(ts, function (data) {
+ if (data.callback) {
+ data.callback.apply(null, args);
+ }
+ });
+
+ process();
+ });
+ },
+ length: function () {
+ return tasks.length;
+ },
+ running: function () {
+ return working;
+ }
+ };
+ return cargo;
+ };
+
+ var _console_fn = function (name) {
+ return function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ fn.apply(null, args.concat([function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (typeof console !== 'undefined') {
+ if (err) {
+ if (console.error) {
+ console.error(err);
+ }
+ }
+ else if (console[name]) {
+ _each(args, function (x) {
+ console[name](x);
+ });
+ }
+ }
+ }]));
+ };
+ };
+ async.log = _console_fn('log');
+ async.dir = _console_fn('dir');
+ /*async.info = _console_fn('info');
+ async.warn = _console_fn('warn');
+ async.error = _console_fn('error');*/
+
+ async.memoize = function (fn, hasher) {
+ var memo = {};
+ var queues = {};
+ hasher = hasher || function (x) {
+ return x;
+ };
+ var memoized = function () {
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ var key = hasher.apply(null, args);
+ if (key in memo) {
+ async.nextTick(function () {
+ callback.apply(null, memo[key]);
+ });
+ }
+ else if (key in queues) {
+ queues[key].push(callback);
+ }
+ else {
+ queues[key] = [callback];
+ fn.apply(null, args.concat([function () {
+ memo[key] = arguments;
+ var q = queues[key];
+ delete queues[key];
+ for (var i = 0, l = q.length; i < l; i++) {
+ q[i].apply(null, arguments);
+ }
+ }]));
+ }
+ };
+ memoized.memo = memo;
+ memoized.unmemoized = fn;
+ return memoized;
+ };
+
+ async.unmemoize = function (fn) {
+ return function () {
+ return (fn.unmemoized || fn).apply(null, arguments);
+ };
+ };
+
+ async.times = function (count, iterator, callback) {
+ var counter = [];
+ for (var i = 0; i < count; i++) {
+ counter.push(i);
+ }
+ return async.map(counter, iterator, callback);
+ };
+
+ async.timesSeries = function (count, iterator, callback) {
+ var counter = [];
+ for (var i = 0; i < count; i++) {
+ counter.push(i);
+ }
+ return async.mapSeries(counter, iterator, callback);
+ };
+
+ async.seq = function (/* functions... */) {
+ var fns = arguments;
+ return function () {
+ var that = this;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ async.reduce(fns, args, function (newargs, fn, cb) {
+ fn.apply(that, newargs.concat([function () {
+ var err = arguments[0];
+ var nextargs = Array.prototype.slice.call(arguments, 1);
+ cb(err, nextargs);
+ }]))
+ },
+ function (err, results) {
+ callback.apply(that, [err].concat(results));
+ });
+ };
+ };
+
+ async.compose = function (/* functions... */) {
+ return async.seq.apply(null, Array.prototype.reverse.call(arguments));
+ };
+
+ var _applyEach = function (eachfn, fns /*args...*/) {
+ var go = function () {
+ var that = this;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ return eachfn(fns, function (fn, cb) {
+ fn.apply(that, args.concat([cb]));
+ },
+ callback);
+ };
+ if (arguments.length > 2) {
+ var args = Array.prototype.slice.call(arguments, 2);
+ return go.apply(this, args);
+ }
+ else {
+ return go;
+ }
+ };
+ async.applyEach = doParallel(_applyEach);
+ async.applyEachSeries = doSeries(_applyEach);
+
+ async.forever = function (fn, callback) {
+ function next(err) {
+ if (err) {
+ if (callback) {
+ return callback(err);
+ }
+ throw err;
+ }
+ fn(next);
+ }
+ next();
+ };
+
+ // Node.js
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = async;
+ }
+ // AMD / RequireJS
+ else if (typeof define !== 'undefined' && define.amd) {
+ define([], function () {
+ return async;
+ });
+ }
+ // included directly via
+```
+
+Feel free to add this script to your template situation and toggle with some sort of `dev` flag.
+
+##### Using Live Reload with the Browser Extension
+Instead of adding a script tag to your page, you can live reload your page by installing a browser extension. Please visit [how do I install and use the browser extensions](http://feedback.livereload.com/knowledgebase/articles/86242-how-do-i-install-and-use-the-browser-extensions-) for help installing an extension for your browser.
+
+Once installed please use the default live reload port `35729` and the browser extension will automatically reload your page without needing the `
+
+```
+
+## Documentation
+
+### Collections
+
+* [each](#each)
+* [eachSeries](#eachSeries)
+* [eachLimit](#eachLimit)
+* [map](#map)
+* [mapSeries](#mapSeries)
+* [mapLimit](#mapLimit)
+* [filter](#filter)
+* [filterSeries](#filterSeries)
+* [reject](#reject)
+* [rejectSeries](#rejectSeries)
+* [reduce](#reduce)
+* [reduceRight](#reduceRight)
+* [detect](#detect)
+* [detectSeries](#detectSeries)
+* [sortBy](#sortBy)
+* [some](#some)
+* [every](#every)
+* [concat](#concat)
+* [concatSeries](#concatSeries)
+
+### Control Flow
+
+* [series](#series)
+* [parallel](#parallel)
+* [parallelLimit](#parallellimittasks-limit-callback)
+* [whilst](#whilst)
+* [doWhilst](#doWhilst)
+* [until](#until)
+* [doUntil](#doUntil)
+* [forever](#forever)
+* [waterfall](#waterfall)
+* [compose](#compose)
+* [applyEach](#applyEach)
+* [applyEachSeries](#applyEachSeries)
+* [queue](#queue)
+* [cargo](#cargo)
+* [auto](#auto)
+* [iterator](#iterator)
+* [apply](#apply)
+* [nextTick](#nextTick)
+* [times](#times)
+* [timesSeries](#timesSeries)
+
+### Utils
+
+* [memoize](#memoize)
+* [unmemoize](#unmemoize)
+* [log](#log)
+* [dir](#dir)
+* [noConflict](#noConflict)
+
+
+## Collections
+
+
+
+### each(arr, iterator, callback)
+
+Applies an iterator function to each item in an array, in parallel.
+The iterator is called with an item from the list and a callback for when it
+has finished. If the iterator passes an error to this callback, the main
+callback for the each function is immediately called with the error.
+
+Note, that since this function applies the iterator to each item in parallel
+there is no guarantee that the iterator functions will complete in order.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* iterator(item, callback) - A function to apply to each item in the array.
+ The iterator is passed a callback(err) which must be called once it has
+ completed. If no error has occured, the callback should be run without
+ arguments or with an explicit null argument.
+* callback(err) - A callback which is called after all the iterator functions
+ have finished, or an error has occurred.
+
+__Example__
+
+```js
+// assuming openFiles is an array of file names and saveFile is a function
+// to save the modified contents of that file:
+
+async.each(openFiles, saveFile, function(err){
+ // if any of the saves produced an error, err would equal that error
+});
+```
+
+---------------------------------------
+
+
+
+### eachSeries(arr, iterator, callback)
+
+The same as each only the iterator is applied to each item in the array in
+series. The next iterator is only called once the current one has completed
+processing. This means the iterator functions will complete in order.
+
+
+---------------------------------------
+
+
+
+### eachLimit(arr, limit, iterator, callback)
+
+The same as each only no more than "limit" iterators will be simultaneously
+running at any time.
+
+Note that the items are not processed in batches, so there is no guarantee that
+ the first "limit" iterator functions will complete before any others are
+started.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* limit - The maximum number of iterators to run at any time.
+* iterator(item, callback) - A function to apply to each item in the array.
+ The iterator is passed a callback(err) which must be called once it has
+ completed. If no error has occured, the callback should be run without
+ arguments or with an explicit null argument.
+* callback(err) - A callback which is called after all the iterator functions
+ have finished, or an error has occurred.
+
+__Example__
+
+```js
+// Assume documents is an array of JSON objects and requestApi is a
+// function that interacts with a rate-limited REST api.
+
+async.eachLimit(documents, 20, requestApi, function(err){
+ // if any of the saves produced an error, err would equal that error
+});
+```
+
+---------------------------------------
+
+
+### map(arr, iterator, callback)
+
+Produces a new array of values by mapping each value in the given array through
+the iterator function. The iterator is called with an item from the array and a
+callback for when it has finished processing. The callback takes 2 arguments,
+an error and the transformed item from the array. If the iterator passes an
+error to this callback, the main callback for the map function is immediately
+called with the error.
+
+Note, that since this function applies the iterator to each item in parallel
+there is no guarantee that the iterator functions will complete in order, however
+the results array will be in the same order as the original array.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* iterator(item, callback) - A function to apply to each item in the array.
+ The iterator is passed a callback(err, transformed) which must be called once
+ it has completed with an error (which can be null) and a transformed item.
+* callback(err, results) - A callback which is called after all the iterator
+ functions have finished, or an error has occurred. Results is an array of the
+ transformed items from the original array.
+
+__Example__
+
+```js
+async.map(['file1','file2','file3'], fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+```
+
+---------------------------------------
+
+
+### mapSeries(arr, iterator, callback)
+
+The same as map only the iterator is applied to each item in the array in
+series. The next iterator is only called once the current one has completed
+processing. The results array will be in the same order as the original.
+
+
+---------------------------------------
+
+
+### mapLimit(arr, limit, iterator, callback)
+
+The same as map only no more than "limit" iterators will be simultaneously
+running at any time.
+
+Note that the items are not processed in batches, so there is no guarantee that
+ the first "limit" iterator functions will complete before any others are
+started.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* limit - The maximum number of iterators to run at any time.
+* iterator(item, callback) - A function to apply to each item in the array.
+ The iterator is passed a callback(err, transformed) which must be called once
+ it has completed with an error (which can be null) and a transformed item.
+* callback(err, results) - A callback which is called after all the iterator
+ functions have finished, or an error has occurred. Results is an array of the
+ transformed items from the original array.
+
+__Example__
+
+```js
+async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+```
+
+---------------------------------------
+
+
+### filter(arr, iterator, callback)
+
+__Alias:__ select
+
+Returns a new array of all the values which pass an async truth test.
+_The callback for each iterator call only accepts a single argument of true or
+false, it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like fs.exists. This operation is
+performed in parallel, but the results array will be in the same order as the
+original.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* iterator(item, callback) - A truth test to apply to each item in the array.
+ The iterator is passed a callback(truthValue) which must be called with a
+ boolean argument once it has completed.
+* callback(results) - A callback which is called after all the iterator
+ functions have finished.
+
+__Example__
+
+```js
+async.filter(['file1','file2','file3'], fs.exists, function(results){
+ // results now equals an array of the existing files
+});
+```
+
+---------------------------------------
+
+
+### filterSeries(arr, iterator, callback)
+
+__alias:__ selectSeries
+
+The same as filter only the iterator is applied to each item in the array in
+series. The next iterator is only called once the current one has completed
+processing. The results array will be in the same order as the original.
+
+---------------------------------------
+
+
+### reject(arr, iterator, callback)
+
+The opposite of filter. Removes values that pass an async truth test.
+
+---------------------------------------
+
+
+### rejectSeries(arr, iterator, callback)
+
+The same as reject, only the iterator is applied to each item in the array
+in series.
+
+
+---------------------------------------
+
+
+### reduce(arr, memo, iterator, callback)
+
+__aliases:__ inject, foldl
+
+Reduces a list of values into a single value using an async iterator to return
+each successive step. Memo is the initial state of the reduction. This
+function only operates in series. For performance reasons, it may make sense to
+split a call to this function into a parallel map, then use the normal
+Array.prototype.reduce on the results. This function is for situations where
+each step in the reduction needs to be async, if you can get the data before
+reducing it then it's probably a good idea to do so.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* memo - The initial state of the reduction.
+* iterator(memo, item, callback) - A function applied to each item in the
+ array to produce the next step in the reduction. The iterator is passed a
+ callback(err, reduction) which accepts an optional error as its first
+ argument, and the state of the reduction as the second. If an error is
+ passed to the callback, the reduction is stopped and the main callback is
+ immediately called with the error.
+* callback(err, result) - A callback which is called after all the iterator
+ functions have finished. Result is the reduced value.
+
+__Example__
+
+```js
+async.reduce([1,2,3], 0, function(memo, item, callback){
+ // pointless async:
+ process.nextTick(function(){
+ callback(null, memo + item)
+ });
+}, function(err, result){
+ // result is now equal to the last value of memo, which is 6
+});
+```
+
+---------------------------------------
+
+
+### reduceRight(arr, memo, iterator, callback)
+
+__Alias:__ foldr
+
+Same as reduce, only operates on the items in the array in reverse order.
+
+
+---------------------------------------
+
+
+### detect(arr, iterator, callback)
+
+Returns the first value in a list that passes an async truth test. The
+iterator is applied in parallel, meaning the first iterator to return true will
+fire the detect callback with that result. That means the result might not be
+the first item in the original array (in terms of order) that passes the test.
+
+If order within the original array is important then look at detectSeries.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* iterator(item, callback) - A truth test to apply to each item in the array.
+ The iterator is passed a callback(truthValue) which must be called with a
+ boolean argument once it has completed.
+* callback(result) - A callback which is called as soon as any iterator returns
+ true, or after all the iterator functions have finished. Result will be
+ the first item in the array that passes the truth test (iterator) or the
+ value undefined if none passed.
+
+__Example__
+
+```js
+async.detect(['file1','file2','file3'], fs.exists, function(result){
+ // result now equals the first file in the list that exists
+});
+```
+
+---------------------------------------
+
+
+### detectSeries(arr, iterator, callback)
+
+The same as detect, only the iterator is applied to each item in the array
+in series. This means the result is always the first in the original array (in
+terms of array order) that passes the truth test.
+
+
+---------------------------------------
+
+
+### sortBy(arr, iterator, callback)
+
+Sorts a list by the results of running each value through an async iterator.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* iterator(item, callback) - A function to apply to each item in the array.
+ The iterator is passed a callback(err, sortValue) which must be called once it
+ has completed with an error (which can be null) and a value to use as the sort
+ criteria.
+* callback(err, results) - A callback which is called after all the iterator
+ functions have finished, or an error has occurred. Results is the items from
+ the original array sorted by the values returned by the iterator calls.
+
+__Example__
+
+```js
+async.sortBy(['file1','file2','file3'], function(file, callback){
+ fs.stat(file, function(err, stats){
+ callback(err, stats.mtime);
+ });
+}, function(err, results){
+ // results is now the original array of files sorted by
+ // modified date
+});
+```
+
+---------------------------------------
+
+
+### some(arr, iterator, callback)
+
+__Alias:__ any
+
+Returns true if at least one element in the array satisfies an async test.
+_The callback for each iterator call only accepts a single argument of true or
+false, it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like fs.exists. Once any iterator
+call returns true, the main callback is immediately called.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* iterator(item, callback) - A truth test to apply to each item in the array.
+ The iterator is passed a callback(truthValue) which must be called with a
+ boolean argument once it has completed.
+* callback(result) - A callback which is called as soon as any iterator returns
+ true, or after all the iterator functions have finished. Result will be
+ either true or false depending on the values of the async tests.
+
+__Example__
+
+```js
+async.some(['file1','file2','file3'], fs.exists, function(result){
+ // if result is true then at least one of the files exists
+});
+```
+
+---------------------------------------
+
+
+### every(arr, iterator, callback)
+
+__Alias:__ all
+
+Returns true if every element in the array satisfies an async test.
+_The callback for each iterator call only accepts a single argument of true or
+false, it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like fs.exists.
+
+__Arguments__
+
+* arr - An array to iterate over.
+* iterator(item, callback) - A truth test to apply to each item in the array.
+ The iterator is passed a callback(truthValue) which must be called with a
+ boolean argument once it has completed.
+* callback(result) - A callback which is called after all the iterator
+ functions have finished. Result will be either true or false depending on
+ the values of the async tests.
+
+__Example__
+
+```js
+async.every(['file1','file2','file3'], fs.exists, function(result){
+ // if result is true then every file exists
+});
+```
+
+---------------------------------------
+
+
+### concat(arr, iterator, callback)
+
+Applies an iterator to each item in a list, concatenating the results. Returns the
+concatenated list. The iterators are called in parallel, and the results are
+concatenated as they return. There is no guarantee that the results array will
+be returned in the original order of the arguments passed to the iterator function.
+
+__Arguments__
+
+* arr - An array to iterate over
+* iterator(item, callback) - A function to apply to each item in the array.
+ The iterator is passed a callback(err, results) which must be called once it
+ has completed with an error (which can be null) and an array of results.
+* callback(err, results) - A callback which is called after all the iterator
+ functions have finished, or an error has occurred. Results is an array containing
+ the concatenated results of the iterator function.
+
+__Example__
+
+```js
+async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){
+ // files is now a list of filenames that exist in the 3 directories
+});
+```
+
+---------------------------------------
+
+
+### concatSeries(arr, iterator, callback)
+
+Same as async.concat, but executes in series instead of parallel.
+
+
+## Control Flow
+
+
+### series(tasks, [callback])
+
+Run an array of functions in series, each one running once the previous
+function has completed. If any functions in the series pass an error to its
+callback, no more functions are run and the callback for the series is
+immediately called with the value of the error. Once the tasks have completed,
+the results are passed to the final callback as an array.
+
+It is also possible to use an object instead of an array. Each property will be
+run as a function and the results will be passed to the final callback as an object
+instead of an array. This can be a more readable way of handling results from
+async.series.
+
+
+__Arguments__
+
+* tasks - An array or object containing functions to run, each function is passed
+ a callback(err, result) it must call on completion with an error (which can
+ be null) and an optional result value.
+* callback(err, results) - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the task callbacks.
+
+__Example__
+
+```js
+async.series([
+ function(callback){
+ // do some stuff ...
+ callback(null, 'one');
+ },
+ function(callback){
+ // do some more stuff ...
+ callback(null, 'two');
+ }
+],
+// optional callback
+function(err, results){
+ // results is now equal to ['one', 'two']
+});
+
+
+// an example using an object instead of an array
+async.series({
+ one: function(callback){
+ setTimeout(function(){
+ callback(null, 1);
+ }, 200);
+ },
+ two: function(callback){
+ setTimeout(function(){
+ callback(null, 2);
+ }, 100);
+ }
+},
+function(err, results) {
+ // results is now equal to: {one: 1, two: 2}
+});
+```
+
+---------------------------------------
+
+
+### parallel(tasks, [callback])
+
+Run an array of functions in parallel, without waiting until the previous
+function has completed. If any of the functions pass an error to its
+callback, the main callback is immediately called with the value of the error.
+Once the tasks have completed, the results are passed to the final callback as an
+array.
+
+It is also possible to use an object instead of an array. Each property will be
+run as a function and the results will be passed to the final callback as an object
+instead of an array. This can be a more readable way of handling results from
+async.parallel.
+
+
+__Arguments__
+
+* tasks - An array or object containing functions to run, each function is passed
+ a callback(err, result) it must call on completion with an error (which can
+ be null) and an optional result value.
+* callback(err, results) - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the task callbacks.
+
+__Example__
+
+```js
+async.parallel([
+ function(callback){
+ setTimeout(function(){
+ callback(null, 'one');
+ }, 200);
+ },
+ function(callback){
+ setTimeout(function(){
+ callback(null, 'two');
+ }, 100);
+ }
+],
+// optional callback
+function(err, results){
+ // the results array will equal ['one','two'] even though
+ // the second function had a shorter timeout.
+});
+
+
+// an example using an object instead of an array
+async.parallel({
+ one: function(callback){
+ setTimeout(function(){
+ callback(null, 1);
+ }, 200);
+ },
+ two: function(callback){
+ setTimeout(function(){
+ callback(null, 2);
+ }, 100);
+ }
+},
+function(err, results) {
+ // results is now equals to: {one: 1, two: 2}
+});
+```
+
+---------------------------------------
+
+
+### parallelLimit(tasks, limit, [callback])
+
+The same as parallel only the tasks are executed in parallel with a maximum of "limit"
+tasks executing at any time.
+
+Note that the tasks are not executed in batches, so there is no guarantee that
+the first "limit" tasks will complete before any others are started.
+
+__Arguments__
+
+* tasks - An array or object containing functions to run, each function is passed
+ a callback(err, result) it must call on completion with an error (which can
+ be null) and an optional result value.
+* limit - The maximum number of tasks to run at any time.
+* callback(err, results) - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the task callbacks.
+
+---------------------------------------
+
+
+### whilst(test, fn, callback)
+
+Repeatedly call fn, while test returns true. Calls the callback when stopped,
+or an error occurs.
+
+__Arguments__
+
+* test() - synchronous truth test to perform before each execution of fn.
+* fn(callback) - A function to call each time the test passes. The function is
+ passed a callback(err) which must be called once it has completed with an
+ optional error argument.
+* callback(err) - A callback which is called after the test fails and repeated
+ execution of fn has stopped.
+
+__Example__
+
+```js
+var count = 0;
+
+async.whilst(
+ function () { return count < 5; },
+ function (callback) {
+ count++;
+ setTimeout(callback, 1000);
+ },
+ function (err) {
+ // 5 seconds have passed
+ }
+);
+```
+
+---------------------------------------
+
+
+### doWhilst(fn, test, callback)
+
+The post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.
+
+---------------------------------------
+
+
+### until(test, fn, callback)
+
+Repeatedly call fn, until test returns true. Calls the callback when stopped,
+or an error occurs.
+
+The inverse of async.whilst.
+
+---------------------------------------
+
+
+### doUntil(fn, test, callback)
+
+Like doWhilst except the test is inverted. Note the argument ordering differs from `until`.
+
+---------------------------------------
+
+
+### forever(fn, callback)
+
+Calls the asynchronous function 'fn' repeatedly, in series, indefinitely.
+If an error is passed to fn's callback then 'callback' is called with the
+error, otherwise it will never be called.
+
+---------------------------------------
+
+
+### waterfall(tasks, [callback])
+
+Runs an array of functions in series, each passing their results to the next in
+the array. However, if any of the functions pass an error to the callback, the
+next function is not executed and the main callback is immediately called with
+the error.
+
+__Arguments__
+
+* tasks - An array of functions to run, each function is passed a
+ callback(err, result1, result2, ...) it must call on completion. The first
+ argument is an error (which can be null) and any further arguments will be
+ passed as arguments in order to the next task.
+* callback(err, [results]) - An optional callback to run once all the functions
+ have completed. This will be passed the results of the last task's callback.
+
+
+
+__Example__
+
+```js
+async.waterfall([
+ function(callback){
+ callback(null, 'one', 'two');
+ },
+ function(arg1, arg2, callback){
+ callback(null, 'three');
+ },
+ function(arg1, callback){
+ // arg1 now equals 'three'
+ callback(null, 'done');
+ }
+], function (err, result) {
+ // result now equals 'done'
+});
+```
+
+---------------------------------------
+
+### compose(fn1, fn2...)
+
+Creates a function which is a composition of the passed asynchronous
+functions. Each function consumes the return value of the function that
+follows. Composing functions f(), g() and h() would produce the result of
+f(g(h())), only this version uses callbacks to obtain the return values.
+
+Each function is executed with the `this` binding of the composed function.
+
+__Arguments__
+
+* functions... - the asynchronous functions to compose
+
+
+__Example__
+
+```js
+function add1(n, callback) {
+ setTimeout(function () {
+ callback(null, n + 1);
+ }, 10);
+}
+
+function mul3(n, callback) {
+ setTimeout(function () {
+ callback(null, n * 3);
+ }, 10);
+}
+
+var add1mul3 = async.compose(mul3, add1);
+
+add1mul3(4, function (err, result) {
+ // result now equals 15
+});
+```
+
+---------------------------------------
+
+### applyEach(fns, args..., callback)
+
+Applies the provided arguments to each function in the array, calling the
+callback after all functions have completed. If you only provide the first
+argument then it will return a function which lets you pass in the
+arguments as if it were a single function call.
+
+__Arguments__
+
+* fns - the asynchronous functions to all call with the same arguments
+* args... - any number of separate arguments to pass to the function
+* callback - the final argument should be the callback, called when all
+ functions have completed processing
+
+
+__Example__
+
+```js
+async.applyEach([enableSearch, updateSchema], 'bucket', callback);
+
+// partial application example:
+async.each(
+ buckets,
+ async.applyEach([enableSearch, updateSchema]),
+ callback
+);
+```
+
+---------------------------------------
+
+
+### applyEachSeries(arr, iterator, callback)
+
+The same as applyEach only the functions are applied in series.
+
+---------------------------------------
+
+
+### queue(worker, concurrency)
+
+Creates a queue object with the specified concurrency. Tasks added to the
+queue will be processed in parallel (up to the concurrency limit). If all
+workers are in progress, the task is queued until one is available. Once
+a worker has completed a task, the task's callback is called.
+
+__Arguments__
+
+* worker(task, callback) - An asynchronous function for processing a queued
+ task, which must call its callback(err) argument when finished, with an
+ optional error as an argument.
+* concurrency - An integer for determining how many worker functions should be
+ run in parallel.
+
+__Queue objects__
+
+The queue object returned by this function has the following properties and
+methods:
+
+* length() - a function returning the number of items waiting to be processed.
+* concurrency - an integer for determining how many worker functions should be
+ run in parallel. This property can be changed after a queue is created to
+ alter the concurrency on-the-fly.
+* push(task, [callback]) - add a new task to the queue, the callback is called
+ once the worker has finished processing the task.
+ instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.
+* unshift(task, [callback]) - add a new task to the front of the queue.
+* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued
+* empty - a callback that is called when the last item from the queue is given to a worker
+* drain - a callback that is called when the last item from the queue has returned from the worker
+
+__Example__
+
+```js
+// create a queue object with concurrency 2
+
+var q = async.queue(function (task, callback) {
+ console.log('hello ' + task.name);
+ callback();
+}, 2);
+
+
+// assign a callback
+q.drain = function() {
+ console.log('all items have been processed');
+}
+
+// add some items to the queue
+
+q.push({name: 'foo'}, function (err) {
+ console.log('finished processing foo');
+});
+q.push({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+
+// add some items to the queue (batch-wise)
+
+q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {
+ console.log('finished processing bar');
+});
+
+// add some items to the front of the queue
+
+q.unshift({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+```
+
+---------------------------------------
+
+
+### cargo(worker, [payload])
+
+Creates a cargo object with the specified payload. Tasks added to the
+cargo will be processed altogether (up to the payload limit). If the
+worker is in progress, the task is queued until it is available. Once
+the worker has completed some tasks, each callback of those tasks is called.
+
+__Arguments__
+
+* worker(tasks, callback) - An asynchronous function for processing an array of
+ queued tasks, which must call its callback(err) argument when finished, with
+ an optional error as an argument.
+* payload - An optional integer for determining how many tasks should be
+ processed per round; if omitted, the default is unlimited.
+
+__Cargo objects__
+
+The cargo object returned by this function has the following properties and
+methods:
+
+* length() - a function returning the number of items waiting to be processed.
+* payload - an integer for determining how many tasks should be
+ process per round. This property can be changed after a cargo is created to
+ alter the payload on-the-fly.
+* push(task, [callback]) - add a new task to the queue, the callback is called
+ once the worker has finished processing the task.
+ instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.
+* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued
+* empty - a callback that is called when the last item from the queue is given to a worker
+* drain - a callback that is called when the last item from the queue has returned from the worker
+
+__Example__
+
+```js
+// create a cargo object with payload 2
+
+var cargo = async.cargo(function (tasks, callback) {
+ for(var i=0; i
+### auto(tasks, [callback])
+
+Determines the best order for running functions based on their requirements.
+Each function can optionally depend on other functions being completed first,
+and each function is run as soon as its requirements are satisfied. If any of
+the functions pass an error to their callback, that function will not complete
+(so any other functions depending on it will not run) and the main callback
+will be called immediately with the error. Functions also receive an object
+containing the results of functions which have completed so far.
+
+Note, all functions are called with a results object as a second argument,
+so it is unsafe to pass functions in the tasks object which cannot handle the
+extra argument. For example, this snippet of code:
+
+```js
+async.auto({
+ readData: async.apply(fs.readFile, 'data.txt', 'utf-8')
+}, callback);
+```
+
+will have the effect of calling readFile with the results object as the last
+argument, which will fail:
+
+```js
+fs.readFile('data.txt', 'utf-8', cb, {});
+```
+
+Instead, wrap the call to readFile in a function which does not forward the
+results object:
+
+```js
+async.auto({
+ readData: function(cb, results){
+ fs.readFile('data.txt', 'utf-8', cb);
+ }
+}, callback);
+```
+
+__Arguments__
+
+* tasks - An object literal containing named functions or an array of
+ requirements, with the function itself the last item in the array. The key
+ used for each function or array is used when specifying requirements. The
+ function receives two arguments: (1) a callback(err, result) which must be
+ called when finished, passing an error (which can be null) and the result of
+ the function's execution, and (2) a results object, containing the results of
+ the previously executed functions.
+* callback(err, results) - An optional callback which is called when all the
+ tasks have been completed. The callback will receive an error as an argument
+ if any tasks pass an error to their callback. Results will always be passed
+ but if an error occurred, no other tasks will be performed, and the results
+ object will only contain partial results.
+
+
+__Example__
+
+```js
+async.auto({
+ get_data: function(callback){
+ // async code to get some data
+ },
+ make_folder: function(callback){
+ // async code to create a directory to store a file in
+ // this is run at the same time as getting the data
+ },
+ write_file: ['get_data', 'make_folder', function(callback){
+ // once there is some data and the directory exists,
+ // write the data to a file in the directory
+ callback(null, filename);
+ }],
+ email_link: ['write_file', function(callback, results){
+ // once the file is written let's email a link to it...
+ // results.write_file contains the filename returned by write_file.
+ }]
+});
+```
+
+This is a fairly trivial example, but to do this using the basic parallel and
+series functions would look like this:
+
+```js
+async.parallel([
+ function(callback){
+ // async code to get some data
+ },
+ function(callback){
+ // async code to create a directory to store a file in
+ // this is run at the same time as getting the data
+ }
+],
+function(err, results){
+ async.series([
+ function(callback){
+ // once there is some data and the directory exists,
+ // write the data to a file in the directory
+ },
+ function(callback){
+ // once the file is written let's email a link to it...
+ }
+ ]);
+});
+```
+
+For a complicated series of async tasks using the auto function makes adding
+new tasks much easier and makes the code more readable.
+
+
+---------------------------------------
+
+
+### iterator(tasks)
+
+Creates an iterator function which calls the next function in the array,
+returning a continuation to call the next one after that. It's also possible to
+'peek' the next iterator by doing iterator.next().
+
+This function is used internally by the async module but can be useful when
+you want to manually control the flow of functions in series.
+
+__Arguments__
+
+* tasks - An array of functions to run.
+
+__Example__
+
+```js
+var iterator = async.iterator([
+ function(){ sys.p('one'); },
+ function(){ sys.p('two'); },
+ function(){ sys.p('three'); }
+]);
+
+node> var iterator2 = iterator();
+'one'
+node> var iterator3 = iterator2();
+'two'
+node> iterator3();
+'three'
+node> var nextfn = iterator2.next();
+node> nextfn();
+'three'
+```
+
+---------------------------------------
+
+
+### apply(function, arguments..)
+
+Creates a continuation function with some arguments already applied, a useful
+shorthand when combined with other control flow functions. Any arguments
+passed to the returned function are added to the arguments originally passed
+to apply.
+
+__Arguments__
+
+* function - The function you want to eventually apply all arguments to.
+* arguments... - Any number of arguments to automatically apply when the
+ continuation is called.
+
+__Example__
+
+```js
+// using apply
+
+async.parallel([
+ async.apply(fs.writeFile, 'testfile1', 'test1'),
+ async.apply(fs.writeFile, 'testfile2', 'test2'),
+]);
+
+
+// the same process without using apply
+
+async.parallel([
+ function(callback){
+ fs.writeFile('testfile1', 'test1', callback);
+ },
+ function(callback){
+ fs.writeFile('testfile2', 'test2', callback);
+ }
+]);
+```
+
+It's possible to pass any number of additional arguments when calling the
+continuation:
+
+```js
+node> var fn = async.apply(sys.puts, 'one');
+node> fn('two', 'three');
+one
+two
+three
+```
+
+---------------------------------------
+
+
+### nextTick(callback)
+
+Calls the callback on a later loop around the event loop. In node.js this just
+calls process.nextTick, in the browser it falls back to setImmediate(callback)
+if available, otherwise setTimeout(callback, 0), which means other higher priority
+events may precede the execution of the callback.
+
+This is used internally for browser-compatibility purposes.
+
+__Arguments__
+
+* callback - The function to call on a later loop around the event loop.
+
+__Example__
+
+```js
+var call_order = [];
+async.nextTick(function(){
+ call_order.push('two');
+ // call_order now equals ['one','two']
+});
+call_order.push('one')
+```
+
+
+### times(n, callback)
+
+Calls the callback n times and accumulates results in the same manner
+you would use with async.map.
+
+__Arguments__
+
+* n - The number of times to run the function.
+* callback - The function to call n times.
+
+__Example__
+
+```js
+// Pretend this is some complicated async factory
+var createUser = function(id, callback) {
+ callback(null, {
+ id: 'user' + id
+ })
+}
+// generate 5 users
+async.times(5, function(n, next){
+ createUser(n, function(err, user) {
+ next(err, user)
+ })
+}, function(err, users) {
+ // we should now have 5 users
+});
+```
+
+
+### timesSeries(n, callback)
+
+The same as times only the iterator is applied to each item in the array in
+series. The next iterator is only called once the current one has completed
+processing. The results array will be in the same order as the original.
+
+
+## Utils
+
+
+### memoize(fn, [hasher])
+
+Caches the results of an async function. When creating a hash to store function
+results against, the callback is omitted from the hash and an optional hash
+function can be used.
+
+The cache of results is exposed as the `memo` property of the function returned
+by `memoize`.
+
+__Arguments__
+
+* fn - the function you to proxy and cache results from.
+* hasher - an optional function for generating a custom hash for storing
+ results, it has all the arguments applied to it apart from the callback, and
+ must be synchronous.
+
+__Example__
+
+```js
+var slow_fn = function (name, callback) {
+ // do something
+ callback(null, result);
+};
+var fn = async.memoize(slow_fn);
+
+// fn can now be used as if it were slow_fn
+fn('some name', function () {
+ // callback
+});
+```
+
+
+### unmemoize(fn)
+
+Undoes a memoized function, reverting it to the original, unmemoized
+form. Comes handy in tests.
+
+__Arguments__
+
+* fn - the memoized function
+
+
+### log(function, arguments)
+
+Logs the result of an async function to the console. Only works in node.js or
+in browsers that support console.log and console.error (such as FF and Chrome).
+If multiple arguments are returned from the async function, console.log is
+called on each argument in order.
+
+__Arguments__
+
+* function - The function you want to eventually apply all arguments to.
+* arguments... - Any number of arguments to apply to the function.
+
+__Example__
+
+```js
+var hello = function(name, callback){
+ setTimeout(function(){
+ callback(null, 'hello ' + name);
+ }, 1000);
+};
+```
+```js
+node> async.log(hello, 'world');
+'hello world'
+```
+
+---------------------------------------
+
+
+### dir(function, arguments)
+
+Logs the result of an async function to the console using console.dir to
+display the properties of the resulting object. Only works in node.js or
+in browsers that support console.dir and console.error (such as FF and Chrome).
+If multiple arguments are returned from the async function, console.dir is
+called on each argument in order.
+
+__Arguments__
+
+* function - The function you want to eventually apply all arguments to.
+* arguments... - Any number of arguments to apply to the function.
+
+__Example__
+
+```js
+var hello = function(name, callback){
+ setTimeout(function(){
+ callback(null, {hello: name});
+ }, 1000);
+};
+```
+```js
+node> async.dir(hello, 'world');
+{hello: 'world'}
+```
+
+---------------------------------------
+
+
+### noConflict()
+
+Changes the value of async back to its original value, returning a reference to the
+async object.
diff --git a/node_modules/grunt-contrib-watch/node_modules/async/component.json b/node_modules/grunt-contrib-watch/node_modules/async/component.json
new file mode 100644
index 0000000..bbb0115
--- /dev/null
+++ b/node_modules/grunt-contrib-watch/node_modules/async/component.json
@@ -0,0 +1,11 @@
+{
+ "name": "async",
+ "repo": "caolan/async",
+ "description": "Higher-order functions and common patterns for asynchronous code",
+ "version": "0.1.23",
+ "keywords": [],
+ "dependencies": {},
+ "development": {},
+ "main": "lib/async.js",
+ "scripts": [ "lib/async.js" ]
+}
diff --git a/node_modules/grunt-contrib-watch/node_modules/async/lib/async.js b/node_modules/grunt-contrib-watch/node_modules/async/lib/async.js
new file mode 100755
index 0000000..1eebb15
--- /dev/null
+++ b/node_modules/grunt-contrib-watch/node_modules/async/lib/async.js
@@ -0,0 +1,958 @@
+/*global setImmediate: false, setTimeout: false, console: false */
+(function () {
+
+ var async = {};
+
+ // global on the server, window in the browser
+ var root, previous_async;
+
+ root = this;
+ if (root != null) {
+ previous_async = root.async;
+ }
+
+ async.noConflict = function () {
+ root.async = previous_async;
+ return async;
+ };
+
+ function only_once(fn) {
+ var called = false;
+ return function() {
+ if (called) throw new Error("Callback was already called.");
+ called = true;
+ fn.apply(root, arguments);
+ }
+ }
+
+ //// cross-browser compatiblity functions ////
+
+ var _each = function (arr, iterator) {
+ if (arr.forEach) {
+ return arr.forEach(iterator);
+ }
+ for (var i = 0; i < arr.length; i += 1) {
+ iterator(arr[i], i, arr);
+ }
+ };
+
+ var _map = function (arr, iterator) {
+ if (arr.map) {
+ return arr.map(iterator);
+ }
+ var results = [];
+ _each(arr, function (x, i, a) {
+ results.push(iterator(x, i, a));
+ });
+ return results;
+ };
+
+ var _reduce = function (arr, iterator, memo) {
+ if (arr.reduce) {
+ return arr.reduce(iterator, memo);
+ }
+ _each(arr, function (x, i, a) {
+ memo = iterator(memo, x, i, a);
+ });
+ return memo;
+ };
+
+ var _keys = function (obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ }
+ var keys = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ return keys;
+ };
+
+ //// exported async module functions ////
+
+ //// nextTick implementation with browser-compatible fallback ////
+ if (typeof process === 'undefined' || !(process.nextTick)) {
+ if (typeof setImmediate === 'function') {
+ async.nextTick = function (fn) {
+ // not a direct alias for IE10 compatibility
+ setImmediate(fn);
+ };
+ async.setImmediate = async.nextTick;
+ }
+ else {
+ async.nextTick = function (fn) {
+ setTimeout(fn, 0);
+ };
+ async.setImmediate = async.nextTick;
+ }
+ }
+ else {
+ async.nextTick = process.nextTick;
+ if (typeof setImmediate !== 'undefined') {
+ async.setImmediate = function (fn) {
+ // not a direct alias for IE10 compatibility
+ setImmediate(fn);
+ };
+ }
+ else {
+ async.setImmediate = async.nextTick;
+ }
+ }
+
+ async.each = function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ _each(arr, function (x) {
+ iterator(x, only_once(function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ if (completed >= arr.length) {
+ callback(null);
+ }
+ }
+ }));
+ });
+ };
+ async.forEach = async.each;
+
+ async.eachSeries = function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ var iterate = function () {
+ iterator(arr[completed], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ if (completed >= arr.length) {
+ callback(null);
+ }
+ else {
+ iterate();
+ }
+ }
+ });
+ };
+ iterate();
+ };
+ async.forEachSeries = async.eachSeries;
+
+ async.eachLimit = function (arr, limit, iterator, callback) {
+ var fn = _eachLimit(limit);
+ fn.apply(null, [arr, iterator, callback]);
+ };
+ async.forEachLimit = async.eachLimit;
+
+ var _eachLimit = function (limit) {
+
+ return function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length || limit <= 0) {
+ return callback();
+ }
+ var completed = 0;
+ var started = 0;
+ var running = 0;
+
+ (function replenish () {
+ if (completed >= arr.length) {
+ return callback();
+ }
+
+ while (running < limit && started < arr.length) {
+ started += 1;
+ running += 1;
+ iterator(arr[started - 1], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ running -= 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ else {
+ replenish();
+ }
+ }
+ });
+ }
+ })();
+ };
+ };
+
+
+ var doParallel = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [async.each].concat(args));
+ };
+ };
+ var doParallelLimit = function(limit, fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [_eachLimit(limit)].concat(args));
+ };
+ };
+ var doSeries = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [async.eachSeries].concat(args));
+ };
+ };
+
+
+ var _asyncMap = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (err, v) {
+ results[x.index] = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ };
+ async.map = doParallel(_asyncMap);
+ async.mapSeries = doSeries(_asyncMap);
+ async.mapLimit = function (arr, limit, iterator, callback) {
+ return _mapLimit(limit)(arr, iterator, callback);
+ };
+
+ var _mapLimit = function(limit) {
+ return doParallelLimit(limit, _asyncMap);
+ };
+
+ // reduce only has a series version, as doing reduce in parallel won't
+ // work in many situations.
+ async.reduce = function (arr, memo, iterator, callback) {
+ async.eachSeries(arr, function (x, callback) {
+ iterator(memo, x, function (err, v) {
+ memo = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, memo);
+ });
+ };
+ // inject alias
+ async.inject = async.reduce;
+ // foldl alias
+ async.foldl = async.reduce;
+
+ async.reduceRight = function (arr, memo, iterator, callback) {
+ var reversed = _map(arr, function (x) {
+ return x;
+ }).reverse();
+ async.reduce(reversed, memo, iterator, callback);
+ };
+ // foldr alias
+ async.foldr = async.reduceRight;
+
+ var _filter = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (v) {
+ if (v) {
+ results.push(x);
+ }
+ callback();
+ });
+ }, function (err) {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ };
+ async.filter = doParallel(_filter);
+ async.filterSeries = doSeries(_filter);
+ // select alias
+ async.select = async.filter;
+ async.selectSeries = async.filterSeries;
+
+ var _reject = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (v) {
+ if (!v) {
+ results.push(x);
+ }
+ callback();
+ });
+ }, function (err) {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ };
+ async.reject = doParallel(_reject);
+ async.rejectSeries = doSeries(_reject);
+
+ var _detect = function (eachfn, arr, iterator, main_callback) {
+ eachfn(arr, function (x, callback) {
+ iterator(x, function (result) {
+ if (result) {
+ main_callback(x);
+ main_callback = function () {};
+ }
+ else {
+ callback();
+ }
+ });
+ }, function (err) {
+ main_callback();
+ });
+ };
+ async.detect = doParallel(_detect);
+ async.detectSeries = doSeries(_detect);
+
+ async.some = function (arr, iterator, main_callback) {
+ async.each(arr, function (x, callback) {
+ iterator(x, function (v) {
+ if (v) {
+ main_callback(true);
+ main_callback = function () {};
+ }
+ callback();
+ });
+ }, function (err) {
+ main_callback(false);
+ });
+ };
+ // any alias
+ async.any = async.some;
+
+ async.every = function (arr, iterator, main_callback) {
+ async.each(arr, function (x, callback) {
+ iterator(x, function (v) {
+ if (!v) {
+ main_callback(false);
+ main_callback = function () {};
+ }
+ callback();
+ });
+ }, function (err) {
+ main_callback(true);
+ });
+ };
+ // all alias
+ async.all = async.every;
+
+ async.sortBy = function (arr, iterator, callback) {
+ async.map(arr, function (x, callback) {
+ iterator(x, function (err, criteria) {
+ if (err) {
+ callback(err);
+ }
+ else {
+ callback(null, {value: x, criteria: criteria});
+ }
+ });
+ }, function (err, results) {
+ if (err) {
+ return callback(err);
+ }
+ else {
+ var fn = function (left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ };
+ callback(null, _map(results.sort(fn), function (x) {
+ return x.value;
+ }));
+ }
+ });
+ };
+
+ async.auto = function (tasks, callback) {
+ callback = callback || function () {};
+ var keys = _keys(tasks);
+ if (!keys.length) {
+ return callback(null);
+ }
+
+ var results = {};
+
+ var listeners = [];
+ var addListener = function (fn) {
+ listeners.unshift(fn);
+ };
+ var removeListener = function (fn) {
+ for (var i = 0; i < listeners.length; i += 1) {
+ if (listeners[i] === fn) {
+ listeners.splice(i, 1);
+ return;
+ }
+ }
+ };
+ var taskComplete = function () {
+ _each(listeners.slice(0), function (fn) {
+ fn();
+ });
+ };
+
+ addListener(function () {
+ if (_keys(results).length === keys.length) {
+ callback(null, results);
+ callback = function () {};
+ }
+ });
+
+ _each(keys, function (k) {
+ var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k];
+ var taskCallback = function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ if (err) {
+ var safeResults = {};
+ _each(_keys(results), function(rkey) {
+ safeResults[rkey] = results[rkey];
+ });
+ safeResults[k] = args;
+ callback(err, safeResults);
+ // stop subsequent errors hitting callback multiple times
+ callback = function () {};
+ }
+ else {
+ results[k] = args;
+ async.setImmediate(taskComplete);
+ }
+ };
+ var requires = task.slice(0, Math.abs(task.length - 1)) || [];
+ var ready = function () {
+ return _reduce(requires, function (a, x) {
+ return (a && results.hasOwnProperty(x));
+ }, true) && !results.hasOwnProperty(k);
+ };
+ if (ready()) {
+ task[task.length - 1](taskCallback, results);
+ }
+ else {
+ var listener = function () {
+ if (ready()) {
+ removeListener(listener);
+ task[task.length - 1](taskCallback, results);
+ }
+ };
+ addListener(listener);
+ }
+ });
+ };
+
+ async.waterfall = function (tasks, callback) {
+ callback = callback || function () {};
+ if (tasks.constructor !== Array) {
+ var err = new Error('First argument to waterfall must be an array of functions');
+ return callback(err);
+ }
+ if (!tasks.length) {
+ return callback();
+ }
+ var wrapIterator = function (iterator) {
+ return function (err) {
+ if (err) {
+ callback.apply(null, arguments);
+ callback = function () {};
+ }
+ else {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var next = iterator.next();
+ if (next) {
+ args.push(wrapIterator(next));
+ }
+ else {
+ args.push(callback);
+ }
+ async.setImmediate(function () {
+ iterator.apply(null, args);
+ });
+ }
+ };
+ };
+ wrapIterator(async.iterator(tasks))();
+ };
+
+ var _parallel = function(eachfn, tasks, callback) {
+ callback = callback || function () {};
+ if (tasks.constructor === Array) {
+ eachfn.map(tasks, function (fn, callback) {
+ if (fn) {
+ fn(function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ callback.call(null, err, args);
+ });
+ }
+ }, callback);
+ }
+ else {
+ var results = {};
+ eachfn.each(_keys(tasks), function (k, callback) {
+ tasks[k](function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[k] = args;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+
+ async.parallel = function (tasks, callback) {
+ _parallel({ map: async.map, each: async.each }, tasks, callback);
+ };
+
+ async.parallelLimit = function(tasks, limit, callback) {
+ _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback);
+ };
+
+ async.series = function (tasks, callback) {
+ callback = callback || function () {};
+ if (tasks.constructor === Array) {
+ async.mapSeries(tasks, function (fn, callback) {
+ if (fn) {
+ fn(function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ callback.call(null, err, args);
+ });
+ }
+ }, callback);
+ }
+ else {
+ var results = {};
+ async.eachSeries(_keys(tasks), function (k, callback) {
+ tasks[k](function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[k] = args;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+
+ async.iterator = function (tasks) {
+ var makeCallback = function (index) {
+ var fn = function () {
+ if (tasks.length) {
+ tasks[index].apply(null, arguments);
+ }
+ return fn.next();
+ };
+ fn.next = function () {
+ return (index < tasks.length - 1) ? makeCallback(index + 1): null;
+ };
+ return fn;
+ };
+ return makeCallback(0);
+ };
+
+ async.apply = function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function () {
+ return fn.apply(
+ null, args.concat(Array.prototype.slice.call(arguments))
+ );
+ };
+ };
+
+ var _concat = function (eachfn, arr, fn, callback) {
+ var r = [];
+ eachfn(arr, function (x, cb) {
+ fn(x, function (err, y) {
+ r = r.concat(y || []);
+ cb(err);
+ });
+ }, function (err) {
+ callback(err, r);
+ });
+ };
+ async.concat = doParallel(_concat);
+ async.concatSeries = doSeries(_concat);
+
+ async.whilst = function (test, iterator, callback) {
+ if (test()) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ async.whilst(test, iterator, callback);
+ });
+ }
+ else {
+ callback();
+ }
+ };
+
+ async.doWhilst = function (iterator, test, callback) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ if (test()) {
+ async.doWhilst(iterator, test, callback);
+ }
+ else {
+ callback();
+ }
+ });
+ };
+
+ async.until = function (test, iterator, callback) {
+ if (!test()) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ async.until(test, iterator, callback);
+ });
+ }
+ else {
+ callback();
+ }
+ };
+
+ async.doUntil = function (iterator, test, callback) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ if (!test()) {
+ async.doUntil(iterator, test, callback);
+ }
+ else {
+ callback();
+ }
+ });
+ };
+
+ async.queue = function (worker, concurrency) {
+ if (concurrency === undefined) {
+ concurrency = 1;
+ }
+ function _insert(q, data, pos, callback) {
+ if(data.constructor !== Array) {
+ data = [data];
+ }
+ _each(data, function(task) {
+ var item = {
+ data: task,
+ callback: typeof callback === 'function' ? callback : null
+ };
+
+ if (pos) {
+ q.tasks.unshift(item);
+ } else {
+ q.tasks.push(item);
+ }
+
+ if (q.saturated && q.tasks.length === concurrency) {
+ q.saturated();
+ }
+ async.setImmediate(q.process);
+ });
+ }
+
+ var workers = 0;
+ var q = {
+ tasks: [],
+ concurrency: concurrency,
+ saturated: null,
+ empty: null,
+ drain: null,
+ push: function (data, callback) {
+ _insert(q, data, false, callback);
+ },
+ unshift: function (data, callback) {
+ _insert(q, data, true, callback);
+ },
+ process: function () {
+ if (workers < q.concurrency && q.tasks.length) {
+ var task = q.tasks.shift();
+ if (q.empty && q.tasks.length === 0) {
+ q.empty();
+ }
+ workers += 1;
+ var next = function () {
+ workers -= 1;
+ if (task.callback) {
+ task.callback.apply(task, arguments);
+ }
+ if (q.drain && q.tasks.length + workers === 0) {
+ q.drain();
+ }
+ q.process();
+ };
+ var cb = only_once(next);
+ worker(task.data, cb);
+ }
+ },
+ length: function () {
+ return q.tasks.length;
+ },
+ running: function () {
+ return workers;
+ }
+ };
+ return q;
+ };
+
+ async.cargo = function (worker, payload) {
+ var working = false,
+ tasks = [];
+
+ var cargo = {
+ tasks: tasks,
+ payload: payload,
+ saturated: null,
+ empty: null,
+ drain: null,
+ push: function (data, callback) {
+ if(data.constructor !== Array) {
+ data = [data];
+ }
+ _each(data, function(task) {
+ tasks.push({
+ data: task,
+ callback: typeof callback === 'function' ? callback : null
+ });
+ if (cargo.saturated && tasks.length === payload) {
+ cargo.saturated();
+ }
+ });
+ async.setImmediate(cargo.process);
+ },
+ process: function process() {
+ if (working) return;
+ if (tasks.length === 0) {
+ if(cargo.drain) cargo.drain();
+ return;
+ }
+
+ var ts = typeof payload === 'number'
+ ? tasks.splice(0, payload)
+ : tasks.splice(0);
+
+ var ds = _map(ts, function (task) {
+ return task.data;
+ });
+
+ if(cargo.empty) cargo.empty();
+ working = true;
+ worker(ds, function () {
+ working = false;
+
+ var args = arguments;
+ _each(ts, function (data) {
+ if (data.callback) {
+ data.callback.apply(null, args);
+ }
+ });
+
+ process();
+ });
+ },
+ length: function () {
+ return tasks.length;
+ },
+ running: function () {
+ return working;
+ }
+ };
+ return cargo;
+ };
+
+ var _console_fn = function (name) {
+ return function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ fn.apply(null, args.concat([function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (typeof console !== 'undefined') {
+ if (err) {
+ if (console.error) {
+ console.error(err);
+ }
+ }
+ else if (console[name]) {
+ _each(args, function (x) {
+ console[name](x);
+ });
+ }
+ }
+ }]));
+ };
+ };
+ async.log = _console_fn('log');
+ async.dir = _console_fn('dir');
+ /*async.info = _console_fn('info');
+ async.warn = _console_fn('warn');
+ async.error = _console_fn('error');*/
+
+ async.memoize = function (fn, hasher) {
+ var memo = {};
+ var queues = {};
+ hasher = hasher || function (x) {
+ return x;
+ };
+ var memoized = function () {
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ var key = hasher.apply(null, args);
+ if (key in memo) {
+ callback.apply(null, memo[key]);
+ }
+ else if (key in queues) {
+ queues[key].push(callback);
+ }
+ else {
+ queues[key] = [callback];
+ fn.apply(null, args.concat([function () {
+ memo[key] = arguments;
+ var q = queues[key];
+ delete queues[key];
+ for (var i = 0, l = q.length; i < l; i++) {
+ q[i].apply(null, arguments);
+ }
+ }]));
+ }
+ };
+ memoized.memo = memo;
+ memoized.unmemoized = fn;
+ return memoized;
+ };
+
+ async.unmemoize = function (fn) {
+ return function () {
+ return (fn.unmemoized || fn).apply(null, arguments);
+ };
+ };
+
+ async.times = function (count, iterator, callback) {
+ var counter = [];
+ for (var i = 0; i < count; i++) {
+ counter.push(i);
+ }
+ return async.map(counter, iterator, callback);
+ };
+
+ async.timesSeries = function (count, iterator, callback) {
+ var counter = [];
+ for (var i = 0; i < count; i++) {
+ counter.push(i);
+ }
+ return async.mapSeries(counter, iterator, callback);
+ };
+
+ async.compose = function (/* functions... */) {
+ var fns = Array.prototype.reverse.call(arguments);
+ return function () {
+ var that = this;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ async.reduce(fns, args, function (newargs, fn, cb) {
+ fn.apply(that, newargs.concat([function () {
+ var err = arguments[0];
+ var nextargs = Array.prototype.slice.call(arguments, 1);
+ cb(err, nextargs);
+ }]))
+ },
+ function (err, results) {
+ callback.apply(that, [err].concat(results));
+ });
+ };
+ };
+
+ var _applyEach = function (eachfn, fns /*args...*/) {
+ var go = function () {
+ var that = this;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ return eachfn(fns, function (fn, cb) {
+ fn.apply(that, args.concat([cb]));
+ },
+ callback);
+ };
+ if (arguments.length > 2) {
+ var args = Array.prototype.slice.call(arguments, 2);
+ return go.apply(this, args);
+ }
+ else {
+ return go;
+ }
+ };
+ async.applyEach = doParallel(_applyEach);
+ async.applyEachSeries = doSeries(_applyEach);
+
+ async.forever = function (fn, callback) {
+ function next(err) {
+ if (err) {
+ if (callback) {
+ return callback(err);
+ }
+ throw err;
+ }
+ fn(next);
+ }
+ next();
+ };
+
+ // AMD / RequireJS
+ if (typeof define !== 'undefined' && define.amd) {
+ define([], function () {
+ return async;
+ });
+ }
+ // Node.js
+ else if (typeof module !== 'undefined' && module.exports) {
+ module.exports = async;
+ }
+ // included directly via
+```
+
+Using [`npm`](http://npmjs.org/):
+
+```bash
+npm install lodash
+
+npm install -g lodash
+npm link lodash
+```
+
+To avoid potential issues, update `npm` before installing Lo-Dash:
+
+```bash
+npm install npm -g
+```
+
+In [Node.js](http://nodejs.org/) and [RingoJS v0.8.0+](http://ringojs.org/):
+
+```js
+var _ = require('lodash');
+
+// or as a drop-in replacement for Underscore
+var _ = require('lodash/lodash.underscore');
+```
+
+**Note:** If Lo-Dash is installed globally, run [`npm link lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory before requiring it.
+
+In [RingoJS v0.7.0-](http://ringojs.org/):
+
+```js
+var _ = require('lodash')._;
+```
+
+In [Rhino](http://www.mozilla.org/rhino/):
+
+```js
+load('lodash.js');
+```
+
+In an AMD loader like [RequireJS](http://requirejs.org/):
+
+```js
+require({
+ 'paths': {
+ 'underscore': 'path/to/lodash'
+ }
+},
+['underscore'], function(_) {
+ console.log(_.VERSION);
+});
+```
+
+## Release Notes
+
+### v1.0.1
+
+ * Add support for specifying source map URLs in `-p`/`--source-map` build options
+ * Ensured the second argument passed to `_.assign` is not treated as a `callback`
+ * Ensured `-p`/`--source-map` build options correctly set the `sourceMappingURL`
+ * Made `-p`/`--source-map` build options set source map *“sources”* keys based on the builds performed
+ * Made `_.defer` use `setImmediate`, in Node.js, when available
+ * Made `_.where` search arrays for values regardless of their index position
+ * Removed dead code from `_.template`
+
+The full changelog is available [here](https://github.com/lodash/lodash/wiki/Changelog).
+
+## BestieJS
+
+Lo-Dash is part of the [BestieJS](https://github.com/bestiejs) *“Best in Class”* module collection. This means we promote solid browser/environment support, ES5 precedents, unit testing, and plenty of documentation.
+
+## Author
+
+| [](http://twitter.com/jdalton "Follow @jdalton on Twitter") |
+|---|
+| [John-David Dalton](http://allyoucanleet.com/) |
+
+## Contributors
+
+| [](http://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [](http://twitter.com/mathias "Follow @mathias on Twitter") |
+|---|---|---|
+| [Blaine Bublitz](http://iceddev.com/) | [Kit Cambridge](http://kitcambridge.github.io/) | [Mathias Bynens](http://mathiasbynens.be/) |
diff --git a/node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.compat.js b/node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.compat.js
new file mode 100644
index 0000000..37ebc92
--- /dev/null
+++ b/node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.compat.js
@@ -0,0 +1,5152 @@
+/**
+ * @license
+ * Lo-Dash 1.0.1 (Custom Build)
+ * Build: `lodash -o ./dist/lodash.compat.js`
+ * Copyright 2012-2013 The Dojo Foundation
+ * Based on Underscore.js 1.4.4
+ * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
+ * Available under MIT license
+ */
+;(function(window, undefined) {
+
+ /** Detect free variable `exports` */
+ var freeExports = typeof exports == 'object' && exports;
+
+ /** Detect free variable `module` */
+ var freeModule = typeof module == 'object' && module && module.exports == freeExports && module;
+
+ /** Detect free variable `global` and use it as `window` */
+ var freeGlobal = typeof global == 'object' && global;
+ if (freeGlobal.global === freeGlobal) {
+ window = freeGlobal;
+ }
+
+ /** Used for array and object method references */
+ var arrayRef = [],
+ objectRef = {};
+
+ /** Used to generate unique IDs */
+ var idCounter = 0;
+
+ /** Used internally to indicate various things */
+ var indicatorObject = objectRef;
+
+ /** Used by `cachedContains` as the default size when optimizations are enabled for large arrays */
+ var largeArraySize = 30;
+
+ /** Used to restore the original `_` reference in `noConflict` */
+ var oldDash = window._;
+
+ /** Used to match HTML entities */
+ var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g;
+
+ /** Used to match empty string literals in compiled template source */
+ var reEmptyStringLeading = /\b__p \+= '';/g,
+ reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
+ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+
+ /** Used to match regexp flags from their coerced string values */
+ var reFlags = /\w*$/;
+
+ /** Used to detect if a method is native */
+ var reNative = RegExp('^' +
+ (objectRef.valueOf + '')
+ .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
+ .replace(/valueOf|for [^\]]+/g, '.+?') + '$'
+ );
+
+ /**
+ * Used to match ES6 template delimiters
+ * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.8.6
+ */
+ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+
+ /** Used to match "interpolate" template delimiters */
+ var reInterpolate = /<%=([\s\S]+?)%>/g;
+
+ /** Used to ensure capturing order of template delimiters */
+ var reNoMatch = /($^)/;
+
+ /** Used to match HTML characters */
+ var reUnescapedHtml = /[&<>"']/g;
+
+ /** Used to match unescaped characters in compiled string literals */
+ var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
+
+ /** Used to fix the JScript [[DontEnum]] bug */
+ var shadowed = [
+ 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
+ 'toLocaleString', 'toString', 'valueOf'
+ ];
+
+ /** Used to make template sourceURLs easier to identify */
+ var templateCounter = 0;
+
+ /** Native method shortcuts */
+ var ceil = Math.ceil,
+ concat = arrayRef.concat,
+ floor = Math.floor,
+ getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,
+ hasOwnProperty = objectRef.hasOwnProperty,
+ push = arrayRef.push,
+ toString = objectRef.toString;
+
+ /* Native method shortcuts for methods with the same name as other `lodash` methods */
+ var nativeBind = reNative.test(nativeBind = slice.bind) && nativeBind,
+ nativeIsArray = reNative.test(nativeIsArray = Array.isArray) && nativeIsArray,
+ nativeIsFinite = window.isFinite,
+ nativeIsNaN = window.isNaN,
+ nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys,
+ nativeMax = Math.max,
+ nativeMin = Math.min,
+ nativeRandom = Math.random;
+
+ /** `Object#toString` result shortcuts */
+ var argsClass = '[object Arguments]',
+ arrayClass = '[object Array]',
+ boolClass = '[object Boolean]',
+ dateClass = '[object Date]',
+ funcClass = '[object Function]',
+ numberClass = '[object Number]',
+ objectClass = '[object Object]',
+ regexpClass = '[object RegExp]',
+ stringClass = '[object String]';
+
+ /** Detect various environments */
+ var isIeOpera = !!window.attachEvent,
+ isV8 = nativeBind && !/\n|true/.test(nativeBind + isIeOpera);
+
+ /* Detect if `Function#bind` exists and is inferred to be fast (all but V8) */
+ var isBindFast = nativeBind && !isV8;
+
+ /* Detect if `Object.keys` exists and is inferred to be fast (IE, Opera, V8) */
+ var isKeysFast = nativeKeys && (isIeOpera || isV8);
+
+ /**
+ * Detect the JScript [[DontEnum]] bug:
+ *
+ * In IE < 9 an objects own properties, shadowing non-enumerable ones, are
+ * made non-enumerable as well.
+ */
+ var hasDontEnumBug;
+
+ /**
+ * Detect if a `prototype` properties are enumerable by default:
+ *
+ * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1
+ * (if the prototype or a property on the prototype has been set)
+ * incorrectly sets a function's `prototype` property [[Enumerable]]
+ * value to `true`.
+ */
+ var hasEnumPrototype;
+
+ /** Detect if own properties are iterated after inherited properties (IE < 9) */
+ var iteratesOwnLast;
+
+ /**
+ * Detect if `Array#shift` and `Array#splice` augment array-like objects
+ * incorrectly:
+ *
+ * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()`
+ * and `splice()` functions that fail to remove the last element, `value[0]`,
+ * of array-like objects even though the `length` property is set to `0`.
+ * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()`
+ * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9.
+ */
+ var hasObjectSpliceBug = (hasObjectSpliceBug = { '0': 1, 'length': 1 },
+ arrayRef.splice.call(hasObjectSpliceBug, 0, 1), hasObjectSpliceBug[0]);
+
+ /** Detect if `arguments` object indexes are non-enumerable (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1) */
+ var nonEnumArgs = true;
+
+ (function() {
+ var props = [];
+ function ctor() { this.x = 1; }
+ ctor.prototype = { 'valueOf': 1, 'y': 1 };
+ for (var prop in new ctor) { props.push(prop); }
+ for (prop in arguments) { nonEnumArgs = !prop; }
+
+ hasDontEnumBug = !/valueOf/.test(props);
+ hasEnumPrototype = ctor.propertyIsEnumerable('prototype');
+ iteratesOwnLast = props[0] != 'x';
+ }(1));
+
+ /** Detect if `arguments` objects are `Object` objects (all but Opera < 10.5) */
+ var argsAreObjects = arguments.constructor == Object;
+
+ /** Detect if `arguments` objects [[Class]] is unresolvable (Firefox < 4, IE < 9) */
+ var noArgsClass = !isArguments(arguments);
+
+ /**
+ * Detect lack of support for accessing string characters by index:
+ *
+ * IE < 8 can't access characters by index and IE 8 can only access
+ * characters by index on string literals.
+ */
+ var noCharByIndex = ('x'[0] + Object('x')[0]) != 'xx';
+
+ /**
+ * Detect if a DOM node's [[Class]] is unresolvable (IE < 9)
+ * and that the JS engine won't error when attempting to coerce an object to
+ * a string without a `toString` function.
+ */
+ try {
+ var noNodeClass = toString.call(document) == objectClass && !({ 'toString': 0 } + '');
+ } catch(e) { }
+
+ /** Used to identify object classifications that `_.clone` supports */
+ var cloneableClasses = {};
+ cloneableClasses[funcClass] = false;
+ cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
+ cloneableClasses[boolClass] = cloneableClasses[dateClass] =
+ cloneableClasses[numberClass] = cloneableClasses[objectClass] =
+ cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
+
+ /** Used to lookup a built-in constructor by [[Class]] */
+ var ctorByClass = {};
+ ctorByClass[arrayClass] = Array;
+ ctorByClass[boolClass] = Boolean;
+ ctorByClass[dateClass] = Date;
+ ctorByClass[objectClass] = Object;
+ ctorByClass[numberClass] = Number;
+ ctorByClass[regexpClass] = RegExp;
+ ctorByClass[stringClass] = String;
+
+ /** Used to determine if values are of the language type Object */
+ var objectTypes = {
+ 'boolean': false,
+ 'function': true,
+ 'object': true,
+ 'number': false,
+ 'string': false,
+ 'undefined': false
+ };
+
+ /** Used to escape characters for inclusion in compiled string literals */
+ var stringEscapes = {
+ '\\': '\\',
+ "'": "'",
+ '\n': 'n',
+ '\r': 'r',
+ '\t': 't',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a `lodash` object, that wraps the given `value`, to enable method
+ * chaining.
+ *
+ * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
+ * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
+ * and `unshift`
+ *
+ * The chainable wrapper functions are:
+ * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`, `compose`,
+ * `concat`, `countBy`, `debounce`, `defaults`, `defer`, `delay`, `difference`,
+ * `filter`, `flatten`, `forEach`, `forIn`, `forOwn`, `functions`, `groupBy`,
+ * `initial`, `intersection`, `invert`, `invoke`, `keys`, `map`, `max`, `memoize`,
+ * `merge`, `min`, `object`, `omit`, `once`, `pairs`, `partial`, `partialRight`,
+ * `pick`, `pluck`, `push`, `range`, `reject`, `rest`, `reverse`, `shuffle`,
+ * `slice`, `sort`, `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`,
+ * `union`, `uniq`, `unshift`, `values`, `where`, `without`, `wrap`, and `zip`
+ *
+ * The non-chainable wrapper functions are:
+ * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `has`, `identity`,
+ * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, `isEmpty`,
+ * `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`, `isObject`,
+ * `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`, `lastIndexOf`,
+ * `mixin`, `noConflict`, `pop`, `random`, `reduce`, `reduceRight`, `result`,
+ * `shift`, `size`, `some`, `sortedIndex`, `template`, `unescape`, and `uniqueId`
+ *
+ * The wrapper functions `first` and `last` return wrapped values when `n` is
+ * passed, otherwise they return unwrapped values.
+ *
+ * @name _
+ * @constructor
+ * @category Chaining
+ * @param {Mixed} value The value to wrap in a `lodash` instance.
+ * @returns {Object} Returns a `lodash` instance.
+ */
+ function lodash(value) {
+ // exit early if already wrapped, even if wrapped by a different `lodash` constructor
+ if (value && typeof value == 'object' && value.__wrapped__) {
+ return value;
+ }
+ // allow invoking `lodash` without the `new` operator
+ if (!(this instanceof lodash)) {
+ return new lodash(value);
+ }
+ this.__wrapped__ = value;
+ }
+
+ /**
+ * By default, the template delimiters used by Lo-Dash are similar to those in
+ * embedded Ruby (ERB). Change the following template settings to use alternative
+ * delimiters.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */
+ lodash.templateSettings = {
+
+ /**
+ * Used to detect `data` property values to be HTML-escaped.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'escape': /<%-([\s\S]+?)%>/g,
+
+ /**
+ * Used to detect code to be evaluated.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'evaluate': /<%([\s\S]+?)%>/g,
+
+ /**
+ * Used to detect `data` property values to inject.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'interpolate': reInterpolate,
+
+ /**
+ * Used to reference the data object in the template text.
+ *
+ * @memberOf _.templateSettings
+ * @type String
+ */
+ 'variable': '',
+
+ /**
+ * Used to import variables into the compiled template.
+ *
+ * @memberOf _.templateSettings
+ * @type Object
+ */
+ 'imports': {
+
+ /**
+ * A reference to the `lodash` function.
+ *
+ * @memberOf _.templateSettings.imports
+ * @type Function
+ */
+ '_': lodash
+ }
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The template used to create iterator functions.
+ *
+ * @private
+ * @param {Obect} data The data object used to populate the text.
+ * @returns {String} Returns the interpolated text.
+ */
+ var iteratorTemplate = function(obj) {
+
+ var __p = 'var index, iterable = ' +
+ (obj.firstArg ) +
+ ', result = iterable;\nif (!iterable) return result;\n' +
+ (obj.top ) +
+ ';\n';
+ if (obj.arrays) {
+ __p += 'var length = iterable.length; index = -1;\nif (' +
+ (obj.arrays ) +
+ ') { ';
+ if (obj.noCharByIndex) {
+ __p += '\n if (isString(iterable)) {\n iterable = iterable.split(\'\')\n } ';
+ } ;
+ __p += '\n while (++index < length) {\n ' +
+ (obj.loop ) +
+ '\n }\n}\nelse { ';
+ } else if (obj.nonEnumArgs) {
+ __p += '\n var length = iterable.length; index = -1;\n if (length && isArguments(iterable)) {\n while (++index < length) {\n index += \'\';\n ' +
+ (obj.loop ) +
+ '\n }\n } else { ';
+ } ;
+
+ if (obj.hasEnumPrototype) {
+ __p += '\n var skipProto = typeof iterable == \'function\';\n ';
+ } ;
+
+ if (obj.isKeysFast && obj.useHas) {
+ __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] ? nativeKeys(iterable) : [],\n length = ownProps.length;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n ';
+ if (obj.hasEnumPrototype) {
+ __p += 'if (!(skipProto && index == \'prototype\')) {\n ';
+ } ;
+ __p +=
+ (obj.loop ) +
+ '';
+ if (obj.hasEnumPrototype) {
+ __p += '}\n';
+ } ;
+ __p += ' } ';
+ } else {
+ __p += '\n for (index in iterable) {';
+ if (obj.hasEnumPrototype || obj.useHas) {
+ __p += '\n if (';
+ if (obj.hasEnumPrototype) {
+ __p += '!(skipProto && index == \'prototype\')';
+ } if (obj.hasEnumPrototype && obj.useHas) {
+ __p += ' && ';
+ } if (obj.useHas) {
+ __p += 'hasOwnProperty.call(iterable, index)';
+ } ;
+ __p += ') { ';
+ } ;
+ __p +=
+ (obj.loop ) +
+ '; ';
+ if (obj.hasEnumPrototype || obj.useHas) {
+ __p += '\n }';
+ } ;
+ __p += '\n } ';
+ } ;
+
+ if (obj.hasDontEnumBug) {
+ __p += '\n\n var ctor = iterable.constructor;\n ';
+ for (var k = 0; k < 7; k++) {
+ __p += '\n index = \'' +
+ (obj.shadowed[k] ) +
+ '\';\n if (';
+ if (obj.shadowed[k] == 'constructor') {
+ __p += '!(ctor && ctor.prototype === iterable) && ';
+ } ;
+ __p += 'hasOwnProperty.call(iterable, index)) {\n ' +
+ (obj.loop ) +
+ '\n } ';
+ } ;
+
+ } ;
+
+ if (obj.arrays || obj.nonEnumArgs) {
+ __p += '\n}';
+ } ;
+ __p +=
+ (obj.bottom ) +
+ ';\nreturn result';
+
+
+ return __p
+ };
+
+ /** Reusable iterator options for `assign` and `defaults` */
+ var defaultsIteratorOptions = {
+ 'args': 'object, source, guard',
+ 'top':
+ 'var args = arguments,\n' +
+ ' argsIndex = 0,\n' +
+ " argsLength = typeof guard == 'number' ? 2 : args.length;\n" +
+ 'while (++argsIndex < argsLength) {\n' +
+ ' iterable = args[argsIndex];\n' +
+ ' if (iterable && objectTypes[typeof iterable]) {',
+ 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]",
+ 'bottom': ' }\n}'
+ };
+
+ /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */
+ var eachIteratorOptions = {
+ 'args': 'collection, callback, thisArg',
+ 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : createCallback(callback, thisArg)",
+ 'arrays': "typeof length == 'number'",
+ 'loop': 'if (callback(iterable[index], index, collection) === false) return result'
+ };
+
+ /** Reusable iterator options for `forIn` and `forOwn` */
+ var forOwnIteratorOptions = {
+ 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top,
+ 'arrays': false
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a function optimized to search large arrays for a given `value`,
+ * starting at `fromIndex`, using strict equality for comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {Mixed} value The value to search for.
+ * @param {Number} [fromIndex=0] The index to search from.
+ * @param {Number} [largeSize=30] The length at which an array is considered large.
+ * @returns {Boolean} Returns `true`, if `value` is found, else `false`.
+ */
+ function cachedContains(array, fromIndex, largeSize) {
+ fromIndex || (fromIndex = 0);
+
+ var length = array.length,
+ isLarge = (length - fromIndex) >= (largeSize || largeArraySize);
+
+ if (isLarge) {
+ var cache = {},
+ index = fromIndex - 1;
+
+ while (++index < length) {
+ // manually coerce `value` to a string because `hasOwnProperty`, in some
+ // older versions of Firefox, coerces objects incorrectly
+ var key = array[index] + '';
+ (hasOwnProperty.call(cache, key) ? cache[key] : (cache[key] = [])).push(array[index]);
+ }
+ }
+ return function(value) {
+ if (isLarge) {
+ var key = value + '';
+ return hasOwnProperty.call(cache, key) && indexOf(cache[key], value) > -1;
+ }
+ return indexOf(array, value, fromIndex) > -1;
+ }
+ }
+
+ /**
+ * Used by `_.max` and `_.min` as the default `callback` when a given
+ * `collection` is a string value.
+ *
+ * @private
+ * @param {String} value The character to inspect.
+ * @returns {Number} Returns the code unit of given character.
+ */
+ function charAtCallback(value) {
+ return value.charCodeAt(0);
+ }
+
+ /**
+ * Used by `sortBy` to compare transformed `collection` values, stable sorting
+ * them in ascending order.
+ *
+ * @private
+ * @param {Object} a The object to compare to `b`.
+ * @param {Object} b The object to compare to `a`.
+ * @returns {Number} Returns the sort order indicator of `1` or `-1`.
+ */
+ function compareAscending(a, b) {
+ var ai = a.index,
+ bi = b.index;
+
+ a = a.criteria;
+ b = b.criteria;
+
+ // ensure a stable sort in V8 and other engines
+ // http://code.google.com/p/v8/issues/detail?id=90
+ if (a !== b) {
+ if (a > b || typeof a == 'undefined') {
+ return 1;
+ }
+ if (a < b || typeof b == 'undefined') {
+ return -1;
+ }
+ }
+ return ai < bi ? -1 : 1;
+ }
+
+ /**
+ * Creates a function that, when called, invokes `func` with the `this` binding
+ * of `thisArg` and prepends any `partialArgs` to the arguments passed to the
+ * bound function.
+ *
+ * @private
+ * @param {Function|String} func The function to bind or the method name.
+ * @param {Mixed} [thisArg] The `this` binding of `func`.
+ * @param {Array} partialArgs An array of arguments to be partially applied.
+ * @param {Object} [rightIndicator] Used to indicate partially applying arguments from the right.
+ * @returns {Function} Returns the new bound function.
+ */
+ function createBound(func, thisArg, partialArgs, rightIndicator) {
+ var isFunc = isFunction(func),
+ isPartial = !partialArgs,
+ key = thisArg;
+
+ // juggle arguments
+ if (isPartial) {
+ partialArgs = thisArg;
+ }
+ if (!isFunc) {
+ thisArg = func;
+ }
+
+ function bound() {
+ // `Function#bind` spec
+ // http://es5.github.com/#x15.3.4.5
+ var args = arguments,
+ thisBinding = isPartial ? this : thisArg;
+
+ if (!isFunc) {
+ func = thisArg[key];
+ }
+ if (partialArgs.length) {
+ args = args.length
+ ? (args = slice(args), rightIndicator ? args.concat(partialArgs) : partialArgs.concat(args))
+ : partialArgs;
+ }
+ if (this instanceof bound) {
+ // ensure `new bound` is an instance of `bound` and `func`
+ noop.prototype = func.prototype;
+ thisBinding = new noop;
+ noop.prototype = null;
+
+ // mimic the constructor's `return` behavior
+ // http://es5.github.com/#x13.2.2
+ var result = func.apply(thisBinding, args);
+ return isObject(result) ? result : thisBinding;
+ }
+ return func.apply(thisBinding, args);
+ }
+ return bound;
+ }
+
+ /**
+ * Produces a callback bound to an optional `thisArg`. If `func` is a property
+ * name, the created callback will return the property value for a given element.
+ * If `func` is an object, the created callback will return `true` for elements
+ * that contain the equivalent object properties, otherwise it will return `false`.
+ *
+ * @private
+ * @param {Mixed} [func=identity] The value to convert to a callback.
+ * @param {Mixed} [thisArg] The `this` binding of the created callback.
+ * @param {Number} [argCount=3] The number of arguments the callback accepts.
+ * @returns {Function} Returns a callback function.
+ */
+ function createCallback(func, thisArg, argCount) {
+ if (func == null) {
+ return identity;
+ }
+ var type = typeof func;
+ if (type != 'function') {
+ if (type != 'object') {
+ return function(object) {
+ return object[func];
+ };
+ }
+ var props = keys(func);
+ return function(object) {
+ var length = props.length,
+ result = false;
+ while (length--) {
+ if (!(result = isEqual(object[props[length]], func[props[length]], indicatorObject))) {
+ break;
+ }
+ }
+ return result;
+ };
+ }
+ if (typeof thisArg != 'undefined') {
+ if (argCount === 1) {
+ return function(value) {
+ return func.call(thisArg, value);
+ };
+ }
+ if (argCount === 2) {
+ return function(a, b) {
+ return func.call(thisArg, a, b);
+ };
+ }
+ if (argCount === 4) {
+ return function(accumulator, value, index, object) {
+ return func.call(thisArg, accumulator, value, index, object);
+ };
+ }
+ return function(value, index, object) {
+ return func.call(thisArg, value, index, object);
+ };
+ }
+ return func;
+ }
+
+ /**
+ * Creates compiled iteration functions.
+ *
+ * @private
+ * @param {Object} [options1, options2, ...] The compile options object(s).
+ * arrays - A string of code to determine if the iterable is an array or array-like.
+ * useHas - A boolean to specify using `hasOwnProperty` checks in the object loop.
+ * args - A string of comma separated arguments the iteration function will accept.
+ * top - A string of code to execute before the iteration branches.
+ * loop - A string of code to execute in the object loop.
+ * bottom - A string of code to execute after the iteration branches.
+ *
+ * @returns {Function} Returns the compiled function.
+ */
+ function createIterator() {
+ var data = {
+ // support properties
+ 'hasDontEnumBug': hasDontEnumBug,
+ 'hasEnumPrototype': hasEnumPrototype,
+ 'isKeysFast': isKeysFast,
+ 'nonEnumArgs': nonEnumArgs,
+ 'noCharByIndex': noCharByIndex,
+ 'shadowed': shadowed,
+
+ // iterator options
+ 'arrays': 'isArray(iterable)',
+ 'bottom': '',
+ 'loop': '',
+ 'top': '',
+ 'useHas': true
+ };
+
+ // merge options into a template data object
+ for (var object, index = 0; object = arguments[index]; index++) {
+ for (var key in object) {
+ data[key] = object[key];
+ }
+ }
+ var args = data.args;
+ data.firstArg = /^[^,]+/.exec(args)[0];
+
+ // create the function factory
+ var factory = Function(
+ 'createCallback, hasOwnProperty, isArguments, isArray, isString, ' +
+ 'objectTypes, nativeKeys',
+ 'return function(' + args + ') {\n' + iteratorTemplate(data) + '\n}'
+ );
+ // return the compiled function
+ return factory(
+ createCallback, hasOwnProperty, isArguments, isArray, isString,
+ objectTypes, nativeKeys
+ );
+ }
+
+ /**
+ * A function compiled to iterate `arguments` objects, arrays, objects, and
+ * strings consistenly across environments, executing the `callback` for each
+ * element in the `collection`. The `callback` is bound to `thisArg` and invoked
+ * with three arguments; (value, index|key, collection). Callbacks may exit
+ * iteration early by explicitly returning `false`.
+ *
+ * @private
+ * @type Function
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array|Object|String} Returns `collection`.
+ */
+ var each = createIterator(eachIteratorOptions);
+
+ /**
+ * Used by `template` to escape characters for inclusion in compiled
+ * string literals.
+ *
+ * @private
+ * @param {String} match The matched character to escape.
+ * @returns {String} Returns the escaped character.
+ */
+ function escapeStringChar(match) {
+ return '\\' + stringEscapes[match];
+ }
+
+ /**
+ * Used by `escape` to convert characters to HTML entities.
+ *
+ * @private
+ * @param {String} match The matched character to escape.
+ * @returns {String} Returns the escaped character.
+ */
+ function escapeHtmlChar(match) {
+ return htmlEscapes[match];
+ }
+
+ /**
+ * Checks if `value` is a DOM node in IE < 9.
+ *
+ * @private
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true` if the `value` is a DOM node, else `false`.
+ */
+ function isNode(value) {
+ // IE < 9 presents DOM nodes as `Object` objects except they have `toString`
+ // methods that are `typeof` "string" and still can coerce nodes to strings
+ return typeof value.toString != 'function' && typeof (value + '') == 'string';
+ }
+
+ /**
+ * A no-operation function.
+ *
+ * @private
+ */
+ function noop() {
+ // no operation performed
+ }
+
+ /**
+ * Slices the `collection` from the `start` index up to, but not including,
+ * the `end` index.
+ *
+ * Note: This function is used, instead of `Array#slice`, to support node lists
+ * in IE < 9 and to ensure dense arrays are returned.
+ *
+ * @private
+ * @param {Array|Object|String} collection The collection to slice.
+ * @param {Number} start The start index.
+ * @param {Number} end The end index.
+ * @returns {Array} Returns the new array.
+ */
+ function slice(array, start, end) {
+ start || (start = 0);
+ if (typeof end == 'undefined') {
+ end = array ? array.length : 0;
+ }
+ var index = -1,
+ length = end - start || 0,
+ result = Array(length < 0 ? 0 : length);
+
+ while (++index < length) {
+ result[index] = array[start + index];
+ }
+ return result;
+ }
+
+ /**
+ * Used by `unescape` to convert HTML entities to characters.
+ *
+ * @private
+ * @param {String} match The matched character to unescape.
+ * @returns {String} Returns the unescaped character.
+ */
+ function unescapeHtmlChar(match) {
+ return htmlUnescapes[match];
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Checks if `value` is an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is an `arguments` object, else `false`.
+ * @example
+ *
+ * (function() { return _.isArguments(arguments); })(1, 2, 3);
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+ function isArguments(value) {
+ return toString.call(value) == argsClass;
+ }
+ // fallback for browsers that can't detect `arguments` objects by [[Class]]
+ if (noArgsClass) {
+ isArguments = function(value) {
+ return value ? hasOwnProperty.call(value, 'callee') : false;
+ };
+ }
+
+ /**
+ * Iterates over `object`'s own and inherited enumerable properties, executing
+ * the `callback` for each property. The `callback` is bound to `thisArg` and
+ * invoked with three arguments; (value, key, object). Callbacks may exit iteration
+ * early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Objects
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Dog(name) {
+ * this.name = name;
+ * }
+ *
+ * Dog.prototype.bark = function() {
+ * alert('Woof, woof!');
+ * };
+ *
+ * _.forIn(new Dog('Dagny'), function(value, key) {
+ * alert(key);
+ * });
+ * // => alerts 'name' and 'bark' (order is not guaranteed)
+ */
+ var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, {
+ 'useHas': false
+ });
+
+ /**
+ * Iterates over an object's own enumerable properties, executing the `callback`
+ * for each property. The `callback` is bound to `thisArg` and invoked with three
+ * arguments; (value, key, object). Callbacks may exit iteration early by explicitly
+ * returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Objects
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
+ * alert(key);
+ * });
+ * // => alerts '0', '1', and 'length' (order is not guaranteed)
+ */
+ var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions);
+
+ /**
+ * Checks if `value` is an array.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is an array, else `false`.
+ * @example
+ *
+ * (function() { return _.isArray(arguments); })();
+ * // => false
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ */
+ var isArray = nativeIsArray || function(value) {
+ // `instanceof` may cause a memory leak in IE 7 if `value` is a host object
+ // http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak
+ return (argsAreObjects && value instanceof Array) || toString.call(value) == arrayClass;
+ };
+
+ /**
+ * Creates an array composed of the own enumerable property names of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns a new array of property names.
+ * @example
+ *
+ * _.keys({ 'one': 1, 'two': 2, 'three': 3 });
+ * // => ['one', 'two', 'three'] (order is not guaranteed)
+ */
+ var keys = !nativeKeys ? shimKeys : function(object) {
+ if (!isObject(object)) {
+ return [];
+ }
+ if ((hasEnumPrototype && typeof object == 'function') ||
+ (nonEnumArgs && object.length && isArguments(object))) {
+ return shimKeys(object);
+ }
+ return nativeKeys(object);
+ };
+
+ /**
+ * A fallback implementation of `isPlainObject` that checks if a given `value`
+ * is an object created by the `Object` constructor, assuming objects created
+ * by the `Object` constructor have no inherited enumerable properties and that
+ * there are no `Object.prototype` extensions.
+ *
+ * @private
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if `value` is a plain object, else `false`.
+ */
+ function shimIsPlainObject(value) {
+ // avoid non-objects and false positives for `arguments` objects
+ var result = false;
+ if (!(value && typeof value == 'object') || isArguments(value)) {
+ return result;
+ }
+ // check that the constructor is `Object` (i.e. `Object instanceof Object`)
+ var ctor = value.constructor;
+ if ((!isFunction(ctor) && (!noNodeClass || !isNode(value))) || ctor instanceof ctor) {
+ // IE < 9 iterates inherited properties before own properties. If the first
+ // iterated property is an object's own property then there are no inherited
+ // enumerable properties.
+ if (iteratesOwnLast) {
+ forIn(value, function(value, key, object) {
+ result = !hasOwnProperty.call(object, key);
+ return false;
+ });
+ return result === false;
+ }
+ // In most environments an object's own properties are iterated before
+ // its inherited properties. If the last iterated property is an object's
+ // own property then there are no inherited enumerable properties.
+ forIn(value, function(value, key) {
+ result = key;
+ });
+ return result === false || hasOwnProperty.call(value, result);
+ }
+ return result;
+ }
+
+ /**
+ * A fallback implementation of `Object.keys` that produces an array of the
+ * given object's own enumerable property names.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns a new array of property names.
+ */
+ function shimKeys(object) {
+ var result = [];
+ forOwn(object, function(value, key) {
+ result.push(key);
+ });
+ return result;
+ }
+
+ /**
+ * Used to convert characters to HTML entities:
+ *
+ * Though the `>` character is escaped for symmetry, characters like `>` and `/`
+ * don't require escaping in HTML and have no special meaning unless they're part
+ * of a tag or an unquoted attribute value.
+ * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")
+ */
+ var htmlEscapes = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": '''
+ };
+
+ /** Used to convert HTML entities to characters */
+ var htmlUnescapes = invert(htmlEscapes);
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object. Subsequent sources will overwrite propery assignments of previous
+ * sources. If a `callback` function is passed, it will be executed to produce
+ * the assigned values. The `callback` is bound to `thisArg` and invoked with
+ * two arguments; (objectValue, sourceValue).
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @alias extend
+ * @category Objects
+ * @param {Object} object The destination object.
+ * @param {Object} [source1, source2, ...] The source objects.
+ * @param {Function} [callback] The function to customize assigning values.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns the destination object.
+ * @example
+ *
+ * _.assign({ 'name': 'moe' }, { 'age': 40 });
+ * // => { 'name': 'moe', 'age': 40 }
+ *
+ * var defaults = _.partialRight(_.assign, function(a, b) {
+ * return typeof a == 'undefined' ? b : a;
+ * });
+ *
+ * var food = { 'name': 'apple' };
+ * defaults(food, { 'name': 'banana', 'type': 'fruit' });
+ * // => { 'name': 'apple', 'type': 'fruit' }
+ */
+ var assign = createIterator(defaultsIteratorOptions, {
+ 'top':
+ defaultsIteratorOptions.top.replace(';',
+ ';\n' +
+ "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" +
+ ' var callback = createCallback(args[--argsLength - 1], args[argsLength--], 2);\n' +
+ "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" +
+ ' callback = args[--argsLength];\n' +
+ '}'
+ ),
+ 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]'
+ });
+
+ /**
+ * Creates a clone of `value`. If `deep` is `true`, nested objects will also
+ * be cloned, otherwise they will be assigned by reference. If a `callback`
+ * function is passed, it will be executed to produce the cloned values. If
+ * `callback` returns `undefined`, cloning will be handled by the method instead.
+ * The `callback` is bound to `thisArg` and invoked with one argument; (value).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to clone.
+ * @param {Boolean} [deep=false] A flag to indicate a deep clone.
+ * @param {Function} [callback] The function to customize cloning values.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @param- {Array} [stackA=[]] Internally used to track traversed source objects.
+ * @param- {Array} [stackB=[]] Internally used to associate clones with source counterparts.
+ * @returns {Mixed} Returns the cloned `value`.
+ * @example
+ *
+ * var stooges = [
+ * { 'name': 'moe', 'age': 40 },
+ * { 'name': 'larry', 'age': 50 }
+ * ];
+ *
+ * var shallow = _.clone(stooges);
+ * shallow[0] === stooges[0];
+ * // => true
+ *
+ * var deep = _.clone(stooges, true);
+ * deep[0] === stooges[0];
+ * // => false
+ *
+ * _.mixin({
+ * 'clone': _.partialRight(_.clone, function(value) {
+ * return _.isElement(value) ? value.cloneNode(false) : undefined;
+ * })
+ * });
+ *
+ * var clone = _.clone(document.body);
+ * clone.childNodes.length;
+ * // => 0
+ */
+ function clone(value, deep, callback, thisArg, stackA, stackB) {
+ var result = value;
+
+ // allows working with "Collections" methods without using their `callback`
+ // argument, `index|key`, for this method's `callback`
+ if (typeof deep == 'function') {
+ thisArg = callback;
+ callback = deep;
+ deep = false;
+ }
+ if (typeof callback == 'function') {
+ callback = typeof thisArg == 'undefined' ? callback : createCallback(callback, thisArg, 1);
+ result = callback(result);
+
+ var done = typeof result != 'undefined';
+ if (!done) {
+ result = value;
+ }
+ }
+ // inspect [[Class]]
+ var isObj = isObject(result);
+ if (isObj) {
+ var className = toString.call(result);
+ if (!cloneableClasses[className] || (noNodeClass && isNode(result))) {
+ return result;
+ }
+ var isArr = isArray(result);
+ }
+ // shallow clone
+ if (!isObj || !deep) {
+ return isObj && !done
+ ? (isArr ? slice(result) : assign({}, result))
+ : result;
+ }
+ var ctor = ctorByClass[className];
+ switch (className) {
+ case boolClass:
+ case dateClass:
+ return done ? result : new ctor(+result);
+
+ case numberClass:
+ case stringClass:
+ return done ? result : new ctor(result);
+
+ case regexpClass:
+ return done ? result : ctor(result.source, reFlags.exec(result));
+ }
+ // check for circular references and return corresponding clone
+ stackA || (stackA = []);
+ stackB || (stackB = []);
+
+ var length = stackA.length;
+ while (length--) {
+ if (stackA[length] == value) {
+ return stackB[length];
+ }
+ }
+ // init cloned object
+ if (!done) {
+ result = isArr ? ctor(result.length) : {};
+
+ // add array properties assigned by `RegExp#exec`
+ if (isArr) {
+ if (hasOwnProperty.call(value, 'index')) {
+ result.index = value.index;
+ }
+ if (hasOwnProperty.call(value, 'input')) {
+ result.input = value.input;
+ }
+ }
+ }
+ // add the source value to the stack of traversed objects
+ // and associate it with its clone
+ stackA.push(value);
+ stackB.push(result);
+
+ // recursively populate clone (susceptible to call stack limits)
+ (isArr ? forEach : forOwn)(done ? result : value, function(objValue, key) {
+ result[key] = clone(objValue, deep, callback, undefined, stackA, stackB);
+ });
+
+ return result;
+ }
+
+ /**
+ * Creates a deep clone of `value`. If a `callback` function is passed, it will
+ * be executed to produce the cloned values. If `callback` returns the value it
+ * was passed, cloning will be handled by the method instead. The `callback` is
+ * bound to `thisArg` and invoked with one argument; (value).
+ *
+ * Note: This function is loosely based on the structured clone algorithm. Functions
+ * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and
+ * objects created by constructors other than `Object` are cloned to plain `Object` objects.
+ * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to deep clone.
+ * @param {Function} [callback] The function to customize cloning values.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Mixed} Returns the deep cloned `value`.
+ * @example
+ *
+ * var stooges = [
+ * { 'name': 'moe', 'age': 40 },
+ * { 'name': 'larry', 'age': 50 }
+ * ];
+ *
+ * var deep = _.cloneDeep(stooges);
+ * deep[0] === stooges[0];
+ * // => false
+ *
+ * var view = {
+ * 'label': 'docs',
+ * 'node': element
+ * };
+ *
+ * var clone = _.cloneDeep(view, function(value) {
+ * return _.isElement(value) ? value.cloneNode(true) : value;
+ * });
+ *
+ * clone.node == view.node;
+ * // => false
+ */
+ function cloneDeep(value, callback, thisArg) {
+ return clone(value, true, callback, thisArg);
+ }
+
+ /**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object for all destination properties that resolve to `undefined`. Once a
+ * property is set, additional defaults of the same property will be ignored.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Objects
+ * @param {Object} object The destination object.
+ * @param {Object} [source1, source2, ...] The source objects.
+ * @param- {Object} [guard] Internally used to allow working with `_.reduce`
+ * without using its callback's `key` and `object` arguments as sources.
+ * @returns {Object} Returns the destination object.
+ * @example
+ *
+ * var food = { 'name': 'apple' };
+ * _.defaults(food, { 'name': 'banana', 'type': 'fruit' });
+ * // => { 'name': 'apple', 'type': 'fruit' }
+ */
+ var defaults = createIterator(defaultsIteratorOptions);
+
+ /**
+ * Creates a sorted array of all enumerable properties, own and inherited,
+ * of `object` that have function values.
+ *
+ * @static
+ * @memberOf _
+ * @alias methods
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns a new array of property names that have function values.
+ * @example
+ *
+ * _.functions(_);
+ * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]
+ */
+ function functions(object) {
+ var result = [];
+ forIn(object, function(value, key) {
+ if (isFunction(value)) {
+ result.push(key);
+ }
+ });
+ return result.sort();
+ }
+
+ /**
+ * Checks if the specified object `property` exists and is a direct property,
+ * instead of an inherited property.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to check.
+ * @param {String} property The property to check for.
+ * @returns {Boolean} Returns `true` if key is a direct property, else `false`.
+ * @example
+ *
+ * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
+ * // => true
+ */
+ function has(object, property) {
+ return object ? hasOwnProperty.call(object, property) : false;
+ }
+
+ /**
+ * Creates an object composed of the inverted keys and values of the given `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to invert.
+ * @returns {Object} Returns the created inverted object.
+ * @example
+ *
+ * _.invert({ 'first': 'moe', 'second': 'larry' });
+ * // => { 'moe': 'first', 'larry': 'second' } (order is not guaranteed)
+ */
+ function invert(object) {
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = {};
+
+ while (++index < length) {
+ var key = props[index];
+ result[object[key]] = key;
+ }
+ return result;
+ }
+
+ /**
+ * Checks if `value` is a boolean value.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is a boolean value, else `false`.
+ * @example
+ *
+ * _.isBoolean(null);
+ * // => false
+ */
+ function isBoolean(value) {
+ return value === true || value === false || toString.call(value) == boolClass;
+ }
+
+ /**
+ * Checks if `value` is a date.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is a date, else `false`.
+ * @example
+ *
+ * _.isDate(new Date);
+ * // => true
+ */
+ function isDate(value) {
+ return value instanceof Date || toString.call(value) == dateClass;
+ }
+
+ /**
+ * Checks if `value` is a DOM element.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is a DOM element, else `false`.
+ * @example
+ *
+ * _.isElement(document.body);
+ * // => true
+ */
+ function isElement(value) {
+ return value ? value.nodeType === 1 : false;
+ }
+
+ /**
+ * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
+ * length of `0` and objects with no own enumerable properties are considered
+ * "empty".
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Array|Object|String} value The value to inspect.
+ * @returns {Boolean} Returns `true`, if the `value` is empty, else `false`.
+ * @example
+ *
+ * _.isEmpty([1, 2, 3]);
+ * // => false
+ *
+ * _.isEmpty({});
+ * // => true
+ *
+ * _.isEmpty('');
+ * // => true
+ */
+ function isEmpty(value) {
+ var result = true;
+ if (!value) {
+ return result;
+ }
+ var className = toString.call(value),
+ length = value.length;
+
+ if ((className == arrayClass || className == stringClass ||
+ className == argsClass || (noArgsClass && isArguments(value))) ||
+ (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {
+ return !length;
+ }
+ forOwn(value, function() {
+ return (result = false);
+ });
+ return result;
+ }
+
+ /**
+ * Performs a deep comparison between two values to determine if they are
+ * equivalent to each other. If `callback` is passed, it will be executed to
+ * compare values. If `callback` returns `undefined`, comparisons will be handled
+ * by the method instead. The `callback` is bound to `thisArg` and invoked with
+ * two arguments; (a, b).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} a The value to compare.
+ * @param {Mixed} b The other value to compare.
+ * @param {Function} [callback] The function to customize comparing values.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @param- {Object} [stackA=[]] Internally used track traversed `a` objects.
+ * @param- {Object} [stackB=[]] Internally used track traversed `b` objects.
+ * @returns {Boolean} Returns `true`, if the values are equvalent, else `false`.
+ * @example
+ *
+ * var moe = { 'name': 'moe', 'age': 40 };
+ * var copy = { 'name': 'moe', 'age': 40 };
+ *
+ * moe == copy;
+ * // => false
+ *
+ * _.isEqual(moe, copy);
+ * // => true
+ *
+ * var words = ['hello', 'goodbye'];
+ * var otherWords = ['hi', 'goodbye'];
+ *
+ * _.isEqual(words, otherWords, function(a, b) {
+ * var reGreet = /^(?:hello|hi)$/i,
+ * aGreet = _.isString(a) && reGreet.test(a),
+ * bGreet = _.isString(b) && reGreet.test(b);
+ *
+ * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
+ * });
+ * // => true
+ */
+ function isEqual(a, b, callback, thisArg, stackA, stackB) {
+ // used to indicate that when comparing objects, `a` has at least the properties of `b`
+ var whereIndicator = callback === indicatorObject;
+ if (callback && !whereIndicator) {
+ callback = typeof thisArg == 'undefined' ? callback : createCallback(callback, thisArg, 2);
+ var result = callback(a, b);
+ if (typeof result != 'undefined') {
+ return !!result;
+ }
+ }
+ // exit early for identical values
+ if (a === b) {
+ // treat `+0` vs. `-0` as not equal
+ return a !== 0 || (1 / a == 1 / b);
+ }
+ var type = typeof a,
+ otherType = typeof b;
+
+ // exit early for unlike primitive values
+ if (a === a &&
+ (!a || (type != 'function' && type != 'object')) &&
+ (!b || (otherType != 'function' && otherType != 'object'))) {
+ return false;
+ }
+ // exit early for `null` and `undefined`, avoiding ES3's Function#call behavior
+ // http://es5.github.com/#x15.3.4.4
+ if (a == null || b == null) {
+ return a === b;
+ }
+ // compare [[Class]] names
+ var className = toString.call(a),
+ otherClass = toString.call(b);
+
+ if (className == argsClass) {
+ className = objectClass;
+ }
+ if (otherClass == argsClass) {
+ otherClass = objectClass;
+ }
+ if (className != otherClass) {
+ return false;
+ }
+ switch (className) {
+ case boolClass:
+ case dateClass:
+ // coerce dates and booleans to numbers, dates to milliseconds and booleans
+ // to `1` or `0`, treating invalid dates coerced to `NaN` as not equal
+ return +a == +b;
+
+ case numberClass:
+ // treat `NaN` vs. `NaN` as equal
+ return a != +a
+ ? b != +b
+ // but treat `+0` vs. `-0` as not equal
+ : (a == 0 ? (1 / a == 1 / b) : a == +b);
+
+ case regexpClass:
+ case stringClass:
+ // coerce regexes to strings (http://es5.github.com/#x15.10.6.4)
+ // treat string primitives and their corresponding object instances as equal
+ return a == b + '';
+ }
+ var isArr = className == arrayClass;
+ if (!isArr) {
+ // unwrap any `lodash` wrapped values
+ if (a.__wrapped__ || b.__wrapped__) {
+ return isEqual(a.__wrapped__ || a, b.__wrapped__ || b, callback, thisArg, stackA, stackB);
+ }
+ // exit for functions and DOM nodes
+ if (className != objectClass || (noNodeClass && (isNode(a) || isNode(b)))) {
+ return false;
+ }
+ // in older versions of Opera, `arguments` objects have `Array` constructors
+ var ctorA = !argsAreObjects && isArguments(a) ? Object : a.constructor,
+ ctorB = !argsAreObjects && isArguments(b) ? Object : b.constructor;
+
+ // non `Object` object instances with different constructors are not equal
+ if (ctorA != ctorB && !(
+ isFunction(ctorA) && ctorA instanceof ctorA &&
+ isFunction(ctorB) && ctorB instanceof ctorB
+ )) {
+ return false;
+ }
+ }
+ // assume cyclic structures are equal
+ // the algorithm for detecting cyclic structures is adapted from ES 5.1
+ // section 15.12.3, abstract operation `JO` (http://es5.github.com/#x15.12.3)
+ stackA || (stackA = []);
+ stackB || (stackB = []);
+
+ var length = stackA.length;
+ while (length--) {
+ if (stackA[length] == a) {
+ return stackB[length] == b;
+ }
+ }
+ var size = 0;
+ result = true;
+
+ // add `a` and `b` to the stack of traversed objects
+ stackA.push(a);
+ stackB.push(b);
+
+ // recursively compare objects and arrays (susceptible to call stack limits)
+ if (isArr) {
+ length = a.length;
+ size = b.length;
+
+ // compare lengths to determine if a deep comparison is necessary
+ result = size == a.length;
+ if (!result && !whereIndicator) {
+ return result;
+ }
+ // deep compare the contents, ignoring non-numeric properties
+ while (size--) {
+ var index = length,
+ value = b[size];
+
+ if (whereIndicator) {
+ while (index--) {
+ if ((result = isEqual(a[index], value, callback, thisArg, stackA, stackB))) {
+ break;
+ }
+ }
+ } else if (!(result = isEqual(a[size], value, callback, thisArg, stackA, stackB))) {
+ break;
+ }
+ }
+ return result;
+ }
+ // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`
+ // which, in this case, is more costly
+ forIn(b, function(value, key, b) {
+ if (hasOwnProperty.call(b, key)) {
+ // count the number of properties.
+ size++;
+ // deep compare each property value.
+ return (result = hasOwnProperty.call(a, key) && isEqual(a[key], value, callback, thisArg, stackA, stackB));
+ }
+ });
+
+ if (result && !whereIndicator) {
+ // ensure both objects have the same number of properties
+ forIn(a, function(value, key, a) {
+ if (hasOwnProperty.call(a, key)) {
+ // `size` will be `-1` if `a` has more properties than `b`
+ return (result = --size > -1);
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Checks if `value` is, or can be coerced to, a finite number.
+ *
+ * Note: This is not the same as native `isFinite`, which will return true for
+ * booleans and empty strings. See http://es5.github.com/#x15.1.2.5.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is finite, else `false`.
+ * @example
+ *
+ * _.isFinite(-101);
+ * // => true
+ *
+ * _.isFinite('10');
+ * // => true
+ *
+ * _.isFinite(true);
+ * // => false
+ *
+ * _.isFinite('');
+ * // => false
+ *
+ * _.isFinite(Infinity);
+ * // => false
+ */
+ function isFinite(value) {
+ return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
+ }
+
+ /**
+ * Checks if `value` is a function.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ */
+ function isFunction(value) {
+ return typeof value == 'function';
+ }
+ // fallback for older versions of Chrome and Safari
+ if (isFunction(/x/)) {
+ isFunction = function(value) {
+ return value instanceof Function || toString.call(value) == funcClass;
+ };
+ }
+
+ /**
+ * Checks if `value` is the language type of Object.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+ function isObject(value) {
+ // check if the value is the ECMAScript language type of Object
+ // http://es5.github.com/#x8
+ // and avoid a V8 bug
+ // http://code.google.com/p/v8/issues/detail?id=2291
+ return value ? objectTypes[typeof value] : false;
+ }
+
+ /**
+ * Checks if `value` is `NaN`.
+ *
+ * Note: This is not the same as native `isNaN`, which will return `true` for
+ * `undefined` and other values. See http://es5.github.com/#x15.1.2.4.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is `NaN`, else `false`.
+ * @example
+ *
+ * _.isNaN(NaN);
+ * // => true
+ *
+ * _.isNaN(new Number(NaN));
+ * // => true
+ *
+ * isNaN(undefined);
+ * // => true
+ *
+ * _.isNaN(undefined);
+ * // => false
+ */
+ function isNaN(value) {
+ // `NaN` as a primitive is the only value that is not equal to itself
+ // (perform the [[Class]] check first to avoid errors with some host objects in IE)
+ return isNumber(value) && value != +value
+ }
+
+ /**
+ * Checks if `value` is `null`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is `null`, else `false`.
+ * @example
+ *
+ * _.isNull(null);
+ * // => true
+ *
+ * _.isNull(undefined);
+ * // => false
+ */
+ function isNull(value) {
+ return value === null;
+ }
+
+ /**
+ * Checks if `value` is a number.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is a number, else `false`.
+ * @example
+ *
+ * _.isNumber(8.4 * 5);
+ * // => true
+ */
+ function isNumber(value) {
+ return typeof value == 'number' || toString.call(value) == numberClass;
+ }
+
+ /**
+ * Checks if a given `value` is an object created by the `Object` constructor.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Stooge(name, age) {
+ * this.name = name;
+ * this.age = age;
+ * }
+ *
+ * _.isPlainObject(new Stooge('moe', 40));
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'name': 'moe', 'age': 40 });
+ * // => true
+ */
+ var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {
+ if (!(value && typeof value == 'object')) {
+ return false;
+ }
+ var valueOf = value.valueOf,
+ objProto = typeof valueOf == 'function' && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);
+
+ return objProto
+ ? value == objProto || (getPrototypeOf(value) == objProto && !isArguments(value))
+ : shimIsPlainObject(value);
+ };
+
+ /**
+ * Checks if `value` is a regular expression.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is a regular expression, else `false`.
+ * @example
+ *
+ * _.isRegExp(/moe/);
+ * // => true
+ */
+ function isRegExp(value) {
+ return value instanceof RegExp || toString.call(value) == regexpClass;
+ }
+
+ /**
+ * Checks if `value` is a string.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is a string, else `false`.
+ * @example
+ *
+ * _.isString('moe');
+ * // => true
+ */
+ function isString(value) {
+ return typeof value == 'string' || toString.call(value) == stringClass;
+ }
+
+ /**
+ * Checks if `value` is `undefined`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Mixed} value The value to check.
+ * @returns {Boolean} Returns `true`, if the `value` is `undefined`, else `false`.
+ * @example
+ *
+ * _.isUndefined(void 0);
+ * // => true
+ */
+ function isUndefined(value) {
+ return typeof value == 'undefined';
+ }
+
+ /**
+ * Recursively merges own enumerable properties of the source object(s), that
+ * don't resolve to `undefined`, into the destination object. Subsequent sources
+ * will overwrite propery assignments of previous sources. If a `callback` function
+ * is passed, it will be executed to produce the merged values of the destination
+ * and source properties. If `callback` returns `undefined`, merging will be
+ * handled by the method instead. The `callback` is bound to `thisArg` and
+ * invoked with two arguments; (objectValue, sourceValue).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The destination object.
+ * @param {Object} [source1, source2, ...] The source objects.
+ * @param {Function} [callback] The function to customize merging properties.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @param- {Object} [deepIndicator] Internally used to indicate that `stackA`
+ * and `stackB` are arrays of traversed objects instead of source objects.
+ * @param- {Array} [stackA=[]] Internally used to track traversed source objects.
+ * @param- {Array} [stackB=[]] Internally used to associate values with their
+ * source counterparts.
+ * @returns {Object} Returns the destination object.
+ * @example
+ *
+ * var names = {
+ * 'stooges': [
+ * { 'name': 'moe' },
+ * { 'name': 'larry' }
+ * ]
+ * };
+ *
+ * var ages = {
+ * 'stooges': [
+ * { 'age': 40 },
+ * { 'age': 50 }
+ * ]
+ * };
+ *
+ * _.merge(names, ages);
+ * // => { 'stooges': [{ 'name': 'moe', 'age': 40 }, { 'name': 'larry', 'age': 50 }] }
+ *
+ * var food = {
+ * 'fruits': ['apple'],
+ * 'vegetables': ['beet']
+ * };
+ *
+ * var otherFood = {
+ * 'fruits': ['banana'],
+ * 'vegetables': ['carrot']
+ * };
+ *
+ * _.merge(food, otherFood, function(a, b) {
+ * return _.isArray(a) ? a.concat(b) : undefined;
+ * });
+ * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }
+ */
+ function merge(object, source, deepIndicator) {
+ var args = arguments,
+ index = 0,
+ length = 2;
+
+ if (!isObject(object)) {
+ return object;
+ }
+ if (deepIndicator === indicatorObject) {
+ var callback = args[3],
+ stackA = args[4],
+ stackB = args[5];
+ } else {
+ stackA = [];
+ stackB = [];
+
+ // allows working with `_.reduce` and `_.reduceRight` without
+ // using their `callback` arguments, `index|key` and `collection`
+ if (typeof deepIndicator != 'number') {
+ length = args.length;
+ }
+ if (length > 3 && typeof args[length - 2] == 'function') {
+ callback = createCallback(args[--length - 1], args[length--], 2);
+ } else if (length > 2 && typeof args[length - 1] == 'function') {
+ callback = args[--length];
+ }
+ }
+ while (++index < length) {
+ (isArray(args[index]) ? forEach : forOwn)(args[index], function(source, key) {
+ var found,
+ isArr,
+ result = source,
+ value = object[key];
+
+ if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
+ // avoid merging previously merged cyclic sources
+ var stackLength = stackA.length;
+ while (stackLength--) {
+ if ((found = stackA[stackLength] == source)) {
+ value = stackB[stackLength];
+ break;
+ }
+ }
+ if (!found) {
+ value = isArr
+ ? (isArray(value) ? value : [])
+ : (isPlainObject(value) ? value : {});
+
+ if (callback) {
+ result = callback(value, source);
+ if (typeof result != 'undefined') {
+ value = result;
+ }
+ }
+ // add `source` and associated `value` to the stack of traversed objects
+ stackA.push(source);
+ stackB.push(value);
+
+ // recursively merge objects and arrays (susceptible to call stack limits)
+ if (!callback) {
+ value = merge(value, source, indicatorObject, callback, stackA, stackB);
+ }
+ }
+ }
+ else {
+ if (callback) {
+ result = callback(value, source);
+ if (typeof result == 'undefined') {
+ result = source;
+ }
+ }
+ if (typeof result != 'undefined') {
+ value = result;
+ }
+ }
+ object[key] = value;
+ });
+ }
+ return object;
+ }
+
+ /**
+ * Creates a shallow clone of `object` excluding the specified properties.
+ * Property names may be specified as individual arguments or as arrays of
+ * property names. If a `callback` function is passed, it will be executed
+ * for each property in the `object`, omitting the properties `callback`
+ * returns truthy for. The `callback` is bound to `thisArg` and invoked
+ * with three arguments; (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The source object.
+ * @param {Function|String} callback|[prop1, prop2, ...] The properties to omit
+ * or the function called per iteration.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns an object without the omitted properties.
+ * @example
+ *
+ * _.omit({ 'name': 'moe', 'age': 40 }, 'age');
+ * // => { 'name': 'moe' }
+ *
+ * _.omit({ 'name': 'moe', 'age': 40 }, function(value) {
+ * return typeof value == 'number';
+ * });
+ * // => { 'name': 'moe' }
+ */
+ function omit(object, callback, thisArg) {
+ var isFunc = typeof callback == 'function',
+ result = {};
+
+ if (isFunc) {
+ callback = createCallback(callback, thisArg);
+ } else {
+ var props = concat.apply(arrayRef, arguments);
+ }
+ forIn(object, function(value, key, object) {
+ if (isFunc
+ ? !callback(value, key, object)
+ : indexOf(props, key, 1) < 0
+ ) {
+ result[key] = value;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * Creates a two dimensional array of the given object's key-value pairs,
+ * i.e. `[[key1, value1], [key2, value2]]`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns new array of key-value pairs.
+ * @example
+ *
+ * _.pairs({ 'moe': 30, 'larry': 40 });
+ * // => [['moe', 30], ['larry', 40]] (order is not guaranteed)
+ */
+ function pairs(object) {
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = Array(length);
+
+ while (++index < length) {
+ var key = props[index];
+ result[index] = [key, object[key]];
+ }
+ return result;
+ }
+
+ /**
+ * Creates a shallow clone of `object` composed of the specified properties.
+ * Property names may be specified as individual arguments or as arrays of property
+ * names. If `callback` is passed, it will be executed for each property in the
+ * `object`, picking the properties `callback` returns truthy for. The `callback`
+ * is bound to `thisArg` and invoked with three arguments; (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The source object.
+ * @param {Array|Function|String} callback|[prop1, prop2, ...] The function called
+ * per iteration or properties to pick, either as individual arguments or arrays.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns an object composed of the picked properties.
+ * @example
+ *
+ * _.pick({ 'name': 'moe', '_userid': 'moe1' }, 'name');
+ * // => { 'name': 'moe' }
+ *
+ * _.pick({ 'name': 'moe', '_userid': 'moe1' }, function(value, key) {
+ * return key.charAt(0) != '_';
+ * });
+ * // => { 'name': 'moe' }
+ */
+ function pick(object, callback, thisArg) {
+ var result = {};
+ if (typeof callback != 'function') {
+ var index = 0,
+ props = concat.apply(arrayRef, arguments),
+ length = isObject(object) ? props.length : 0;
+
+ while (++index < length) {
+ var key = props[index];
+ if (key in object) {
+ result[key] = object[key];
+ }
+ }
+ } else {
+ callback = createCallback(callback, thisArg);
+ forIn(object, function(value, key, object) {
+ if (callback(value, key, object)) {
+ result[key] = value;
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array composed of the own enumerable property values of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns a new array of property values.
+ * @example
+ *
+ * _.values({ 'one': 1, 'two': 2, 'three': 3 });
+ * // => [1, 2, 3]
+ */
+ function values(object) {
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = object[props[index]];
+ }
+ return result;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array of elements from the specified indexes, or keys, of the
+ * `collection`. Indexes may be specified as individual arguments or as arrays
+ * of indexes.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Array|Number|String} [index1, index2, ...] The indexes of
+ * `collection` to retrieve, either as individual arguments or arrays.
+ * @returns {Array} Returns a new array of elements corresponding to the
+ * provided indexes.
+ * @example
+ *
+ * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
+ * // => ['a', 'c', 'e']
+ *
+ * _.at(['moe', 'larry', 'curly'], 0, 2);
+ * // => ['moe', 'curly']
+ */
+ function at(collection) {
+ var index = -1,
+ props = concat.apply(arrayRef, slice(arguments, 1)),
+ length = props.length,
+ result = Array(length);
+
+ if (noCharByIndex && isString(collection)) {
+ collection = collection.split('');
+ }
+ while(++index < length) {
+ result[index] = collection[props[index]];
+ }
+ return result;
+ }
+
+ /**
+ * Checks if a given `target` element is present in a `collection` using strict
+ * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
+ * as the offset from the end of the collection.
+ *
+ * @static
+ * @memberOf _
+ * @alias include
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Mixed} target The value to check for.
+ * @param {Number} [fromIndex=0] The index to search from.
+ * @returns {Boolean} Returns `true` if the `target` element is found, else `false`.
+ * @example
+ *
+ * _.contains([1, 2, 3], 1);
+ * // => true
+ *
+ * _.contains([1, 2, 3], 1, 2);
+ * // => false
+ *
+ * _.contains({ 'name': 'moe', 'age': 40 }, 'moe');
+ * // => true
+ *
+ * _.contains('curly', 'ur');
+ * // => true
+ */
+ function contains(collection, target, fromIndex) {
+ var index = -1,
+ length = collection ? collection.length : 0,
+ result = false;
+
+ fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
+ if (typeof length == 'number') {
+ result = (isString(collection)
+ ? collection.indexOf(target, fromIndex)
+ : indexOf(collection, target, fromIndex)
+ ) > -1;
+ } else {
+ each(collection, function(value) {
+ if (++index >= fromIndex) {
+ return !(result = value === target);
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Creates an object composed of keys returned from running each element of the
+ * `collection` through the given `callback`. The corresponding value of each key
+ * is the number of times the key was returned by the `callback`. The `callback`
+ * is bound to `thisArg` and invoked with three arguments; (value, index|key, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
+ * // => { '4': 1, '6': 2 }
+ *
+ * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
+ * // => { '4': 1, '6': 2 }
+ *
+ * _.countBy(['one', 'two', 'three'], 'length');
+ * // => { '3': 2, '5': 1 }
+ */
+ function countBy(collection, callback, thisArg) {
+ var result = {};
+ callback = createCallback(callback, thisArg);
+
+ forEach(collection, function(value, key, collection) {
+ key = callback(value, key, collection) + '';
+ (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
+ });
+ return result;
+ }
+
+ /**
+ * Checks if the `callback` returns a truthy value for **all** elements of a
+ * `collection`. The `callback` is bound to `thisArg` and invoked with three
+ * arguments; (value, index|key, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias all
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Boolean} Returns `true` if all elements pass the callback check,
+ * else `false`.
+ * @example
+ *
+ * _.every([true, 1, null, 'yes'], Boolean);
+ * // => false
+ *
+ * var stooges = [
+ * { 'name': 'moe', 'age': 40 },
+ * { 'name': 'larry', 'age': 50 }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.every(stooges, 'age');
+ * // => true
+ *
+ * // using "_.where" callback shorthand
+ * _.every(stooges, { 'age': 50 });
+ * // => false
+ */
+ function every(collection, callback, thisArg) {
+ var result = true;
+ callback = createCallback(callback, thisArg);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ if (!(result = !!callback(collection[index], index, collection))) {
+ break;
+ }
+ }
+ } else {
+ each(collection, function(value, index, collection) {
+ return (result = !!callback(value, index, collection));
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Examines each element in a `collection`, returning an array of all elements
+ * the `callback` returns truthy for. The `callback` is bound to `thisArg` and
+ * invoked with three arguments; (value, index|key, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias select
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of elements that passed the callback check.
+ * @example
+ *
+ * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
+ * // => [2, 4, 6]
+ *
+ * var food = [
+ * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
+ * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.filter(food, 'organic');
+ * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]
+ *
+ * // using "_.where" callback shorthand
+ * _.filter(food, { 'type': 'fruit' });
+ * // => [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]
+ */
+ function filter(collection, callback, thisArg) {
+ var result = [];
+ callback = createCallback(callback, thisArg);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ if (callback(value, index, collection)) {
+ result.push(value);
+ }
+ }
+ } else {
+ each(collection, function(value, index, collection) {
+ if (callback(value, index, collection)) {
+ result.push(value);
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Examines each element in a `collection`, returning the first that the `callback`
+ * returns truthy for. The `callback` is bound to `thisArg` and invoked with three
+ * arguments; (value, index|key, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias detect
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Mixed} Returns the element that passed the callback check,
+ * else `undefined`.
+ * @example
+ *
+ * var even = _.find([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
+ * // => 2
+ *
+ * var food = [
+ * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
+ * { 'name': 'banana', 'organic': true, 'type': 'fruit' },
+ * { 'name': 'beet', 'organic': false, 'type': 'vegetable' },
+ * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
+ * ];
+ *
+ * // using "_.where" callback shorthand
+ * var veggie = _.find(food, { 'type': 'vegetable' });
+ * // => { 'name': 'beet', 'organic': false, 'type': 'vegetable' }
+ *
+ * // using "_.pluck" callback shorthand
+ * var healthy = _.find(food, 'organic');
+ * // => { 'name': 'banana', 'organic': true, 'type': 'fruit' }
+ */
+ function find(collection, callback, thisArg) {
+ var result;
+ callback = createCallback(callback, thisArg);
+
+ forEach(collection, function(value, index, collection) {
+ if (callback(value, index, collection)) {
+ result = value;
+ return false;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * Iterates over a `collection`, executing the `callback` for each element in
+ * the `collection`. The `callback` is bound to `thisArg` and invoked with three
+ * arguments; (value, index|key, collection). Callbacks may exit iteration early
+ * by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias each
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array|Object|String} Returns `collection`.
+ * @example
+ *
+ * _([1, 2, 3]).forEach(alert).join(',');
+ * // => alerts each number and returns '1,2,3'
+ *
+ * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, alert);
+ * // => alerts each number value (order is not guaranteed)
+ */
+ function forEach(collection, callback, thisArg) {
+ if (callback && typeof thisArg == 'undefined' && isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ if (callback(collection[index], index, collection) === false) {
+ break;
+ }
+ }
+ } else {
+ each(collection, callback, thisArg);
+ }
+ return collection;
+ }
+
+ /**
+ * Creates an object composed of keys returned from running each element of the
+ * `collection` through the `callback`. The corresponding value of each key is
+ * an array of elements passed to `callback` that returned the key. The `callback`
+ * is bound to `thisArg` and invoked with three arguments; (value, index|key, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
+ * // => { '4': [4.2], '6': [6.1, 6.4] }
+ *
+ * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
+ * // => { '4': [4.2], '6': [6.1, 6.4] }
+ *
+ * // using "_.pluck" callback shorthand
+ * _.groupBy(['one', 'two', 'three'], 'length');
+ * // => { '3': ['one', 'two'], '5': ['three'] }
+ */
+ function groupBy(collection, callback, thisArg) {
+ var result = {};
+ callback = createCallback(callback, thisArg);
+
+ forEach(collection, function(value, key, collection) {
+ key = callback(value, key, collection) + '';
+ (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
+ });
+ return result;
+ }
+
+ /**
+ * Invokes the method named by `methodName` on each element in the `collection`,
+ * returning an array of the results of each invoked method. Additional arguments
+ * will be passed to each invoked method. If `methodName` is a function, it will
+ * be invoked for, and `this` bound to, each element in the `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|String} methodName The name of the method to invoke or
+ * the function invoked per iteration.
+ * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the method with.
+ * @returns {Array} Returns a new array of the results of each invoked method.
+ * @example
+ *
+ * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
+ * // => [[1, 5, 7], [1, 2, 3]]
+ *
+ * _.invoke([123, 456], String.prototype.split, '');
+ * // => [['1', '2', '3'], ['4', '5', '6']]
+ */
+ function invoke(collection, methodName) {
+ var args = slice(arguments, 2),
+ index = -1,
+ isFunc = typeof methodName == 'function',
+ length = collection ? collection.length : 0,
+ result = Array(typeof length == 'number' ? length : 0);
+
+ forEach(collection, function(value) {
+ result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
+ });
+ return result;
+ }
+
+ /**
+ * Creates an array of values by running each element in the `collection`
+ * through the `callback`. The `callback` is bound to `thisArg` and invoked with
+ * three arguments; (value, index|key, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias collect
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of the results of each `callback` execution.
+ * @example
+ *
+ * _.map([1, 2, 3], function(num) { return num * 3; });
+ * // => [3, 6, 9]
+ *
+ * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
+ * // => [3, 6, 9] (order is not guaranteed)
+ *
+ * var stooges = [
+ * { 'name': 'moe', 'age': 40 },
+ * { 'name': 'larry', 'age': 50 }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.map(stooges, 'name');
+ * // => ['moe', 'larry']
+ */
+ function map(collection, callback, thisArg) {
+ var index = -1,
+ length = collection ? collection.length : 0,
+ result = Array(typeof length == 'number' ? length : 0);
+
+ callback = createCallback(callback, thisArg);
+ if (isArray(collection)) {
+ while (++index < length) {
+ result[index] = callback(collection[index], index, collection);
+ }
+ } else {
+ each(collection, function(value, key, collection) {
+ result[++index] = callback(value, key, collection);
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Retrieves the maximum value of an `array`. If `callback` is passed,
+ * it will be executed for each value in the `array` to generate the
+ * criterion by which the value is ranked. The `callback` is bound to
+ * `thisArg` and invoked with three arguments; (value, index, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Mixed} Returns the maximum value.
+ * @example
+ *
+ * _.max([4, 2, 8, 6]);
+ * // => 8
+ *
+ * var stooges = [
+ * { 'name': 'moe', 'age': 40 },
+ * { 'name': 'larry', 'age': 50 }
+ * ];
+ *
+ * _.max(stooges, function(stooge) { return stooge.age; });
+ * // => { 'name': 'larry', 'age': 50 };
+ *
+ * // using "_.pluck" callback shorthand
+ * _.max(stooges, 'age');
+ * // => { 'name': 'larry', 'age': 50 };
+ */
+ function max(collection, callback, thisArg) {
+ var computed = -Infinity,
+ result = computed;
+
+ if (!callback && isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ if (value > result) {
+ result = value;
+ }
+ }
+ } else {
+ callback = !callback && isString(collection)
+ ? charAtCallback
+ : createCallback(callback, thisArg);
+
+ each(collection, function(value, index, collection) {
+ var current = callback(value, index, collection);
+ if (current > computed) {
+ computed = current;
+ result = value;
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Retrieves the minimum value of an `array`. If `callback` is passed,
+ * it will be executed for each value in the `array` to generate the
+ * criterion by which the value is ranked. The `callback` is bound to `thisArg`
+ * and invoked with three arguments; (value, index, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Mixed} Returns the minimum value.
+ * @example
+ *
+ * _.min([4, 2, 8, 6]);
+ * // => 2
+ *
+ * var stooges = [
+ * { 'name': 'moe', 'age': 40 },
+ * { 'name': 'larry', 'age': 50 }
+ * ];
+ *
+ * _.min(stooges, function(stooge) { return stooge.age; });
+ * // => { 'name': 'moe', 'age': 40 };
+ *
+ * // using "_.pluck" callback shorthand
+ * _.min(stooges, 'age');
+ * // => { 'name': 'moe', 'age': 40 };
+ */
+ function min(collection, callback, thisArg) {
+ var computed = Infinity,
+ result = computed;
+
+ if (!callback && isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ if (value < result) {
+ result = value;
+ }
+ }
+ } else {
+ callback = !callback && isString(collection)
+ ? charAtCallback
+ : createCallback(callback, thisArg);
+
+ each(collection, function(value, index, collection) {
+ var current = callback(value, index, collection);
+ if (current < computed) {
+ computed = current;
+ result = value;
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Retrieves the value of a specified property from all elements in the `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {String} property The property to pluck.
+ * @returns {Array} Returns a new array of property values.
+ * @example
+ *
+ * var stooges = [
+ * { 'name': 'moe', 'age': 40 },
+ * { 'name': 'larry', 'age': 50 }
+ * ];
+ *
+ * _.pluck(stooges, 'name');
+ * // => ['moe', 'larry']
+ */
+ var pluck = map;
+
+ /**
+ * Reduces a `collection` to a value that is the accumulated result of running
+ * each element in the `collection` through the `callback`, where each successive
+ * `callback` execution consumes the return value of the previous execution.
+ * If `accumulator` is not passed, the first element of the `collection` will be
+ * used as the initial `accumulator` value. The `callback` is bound to `thisArg`
+ * and invoked with four arguments; (accumulator, value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @alias foldl, inject
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {Mixed} [accumulator] Initial value of the accumulator.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Mixed} Returns the accumulated value.
+ * @example
+ *
+ * var sum = _.reduce([1, 2, 3], function(sum, num) {
+ * return sum + num;
+ * });
+ * // => 6
+ *
+ * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
+ * result[key] = num * 3;
+ * return result;
+ * }, {});
+ * // => { 'a': 3, 'b': 6, 'c': 9 }
+ */
+ function reduce(collection, callback, accumulator, thisArg) {
+ var noaccum = arguments.length < 3;
+ callback = createCallback(callback, thisArg, 4);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ if (noaccum) {
+ accumulator = collection[++index];
+ }
+ while (++index < length) {
+ accumulator = callback(accumulator, collection[index], index, collection);
+ }
+ } else {
+ each(collection, function(value, index, collection) {
+ accumulator = noaccum
+ ? (noaccum = false, value)
+ : callback(accumulator, value, index, collection)
+ });
+ }
+ return accumulator;
+ }
+
+ /**
+ * This method is similar to `_.reduce`, except that it iterates over a
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias foldr
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {Mixed} [accumulator] Initial value of the accumulator.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Mixed} Returns the accumulated value.
+ * @example
+ *
+ * var list = [[0, 1], [2, 3], [4, 5]];
+ * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
+ * // => [4, 5, 2, 3, 0, 1]
+ */
+ function reduceRight(collection, callback, accumulator, thisArg) {
+ var iterable = collection,
+ length = collection ? collection.length : 0,
+ noaccum = arguments.length < 3;
+
+ if (typeof length != 'number') {
+ var props = keys(collection);
+ length = props.length;
+ } else if (noCharByIndex && isString(collection)) {
+ iterable = collection.split('');
+ }
+ callback = createCallback(callback, thisArg, 4);
+ forEach(collection, function(value, index, collection) {
+ index = props ? props[--length] : --length;
+ accumulator = noaccum
+ ? (noaccum = false, iterable[index])
+ : callback(accumulator, iterable[index], index, collection);
+ });
+ return accumulator;
+ }
+
+ /**
+ * The opposite of `_.filter`, this method returns the elements of a
+ * `collection` that `callback` does **not** return truthy for.
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of elements that did **not** pass the
+ * callback check.
+ * @example
+ *
+ * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
+ * // => [1, 3, 5]
+ *
+ * var food = [
+ * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
+ * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.reject(food, 'organic');
+ * // => [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]
+ *
+ * // using "_.where" callback shorthand
+ * _.reject(food, { 'type': 'fruit' });
+ * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]
+ */
+ function reject(collection, callback, thisArg) {
+ callback = createCallback(callback, thisArg);
+ return filter(collection, function(value, index, collection) {
+ return !callback(value, index, collection);
+ });
+ }
+
+ /**
+ * Creates an array of shuffled `array` values, using a version of the
+ * Fisher-Yates shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to shuffle.
+ * @returns {Array} Returns a new shuffled collection.
+ * @example
+ *
+ * _.shuffle([1, 2, 3, 4, 5, 6]);
+ * // => [4, 1, 6, 3, 5, 2]
+ */
+ function shuffle(collection) {
+ var index = -1,
+ length = collection ? collection.length : 0,
+ result = Array(typeof length == 'number' ? length : 0);
+
+ forEach(collection, function(value) {
+ var rand = floor(nativeRandom() * (++index + 1));
+ result[index] = result[rand];
+ result[rand] = value;
+ });
+ return result;
+ }
+
+ /**
+ * Gets the size of the `collection` by returning `collection.length` for arrays
+ * and array-like objects or the number of own enumerable properties for objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to inspect.
+ * @returns {Number} Returns `collection.length` or number of own enumerable properties.
+ * @example
+ *
+ * _.size([1, 2]);
+ * // => 2
+ *
+ * _.size({ 'one': 1, 'two': 2, 'three': 3 });
+ * // => 3
+ *
+ * _.size('curly');
+ * // => 5
+ */
+ function size(collection) {
+ var length = collection ? collection.length : 0;
+ return typeof length == 'number' ? length : keys(collection).length;
+ }
+
+ /**
+ * Checks if the `callback` returns a truthy value for **any** element of a
+ * `collection`. The function returns as soon as it finds passing value, and
+ * does not iterate over the entire `collection`. The `callback` is bound to
+ * `thisArg` and invoked with three arguments; (value, index|key, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias any
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Boolean} Returns `true` if any element passes the callback check,
+ * else `false`.
+ * @example
+ *
+ * _.some([null, 0, 'yes', false], Boolean);
+ * // => true
+ *
+ * var food = [
+ * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
+ * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.some(food, 'organic');
+ * // => true
+ *
+ * // using "_.where" callback shorthand
+ * _.some(food, { 'type': 'meat' });
+ * // => false
+ */
+ function some(collection, callback, thisArg) {
+ var result;
+ callback = createCallback(callback, thisArg);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ if ((result = callback(collection[index], index, collection))) {
+ break;
+ }
+ }
+ } else {
+ each(collection, function(value, index, collection) {
+ return !(result = callback(value, index, collection));
+ });
+ }
+ return !!result;
+ }
+
+ /**
+ * Creates an array of elements, sorted in ascending order by the results of
+ * running each element in the `collection` through the `callback`. This method
+ * performs a stable sort, that is, it will preserve the original sort order of
+ * equal elements. The `callback` is bound to `thisArg` and invoked with three
+ * arguments; (value, index|key, collection).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of sorted elements.
+ * @example
+ *
+ * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
+ * // => [3, 1, 2]
+ *
+ * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
+ * // => [3, 1, 2]
+ *
+ * // using "_.pluck" callback shorthand
+ * _.sortBy(['banana', 'strawberry', 'apple'], 'length');
+ * // => ['apple', 'banana', 'strawberry']
+ */
+ function sortBy(collection, callback, thisArg) {
+ var index = -1,
+ length = collection ? collection.length : 0,
+ result = Array(typeof length == 'number' ? length : 0);
+
+ callback = createCallback(callback, thisArg);
+ forEach(collection, function(value, key, collection) {
+ result[++index] = {
+ 'criteria': callback(value, key, collection),
+ 'index': index,
+ 'value': value
+ };
+ });
+
+ length = result.length;
+ result.sort(compareAscending);
+ while (length--) {
+ result[length] = result[length].value;
+ }
+ return result;
+ }
+
+ /**
+ * Converts the `collection` to an array.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to convert.
+ * @returns {Array} Returns the new converted array.
+ * @example
+ *
+ * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
+ * // => [2, 3, 4]
+ */
+ function toArray(collection) {
+ if (collection && typeof collection.length == 'number') {
+ return noCharByIndex && isString(collection)
+ ? collection.split('')
+ : slice(collection);
+ }
+ return values(collection);
+ }
+
+ /**
+ * Examines each element in a `collection`, returning an array of all elements
+ * that have the given `properties`. When checking `properties`, this method
+ * performs a deep comparison between values to determine if they are equivalent
+ * to each other.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Collections
+ * @param {Array|Object|String} collection The collection to iterate over.
+ * @param {Object} properties The object of property values to filter by.
+ * @returns {Array} Returns a new array of elements that have the given `properties`.
+ * @example
+ *
+ * var stooges = [
+ * { 'name': 'moe', 'age': 40 },
+ * { 'name': 'larry', 'age': 50 }
+ * ];
+ *
+ * _.where(stooges, { 'age': 40 });
+ * // => [{ 'name': 'moe', 'age': 40 }]
+ */
+ var where = filter;
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array with all falsey values of `array` removed. The values
+ * `false`, `null`, `0`, `""`, `undefined` and `NaN` are all falsey.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to compact.
+ * @returns {Array} Returns a new filtered array.
+ * @example
+ *
+ * _.compact([0, 1, false, 2, '', 3]);
+ * // => [1, 2, 3]
+ */
+ function compact(array) {
+ var index = -1,
+ length = array ? array.length : 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (value) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array of `array` elements not present in the other arrays
+ * using strict equality for comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to process.
+ * @param {Array} [array1, array2, ...] Arrays to check.
+ * @returns {Array} Returns a new array of `array` elements not present in the
+ * other arrays.
+ * @example
+ *
+ * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
+ * // => [1, 3, 4]
+ */
+ function difference(array) {
+ var index = -1,
+ length = array ? array.length : 0,
+ flattened = concat.apply(arrayRef, arguments),
+ contains = cachedContains(flattened, length),
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (!contains(value)) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Gets the first element of the `array`. If a number `n` is passed, the first
+ * `n` elements of the `array` are returned. If a `callback` function is passed,
+ * the first elements the `callback` returns truthy for are returned. The `callback`
+ * is bound to `thisArg` and invoked with three arguments; (value, index, array).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias head, take
+ * @category Arrays
+ * @param {Array} array The array to query.
+ * @param {Function|Object|Number|String} [callback|n] The function called
+ * per element or the number of elements to return. If a property name or
+ * object is passed, it will be used to create a "_.pluck" or "_.where"
+ * style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Mixed} Returns the first element(s) of `array`.
+ * @example
+ *
+ * _.first([1, 2, 3]);
+ * // => 1
+ *
+ * _.first([1, 2, 3], 2);
+ * // => [1, 2]
+ *
+ * _.first([1, 2, 3], function(num) {
+ * return num < 3;
+ * });
+ * // => [1, 2]
+ *
+ * var food = [
+ * { 'name': 'banana', 'organic': true },
+ * { 'name': 'beet', 'organic': false },
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.first(food, 'organic');
+ * // => [{ 'name': 'banana', 'organic': true }]
+ *
+ * var food = [
+ * { 'name': 'apple', 'type': 'fruit' },
+ * { 'name': 'banana', 'type': 'fruit' },
+ * { 'name': 'beet', 'type': 'vegetable' }
+ * ];
+ *
+ * // using "_.where" callback shorthand
+ * _.first(food, { 'type': 'fruit' });
+ * // => [{ 'name': 'apple', 'type': 'fruit' }, { 'name': 'banana', 'type': 'fruit' }]
+ */
+ function first(array, callback, thisArg) {
+ if (array) {
+ var n = 0,
+ length = array.length;
+
+ if (typeof callback != 'number' && callback != null) {
+ var index = -1;
+ callback = createCallback(callback, thisArg);
+ while (++index < length && callback(array[index], index, array)) {
+ n++;
+ }
+ } else {
+ n = callback;
+ if (n == null || thisArg) {
+ return array[0];
+ }
+ }
+ return slice(array, 0, nativeMin(nativeMax(0, n), length));
+ }
+ }
+
+ /**
+ * Flattens a nested array (the nesting can be to any depth). If `shallow` is
+ * truthy, `array` will only be flattened a single level.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to compact.
+ * @param {Boolean} shallow A flag to indicate only flattening a single level.
+ * @returns {Array} Returns a new flattened array.
+ * @example
+ *
+ * _.flatten([1, [2], [3, [[4]]]]);
+ * // => [1, 2, 3, 4];
+ *
+ * _.flatten([1, [2], [3, [[4]]]], true);
+ * // => [1, 2, 3, [[4]]];
+ */
+ function flatten(array, shallow) {
+ var index = -1,
+ length = array ? array.length : 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+
+ // recursively flatten arrays (susceptible to call stack limits)
+ if (isArray(value)) {
+ push.apply(result, shallow ? value : flatten(value));
+ } else {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Gets the index at which the first occurrence of `value` is found using
+ * strict equality for comparisons, i.e. `===`. If the `array` is already
+ * sorted, passing `true` for `fromIndex` will run a faster binary search.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to search.
+ * @param {Mixed} value The value to search for.
+ * @param {Boolean|Number} [fromIndex=0] The index to search from or `true` to
+ * perform a binary search on a sorted `array`.
+ * @returns {Number} Returns the index of the matched value or `-1`.
+ * @example
+ *
+ * _.indexOf([1, 2, 3, 1, 2, 3], 2);
+ * // => 1
+ *
+ * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
+ * // => 4
+ *
+ * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
+ * // => 2
+ */
+ function indexOf(array, value, fromIndex) {
+ var index = -1,
+ length = array ? array.length : 0;
+
+ if (typeof fromIndex == 'number') {
+ index = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0) - 1;
+ } else if (fromIndex) {
+ index = sortedIndex(array, value);
+ return array[index] === value ? index : -1;
+ }
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Gets all but the last element of `array`. If a number `n` is passed, the
+ * last `n` elements are excluded from the result. If a `callback` function
+ * is passed, the last elements the `callback` returns truthy for are excluded
+ * from the result. The `callback` is bound to `thisArg` and invoked with three
+ * arguments; (value, index, array).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to query.
+ * @param {Function|Object|Number|String} [callback|n=1] The function called
+ * per element or the number of elements to exclude. If a property name or
+ * object is passed, it will be used to create a "_.pluck" or "_.where"
+ * style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a slice of `array`.
+ * @example
+ *
+ * _.initial([1, 2, 3]);
+ * // => [1, 2]
+ *
+ * _.initial([1, 2, 3], 2);
+ * // => [1]
+ *
+ * _.initial([1, 2, 3], function(num) {
+ * return num > 1;
+ * });
+ * // => [1]
+ *
+ * var food = [
+ * { 'name': 'beet', 'organic': false },
+ * { 'name': 'carrot', 'organic': true }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.initial(food, 'organic');
+ * // => [{ 'name': 'beet', 'organic': false }]
+ *
+ * var food = [
+ * { 'name': 'banana', 'type': 'fruit' },
+ * { 'name': 'beet', 'type': 'vegetable' },
+ * { 'name': 'carrot', 'type': 'vegetable' }
+ * ];
+ *
+ * // using "_.where" callback shorthand
+ * _.initial(food, { 'type': 'vegetable' });
+ * // => [{ 'name': 'banana', 'type': 'fruit' }]
+ */
+ function initial(array, callback, thisArg) {
+ if (!array) {
+ return [];
+ }
+ var n = 0,
+ length = array.length;
+
+ if (typeof callback != 'number' && callback != null) {
+ var index = length;
+ callback = createCallback(callback, thisArg);
+ while (index-- && callback(array[index], index, array)) {
+ n++;
+ }
+ } else {
+ n = (callback == null || thisArg) ? 1 : callback || n;
+ }
+ return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
+ }
+
+ /**
+ * Computes the intersection of all the passed-in arrays using strict equality
+ * for comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} [array1, array2, ...] Arrays to process.
+ * @returns {Array} Returns a new array of unique elements that are present
+ * in **all** of the arrays.
+ * @example
+ *
+ * _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
+ * // => [1, 2]
+ */
+ function intersection(array) {
+ var args = arguments,
+ argsLength = args.length,
+ cache = { '0': {} },
+ index = -1,
+ length = array ? array.length : 0,
+ isLarge = length >= 100,
+ result = [],
+ seen = result;
+
+ outer:
+ while (++index < length) {
+ var value = array[index];
+ if (isLarge) {
+ var key = value + '';
+ var inited = hasOwnProperty.call(cache[0], key)
+ ? !(seen = cache[0][key])
+ : (seen = cache[0][key] = []);
+ }
+ if (inited || indexOf(seen, value) < 0) {
+ if (isLarge) {
+ seen.push(value);
+ }
+ var argsIndex = argsLength;
+ while (--argsIndex) {
+ if (!(cache[argsIndex] || (cache[argsIndex] = cachedContains(args[argsIndex], 0, 100)))(value)) {
+ continue outer;
+ }
+ }
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Gets the last element of the `array`. If a number `n` is passed, the last
+ * `n` elements of the `array` are returned. If a `callback` function is passed,
+ * the last elements the `callback` returns truthy for are returned. The `callback`
+ * is bound to `thisArg` and invoked with three arguments; (value, index, array).
+ *
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to query.
+ * @param {Function|Object|Number|String} [callback|n] The function called
+ * per element or the number of elements to return. If a property name or
+ * object is passed, it will be used to create a "_.pluck" or "_.where"
+ * style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Mixed} Returns the last element(s) of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ *
+ * _.last([1, 2, 3], 2);
+ * // => [2, 3]
+ *
+ * _.last([1, 2, 3], function(num) {
+ * return num > 1;
+ * });
+ * // => [2, 3]
+ *
+ * var food = [
+ * { 'name': 'beet', 'organic': false },
+ * { 'name': 'carrot', 'organic': true }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.last(food, 'organic');
+ * // => [{ 'name': 'carrot', 'organic': true }]
+ *
+ * var food = [
+ * { 'name': 'banana', 'type': 'fruit' },
+ * { 'name': 'beet', 'type': 'vegetable' },
+ * { 'name': 'carrot', 'type': 'vegetable' }
+ * ];
+ *
+ * // using "_.where" callback shorthand
+ * _.last(food, { 'type': 'vegetable' });
+ * // => [{ 'name': 'beet', 'type': 'vegetable' }, { 'name': 'carrot', 'type': 'vegetable' }]
+ */
+ function last(array, callback, thisArg) {
+ if (array) {
+ var n = 0,
+ length = array.length;
+
+ if (typeof callback != 'number' && callback != null) {
+ var index = length;
+ callback = createCallback(callback, thisArg);
+ while (index-- && callback(array[index], index, array)) {
+ n++;
+ }
+ } else {
+ n = callback;
+ if (n == null || thisArg) {
+ return array[length - 1];
+ }
+ }
+ return slice(array, nativeMax(0, length - n));
+ }
+ }
+
+ /**
+ * Gets the index at which the last occurrence of `value` is found using strict
+ * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
+ * as the offset from the end of the collection.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to search.
+ * @param {Mixed} value The value to search for.
+ * @param {Number} [fromIndex=array.length-1] The index to search from.
+ * @returns {Number} Returns the index of the matched value or `-1`.
+ * @example
+ *
+ * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
+ * // => 4
+ *
+ * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
+ * // => 1
+ */
+ function lastIndexOf(array, value, fromIndex) {
+ var index = array ? array.length : 0;
+ if (typeof fromIndex == 'number') {
+ index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
+ }
+ while (index--) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Creates an object composed from arrays of `keys` and `values`. Pass either
+ * a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`, or
+ * two arrays, one of `keys` and one of corresponding `values`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} keys The array of keys.
+ * @param {Array} [values=[]] The array of values.
+ * @returns {Object} Returns an object composed of the given keys and
+ * corresponding values.
+ * @example
+ *
+ * _.object(['moe', 'larry'], [30, 40]);
+ * // => { 'moe': 30, 'larry': 40 }
+ */
+ function object(keys, values) {
+ var index = -1,
+ length = keys ? keys.length : 0,
+ result = {};
+
+ while (++index < length) {
+ var key = keys[index];
+ if (values) {
+ result[key] = values[index];
+ } else {
+ result[key[0]] = key[1];
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array of numbers (positive and/or negative) progressing from
+ * `start` up to but not including `end`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Number} [start=0] The start of the range.
+ * @param {Number} end The end of the range.
+ * @param {Number} [step=1] The value to increment or descrement by.
+ * @returns {Array} Returns a new range array.
+ * @example
+ *
+ * _.range(10);
+ * // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ *
+ * _.range(1, 11);
+ * // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ *
+ * _.range(0, 30, 5);
+ * // => [0, 5, 10, 15, 20, 25]
+ *
+ * _.range(0, -10, -1);
+ * // => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
+ *
+ * _.range(0);
+ * // => []
+ */
+ function range(start, end, step) {
+ start = +start || 0;
+ step = +step || 1;
+
+ if (end == null) {
+ end = start;
+ start = 0;
+ }
+ // use `Array(length)` so V8 will avoid the slower "dictionary" mode
+ // http://youtu.be/XAqIpGU8ZZk#t=17m25s
+ var index = -1,
+ length = nativeMax(0, ceil((end - start) / step)),
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = start;
+ start += step;
+ }
+ return result;
+ }
+
+ /**
+ * The opposite of `_.initial`, this method gets all but the first value of `array`.
+ * If a number `n` is passed, the first `n` values are excluded from the result.
+ * If a `callback` function is passed, the first elements the `callback` returns
+ * truthy for are excluded from the result. The `callback` is bound to `thisArg`
+ * and invoked with three arguments; (value, index, array).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias drop, tail
+ * @category Arrays
+ * @param {Array} array The array to query.
+ * @param {Function|Object|Number|String} [callback|n=1] The function called
+ * per element or the number of elements to exclude. If a property name or
+ * object is passed, it will be used to create a "_.pluck" or "_.where"
+ * style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a slice of `array`.
+ * @example
+ *
+ * _.rest([1, 2, 3]);
+ * // => [2, 3]
+ *
+ * _.rest([1, 2, 3], 2);
+ * // => [3]
+ *
+ * _.rest([1, 2, 3], function(num) {
+ * return num < 3;
+ * });
+ * // => [3]
+ *
+ * var food = [
+ * { 'name': 'banana', 'organic': true },
+ * { 'name': 'beet', 'organic': false },
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.rest(food, 'organic');
+ * // => [{ 'name': 'beet', 'organic': false }]
+ *
+ * var food = [
+ * { 'name': 'apple', 'type': 'fruit' },
+ * { 'name': 'banana', 'type': 'fruit' },
+ * { 'name': 'beet', 'type': 'vegetable' }
+ * ];
+ *
+ * // using "_.where" callback shorthand
+ * _.rest(food, { 'type': 'fruit' });
+ * // => [{ 'name': 'beet', 'type': 'vegetable' }]
+ */
+ function rest(array, callback, thisArg) {
+ if (typeof callback != 'number' && callback != null) {
+ var n = 0,
+ index = -1,
+ length = array ? array.length : 0;
+
+ callback = createCallback(callback, thisArg);
+ while (++index < length && callback(array[index], index, array)) {
+ n++;
+ }
+ } else {
+ n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
+ }
+ return slice(array, n);
+ }
+
+ /**
+ * Uses a binary search to determine the smallest index at which the `value`
+ * should be inserted into `array` in order to maintain the sort order of the
+ * sorted `array`. If `callback` is passed, it will be executed for `value` and
+ * each element in `array` to compute their sort ranking. The `callback` is
+ * bound to `thisArg` and invoked with one argument; (value).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to iterate over.
+ * @param {Mixed} value The value to evaluate.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Number} Returns the index at which the value should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedIndex([20, 30, 50], 40);
+ * // => 2
+ *
+ * // using "_.pluck" callback shorthand
+ * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
+ * // => 2
+ *
+ * var dict = {
+ * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
+ * };
+ *
+ * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
+ * return dict.wordToNumber[word];
+ * });
+ * // => 2
+ *
+ * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
+ * return this.wordToNumber[word];
+ * }, dict);
+ * // => 2
+ */
+ function sortedIndex(array, value, callback, thisArg) {
+ var low = 0,
+ high = array ? array.length : low;
+
+ // explicitly reference `identity` for better inlining in Firefox
+ callback = callback ? createCallback(callback, thisArg, 1) : identity;
+ value = callback(value);
+
+ while (low < high) {
+ var mid = (low + high) >>> 1;
+ callback(array[mid]) < value
+ ? low = mid + 1
+ : high = mid;
+ }
+ return low;
+ }
+
+ /**
+ * Computes the union of the passed-in arrays using strict equality for
+ * comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} [array1, array2, ...] Arrays to process.
+ * @returns {Array} Returns a new array of unique values, in order, that are
+ * present in one or more of the arrays.
+ * @example
+ *
+ * _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
+ * // => [1, 2, 3, 101, 10]
+ */
+ function union() {
+ return uniq(concat.apply(arrayRef, arguments));
+ }
+
+ /**
+ * Creates a duplicate-value-free version of the `array` using strict equality
+ * for comparisons, i.e. `===`. If the `array` is already sorted, passing `true`
+ * for `isSorted` will run a faster algorithm. If `callback` is passed, each
+ * element of `array` is passed through a callback` before uniqueness is computed.
+ * The `callback` is bound to `thisArg` and invoked with three arguments; (value, index, array).
+ *
+ * If a property name is passed for `callback`, the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is passed for `callback`, the created "_.where" style callback
+ * will return `true` for elements that have the propeties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias unique
+ * @category Arrays
+ * @param {Array} array The array to process.
+ * @param {Boolean} [isSorted=false] A flag to indicate that the `array` is already sorted.
+ * @param {Function|Object|String} [callback=identity] The function called per
+ * iteration. If a property name or object is passed, it will be used to create
+ * a "_.pluck" or "_.where" style callback, respectively.
+ * @param {Mixed} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a duplicate-value-free array.
+ * @example
+ *
+ * _.uniq([1, 2, 1, 3, 1]);
+ * // => [1, 2, 3]
+ *
+ * _.uniq([1, 1, 2, 2, 3], true);
+ * // => [1, 2, 3]
+ *
+ * _.uniq([1, 2, 1.5, 3, 2.5], function(num) { return Math.floor(num); });
+ * // => [1, 2, 3]
+ *
+ * _.uniq([1, 2, 1.5, 3, 2.5], function(num) { return this.floor(num); }, Math);
+ * // => [1, 2, 3]
+ *
+ * // using "_.pluck" callback shorthand
+ * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+ function uniq(array, isSorted, callback, thisArg) {
+ var index = -1,
+ length = array ? array.length : 0,
+ result = [],
+ seen = result;
+
+ // juggle arguments
+ if (typeof isSorted == 'function') {
+ thisArg = callback;
+ callback = isSorted;
+ isSorted = false;
+ }
+ // init value cache for large arrays
+ var isLarge = !isSorted && length >= 75;
+ if (isLarge) {
+ var cache = {};
+ }
+ if (callback) {
+ seen = [];
+ callback = createCallback(callback, thisArg);
+ }
+ while (++index < length) {
+ var value = array[index],
+ computed = callback ? callback(value, index, array) : value;
+
+ if (isLarge) {
+ var key = computed + '';
+ var inited = hasOwnProperty.call(cache, key)
+ ? !(seen = cache[key])
+ : (seen = cache[key] = []);
+ }
+ if (isSorted
+ ? !index || seen[seen.length - 1] !== computed
+ : inited || indexOf(seen, computed) < 0
+ ) {
+ if (callback || isLarge) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array with all occurrences of the passed values removed using
+ * strict equality for comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to filter.
+ * @param {Mixed} [value1, value2, ...] Values to remove.
+ * @returns {Array} Returns a new filtered array.
+ * @example
+ *
+ * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
+ * // => [2, 3, 4]
+ */
+ function without(array) {
+ var index = -1,
+ length = array ? array.length : 0,
+ contains = cachedContains(arguments, 1),
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (!contains(value)) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Groups the elements of each array at their corresponding indexes. Useful for
+ * separate data sources that are coordinated through matching array indexes.
+ * For a matrix of nested arrays, `_.zip.apply(...)` can transpose the matrix
+ * in a similar fashion.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} [array1, array2, ...] Arrays to process.
+ * @returns {Array} Returns a new array of grouped elements.
+ * @example
+ *
+ * _.zip(['moe', 'larry'], [30, 40], [true, false]);
+ * // => [['moe', 30, true], ['larry', 40, false]]
+ */
+ function zip(array) {
+ var index = -1,
+ length = array ? max(pluck(arguments, 'length')) : 0,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = pluck(arguments, index);
+ }
+ return result;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a function that is restricted to executing `func` only after it is
+ * called `n` times. The `func` is executed with the `this` binding of the
+ * created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Number} n The number of times the function must be called before
+ * it is executed.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var renderNotes = _.after(notes.length, render);
+ * _.forEach(notes, function(note) {
+ * note.asyncSave({ 'success': renderNotes });
+ * });
+ * // `renderNotes` is run once, after all notes have saved
+ */
+ function after(n, func) {
+ if (n < 1) {
+ return func();
+ }
+ return function() {
+ if (--n < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ }
+
+ /**
+ * Creates a function that, when called, invokes `func` with the `this`
+ * binding of `thisArg` and prepends any additional `bind` arguments to those
+ * passed to the bound function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to bind.
+ * @param {Mixed} [thisArg] The `this` binding of `func`.
+ * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var func = function(greeting) {
+ * return greeting + ' ' + this.name;
+ * };
+ *
+ * func = _.bind(func, { 'name': 'moe' }, 'hi');
+ * func();
+ * // => 'hi moe'
+ */
+ function bind(func, thisArg) {
+ // use `Function#bind` if it exists and is fast
+ // (in V8 `Function#bind` is slower except when partially applied)
+ return isBindFast || (nativeBind && arguments.length > 2)
+ ? nativeBind.call.apply(nativeBind, arguments)
+ : createBound(func, thisArg, slice(arguments, 2));
+ }
+
+ /**
+ * Binds methods on `object` to `object`, overwriting the existing method.
+ * Method names may be specified as individual arguments or as arrays of method
+ * names. If no method names are provided, all the function properties of `object`
+ * will be bound.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Object} object The object to bind and assign the bound methods to.
+ * @param {String} [methodName1, methodName2, ...] Method names on the object to bind.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var view = {
+ * 'label': 'docs',
+ * 'onClick': function() { alert('clicked ' + this.label); }
+ * };
+ *
+ * _.bindAll(view);
+ * jQuery('#docs').on('click', view.onClick);
+ * // => alerts 'clicked docs', when the button is clicked
+ */
+ function bindAll(object) {
+ var funcs = concat.apply(arrayRef, arguments),
+ index = funcs.length > 1 ? 0 : (funcs = functions(object), -1),
+ length = funcs.length;
+
+ while (++index < length) {
+ var key = funcs[index];
+ object[key] = bind(object[key], object);
+ }
+ return object;
+ }
+
+ /**
+ * Creates a function that, when called, invokes the method at `object[key]`
+ * and prepends any additional `bindKey` arguments to those passed to the bound
+ * function. This method differs from `_.bind` by allowing bound functions to
+ * reference methods that will be redefined or don't yet exist.
+ * See http://michaux.ca/articles/lazy-function-definition-pattern.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Object} object The object the method belongs to.
+ * @param {String} key The key of the method.
+ * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var object = {
+ * 'name': 'moe',
+ * 'greet': function(greeting) {
+ * return greeting + ' ' + this.name;
+ * }
+ * };
+ *
+ * var func = _.bindKey(object, 'greet', 'hi');
+ * func();
+ * // => 'hi moe'
+ *
+ * object.greet = function(greeting) {
+ * return greeting + ', ' + this.name + '!';
+ * };
+ *
+ * func();
+ * // => 'hi, moe!'
+ */
+ function bindKey(object, key) {
+ return createBound(object, key, slice(arguments, 2));
+ }
+
+ /**
+ * Creates a function that is the composition of the passed functions,
+ * where each function consumes the return value of the function that follows.
+ * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
+ * Each function is executed with the `this` binding of the composed function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} [func1, func2, ...] Functions to compose.
+ * @returns {Function} Returns the new composed function.
+ * @example
+ *
+ * var greet = function(name) { return 'hi ' + name; };
+ * var exclaim = function(statement) { return statement + '!'; };
+ * var welcome = _.compose(exclaim, greet);
+ * welcome('moe');
+ * // => 'hi moe!'
+ */
+ function compose() {
+ var funcs = arguments;
+ return function() {
+ var args = arguments,
+ length = funcs.length;
+
+ while (length--) {
+ args = [funcs[length].apply(this, args)];
+ }
+ return args[0];
+ };
+ }
+
+ /**
+ * Creates a function that will delay the execution of `func` until after
+ * `wait` milliseconds have elapsed since the last time it was invoked. Pass
+ * `true` for `immediate` to cause debounce to invoke `func` on the leading,
+ * instead of the trailing, edge of the `wait` timeout. Subsequent calls to
+ * the debounced function will return the result of the last `func` call.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to debounce.
+ * @param {Number} wait The number of milliseconds to delay.
+ * @param {Boolean} immediate A flag to indicate execution is on the leading
+ * edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * var lazyLayout = _.debounce(calculateLayout, 300);
+ * jQuery(window).on('resize', lazyLayout);
+ */
+ function debounce(func, wait, immediate) {
+ var args,
+ result,
+ thisArg,
+ timeoutId;
+
+ function delayed() {
+ timeoutId = null;
+ if (!immediate) {
+ result = func.apply(thisArg, args);
+ }
+ }
+ return function() {
+ var isImmediate = immediate && !timeoutId;
+ args = arguments;
+ thisArg = this;
+
+ clearTimeout(timeoutId);
+ timeoutId = setTimeout(delayed, wait);
+
+ if (isImmediate) {
+ result = func.apply(thisArg, args);
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Executes the `func` function after `wait` milliseconds. Additional arguments
+ * will be passed to `func` when it is invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to delay.
+ * @param {Number} wait The number of milliseconds to delay execution.
+ * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the function with.
+ * @returns {Number} Returns the `setTimeout` timeout id.
+ * @example
+ *
+ * var log = _.bind(console.log, console);
+ * _.delay(log, 1000, 'logged later');
+ * // => 'logged later' (Appears after one second.)
+ */
+ function delay(func, wait) {
+ var args = slice(arguments, 2);
+ return setTimeout(function() { func.apply(undefined, args); }, wait);
+ }
+
+ /**
+ * Defers executing the `func` function until the current call stack has cleared.
+ * Additional arguments will be passed to `func` when it is invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to defer.
+ * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the function with.
+ * @returns {Number} Returns the `setTimeout` timeout id.
+ * @example
+ *
+ * _.defer(function() { alert('deferred'); });
+ * // returns from the function before `alert` is called
+ */
+ function defer(func) {
+ var args = slice(arguments, 1);
+ return setTimeout(function() { func.apply(undefined, args); }, 1);
+ }
+ // use `setImmediate` if it's available in Node.js
+ if (isV8 && freeModule && typeof setImmediate == 'function') {
+ defer = bind(setImmediate, window);
+ }
+
+ /**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * passed, it will be used to determine the cache key for storing the result
+ * based on the arguments passed to the memoized function. By default, the first
+ * argument passed to the memoized function is used as the cache key. The `func`
+ * is executed with the `this` binding of the memoized function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] A function used to resolve the cache key.
+ * @returns {Function} Returns the new memoizing function.
+ * @example
+ *
+ * var fibonacci = _.memoize(function(n) {
+ * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
+ * });
+ */
+ function memoize(func, resolver) {
+ var cache = {};
+ return function() {
+ var key = (resolver ? resolver.apply(this, arguments) : arguments[0]) + '';
+ return hasOwnProperty.call(cache, key)
+ ? cache[key]
+ : (cache[key] = func.apply(this, arguments));
+ };
+ }
+
+ /**
+ * Creates a function that is restricted to execute `func` once. Repeat calls to
+ * the function will return the value of the first call. The `func` is executed
+ * with the `this` binding of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var initialize = _.once(createApplication);
+ * initialize();
+ * initialize();
+ * // `initialize` executes `createApplication` once
+ */
+ function once(func) {
+ var ran,
+ result;
+
+ return function() {
+ if (ran) {
+ return result;
+ }
+ ran = true;
+ result = func.apply(this, arguments);
+
+ // clear the `func` variable so the function may be garbage collected
+ func = null;
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function that, when called, invokes `func` with any additional
+ * `partial` arguments prepended to those passed to the new function. This
+ * method is similar to `_.bind`, except it does **not** alter the `this` binding.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * var greet = function(greeting, name) { return greeting + ' ' + name; };
+ * var hi = _.partial(greet, 'hi');
+ * hi('moe');
+ * // => 'hi moe'
+ */
+ function partial(func) {
+ return createBound(func, slice(arguments, 1));
+ }
+
+ /**
+ * This method is similar to `_.partial`, except that `partial` arguments are
+ * appended to those passed to the new function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * var defaultsDeep = _.partialRight(_.merge, _.defaults);
+ *
+ * var options = {
+ * 'variable': 'data',
+ * 'imports': { 'jq': $ }
+ * };
+ *
+ * defaultsDeep(options, _.templateSettings);
+ *
+ * options.variable
+ * // => 'data'
+ *
+ * options.imports
+ * // => { '_': _, 'jq': $ }
+ */
+ function partialRight(func) {
+ return createBound(func, slice(arguments, 1), null, indicatorObject);
+ }
+
+ /**
+ * Creates a function that, when executed, will only call the `func`
+ * function at most once per every `wait` milliseconds. If the throttled
+ * function is invoked more than once during the `wait` timeout, `func` will
+ * also be called on the trailing edge of the timeout. Subsequent calls to the
+ * throttled function will return the result of the last `func` call.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to throttle.
+ * @param {Number} wait The number of milliseconds to throttle executions to.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * var throttled = _.throttle(updatePosition, 100);
+ * jQuery(window).on('scroll', throttled);
+ */
+ function throttle(func, wait) {
+ var args,
+ result,
+ thisArg,
+ timeoutId,
+ lastCalled = 0;
+
+ function trailingCall() {
+ lastCalled = new Date;
+ timeoutId = null;
+ result = func.apply(thisArg, args);
+ }
+ return function() {
+ var now = new Date,
+ remaining = wait - (now - lastCalled);
+
+ args = arguments;
+ thisArg = this;
+
+ if (remaining <= 0) {
+ clearTimeout(timeoutId);
+ timeoutId = null;
+ lastCalled = now;
+ result = func.apply(thisArg, args);
+ }
+ else if (!timeoutId) {
+ timeoutId = setTimeout(trailingCall, remaining);
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function that passes `value` to the `wrapper` function as its
+ * first argument. Additional arguments passed to the function are appended
+ * to those passed to the `wrapper` function. The `wrapper` is executed with
+ * the `this` binding of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Mixed} value The value to wrap.
+ * @param {Function} wrapper The wrapper function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var hello = function(name) { return 'hello ' + name; };
+ * hello = _.wrap(hello, function(func) {
+ * return 'before, ' + func('moe') + ', after';
+ * });
+ * hello();
+ * // => 'before, hello moe, after'
+ */
+ function wrap(value, wrapper) {
+ return function() {
+ var args = [value];
+ push.apply(args, arguments);
+ return wrapper.apply(this, args);
+ };
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their
+ * corresponding HTML entities.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {String} string The string to escape.
+ * @returns {String} Returns the escaped string.
+ * @example
+ *
+ * _.escape('Moe, Larry & Curly');
+ * // => 'Moe, Larry & Curly'
+ */
+ function escape(string) {
+ return string == null ? '' : (string + '').replace(reUnescapedHtml, escapeHtmlChar);
+ }
+
+ /**
+ * This function returns the first argument passed to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {Mixed} value Any value.
+ * @returns {Mixed} Returns `value`.
+ * @example
+ *
+ * var moe = { 'name': 'moe' };
+ * moe === _.identity(moe);
+ * // => true
+ */
+ function identity(value) {
+ return value;
+ }
+
+ /**
+ * Adds functions properties of `object` to the `lodash` function and chainable
+ * wrapper.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {Object} object The object of function properties to add to `lodash`.
+ * @example
+ *
+ * _.mixin({
+ * 'capitalize': function(string) {
+ * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
+ * }
+ * });
+ *
+ * _.capitalize('moe');
+ * // => 'Moe'
+ *
+ * _('moe').capitalize();
+ * // => 'Moe'
+ */
+ function mixin(object) {
+ forEach(functions(object), function(methodName) {
+ var func = lodash[methodName] = object[methodName];
+
+ lodash.prototype[methodName] = function() {
+ var args = [this.__wrapped__];
+ push.apply(args, arguments);
+ return new lodash(func.apply(lodash, args));
+ };
+ });
+ }
+
+ /**
+ * Reverts the '_' variable to its previous value and returns a reference to
+ * the `lodash` function.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @returns {Function} Returns the `lodash` function.
+ * @example
+ *
+ * var lodash = _.noConflict();
+ */
+ function noConflict() {
+ window._ = oldDash;
+ return this;
+ }
+
+ /**
+ * Produces a random number between `min` and `max` (inclusive). If only one
+ * argument is passed, a number between `0` and the given number will be returned.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {Number} [min=0] The minimum possible value.
+ * @param {Number} [max=1] The maximum possible value.
+ * @returns {Number} Returns a random number.
+ * @example
+ *
+ * _.random(0, 5);
+ * // => a number between 0 and 5
+ *
+ * _.random(5);
+ * // => also a number between 0 and 5
+ */
+ function random(min, max) {
+ if (min == null && max == null) {
+ max = 1;
+ }
+ min = +min || 0;
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + floor(nativeRandom() * ((+max || 0) - min + 1));
+ }
+
+ /**
+ * Resolves the value of `property` on `object`. If `property` is a function,
+ * it will be invoked and its result returned, else the property value is
+ * returned. If `object` is falsey, then `null` is returned.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {Object} object The object to inspect.
+ * @param {String} property The property to get the value of.
+ * @returns {Mixed} Returns the resolved value.
+ * @example
+ *
+ * var object = {
+ * 'cheese': 'crumpets',
+ * 'stuff': function() {
+ * return 'nonsense';
+ * }
+ * };
+ *
+ * _.result(object, 'cheese');
+ * // => 'crumpets'
+ *
+ * _.result(object, 'stuff');
+ * // => 'nonsense'
+ */
+ function result(object, property) {
+ var value = object ? object[property] : undefined;
+ return isFunction(value) ? object[property]() : value;
+ }
+
+ /**
+ * A micro-templating method that handles arbitrary delimiters, preserves
+ * whitespace, and correctly escapes quotes within interpolated code.
+ *
+ * Note: In the development build, `_.template` utilizes sourceURLs for easier
+ * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
+ *
+ * Note: Lo-Dash may be used in Chrome extensions by either creating a `lodash csp`
+ * build and using precompiled templates, or loading Lo-Dash in a sandbox.
+ *
+ * For more information on precompiling templates see:
+ * http://lodash.com/#custom-builds
+ *
+ * For more information on Chrome extension sandboxes see:
+ * http://developer.chrome.com/stable/extensions/sandboxingEval.html
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {String} text The template text.
+ * @param {Obect} data The data object used to populate the text.
+ * @param {Object} options The options object.
+ * escape - The "escape" delimiter regexp.
+ * evaluate - The "evaluate" delimiter regexp.
+ * interpolate - The "interpolate" delimiter regexp.
+ * sourceURL - The sourceURL of the template's compiled source.
+ * variable - The data object variable name.
+ *
+ * @returns {Function|String} Returns a compiled function when no `data` object
+ * is given, else it returns the interpolated text.
+ * @example
+ *
+ * // using a compiled template
+ * var compiled = _.template('hello <%= name %>');
+ * compiled({ 'name': 'moe' });
+ * // => 'hello moe'
+ *
+ * var list = '<% _.forEach(people, function(name) { %><%= name %> <% }); %>';
+ * _.template(list, { 'people': ['moe', 'larry'] });
+ * // => 'moe larry '
+ *
+ * // using the "escape" delimiter to escape HTML in data property values
+ * _.template('<%- value %> ', { 'value': '
+```
+
+Using [`npm`](http://npmjs.org/):
+
+```bash
+npm i --save lodash
+
+{sudo} npm i -g lodash
+npm ln lodash
+```
+
+In [Node.js](http://nodejs.org/) & [Ringo](http://ringojs.org/):
+
+```js
+var _ = require('lodash');
+// or as Underscore
+var _ = require('lodash/dist/lodash.underscore');
+```
+
+**Notes:**
+ * Don’t assign values to [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL
+ * If Lo-Dash is installed globally, run [`npm ln lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory *before* requiring it
+
+In [Rhino](http://www.mozilla.org/rhino/):
+
+```js
+load('lodash.js');
+```
+
+In an AMD loader:
+
+```js
+require({
+ 'packages': [
+ { 'name': 'lodash', 'location': 'path/to/lodash', 'main': 'lodash' }
+ ]
+},
+['lodash'], function(_) {
+ console.log(_.VERSION);
+});
+```
+
+## Author
+
+| [](https://twitter.com/jdalton "Follow @jdalton on Twitter") |
+|---|
+| [John-David Dalton](http://allyoucanleet.com/) |
+
+## Contributors
+
+| [](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [](https://twitter.com/mathias "Follow @mathias on Twitter") |
+|---|---|---|
+| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |
+
+[](https://bitdeli.com/free "Bitdeli Badge")
diff --git a/node_modules/grunt-contrib-watch/node_modules/lodash/dist/lodash.compat.js b/node_modules/grunt-contrib-watch/node_modules/lodash/dist/lodash.compat.js
new file mode 100644
index 0000000..23798ba
--- /dev/null
+++ b/node_modules/grunt-contrib-watch/node_modules/lodash/dist/lodash.compat.js
@@ -0,0 +1,7157 @@
+/**
+ * @license
+ * Lo-Dash 2.4.1 (Custom Build)
+ * Build: `lodash -o ./dist/lodash.compat.js`
+ * Copyright 2012-2013 The Dojo Foundation
+ * Based on Underscore.js 1.5.2
+ * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+;(function() {
+
+ /** Used as a safe reference for `undefined` in pre ES5 environments */
+ var undefined;
+
+ /** Used to pool arrays and objects used internally */
+ var arrayPool = [],
+ objectPool = [];
+
+ /** Used to generate unique IDs */
+ var idCounter = 0;
+
+ /** Used internally to indicate various things */
+ var indicatorObject = {};
+
+ /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
+ var keyPrefix = +new Date + '';
+
+ /** Used as the size when optimizations are enabled for large arrays */
+ var largeArraySize = 75;
+
+ /** Used as the max size of the `arrayPool` and `objectPool` */
+ var maxPoolSize = 40;
+
+ /** Used to detect and test whitespace */
+ var whitespace = (
+ // whitespace
+ ' \t\x0B\f\xA0\ufeff' +
+
+ // line terminators
+ '\n\r\u2028\u2029' +
+
+ // unicode category "Zs" space separators
+ '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
+ );
+
+ /** Used to match empty string literals in compiled template source */
+ var reEmptyStringLeading = /\b__p \+= '';/g,
+ reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
+ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+
+ /**
+ * Used to match ES6 template delimiters
+ * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals
+ */
+ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+
+ /** Used to match regexp flags from their coerced string values */
+ var reFlags = /\w*$/;
+
+ /** Used to detected named functions */
+ var reFuncName = /^\s*function[ \n\r\t]+\w/;
+
+ /** Used to match "interpolate" template delimiters */
+ var reInterpolate = /<%=([\s\S]+?)%>/g;
+
+ /** Used to match leading whitespace and zeros to be removed */
+ var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');
+
+ /** Used to ensure capturing order of template delimiters */
+ var reNoMatch = /($^)/;
+
+ /** Used to detect functions containing a `this` reference */
+ var reThis = /\bthis\b/;
+
+ /** Used to match unescaped characters in compiled string literals */
+ var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
+
+ /** Used to assign default `context` object properties */
+ var contextProps = [
+ 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object',
+ 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',
+ 'parseInt', 'setTimeout'
+ ];
+
+ /** Used to fix the JScript [[DontEnum]] bug */
+ var shadowedProps = [
+ 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
+ 'toLocaleString', 'toString', 'valueOf'
+ ];
+
+ /** Used to make template sourceURLs easier to identify */
+ var templateCounter = 0;
+
+ /** `Object#toString` result shortcuts */
+ var argsClass = '[object Arguments]',
+ arrayClass = '[object Array]',
+ boolClass = '[object Boolean]',
+ dateClass = '[object Date]',
+ errorClass = '[object Error]',
+ funcClass = '[object Function]',
+ numberClass = '[object Number]',
+ objectClass = '[object Object]',
+ regexpClass = '[object RegExp]',
+ stringClass = '[object String]';
+
+ /** Used to identify object classifications that `_.clone` supports */
+ var cloneableClasses = {};
+ cloneableClasses[funcClass] = false;
+ cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
+ cloneableClasses[boolClass] = cloneableClasses[dateClass] =
+ cloneableClasses[numberClass] = cloneableClasses[objectClass] =
+ cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
+
+ /** Used as an internal `_.debounce` options object */
+ var debounceOptions = {
+ 'leading': false,
+ 'maxWait': 0,
+ 'trailing': false
+ };
+
+ /** Used as the property descriptor for `__bindData__` */
+ var descriptor = {
+ 'configurable': false,
+ 'enumerable': false,
+ 'value': null,
+ 'writable': false
+ };
+
+ /** Used as the data object for `iteratorTemplate` */
+ var iteratorData = {
+ 'args': '',
+ 'array': null,
+ 'bottom': '',
+ 'firstArg': '',
+ 'init': '',
+ 'keys': null,
+ 'loop': '',
+ 'shadowedProps': null,
+ 'support': null,
+ 'top': '',
+ 'useHas': false
+ };
+
+ /** Used to determine if values are of the language type Object */
+ var objectTypes = {
+ 'boolean': false,
+ 'function': true,
+ 'object': true,
+ 'number': false,
+ 'string': false,
+ 'undefined': false
+ };
+
+ /** Used to escape characters for inclusion in compiled string literals */
+ var stringEscapes = {
+ '\\': '\\',
+ "'": "'",
+ '\n': 'n',
+ '\r': 'r',
+ '\t': 't',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ /** Used as a reference to the global object */
+ var root = (objectTypes[typeof window] && window) || this;
+
+ /** Detect free variable `exports` */
+ var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
+
+ /** Detect free variable `module` */
+ var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
+
+ /** Detect the popular CommonJS extension `module.exports` */
+ var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
+
+ /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */
+ var freeGlobal = objectTypes[typeof global] && global;
+ if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
+ root = freeGlobal;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The base implementation of `_.indexOf` without support for binary searches
+ * or `fromIndex` constraints.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {number} Returns the index of the matched value or `-1`.
+ */
+ function baseIndexOf(array, value, fromIndex) {
+ var index = (fromIndex || 0) - 1,
+ length = array ? array.length : 0;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * An implementation of `_.contains` for cache objects that mimics the return
+ * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.
+ *
+ * @private
+ * @param {Object} cache The cache object to inspect.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `0` if `value` is found, else `-1`.
+ */
+ function cacheIndexOf(cache, value) {
+ var type = typeof value;
+ cache = cache.cache;
+
+ if (type == 'boolean' || value == null) {
+ return cache[value] ? 0 : -1;
+ }
+ if (type != 'number' && type != 'string') {
+ type = 'object';
+ }
+ var key = type == 'number' ? value : keyPrefix + value;
+ cache = (cache = cache[type]) && cache[key];
+
+ return type == 'object'
+ ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)
+ : (cache ? 0 : -1);
+ }
+
+ /**
+ * Adds a given value to the corresponding cache object.
+ *
+ * @private
+ * @param {*} value The value to add to the cache.
+ */
+ function cachePush(value) {
+ var cache = this.cache,
+ type = typeof value;
+
+ if (type == 'boolean' || value == null) {
+ cache[value] = true;
+ } else {
+ if (type != 'number' && type != 'string') {
+ type = 'object';
+ }
+ var key = type == 'number' ? value : keyPrefix + value,
+ typeCache = cache[type] || (cache[type] = {});
+
+ if (type == 'object') {
+ (typeCache[key] || (typeCache[key] = [])).push(value);
+ } else {
+ typeCache[key] = true;
+ }
+ }
+ }
+
+ /**
+ * Used by `_.max` and `_.min` as the default callback when a given
+ * collection is a string value.
+ *
+ * @private
+ * @param {string} value The character to inspect.
+ * @returns {number} Returns the code unit of given character.
+ */
+ function charAtCallback(value) {
+ return value.charCodeAt(0);
+ }
+
+ /**
+ * Used by `sortBy` to compare transformed `collection` elements, stable sorting
+ * them in ascending order.
+ *
+ * @private
+ * @param {Object} a The object to compare to `b`.
+ * @param {Object} b The object to compare to `a`.
+ * @returns {number} Returns the sort order indicator of `1` or `-1`.
+ */
+ function compareAscending(a, b) {
+ var ac = a.criteria,
+ bc = b.criteria,
+ index = -1,
+ length = ac.length;
+
+ while (++index < length) {
+ var value = ac[index],
+ other = bc[index];
+
+ if (value !== other) {
+ if (value > other || typeof value == 'undefined') {
+ return 1;
+ }
+ if (value < other || typeof other == 'undefined') {
+ return -1;
+ }
+ }
+ }
+ // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
+ // that causes it, under certain circumstances, to return the same value for
+ // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247
+ //
+ // This also ensures a stable sort in V8 and other engines.
+ // See http://code.google.com/p/v8/issues/detail?id=90
+ return a.index - b.index;
+ }
+
+ /**
+ * Creates a cache object to optimize linear searches of large arrays.
+ *
+ * @private
+ * @param {Array} [array=[]] The array to search.
+ * @returns {null|Object} Returns the cache object or `null` if caching should not be used.
+ */
+ function createCache(array) {
+ var index = -1,
+ length = array.length,
+ first = array[0],
+ mid = array[(length / 2) | 0],
+ last = array[length - 1];
+
+ if (first && typeof first == 'object' &&
+ mid && typeof mid == 'object' && last && typeof last == 'object') {
+ return false;
+ }
+ var cache = getObject();
+ cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;
+
+ var result = getObject();
+ result.array = array;
+ result.cache = cache;
+ result.push = cachePush;
+
+ while (++index < length) {
+ result.push(array[index]);
+ }
+ return result;
+ }
+
+ /**
+ * Used by `template` to escape characters for inclusion in compiled
+ * string literals.
+ *
+ * @private
+ * @param {string} match The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+ function escapeStringChar(match) {
+ return '\\' + stringEscapes[match];
+ }
+
+ /**
+ * Gets an array from the array pool or creates a new one if the pool is empty.
+ *
+ * @private
+ * @returns {Array} The array from the pool.
+ */
+ function getArray() {
+ return arrayPool.pop() || [];
+ }
+
+ /**
+ * Gets an object from the object pool or creates a new one if the pool is empty.
+ *
+ * @private
+ * @returns {Object} The object from the pool.
+ */
+ function getObject() {
+ return objectPool.pop() || {
+ 'array': null,
+ 'cache': null,
+ 'criteria': null,
+ 'false': false,
+ 'index': 0,
+ 'null': false,
+ 'number': null,
+ 'object': null,
+ 'push': null,
+ 'string': null,
+ 'true': false,
+ 'undefined': false,
+ 'value': null
+ };
+ }
+
+ /**
+ * Checks if `value` is a DOM node in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`.
+ */
+ function isNode(value) {
+ // IE < 9 presents DOM nodes as `Object` objects except they have `toString`
+ // methods that are `typeof` "string" and still can coerce nodes to strings
+ return typeof value.toString != 'function' && typeof (value + '') == 'string';
+ }
+
+ /**
+ * Releases the given array back to the array pool.
+ *
+ * @private
+ * @param {Array} [array] The array to release.
+ */
+ function releaseArray(array) {
+ array.length = 0;
+ if (arrayPool.length < maxPoolSize) {
+ arrayPool.push(array);
+ }
+ }
+
+ /**
+ * Releases the given object back to the object pool.
+ *
+ * @private
+ * @param {Object} [object] The object to release.
+ */
+ function releaseObject(object) {
+ var cache = object.cache;
+ if (cache) {
+ releaseObject(cache);
+ }
+ object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;
+ if (objectPool.length < maxPoolSize) {
+ objectPool.push(object);
+ }
+ }
+
+ /**
+ * Slices the `collection` from the `start` index up to, but not including,
+ * the `end` index.
+ *
+ * Note: This function is used instead of `Array#slice` to support node lists
+ * in IE < 9 and to ensure dense arrays are returned.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to slice.
+ * @param {number} start The start index.
+ * @param {number} end The end index.
+ * @returns {Array} Returns the new array.
+ */
+ function slice(array, start, end) {
+ start || (start = 0);
+ if (typeof end == 'undefined') {
+ end = array ? array.length : 0;
+ }
+ var index = -1,
+ length = end - start || 0,
+ result = Array(length < 0 ? 0 : length);
+
+ while (++index < length) {
+ result[index] = array[start + index];
+ }
+ return result;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Create a new `lodash` function using the given context object.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {Object} [context=root] The context object.
+ * @returns {Function} Returns the `lodash` function.
+ */
+ function runInContext(context) {
+ // Avoid issues with some ES3 environments that attempt to use values, named
+ // after built-in constructors like `Object`, for the creation of literals.
+ // ES5 clears this up by stating that literals must use built-in constructors.
+ // See http://es5.github.io/#x11.1.5.
+ context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
+
+ /** Native constructor references */
+ var Array = context.Array,
+ Boolean = context.Boolean,
+ Date = context.Date,
+ Error = context.Error,
+ Function = context.Function,
+ Math = context.Math,
+ Number = context.Number,
+ Object = context.Object,
+ RegExp = context.RegExp,
+ String = context.String,
+ TypeError = context.TypeError;
+
+ /**
+ * Used for `Array` method references.
+ *
+ * Normally `Array.prototype` would suffice, however, using an array literal
+ * avoids issues in Narwhal.
+ */
+ var arrayRef = [];
+
+ /** Used for native method references */
+ var errorProto = Error.prototype,
+ objectProto = Object.prototype,
+ stringProto = String.prototype;
+
+ /** Used to restore the original `_` reference in `noConflict` */
+ var oldDash = context._;
+
+ /** Used to resolve the internal [[Class]] of values */
+ var toString = objectProto.toString;
+
+ /** Used to detect if a method is native */
+ var reNative = RegExp('^' +
+ String(toString)
+ .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
+ .replace(/toString| for [^\]]+/g, '.*?') + '$'
+ );
+
+ /** Native method shortcuts */
+ var ceil = Math.ceil,
+ clearTimeout = context.clearTimeout,
+ floor = Math.floor,
+ fnToString = Function.prototype.toString,
+ getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,
+ hasOwnProperty = objectProto.hasOwnProperty,
+ push = arrayRef.push,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ setTimeout = context.setTimeout,
+ splice = arrayRef.splice,
+ unshift = arrayRef.unshift;
+
+ /** Used to set meta data on functions */
+ var defineProperty = (function() {
+ // IE 8 only accepts DOM elements
+ try {
+ var o = {},
+ func = isNative(func = Object.defineProperty) && func,
+ result = func(o, o, o) && func;
+ } catch(e) { }
+ return result;
+ }());
+
+ /* Native method shortcuts for methods with the same name as other `lodash` methods */
+ var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,
+ nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,
+ nativeIsFinite = context.isFinite,
+ nativeIsNaN = context.isNaN,
+ nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,
+ nativeMax = Math.max,
+ nativeMin = Math.min,
+ nativeParseInt = context.parseInt,
+ nativeRandom = Math.random;
+
+ /** Used to lookup a built-in constructor by [[Class]] */
+ var ctorByClass = {};
+ ctorByClass[arrayClass] = Array;
+ ctorByClass[boolClass] = Boolean;
+ ctorByClass[dateClass] = Date;
+ ctorByClass[funcClass] = Function;
+ ctorByClass[objectClass] = Object;
+ ctorByClass[numberClass] = Number;
+ ctorByClass[regexpClass] = RegExp;
+ ctorByClass[stringClass] = String;
+
+ /** Used to avoid iterating non-enumerable properties in IE < 9 */
+ var nonEnumProps = {};
+ nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };
+ nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true };
+ nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true };
+ nonEnumProps[objectClass] = { 'constructor': true };
+
+ (function() {
+ var length = shadowedProps.length;
+ while (length--) {
+ var key = shadowedProps[length];
+ for (var className in nonEnumProps) {
+ if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) {
+ nonEnumProps[className][key] = false;
+ }
+ }
+ }
+ }());
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a `lodash` object which wraps the given value to enable intuitive
+ * method chaining.
+ *
+ * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
+ * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
+ * and `unshift`
+ *
+ * Chaining is supported in custom builds as long as the `value` method is
+ * implicitly or explicitly included in the build.
+ *
+ * The chainable wrapper functions are:
+ * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
+ * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
+ * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
+ * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
+ * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
+ * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
+ * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
+ * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
+ * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
+ * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
+ * and `zip`
+ *
+ * The non-chainable wrapper functions are:
+ * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
+ * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,
+ * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
+ * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,
+ * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,
+ * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,
+ * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,
+ * `template`, `unescape`, `uniqueId`, and `value`
+ *
+ * The wrapper functions `first` and `last` return wrapped values when `n` is
+ * provided, otherwise they return unwrapped values.
+ *
+ * Explicit chaining can be enabled by using the `_.chain` method.
+ *
+ * @name _
+ * @constructor
+ * @category Chaining
+ * @param {*} value The value to wrap in a `lodash` instance.
+ * @returns {Object} Returns a `lodash` instance.
+ * @example
+ *
+ * var wrapped = _([1, 2, 3]);
+ *
+ * // returns an unwrapped value
+ * wrapped.reduce(function(sum, num) {
+ * return sum + num;
+ * });
+ * // => 6
+ *
+ * // returns a wrapped value
+ * var squares = wrapped.map(function(num) {
+ * return num * num;
+ * });
+ *
+ * _.isArray(squares);
+ * // => false
+ *
+ * _.isArray(squares.value());
+ * // => true
+ */
+ function lodash(value) {
+ // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor
+ return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))
+ ? value
+ : new lodashWrapper(value);
+ }
+
+ /**
+ * A fast path for creating `lodash` wrapper objects.
+ *
+ * @private
+ * @param {*} value The value to wrap in a `lodash` instance.
+ * @param {boolean} chainAll A flag to enable chaining for all methods
+ * @returns {Object} Returns a `lodash` instance.
+ */
+ function lodashWrapper(value, chainAll) {
+ this.__chain__ = !!chainAll;
+ this.__wrapped__ = value;
+ }
+ // ensure `new lodashWrapper` is an instance of `lodash`
+ lodashWrapper.prototype = lodash.prototype;
+
+ /**
+ * An object used to flag environments features.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */
+ var support = lodash.support = {};
+
+ (function() {
+ var ctor = function() { this.x = 1; },
+ object = { '0': 1, 'length': 1 },
+ props = [];
+
+ ctor.prototype = { 'valueOf': 1, 'y': 1 };
+ for (var key in new ctor) { props.push(key); }
+ for (key in arguments) { }
+
+ /**
+ * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9).
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.argsClass = toString.call(arguments) == argsClass;
+
+ /**
+ * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5).
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.argsObject = arguments.constructor == Object && !(arguments instanceof Array);
+
+ /**
+ * Detect if `name` or `message` properties of `Error.prototype` are
+ * enumerable by default. (IE < 9, Safari < 5.1)
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name');
+
+ /**
+ * Detect if `prototype` properties are enumerable by default.
+ *
+ * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1
+ * (if the prototype or a property on the prototype has been set)
+ * incorrectly sets a function's `prototype` property [[Enumerable]]
+ * value to `true`.
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype');
+
+ /**
+ * Detect if functions can be decompiled by `Function#toString`
+ * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext);
+
+ /**
+ * Detect if `Function#name` is supported (all but IE).
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.funcNames = typeof Function.name == 'string';
+
+ /**
+ * Detect if `arguments` object indexes are non-enumerable
+ * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1).
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.nonEnumArgs = key != 0;
+
+ /**
+ * Detect if properties shadowing those on `Object.prototype` are non-enumerable.
+ *
+ * In IE < 9 an objects own properties, shadowing non-enumerable ones, are
+ * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug).
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.nonEnumShadows = !/valueOf/.test(props);
+
+ /**
+ * Detect if own properties are iterated after inherited properties (all but IE < 9).
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.ownLast = props[0] != 'x';
+
+ /**
+ * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.
+ *
+ * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()`
+ * and `splice()` functions that fail to remove the last element, `value[0]`,
+ * of array-like objects even though the `length` property is set to `0`.
+ * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()`
+ * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9.
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]);
+
+ /**
+ * Detect lack of support for accessing string characters by index.
+ *
+ * IE < 8 can't access characters by index and IE 8 can only access
+ * characters by index on string literals.
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';
+
+ /**
+ * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9)
+ * and that the JS engine errors when attempting to coerce an object to
+ * a string without a `toString` function.
+ *
+ * @memberOf _.support
+ * @type boolean
+ */
+ try {
+ support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + ''));
+ } catch(e) {
+ support.nodeClass = true;
+ }
+ }(1));
+
+ /**
+ * By default, the template delimiters used by Lo-Dash are similar to those in
+ * embedded Ruby (ERB). Change the following template settings to use alternative
+ * delimiters.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */
+ lodash.templateSettings = {
+
+ /**
+ * Used to detect `data` property values to be HTML-escaped.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'escape': /<%-([\s\S]+?)%>/g,
+
+ /**
+ * Used to detect code to be evaluated.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'evaluate': /<%([\s\S]+?)%>/g,
+
+ /**
+ * Used to detect `data` property values to inject.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'interpolate': reInterpolate,
+
+ /**
+ * Used to reference the data object in the template text.
+ *
+ * @memberOf _.templateSettings
+ * @type string
+ */
+ 'variable': '',
+
+ /**
+ * Used to import variables into the compiled template.
+ *
+ * @memberOf _.templateSettings
+ * @type Object
+ */
+ 'imports': {
+
+ /**
+ * A reference to the `lodash` function.
+ *
+ * @memberOf _.templateSettings.imports
+ * @type Function
+ */
+ '_': lodash
+ }
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The template used to create iterator functions.
+ *
+ * @private
+ * @param {Object} data The data object used to populate the text.
+ * @returns {string} Returns the interpolated text.
+ */
+ var iteratorTemplate = function(obj) {
+
+ var __p = 'var index, iterable = ' +
+ (obj.firstArg) +
+ ', result = ' +
+ (obj.init) +
+ ';\nif (!iterable) return result;\n' +
+ (obj.top) +
+ ';';
+ if (obj.array) {
+ __p += '\nvar length = iterable.length; index = -1;\nif (' +
+ (obj.array) +
+ ') { ';
+ if (support.unindexedChars) {
+ __p += '\n if (isString(iterable)) {\n iterable = iterable.split(\'\')\n } ';
+ }
+ __p += '\n while (++index < length) {\n ' +
+ (obj.loop) +
+ ';\n }\n}\nelse { ';
+ } else if (support.nonEnumArgs) {
+ __p += '\n var length = iterable.length; index = -1;\n if (length && isArguments(iterable)) {\n while (++index < length) {\n index += \'\';\n ' +
+ (obj.loop) +
+ ';\n }\n } else { ';
+ }
+
+ if (support.enumPrototypes) {
+ __p += '\n var skipProto = typeof iterable == \'function\';\n ';
+ }
+
+ if (support.enumErrorProps) {
+ __p += '\n var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n ';
+ }
+
+ var conditions = []; if (support.enumPrototypes) { conditions.push('!(skipProto && index == "prototype")'); } if (support.enumErrorProps) { conditions.push('!(skipErrorProps && (index == "message" || index == "name"))'); }
+
+ if (obj.useHas && obj.keys) {
+ __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n';
+ if (conditions.length) {
+ __p += ' if (' +
+ (conditions.join(' && ')) +
+ ') {\n ';
+ }
+ __p +=
+ (obj.loop) +
+ '; ';
+ if (conditions.length) {
+ __p += '\n }';
+ }
+ __p += '\n } ';
+ } else {
+ __p += '\n for (index in iterable) {\n';
+ if (obj.useHas) { conditions.push("hasOwnProperty.call(iterable, index)"); } if (conditions.length) {
+ __p += ' if (' +
+ (conditions.join(' && ')) +
+ ') {\n ';
+ }
+ __p +=
+ (obj.loop) +
+ '; ';
+ if (conditions.length) {
+ __p += '\n }';
+ }
+ __p += '\n } ';
+ if (support.nonEnumShadows) {
+ __p += '\n\n if (iterable !== objectProto) {\n var ctor = iterable.constructor,\n isProto = iterable === (ctor && ctor.prototype),\n className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n nonEnum = nonEnumProps[className];\n ';
+ for (k = 0; k < 7; k++) {
+ __p += '\n index = \'' +
+ (obj.shadowedProps[k]) +
+ '\';\n if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))';
+ if (!obj.useHas) {
+ __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])';
+ }
+ __p += ') {\n ' +
+ (obj.loop) +
+ ';\n } ';
+ }
+ __p += '\n } ';
+ }
+
+ }
+
+ if (obj.array || support.nonEnumArgs) {
+ __p += '\n}';
+ }
+ __p +=
+ (obj.bottom) +
+ ';\nreturn result';
+
+ return __p
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The base implementation of `_.bind` that creates the bound function and
+ * sets its meta data.
+ *
+ * @private
+ * @param {Array} bindData The bind data array.
+ * @returns {Function} Returns the new bound function.
+ */
+ function baseBind(bindData) {
+ var func = bindData[0],
+ partialArgs = bindData[2],
+ thisArg = bindData[4];
+
+ function bound() {
+ // `Function#bind` spec
+ // http://es5.github.io/#x15.3.4.5
+ if (partialArgs) {
+ // avoid `arguments` object deoptimizations by using `slice` instead
+ // of `Array.prototype.slice.call` and not assigning `arguments` to a
+ // variable as a ternary expression
+ var args = slice(partialArgs);
+ push.apply(args, arguments);
+ }
+ // mimic the constructor's `return` behavior
+ // http://es5.github.io/#x13.2.2
+ if (this instanceof bound) {
+ // ensure `new bound` is an instance of `func`
+ var thisBinding = baseCreate(func.prototype),
+ result = func.apply(thisBinding, args || arguments);
+ return isObject(result) ? result : thisBinding;
+ }
+ return func.apply(thisArg, args || arguments);
+ }
+ setBindData(bound, bindData);
+ return bound;
+ }
+
+ /**
+ * The base implementation of `_.clone` without argument juggling or support
+ * for `thisArg` binding.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep=false] Specify a deep clone.
+ * @param {Function} [callback] The function to customize cloning values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates clones with source counterparts.
+ * @returns {*} Returns the cloned value.
+ */
+ function baseClone(value, isDeep, callback, stackA, stackB) {
+ if (callback) {
+ var result = callback(value);
+ if (typeof result != 'undefined') {
+ return result;
+ }
+ }
+ // inspect [[Class]]
+ var isObj = isObject(value);
+ if (isObj) {
+ var className = toString.call(value);
+ if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {
+ return value;
+ }
+ var ctor = ctorByClass[className];
+ switch (className) {
+ case boolClass:
+ case dateClass:
+ return new ctor(+value);
+
+ case numberClass:
+ case stringClass:
+ return new ctor(value);
+
+ case regexpClass:
+ result = ctor(value.source, reFlags.exec(value));
+ result.lastIndex = value.lastIndex;
+ return result;
+ }
+ } else {
+ return value;
+ }
+ var isArr = isArray(value);
+ if (isDeep) {
+ // check for circular references and return corresponding clone
+ var initedStack = !stackA;
+ stackA || (stackA = getArray());
+ stackB || (stackB = getArray());
+
+ var length = stackA.length;
+ while (length--) {
+ if (stackA[length] == value) {
+ return stackB[length];
+ }
+ }
+ result = isArr ? ctor(value.length) : {};
+ }
+ else {
+ result = isArr ? slice(value) : assign({}, value);
+ }
+ // add array properties assigned by `RegExp#exec`
+ if (isArr) {
+ if (hasOwnProperty.call(value, 'index')) {
+ result.index = value.index;
+ }
+ if (hasOwnProperty.call(value, 'input')) {
+ result.input = value.input;
+ }
+ }
+ // exit for shallow clone
+ if (!isDeep) {
+ return result;
+ }
+ // add the source value to the stack of traversed objects
+ // and associate it with its clone
+ stackA.push(value);
+ stackB.push(result);
+
+ // recursively populate clone (susceptible to call stack limits)
+ (isArr ? baseEach : forOwn)(value, function(objValue, key) {
+ result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);
+ });
+
+ if (initedStack) {
+ releaseArray(stackA);
+ releaseArray(stackB);
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} prototype The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+ function baseCreate(prototype, properties) {
+ return isObject(prototype) ? nativeCreate(prototype) : {};
+ }
+ // fallback for browsers without `Object.create`
+ if (!nativeCreate) {
+ baseCreate = (function() {
+ function Object() {}
+ return function(prototype) {
+ if (isObject(prototype)) {
+ Object.prototype = prototype;
+ var result = new Object;
+ Object.prototype = null;
+ }
+ return result || context.Object();
+ };
+ }());
+ }
+
+ /**
+ * The base implementation of `_.createCallback` without support for creating
+ * "_.pluck" or "_.where" style callbacks.
+ *
+ * @private
+ * @param {*} [func=identity] The value to convert to a callback.
+ * @param {*} [thisArg] The `this` binding of the created callback.
+ * @param {number} [argCount] The number of arguments the callback accepts.
+ * @returns {Function} Returns a callback function.
+ */
+ function baseCreateCallback(func, thisArg, argCount) {
+ if (typeof func != 'function') {
+ return identity;
+ }
+ // exit early for no `thisArg` or already bound by `Function#bind`
+ if (typeof thisArg == 'undefined' || !('prototype' in func)) {
+ return func;
+ }
+ var bindData = func.__bindData__;
+ if (typeof bindData == 'undefined') {
+ if (support.funcNames) {
+ bindData = !func.name;
+ }
+ bindData = bindData || !support.funcDecomp;
+ if (!bindData) {
+ var source = fnToString.call(func);
+ if (!support.funcNames) {
+ bindData = !reFuncName.test(source);
+ }
+ if (!bindData) {
+ // checks if `func` references the `this` keyword and stores the result
+ bindData = reThis.test(source);
+ setBindData(func, bindData);
+ }
+ }
+ }
+ // exit early if there are no `this` references or `func` is bound
+ if (bindData === false || (bindData !== true && bindData[1] & 1)) {
+ return func;
+ }
+ switch (argCount) {
+ case 1: return function(value) {
+ return func.call(thisArg, value);
+ };
+ case 2: return function(a, b) {
+ return func.call(thisArg, a, b);
+ };
+ case 3: return function(value, index, collection) {
+ return func.call(thisArg, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(thisArg, accumulator, value, index, collection);
+ };
+ }
+ return bind(func, thisArg);
+ }
+
+ /**
+ * The base implementation of `createWrapper` that creates the wrapper and
+ * sets its meta data.
+ *
+ * @private
+ * @param {Array} bindData The bind data array.
+ * @returns {Function} Returns the new function.
+ */
+ function baseCreateWrapper(bindData) {
+ var func = bindData[0],
+ bitmask = bindData[1],
+ partialArgs = bindData[2],
+ partialRightArgs = bindData[3],
+ thisArg = bindData[4],
+ arity = bindData[5];
+
+ var isBind = bitmask & 1,
+ isBindKey = bitmask & 2,
+ isCurry = bitmask & 4,
+ isCurryBound = bitmask & 8,
+ key = func;
+
+ function bound() {
+ var thisBinding = isBind ? thisArg : this;
+ if (partialArgs) {
+ var args = slice(partialArgs);
+ push.apply(args, arguments);
+ }
+ if (partialRightArgs || isCurry) {
+ args || (args = slice(arguments));
+ if (partialRightArgs) {
+ push.apply(args, partialRightArgs);
+ }
+ if (isCurry && args.length < arity) {
+ bitmask |= 16 & ~32;
+ return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
+ }
+ }
+ args || (args = arguments);
+ if (isBindKey) {
+ func = thisBinding[key];
+ }
+ if (this instanceof bound) {
+ thisBinding = baseCreate(func.prototype);
+ var result = func.apply(thisBinding, args);
+ return isObject(result) ? result : thisBinding;
+ }
+ return func.apply(thisBinding, args);
+ }
+ setBindData(bound, bindData);
+ return bound;
+ }
+
+ /**
+ * The base implementation of `_.difference` that accepts a single array
+ * of values to exclude.
+ *
+ * @private
+ * @param {Array} array The array to process.
+ * @param {Array} [values] The array of values to exclude.
+ * @returns {Array} Returns a new array of filtered values.
+ */
+ function baseDifference(array, values) {
+ var index = -1,
+ indexOf = getIndexOf(),
+ length = array ? array.length : 0,
+ isLarge = length >= largeArraySize && indexOf === baseIndexOf,
+ result = [];
+
+ if (isLarge) {
+ var cache = createCache(values);
+ if (cache) {
+ indexOf = cacheIndexOf;
+ values = cache;
+ } else {
+ isLarge = false;
+ }
+ }
+ while (++index < length) {
+ var value = array[index];
+ if (indexOf(values, value) < 0) {
+ result.push(value);
+ }
+ }
+ if (isLarge) {
+ releaseObject(values);
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.flatten` without support for callback
+ * shorthands or `thisArg` binding.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
+ * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
+ * @param {number} [fromIndex=0] The index to start from.
+ * @returns {Array} Returns a new flattened array.
+ */
+ function baseFlatten(array, isShallow, isStrict, fromIndex) {
+ var index = (fromIndex || 0) - 1,
+ length = array ? array.length : 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+
+ if (value && typeof value == 'object' && typeof value.length == 'number'
+ && (isArray(value) || isArguments(value))) {
+ // recursively flatten arrays (susceptible to call stack limits)
+ if (!isShallow) {
+ value = baseFlatten(value, isShallow, isStrict);
+ }
+ var valIndex = -1,
+ valLength = value.length,
+ resIndex = result.length;
+
+ result.length += valLength;
+ while (++valIndex < valLength) {
+ result[resIndex++] = value[valIndex];
+ }
+ } else if (!isStrict) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.isEqual`, without support for `thisArg` binding,
+ * that allows partial "_.where" style comparisons.
+ *
+ * @private
+ * @param {*} a The value to compare.
+ * @param {*} b The other value to compare.
+ * @param {Function} [callback] The function to customize comparing values.
+ * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.
+ * @param {Array} [stackA=[]] Tracks traversed `a` objects.
+ * @param {Array} [stackB=[]] Tracks traversed `b` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */
+ function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {
+ // used to indicate that when comparing objects, `a` has at least the properties of `b`
+ if (callback) {
+ var result = callback(a, b);
+ if (typeof result != 'undefined') {
+ return !!result;
+ }
+ }
+ // exit early for identical values
+ if (a === b) {
+ // treat `+0` vs. `-0` as not equal
+ return a !== 0 || (1 / a == 1 / b);
+ }
+ var type = typeof a,
+ otherType = typeof b;
+
+ // exit early for unlike primitive values
+ if (a === a &&
+ !(a && objectTypes[type]) &&
+ !(b && objectTypes[otherType])) {
+ return false;
+ }
+ // exit early for `null` and `undefined` avoiding ES3's Function#call behavior
+ // http://es5.github.io/#x15.3.4.4
+ if (a == null || b == null) {
+ return a === b;
+ }
+ // compare [[Class]] names
+ var className = toString.call(a),
+ otherClass = toString.call(b);
+
+ if (className == argsClass) {
+ className = objectClass;
+ }
+ if (otherClass == argsClass) {
+ otherClass = objectClass;
+ }
+ if (className != otherClass) {
+ return false;
+ }
+ switch (className) {
+ case boolClass:
+ case dateClass:
+ // coerce dates and booleans to numbers, dates to milliseconds and booleans
+ // to `1` or `0` treating invalid dates coerced to `NaN` as not equal
+ return +a == +b;
+
+ case numberClass:
+ // treat `NaN` vs. `NaN` as equal
+ return (a != +a)
+ ? b != +b
+ // but treat `+0` vs. `-0` as not equal
+ : (a == 0 ? (1 / a == 1 / b) : a == +b);
+
+ case regexpClass:
+ case stringClass:
+ // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)
+ // treat string primitives and their corresponding object instances as equal
+ return a == String(b);
+ }
+ var isArr = className == arrayClass;
+ if (!isArr) {
+ // unwrap any `lodash` wrapped values
+ var aWrapped = hasOwnProperty.call(a, '__wrapped__'),
+ bWrapped = hasOwnProperty.call(b, '__wrapped__');
+
+ if (aWrapped || bWrapped) {
+ return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);
+ }
+ // exit for functions and DOM nodes
+ if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) {
+ return false;
+ }
+ // in older versions of Opera, `arguments` objects have `Array` constructors
+ var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor,
+ ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor;
+
+ // non `Object` object instances with different constructors are not equal
+ if (ctorA != ctorB &&
+ !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
+ ('constructor' in a && 'constructor' in b)
+ ) {
+ return false;
+ }
+ }
+ // assume cyclic structures are equal
+ // the algorithm for detecting cyclic structures is adapted from ES 5.1
+ // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)
+ var initedStack = !stackA;
+ stackA || (stackA = getArray());
+ stackB || (stackB = getArray());
+
+ var length = stackA.length;
+ while (length--) {
+ if (stackA[length] == a) {
+ return stackB[length] == b;
+ }
+ }
+ var size = 0;
+ result = true;
+
+ // add `a` and `b` to the stack of traversed objects
+ stackA.push(a);
+ stackB.push(b);
+
+ // recursively compare objects and arrays (susceptible to call stack limits)
+ if (isArr) {
+ // compare lengths to determine if a deep comparison is necessary
+ length = a.length;
+ size = b.length;
+ result = size == length;
+
+ if (result || isWhere) {
+ // deep compare the contents, ignoring non-numeric properties
+ while (size--) {
+ var index = length,
+ value = b[size];
+
+ if (isWhere) {
+ while (index--) {
+ if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {
+ break;
+ }
+ }
+ } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {
+ break;
+ }
+ }
+ }
+ }
+ else {
+ // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`
+ // which, in this case, is more costly
+ forIn(b, function(value, key, b) {
+ if (hasOwnProperty.call(b, key)) {
+ // count the number of properties.
+ size++;
+ // deep compare each property value.
+ return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));
+ }
+ });
+
+ if (result && !isWhere) {
+ // ensure both objects have the same number of properties
+ forIn(a, function(value, key, a) {
+ if (hasOwnProperty.call(a, key)) {
+ // `size` will be `-1` if `a` has more properties than `b`
+ return (result = --size > -1);
+ }
+ });
+ }
+ }
+ stackA.pop();
+ stackB.pop();
+
+ if (initedStack) {
+ releaseArray(stackA);
+ releaseArray(stackB);
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.merge` without argument juggling or support
+ * for `thisArg` binding.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} [callback] The function to customize merging properties.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ */
+ function baseMerge(object, source, callback, stackA, stackB) {
+ (isArray(source) ? forEach : forOwn)(source, function(source, key) {
+ var found,
+ isArr,
+ result = source,
+ value = object[key];
+
+ if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
+ // avoid merging previously merged cyclic sources
+ var stackLength = stackA.length;
+ while (stackLength--) {
+ if ((found = stackA[stackLength] == source)) {
+ value = stackB[stackLength];
+ break;
+ }
+ }
+ if (!found) {
+ var isShallow;
+ if (callback) {
+ result = callback(value, source);
+ if ((isShallow = typeof result != 'undefined')) {
+ value = result;
+ }
+ }
+ if (!isShallow) {
+ value = isArr
+ ? (isArray(value) ? value : [])
+ : (isPlainObject(value) ? value : {});
+ }
+ // add `source` and associated `value` to the stack of traversed objects
+ stackA.push(source);
+ stackB.push(value);
+
+ // recursively merge objects and arrays (susceptible to call stack limits)
+ if (!isShallow) {
+ baseMerge(value, source, callback, stackA, stackB);
+ }
+ }
+ }
+ else {
+ if (callback) {
+ result = callback(value, source);
+ if (typeof result == 'undefined') {
+ result = source;
+ }
+ }
+ if (typeof result != 'undefined') {
+ value = result;
+ }
+ }
+ object[key] = value;
+ });
+ }
+
+ /**
+ * The base implementation of `_.random` without argument juggling or support
+ * for returning floating-point numbers.
+ *
+ * @private
+ * @param {number} min The minimum possible value.
+ * @param {number} max The maximum possible value.
+ * @returns {number} Returns a random number.
+ */
+ function baseRandom(min, max) {
+ return min + floor(nativeRandom() * (max - min + 1));
+ }
+
+ /**
+ * The base implementation of `_.uniq` without support for callback shorthands
+ * or `thisArg` binding.
+ *
+ * @private
+ * @param {Array} array The array to process.
+ * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
+ * @param {Function} [callback] The function called per iteration.
+ * @returns {Array} Returns a duplicate-value-free array.
+ */
+ function baseUniq(array, isSorted, callback) {
+ var index = -1,
+ indexOf = getIndexOf(),
+ length = array ? array.length : 0,
+ result = [];
+
+ var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf,
+ seen = (callback || isLarge) ? getArray() : result;
+
+ if (isLarge) {
+ var cache = createCache(seen);
+ indexOf = cacheIndexOf;
+ seen = cache;
+ }
+ while (++index < length) {
+ var value = array[index],
+ computed = callback ? callback(value, index, array) : value;
+
+ if (isSorted
+ ? !index || seen[seen.length - 1] !== computed
+ : indexOf(seen, computed) < 0
+ ) {
+ if (callback || isLarge) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ }
+ if (isLarge) {
+ releaseArray(seen.array);
+ releaseObject(seen);
+ } else if (callback) {
+ releaseArray(seen);
+ }
+ return result;
+ }
+
+ /**
+ * Creates a function that aggregates a collection, creating an object composed
+ * of keys generated from the results of running each element of the collection
+ * through a callback. The given `setter` function sets the keys and values
+ * of the composed object.
+ *
+ * @private
+ * @param {Function} setter The setter function.
+ * @returns {Function} Returns the new aggregator function.
+ */
+ function createAggregator(setter) {
+ return function(collection, callback, thisArg) {
+ var result = {};
+ callback = lodash.createCallback(callback, thisArg, 3);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ setter(result, value, callback(value, index, collection), collection);
+ }
+ } else {
+ baseEach(collection, function(value, key, collection) {
+ setter(result, value, callback(value, key, collection), collection);
+ });
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function that, when called, either curries or invokes `func`
+ * with an optional `this` binding and partially applied arguments.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to reference.
+ * @param {number} bitmask The bitmask of method flags to compose.
+ * The bitmask may be composed of the following flags:
+ * 1 - `_.bind`
+ * 2 - `_.bindKey`
+ * 4 - `_.curry`
+ * 8 - `_.curry` (bound)
+ * 16 - `_.partial`
+ * 32 - `_.partialRight`
+ * @param {Array} [partialArgs] An array of arguments to prepend to those
+ * provided to the new function.
+ * @param {Array} [partialRightArgs] An array of arguments to append to those
+ * provided to the new function.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new function.
+ */
+ function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
+ var isBind = bitmask & 1,
+ isBindKey = bitmask & 2,
+ isCurry = bitmask & 4,
+ isCurryBound = bitmask & 8,
+ isPartial = bitmask & 16,
+ isPartialRight = bitmask & 32;
+
+ if (!isBindKey && !isFunction(func)) {
+ throw new TypeError;
+ }
+ if (isPartial && !partialArgs.length) {
+ bitmask &= ~16;
+ isPartial = partialArgs = false;
+ }
+ if (isPartialRight && !partialRightArgs.length) {
+ bitmask &= ~32;
+ isPartialRight = partialRightArgs = false;
+ }
+ var bindData = func && func.__bindData__;
+ if (bindData && bindData !== true) {
+ // clone `bindData`
+ bindData = slice(bindData);
+ if (bindData[2]) {
+ bindData[2] = slice(bindData[2]);
+ }
+ if (bindData[3]) {
+ bindData[3] = slice(bindData[3]);
+ }
+ // set `thisBinding` is not previously bound
+ if (isBind && !(bindData[1] & 1)) {
+ bindData[4] = thisArg;
+ }
+ // set if previously bound but not currently (subsequent curried functions)
+ if (!isBind && bindData[1] & 1) {
+ bitmask |= 8;
+ }
+ // set curried arity if not yet set
+ if (isCurry && !(bindData[1] & 4)) {
+ bindData[5] = arity;
+ }
+ // append partial left arguments
+ if (isPartial) {
+ push.apply(bindData[2] || (bindData[2] = []), partialArgs);
+ }
+ // append partial right arguments
+ if (isPartialRight) {
+ unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);
+ }
+ // merge flags
+ bindData[1] |= bitmask;
+ return createWrapper.apply(null, bindData);
+ }
+ // fast path for `_.bind`
+ var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
+ return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
+ }
+
+ /**
+ * Creates compiled iteration functions.
+ *
+ * @private
+ * @param {...Object} [options] The compile options object(s).
+ * @param {string} [options.array] Code to determine if the iterable is an array or array-like.
+ * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop.
+ * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration.
+ * @param {string} [options.args] A comma separated string of iteration function arguments.
+ * @param {string} [options.top] Code to execute before the iteration branches.
+ * @param {string} [options.loop] Code to execute in the object loop.
+ * @param {string} [options.bottom] Code to execute after the iteration branches.
+ * @returns {Function} Returns the compiled function.
+ */
+ function createIterator() {
+ // data properties
+ iteratorData.shadowedProps = shadowedProps;
+
+ // iterator options
+ iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = '';
+ iteratorData.init = 'iterable';
+ iteratorData.useHas = true;
+
+ // merge options into a template data object
+ for (var object, index = 0; object = arguments[index]; index++) {
+ for (var key in object) {
+ iteratorData[key] = object[key];
+ }
+ }
+ var args = iteratorData.args;
+ iteratorData.firstArg = /^[^,]+/.exec(args)[0];
+
+ // create the function factory
+ var factory = Function(
+ 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' +
+ 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' +
+ 'objectTypes, nonEnumProps, stringClass, stringProto, toString',
+ 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}'
+ );
+
+ // return the compiled function
+ return factory(
+ baseCreateCallback, errorClass, errorProto, hasOwnProperty,
+ indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto,
+ objectTypes, nonEnumProps, stringClass, stringProto, toString
+ );
+ }
+
+ /**
+ * Used by `escape` to convert characters to HTML entities.
+ *
+ * @private
+ * @param {string} match The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+ function escapeHtmlChar(match) {
+ return htmlEscapes[match];
+ }
+
+ /**
+ * Gets the appropriate "indexOf" function. If the `_.indexOf` method is
+ * customized, this method returns the custom method, otherwise it returns
+ * the `baseIndexOf` function.
+ *
+ * @private
+ * @returns {Function} Returns the "indexOf" function.
+ */
+ function getIndexOf() {
+ var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result;
+ return result;
+ }
+
+ /**
+ * Checks if `value` is a native function.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.
+ */
+ function isNative(value) {
+ return typeof value == 'function' && reNative.test(value);
+ }
+
+ /**
+ * Sets `this` binding data on a given function.
+ *
+ * @private
+ * @param {Function} func The function to set data on.
+ * @param {Array} value The data array to set.
+ */
+ var setBindData = !defineProperty ? noop : function(func, value) {
+ descriptor.value = value;
+ defineProperty(func, '__bindData__', descriptor);
+ };
+
+ /**
+ * A fallback implementation of `isPlainObject` which checks if a given value
+ * is an object created by the `Object` constructor, assuming objects created
+ * by the `Object` constructor have no inherited enumerable properties and that
+ * there are no `Object.prototype` extensions.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ */
+ function shimIsPlainObject(value) {
+ var ctor,
+ result;
+
+ // avoid non Object objects, `arguments` objects, and DOM elements
+ if (!(value && toString.call(value) == objectClass) ||
+ (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) ||
+ (!support.argsClass && isArguments(value)) ||
+ (!support.nodeClass && isNode(value))) {
+ return false;
+ }
+ // IE < 9 iterates inherited properties before own properties. If the first
+ // iterated property is an object's own property then there are no inherited
+ // enumerable properties.
+ if (support.ownLast) {
+ forIn(value, function(value, key, object) {
+ result = hasOwnProperty.call(object, key);
+ return false;
+ });
+ return result !== false;
+ }
+ // In most environments an object's own properties are iterated before
+ // its inherited properties. If the last iterated property is an object's
+ // own property then there are no inherited enumerable properties.
+ forIn(value, function(value, key) {
+ result = key;
+ });
+ return typeof result == 'undefined' || hasOwnProperty.call(value, result);
+ }
+
+ /**
+ * Used by `unescape` to convert HTML entities to characters.
+ *
+ * @private
+ * @param {string} match The matched character to unescape.
+ * @returns {string} Returns the unescaped character.
+ */
+ function unescapeHtmlChar(match) {
+ return htmlUnescapes[match];
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Checks if `value` is an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.
+ * @example
+ *
+ * (function() { return _.isArguments(arguments); })(1, 2, 3);
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+ function isArguments(value) {
+ return value && typeof value == 'object' && typeof value.length == 'number' &&
+ toString.call(value) == argsClass || false;
+ }
+ // fallback for browsers that can't detect `arguments` objects by [[Class]]
+ if (!support.argsClass) {
+ isArguments = function(value) {
+ return value && typeof value == 'object' && typeof value.length == 'number' &&
+ hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false;
+ };
+ }
+
+ /**
+ * Checks if `value` is an array.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is an array, else `false`.
+ * @example
+ *
+ * (function() { return _.isArray(arguments); })();
+ * // => false
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ */
+ var isArray = nativeIsArray || function(value) {
+ return value && typeof value == 'object' && typeof value.length == 'number' &&
+ toString.call(value) == arrayClass || false;
+ };
+
+ /**
+ * A fallback implementation of `Object.keys` which produces an array of the
+ * given object's own enumerable property names.
+ *
+ * @private
+ * @type Function
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns an array of property names.
+ */
+ var shimKeys = createIterator({
+ 'args': 'object',
+ 'init': '[]',
+ 'top': 'if (!(objectTypes[typeof object])) return result',
+ 'loop': 'result.push(index)'
+ });
+
+ /**
+ * Creates an array composed of the own enumerable property names of an object.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns an array of property names.
+ * @example
+ *
+ * _.keys({ 'one': 1, 'two': 2, 'three': 3 });
+ * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)
+ */
+ var keys = !nativeKeys ? shimKeys : function(object) {
+ if (!isObject(object)) {
+ return [];
+ }
+ if ((support.enumPrototypes && typeof object == 'function') ||
+ (support.nonEnumArgs && object.length && isArguments(object))) {
+ return shimKeys(object);
+ }
+ return nativeKeys(object);
+ };
+
+ /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */
+ var eachIteratorOptions = {
+ 'args': 'collection, callback, thisArg',
+ 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)",
+ 'array': "typeof length == 'number'",
+ 'keys': keys,
+ 'loop': 'if (callback(iterable[index], index, collection) === false) return result'
+ };
+
+ /** Reusable iterator options for `assign` and `defaults` */
+ var defaultsIteratorOptions = {
+ 'args': 'object, source, guard',
+ 'top':
+ 'var args = arguments,\n' +
+ ' argsIndex = 0,\n' +
+ " argsLength = typeof guard == 'number' ? 2 : args.length;\n" +
+ 'while (++argsIndex < argsLength) {\n' +
+ ' iterable = args[argsIndex];\n' +
+ ' if (iterable && objectTypes[typeof iterable]) {',
+ 'keys': keys,
+ 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]",
+ 'bottom': ' }\n}'
+ };
+
+ /** Reusable iterator options for `forIn` and `forOwn` */
+ var forOwnIteratorOptions = {
+ 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top,
+ 'array': false
+ };
+
+ /**
+ * Used to convert characters to HTML entities:
+ *
+ * Though the `>` character is escaped for symmetry, characters like `>` and `/`
+ * don't require escaping in HTML and have no special meaning unless they're part
+ * of a tag or an unquoted attribute value.
+ * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")
+ */
+ var htmlEscapes = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": '''
+ };
+
+ /** Used to convert HTML entities to characters */
+ var htmlUnescapes = invert(htmlEscapes);
+
+ /** Used to match HTML entities and HTML characters */
+ var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'),
+ reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');
+
+ /**
+ * A function compiled to iterate `arguments` objects, arrays, objects, and
+ * strings consistenly across environments, executing the callback for each
+ * element in the collection. The callback is bound to `thisArg` and invoked
+ * with three arguments; (value, index|key, collection). Callbacks may exit
+ * iteration early by explicitly returning `false`.
+ *
+ * @private
+ * @type Function
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array|Object|string} Returns `collection`.
+ */
+ var baseEach = createIterator(eachIteratorOptions);
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object. Subsequent sources will overwrite property assignments of previous
+ * sources. If a callback is provided it will be executed to produce the
+ * assigned values. The callback is bound to `thisArg` and invoked with two
+ * arguments; (objectValue, sourceValue).
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @alias extend
+ * @category Objects
+ * @param {Object} object The destination object.
+ * @param {...Object} [source] The source objects.
+ * @param {Function} [callback] The function to customize assigning values.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns the destination object.
+ * @example
+ *
+ * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
+ * // => { 'name': 'fred', 'employer': 'slate' }
+ *
+ * var defaults = _.partialRight(_.assign, function(a, b) {
+ * return typeof a == 'undefined' ? b : a;
+ * });
+ *
+ * var object = { 'name': 'barney' };
+ * defaults(object, { 'name': 'fred', 'employer': 'slate' });
+ * // => { 'name': 'barney', 'employer': 'slate' }
+ */
+ var assign = createIterator(defaultsIteratorOptions, {
+ 'top':
+ defaultsIteratorOptions.top.replace(';',
+ ';\n' +
+ "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" +
+ ' var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n' +
+ "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" +
+ ' callback = args[--argsLength];\n' +
+ '}'
+ ),
+ 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]'
+ });
+
+ /**
+ * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
+ * be cloned, otherwise they will be assigned by reference. If a callback
+ * is provided it will be executed to produce the cloned values. If the
+ * callback returns `undefined` cloning will be handled by the method instead.
+ * The callback is bound to `thisArg` and invoked with one argument; (value).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep=false] Specify a deep clone.
+ * @param {Function} [callback] The function to customize cloning values.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the cloned value.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 }
+ * ];
+ *
+ * var shallow = _.clone(characters);
+ * shallow[0] === characters[0];
+ * // => true
+ *
+ * var deep = _.clone(characters, true);
+ * deep[0] === characters[0];
+ * // => false
+ *
+ * _.mixin({
+ * 'clone': _.partialRight(_.clone, function(value) {
+ * return _.isElement(value) ? value.cloneNode(false) : undefined;
+ * })
+ * });
+ *
+ * var clone = _.clone(document.body);
+ * clone.childNodes.length;
+ * // => 0
+ */
+ function clone(value, isDeep, callback, thisArg) {
+ // allows working with "Collections" methods without using their `index`
+ // and `collection` arguments for `isDeep` and `callback`
+ if (typeof isDeep != 'boolean' && isDeep != null) {
+ thisArg = callback;
+ callback = isDeep;
+ isDeep = false;
+ }
+ return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
+ }
+
+ /**
+ * Creates a deep clone of `value`. If a callback is provided it will be
+ * executed to produce the cloned values. If the callback returns `undefined`
+ * cloning will be handled by the method instead. The callback is bound to
+ * `thisArg` and invoked with one argument; (value).
+ *
+ * Note: This method is loosely based on the structured clone algorithm. Functions
+ * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and
+ * objects created by constructors other than `Object` are cloned to plain `Object` objects.
+ * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to deep clone.
+ * @param {Function} [callback] The function to customize cloning values.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the deep cloned value.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 }
+ * ];
+ *
+ * var deep = _.cloneDeep(characters);
+ * deep[0] === characters[0];
+ * // => false
+ *
+ * var view = {
+ * 'label': 'docs',
+ * 'node': element
+ * };
+ *
+ * var clone = _.cloneDeep(view, function(value) {
+ * return _.isElement(value) ? value.cloneNode(true) : undefined;
+ * });
+ *
+ * clone.node == view.node;
+ * // => false
+ */
+ function cloneDeep(value, callback, thisArg) {
+ return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
+ }
+
+ /**
+ * Creates an object that inherits from the given `prototype` object. If a
+ * `properties` object is provided its own enumerable properties are assigned
+ * to the created object.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} prototype The object to inherit from.
+ * @param {Object} [properties] The properties to assign to the object.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * function Circle() {
+ * Shape.call(this);
+ * }
+ *
+ * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });
+ *
+ * var circle = new Circle;
+ * circle instanceof Circle;
+ * // => true
+ *
+ * circle instanceof Shape;
+ * // => true
+ */
+ function create(prototype, properties) {
+ var result = baseCreate(prototype);
+ return properties ? assign(result, properties) : result;
+ }
+
+ /**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object for all destination properties that resolve to `undefined`. Once a
+ * property is set, additional defaults of the same property will be ignored.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Objects
+ * @param {Object} object The destination object.
+ * @param {...Object} [source] The source objects.
+ * @param- {Object} [guard] Allows working with `_.reduce` without using its
+ * `key` and `object` arguments as sources.
+ * @returns {Object} Returns the destination object.
+ * @example
+ *
+ * var object = { 'name': 'barney' };
+ * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
+ * // => { 'name': 'barney', 'employer': 'slate' }
+ */
+ var defaults = createIterator(defaultsIteratorOptions);
+
+ /**
+ * This method is like `_.findIndex` except that it returns the key of the
+ * first element that passes the callback check, instead of the element itself.
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to search.
+ * @param {Function|Object|string} [callback=identity] The function called per
+ * iteration. If a property name or object is provided it will be used to
+ * create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {string|undefined} Returns the key of the found element, else `undefined`.
+ * @example
+ *
+ * var characters = {
+ * 'barney': { 'age': 36, 'blocked': false },
+ * 'fred': { 'age': 40, 'blocked': true },
+ * 'pebbles': { 'age': 1, 'blocked': false }
+ * };
+ *
+ * _.findKey(characters, function(chr) {
+ * return chr.age < 40;
+ * });
+ * // => 'barney' (property order is not guaranteed across environments)
+ *
+ * // using "_.where" callback shorthand
+ * _.findKey(characters, { 'age': 1 });
+ * // => 'pebbles'
+ *
+ * // using "_.pluck" callback shorthand
+ * _.findKey(characters, 'blocked');
+ * // => 'fred'
+ */
+ function findKey(object, callback, thisArg) {
+ var result;
+ callback = lodash.createCallback(callback, thisArg, 3);
+ forOwn(object, function(value, key, object) {
+ if (callback(value, key, object)) {
+ result = key;
+ return false;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * This method is like `_.findKey` except that it iterates over elements
+ * of a `collection` in the opposite order.
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to search.
+ * @param {Function|Object|string} [callback=identity] The function called per
+ * iteration. If a property name or object is provided it will be used to
+ * create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {string|undefined} Returns the key of the found element, else `undefined`.
+ * @example
+ *
+ * var characters = {
+ * 'barney': { 'age': 36, 'blocked': true },
+ * 'fred': { 'age': 40, 'blocked': false },
+ * 'pebbles': { 'age': 1, 'blocked': true }
+ * };
+ *
+ * _.findLastKey(characters, function(chr) {
+ * return chr.age < 40;
+ * });
+ * // => returns `pebbles`, assuming `_.findKey` returns `barney`
+ *
+ * // using "_.where" callback shorthand
+ * _.findLastKey(characters, { 'age': 40 });
+ * // => 'fred'
+ *
+ * // using "_.pluck" callback shorthand
+ * _.findLastKey(characters, 'blocked');
+ * // => 'pebbles'
+ */
+ function findLastKey(object, callback, thisArg) {
+ var result;
+ callback = lodash.createCallback(callback, thisArg, 3);
+ forOwnRight(object, function(value, key, object) {
+ if (callback(value, key, object)) {
+ result = key;
+ return false;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * Iterates over own and inherited enumerable properties of an object,
+ * executing the callback for each property. The callback is bound to `thisArg`
+ * and invoked with three arguments; (value, key, object). Callbacks may exit
+ * iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Objects
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * Shape.prototype.move = function(x, y) {
+ * this.x += x;
+ * this.y += y;
+ * };
+ *
+ * _.forIn(new Shape, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
+ */
+ var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, {
+ 'useHas': false
+ });
+
+ /**
+ * This method is like `_.forIn` except that it iterates over elements
+ * of a `collection` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * Shape.prototype.move = function(x, y) {
+ * this.x += x;
+ * this.y += y;
+ * };
+ *
+ * _.forInRight(new Shape, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'
+ */
+ function forInRight(object, callback, thisArg) {
+ var pairs = [];
+
+ forIn(object, function(value, key) {
+ pairs.push(key, value);
+ });
+
+ var length = pairs.length;
+ callback = baseCreateCallback(callback, thisArg, 3);
+ while (length--) {
+ if (callback(pairs[length--], pairs[length], object) === false) {
+ break;
+ }
+ }
+ return object;
+ }
+
+ /**
+ * Iterates over own enumerable properties of an object, executing the callback
+ * for each property. The callback is bound to `thisArg` and invoked with three
+ * arguments; (value, key, object). Callbacks may exit iteration early by
+ * explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Objects
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
+ * console.log(key);
+ * });
+ * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)
+ */
+ var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions);
+
+ /**
+ * This method is like `_.forOwn` except that it iterates over elements
+ * of a `collection` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
+ * console.log(key);
+ * });
+ * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'
+ */
+ function forOwnRight(object, callback, thisArg) {
+ var props = keys(object),
+ length = props.length;
+
+ callback = baseCreateCallback(callback, thisArg, 3);
+ while (length--) {
+ var key = props[length];
+ if (callback(object[key], key, object) === false) {
+ break;
+ }
+ }
+ return object;
+ }
+
+ /**
+ * Creates a sorted array of property names of all enumerable properties,
+ * own and inherited, of `object` that have function values.
+ *
+ * @static
+ * @memberOf _
+ * @alias methods
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns an array of property names that have function values.
+ * @example
+ *
+ * _.functions(_);
+ * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]
+ */
+ function functions(object) {
+ var result = [];
+ forIn(object, function(value, key) {
+ if (isFunction(value)) {
+ result.push(key);
+ }
+ });
+ return result.sort();
+ }
+
+ /**
+ * Checks if the specified property name exists as a direct property of `object`,
+ * instead of an inherited property.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @param {string} key The name of the property to check.
+ * @returns {boolean} Returns `true` if key is a direct property, else `false`.
+ * @example
+ *
+ * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
+ * // => true
+ */
+ function has(object, key) {
+ return object ? hasOwnProperty.call(object, key) : false;
+ }
+
+ /**
+ * Creates an object composed of the inverted keys and values of the given object.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to invert.
+ * @returns {Object} Returns the created inverted object.
+ * @example
+ *
+ * _.invert({ 'first': 'fred', 'second': 'barney' });
+ * // => { 'fred': 'first', 'barney': 'second' }
+ */
+ function invert(object) {
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = {};
+
+ while (++index < length) {
+ var key = props[index];
+ result[object[key]] = key;
+ }
+ return result;
+ }
+
+ /**
+ * Checks if `value` is a boolean value.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.
+ * @example
+ *
+ * _.isBoolean(null);
+ * // => false
+ */
+ function isBoolean(value) {
+ return value === true || value === false ||
+ value && typeof value == 'object' && toString.call(value) == boolClass || false;
+ }
+
+ /**
+ * Checks if `value` is a date.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a date, else `false`.
+ * @example
+ *
+ * _.isDate(new Date);
+ * // => true
+ */
+ function isDate(value) {
+ return value && typeof value == 'object' && toString.call(value) == dateClass || false;
+ }
+
+ /**
+ * Checks if `value` is a DOM element.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.
+ * @example
+ *
+ * _.isElement(document.body);
+ * // => true
+ */
+ function isElement(value) {
+ return value && value.nodeType === 1 || false;
+ }
+
+ /**
+ * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
+ * length of `0` and objects with no own enumerable properties are considered
+ * "empty".
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Array|Object|string} value The value to inspect.
+ * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
+ * @example
+ *
+ * _.isEmpty([1, 2, 3]);
+ * // => false
+ *
+ * _.isEmpty({});
+ * // => true
+ *
+ * _.isEmpty('');
+ * // => true
+ */
+ function isEmpty(value) {
+ var result = true;
+ if (!value) {
+ return result;
+ }
+ var className = toString.call(value),
+ length = value.length;
+
+ if ((className == arrayClass || className == stringClass ||
+ (support.argsClass ? className == argsClass : isArguments(value))) ||
+ (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {
+ return !length;
+ }
+ forOwn(value, function() {
+ return (result = false);
+ });
+ return result;
+ }
+
+ /**
+ * Performs a deep comparison between two values to determine if they are
+ * equivalent to each other. If a callback is provided it will be executed
+ * to compare values. If the callback returns `undefined` comparisons will
+ * be handled by the method instead. The callback is bound to `thisArg` and
+ * invoked with two arguments; (a, b).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} a The value to compare.
+ * @param {*} b The other value to compare.
+ * @param {Function} [callback] The function to customize comparing values.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'name': 'fred' };
+ * var copy = { 'name': 'fred' };
+ *
+ * object == copy;
+ * // => false
+ *
+ * _.isEqual(object, copy);
+ * // => true
+ *
+ * var words = ['hello', 'goodbye'];
+ * var otherWords = ['hi', 'goodbye'];
+ *
+ * _.isEqual(words, otherWords, function(a, b) {
+ * var reGreet = /^(?:hello|hi)$/i,
+ * aGreet = _.isString(a) && reGreet.test(a),
+ * bGreet = _.isString(b) && reGreet.test(b);
+ *
+ * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
+ * });
+ * // => true
+ */
+ function isEqual(a, b, callback, thisArg) {
+ return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));
+ }
+
+ /**
+ * Checks if `value` is, or can be coerced to, a finite number.
+ *
+ * Note: This is not the same as native `isFinite` which will return true for
+ * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is finite, else `false`.
+ * @example
+ *
+ * _.isFinite(-101);
+ * // => true
+ *
+ * _.isFinite('10');
+ * // => true
+ *
+ * _.isFinite(true);
+ * // => false
+ *
+ * _.isFinite('');
+ * // => false
+ *
+ * _.isFinite(Infinity);
+ * // => false
+ */
+ function isFinite(value) {
+ return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
+ }
+
+ /**
+ * Checks if `value` is a function.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ */
+ function isFunction(value) {
+ return typeof value == 'function';
+ }
+ // fallback for older versions of Chrome and Safari
+ if (isFunction(/x/)) {
+ isFunction = function(value) {
+ return typeof value == 'function' && toString.call(value) == funcClass;
+ };
+ }
+
+ /**
+ * Checks if `value` is the language type of Object.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+ function isObject(value) {
+ // check if the value is the ECMAScript language type of Object
+ // http://es5.github.io/#x8
+ // and avoid a V8 bug
+ // http://code.google.com/p/v8/issues/detail?id=2291
+ return !!(value && objectTypes[typeof value]);
+ }
+
+ /**
+ * Checks if `value` is `NaN`.
+ *
+ * Note: This is not the same as native `isNaN` which will return `true` for
+ * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.
+ * @example
+ *
+ * _.isNaN(NaN);
+ * // => true
+ *
+ * _.isNaN(new Number(NaN));
+ * // => true
+ *
+ * isNaN(undefined);
+ * // => true
+ *
+ * _.isNaN(undefined);
+ * // => false
+ */
+ function isNaN(value) {
+ // `NaN` as a primitive is the only value that is not equal to itself
+ // (perform the [[Class]] check first to avoid errors with some host objects in IE)
+ return isNumber(value) && value != +value;
+ }
+
+ /**
+ * Checks if `value` is `null`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.
+ * @example
+ *
+ * _.isNull(null);
+ * // => true
+ *
+ * _.isNull(undefined);
+ * // => false
+ */
+ function isNull(value) {
+ return value === null;
+ }
+
+ /**
+ * Checks if `value` is a number.
+ *
+ * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a number, else `false`.
+ * @example
+ *
+ * _.isNumber(8.4 * 5);
+ * // => true
+ */
+ function isNumber(value) {
+ return typeof value == 'number' ||
+ value && typeof value == 'object' && toString.call(value) == numberClass || false;
+ }
+
+ /**
+ * Checks if `value` is an object created by the `Object` constructor.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * _.isPlainObject(new Shape);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ */
+ var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {
+ if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) {
+ return false;
+ }
+ var valueOf = value.valueOf,
+ objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);
+
+ return objProto
+ ? (value == objProto || getPrototypeOf(value) == objProto)
+ : shimIsPlainObject(value);
+ };
+
+ /**
+ * Checks if `value` is a regular expression.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
+ * @example
+ *
+ * _.isRegExp(/fred/);
+ * // => true
+ */
+ function isRegExp(value) {
+ return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false;
+ }
+
+ /**
+ * Checks if `value` is a string.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
+ * @example
+ *
+ * _.isString('fred');
+ * // => true
+ */
+ function isString(value) {
+ return typeof value == 'string' ||
+ value && typeof value == 'object' && toString.call(value) == stringClass || false;
+ }
+
+ /**
+ * Checks if `value` is `undefined`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.
+ * @example
+ *
+ * _.isUndefined(void 0);
+ * // => true
+ */
+ function isUndefined(value) {
+ return typeof value == 'undefined';
+ }
+
+ /**
+ * Creates an object with the same keys as `object` and values generated by
+ * running each own enumerable property of `object` through the callback.
+ * The callback is bound to `thisArg` and invoked with three arguments;
+ * (value, key, object).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new object with values of the results of each `callback` execution.
+ * @example
+ *
+ * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });
+ * // => { 'a': 3, 'b': 6, 'c': 9 }
+ *
+ * var characters = {
+ * 'fred': { 'name': 'fred', 'age': 40 },
+ * 'pebbles': { 'name': 'pebbles', 'age': 1 }
+ * };
+ *
+ * // using "_.pluck" callback shorthand
+ * _.mapValues(characters, 'age');
+ * // => { 'fred': 40, 'pebbles': 1 }
+ */
+ function mapValues(object, callback, thisArg) {
+ var result = {};
+ callback = lodash.createCallback(callback, thisArg, 3);
+
+ forOwn(object, function(value, key, object) {
+ result[key] = callback(value, key, object);
+ });
+ return result;
+ }
+
+ /**
+ * Recursively merges own enumerable properties of the source object(s), that
+ * don't resolve to `undefined` into the destination object. Subsequent sources
+ * will overwrite property assignments of previous sources. If a callback is
+ * provided it will be executed to produce the merged values of the destination
+ * and source properties. If the callback returns `undefined` merging will
+ * be handled by the method instead. The callback is bound to `thisArg` and
+ * invoked with two arguments; (objectValue, sourceValue).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The destination object.
+ * @param {...Object} [source] The source objects.
+ * @param {Function} [callback] The function to customize merging properties.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns the destination object.
+ * @example
+ *
+ * var names = {
+ * 'characters': [
+ * { 'name': 'barney' },
+ * { 'name': 'fred' }
+ * ]
+ * };
+ *
+ * var ages = {
+ * 'characters': [
+ * { 'age': 36 },
+ * { 'age': 40 }
+ * ]
+ * };
+ *
+ * _.merge(names, ages);
+ * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }
+ *
+ * var food = {
+ * 'fruits': ['apple'],
+ * 'vegetables': ['beet']
+ * };
+ *
+ * var otherFood = {
+ * 'fruits': ['banana'],
+ * 'vegetables': ['carrot']
+ * };
+ *
+ * _.merge(food, otherFood, function(a, b) {
+ * return _.isArray(a) ? a.concat(b) : undefined;
+ * });
+ * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }
+ */
+ function merge(object) {
+ var args = arguments,
+ length = 2;
+
+ if (!isObject(object)) {
+ return object;
+ }
+ // allows working with `_.reduce` and `_.reduceRight` without using
+ // their `index` and `collection` arguments
+ if (typeof args[2] != 'number') {
+ length = args.length;
+ }
+ if (length > 3 && typeof args[length - 2] == 'function') {
+ var callback = baseCreateCallback(args[--length - 1], args[length--], 2);
+ } else if (length > 2 && typeof args[length - 1] == 'function') {
+ callback = args[--length];
+ }
+ var sources = slice(arguments, 1, length),
+ index = -1,
+ stackA = getArray(),
+ stackB = getArray();
+
+ while (++index < length) {
+ baseMerge(object, sources[index], callback, stackA, stackB);
+ }
+ releaseArray(stackA);
+ releaseArray(stackB);
+ return object;
+ }
+
+ /**
+ * Creates a shallow clone of `object` excluding the specified properties.
+ * Property names may be specified as individual arguments or as arrays of
+ * property names. If a callback is provided it will be executed for each
+ * property of `object` omitting the properties the callback returns truey
+ * for. The callback is bound to `thisArg` and invoked with three arguments;
+ * (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The source object.
+ * @param {Function|...string|string[]} [callback] The properties to omit or the
+ * function called per iteration.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns an object without the omitted properties.
+ * @example
+ *
+ * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
+ * // => { 'name': 'fred' }
+ *
+ * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
+ * return typeof value == 'number';
+ * });
+ * // => { 'name': 'fred' }
+ */
+ function omit(object, callback, thisArg) {
+ var result = {};
+ if (typeof callback != 'function') {
+ var props = [];
+ forIn(object, function(value, key) {
+ props.push(key);
+ });
+ props = baseDifference(props, baseFlatten(arguments, true, false, 1));
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+ result[key] = object[key];
+ }
+ } else {
+ callback = lodash.createCallback(callback, thisArg, 3);
+ forIn(object, function(value, key, object) {
+ if (!callback(value, key, object)) {
+ result[key] = value;
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Creates a two dimensional array of an object's key-value pairs,
+ * i.e. `[[key1, value1], [key2, value2]]`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns new array of key-value pairs.
+ * @example
+ *
+ * _.pairs({ 'barney': 36, 'fred': 40 });
+ * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
+ */
+ function pairs(object) {
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = Array(length);
+
+ while (++index < length) {
+ var key = props[index];
+ result[index] = [key, object[key]];
+ }
+ return result;
+ }
+
+ /**
+ * Creates a shallow clone of `object` composed of the specified properties.
+ * Property names may be specified as individual arguments or as arrays of
+ * property names. If a callback is provided it will be executed for each
+ * property of `object` picking the properties the callback returns truey
+ * for. The callback is bound to `thisArg` and invoked with three arguments;
+ * (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The source object.
+ * @param {Function|...string|string[]} [callback] The function called per
+ * iteration or property names to pick, specified as individual property
+ * names or arrays of property names.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns an object composed of the picked properties.
+ * @example
+ *
+ * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
+ * // => { 'name': 'fred' }
+ *
+ * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
+ * return key.charAt(0) != '_';
+ * });
+ * // => { 'name': 'fred' }
+ */
+ function pick(object, callback, thisArg) {
+ var result = {};
+ if (typeof callback != 'function') {
+ var index = -1,
+ props = baseFlatten(arguments, true, false, 1),
+ length = isObject(object) ? props.length : 0;
+
+ while (++index < length) {
+ var key = props[index];
+ if (key in object) {
+ result[key] = object[key];
+ }
+ }
+ } else {
+ callback = lodash.createCallback(callback, thisArg, 3);
+ forIn(object, function(value, key, object) {
+ if (callback(value, key, object)) {
+ result[key] = value;
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * An alternative to `_.reduce` this method transforms `object` to a new
+ * `accumulator` object which is the result of running each of its own
+ * enumerable properties through a callback, with each callback execution
+ * potentially mutating the `accumulator` object. The callback is bound to
+ * `thisArg` and invoked with four arguments; (accumulator, value, key, object).
+ * Callbacks may exit iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Array|Object} object The object to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [accumulator] The custom accumulator value.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {
+ * num *= num;
+ * if (num % 2) {
+ * return result.push(num) < 3;
+ * }
+ * });
+ * // => [1, 9, 25]
+ *
+ * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
+ * result[key] = num * 3;
+ * });
+ * // => { 'a': 3, 'b': 6, 'c': 9 }
+ */
+ function transform(object, callback, accumulator, thisArg) {
+ var isArr = isArray(object);
+ if (accumulator == null) {
+ if (isArr) {
+ accumulator = [];
+ } else {
+ var ctor = object && object.constructor,
+ proto = ctor && ctor.prototype;
+
+ accumulator = baseCreate(proto);
+ }
+ }
+ if (callback) {
+ callback = lodash.createCallback(callback, thisArg, 4);
+ (isArr ? baseEach : forOwn)(object, function(value, index, object) {
+ return callback(accumulator, value, index, object);
+ });
+ }
+ return accumulator;
+ }
+
+ /**
+ * Creates an array composed of the own enumerable property values of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Objects
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns an array of property values.
+ * @example
+ *
+ * _.values({ 'one': 1, 'two': 2, 'three': 3 });
+ * // => [1, 2, 3] (property order is not guaranteed across environments)
+ */
+ function values(object) {
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = object[props[index]];
+ }
+ return result;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array of elements from the specified indexes, or keys, of the
+ * `collection`. Indexes may be specified as individual arguments or as arrays
+ * of indexes.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`
+ * to retrieve, specified as individual indexes or arrays of indexes.
+ * @returns {Array} Returns a new array of elements corresponding to the
+ * provided indexes.
+ * @example
+ *
+ * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
+ * // => ['a', 'c', 'e']
+ *
+ * _.at(['fred', 'barney', 'pebbles'], 0, 2);
+ * // => ['fred', 'pebbles']
+ */
+ function at(collection) {
+ var args = arguments,
+ index = -1,
+ props = baseFlatten(args, true, false, 1),
+ length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,
+ result = Array(length);
+
+ if (support.unindexedChars && isString(collection)) {
+ collection = collection.split('');
+ }
+ while(++index < length) {
+ result[index] = collection[props[index]];
+ }
+ return result;
+ }
+
+ /**
+ * Checks if a given value is present in a collection using strict equality
+ * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the
+ * offset from the end of the collection.
+ *
+ * @static
+ * @memberOf _
+ * @alias include
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {*} target The value to check for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {boolean} Returns `true` if the `target` element is found, else `false`.
+ * @example
+ *
+ * _.contains([1, 2, 3], 1);
+ * // => true
+ *
+ * _.contains([1, 2, 3], 1, 2);
+ * // => false
+ *
+ * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
+ * // => true
+ *
+ * _.contains('pebbles', 'eb');
+ * // => true
+ */
+ function contains(collection, target, fromIndex) {
+ var index = -1,
+ indexOf = getIndexOf(),
+ length = collection ? collection.length : 0,
+ result = false;
+
+ fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
+ if (isArray(collection)) {
+ result = indexOf(collection, target, fromIndex) > -1;
+ } else if (typeof length == 'number') {
+ result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;
+ } else {
+ baseEach(collection, function(value) {
+ if (++index >= fromIndex) {
+ return !(result = value === target);
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` through the callback. The corresponding value
+ * of each key is the number of times the key was returned by the callback.
+ * The callback is bound to `thisArg` and invoked with three arguments;
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
+ * // => { '4': 1, '6': 2 }
+ *
+ * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
+ * // => { '4': 1, '6': 2 }
+ *
+ * _.countBy(['one', 'two', 'three'], 'length');
+ * // => { '3': 2, '5': 1 }
+ */
+ var countBy = createAggregator(function(result, value, key) {
+ (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
+ });
+
+ /**
+ * Checks if the given callback returns truey value for **all** elements of
+ * a collection. The callback is bound to `thisArg` and invoked with three
+ * arguments; (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias all
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {boolean} Returns `true` if all elements passed the callback check,
+ * else `false`.
+ * @example
+ *
+ * _.every([true, 1, null, 'yes']);
+ * // => false
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.every(characters, 'age');
+ * // => true
+ *
+ * // using "_.where" callback shorthand
+ * _.every(characters, { 'age': 36 });
+ * // => false
+ */
+ function every(collection, callback, thisArg) {
+ var result = true;
+ callback = lodash.createCallback(callback, thisArg, 3);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ if (!(result = !!callback(collection[index], index, collection))) {
+ break;
+ }
+ }
+ } else {
+ baseEach(collection, function(value, index, collection) {
+ return (result = !!callback(value, index, collection));
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Iterates over elements of a collection, returning an array of all elements
+ * the callback returns truey for. The callback is bound to `thisArg` and
+ * invoked with three arguments; (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias select
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of elements that passed the callback check.
+ * @example
+ *
+ * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
+ * // => [2, 4, 6]
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.filter(characters, 'blocked');
+ * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
+ *
+ * // using "_.where" callback shorthand
+ * _.filter(characters, { 'age': 36 });
+ * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
+ */
+ function filter(collection, callback, thisArg) {
+ var result = [];
+ callback = lodash.createCallback(callback, thisArg, 3);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ if (callback(value, index, collection)) {
+ result.push(value);
+ }
+ }
+ } else {
+ baseEach(collection, function(value, index, collection) {
+ if (callback(value, index, collection)) {
+ result.push(value);
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Iterates over elements of a collection, returning the first element that
+ * the callback returns truey for. The callback is bound to `thisArg` and
+ * invoked with three arguments; (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias detect, findWhere
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the found element, else `undefined`.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
+ * { 'name': 'fred', 'age': 40, 'blocked': true },
+ * { 'name': 'pebbles', 'age': 1, 'blocked': false }
+ * ];
+ *
+ * _.find(characters, function(chr) {
+ * return chr.age < 40;
+ * });
+ * // => { 'name': 'barney', 'age': 36, 'blocked': false }
+ *
+ * // using "_.where" callback shorthand
+ * _.find(characters, { 'age': 1 });
+ * // => { 'name': 'pebbles', 'age': 1, 'blocked': false }
+ *
+ * // using "_.pluck" callback shorthand
+ * _.find(characters, 'blocked');
+ * // => { 'name': 'fred', 'age': 40, 'blocked': true }
+ */
+ function find(collection, callback, thisArg) {
+ callback = lodash.createCallback(callback, thisArg, 3);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ if (callback(value, index, collection)) {
+ return value;
+ }
+ }
+ } else {
+ var result;
+ baseEach(collection, function(value, index, collection) {
+ if (callback(value, index, collection)) {
+ result = value;
+ return false;
+ }
+ });
+ return result;
+ }
+ }
+
+ /**
+ * This method is like `_.find` except that it iterates over elements
+ * of a `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the found element, else `undefined`.
+ * @example
+ *
+ * _.findLast([1, 2, 3, 4], function(num) {
+ * return num % 2 == 1;
+ * });
+ * // => 3
+ */
+ function findLast(collection, callback, thisArg) {
+ var result;
+ callback = lodash.createCallback(callback, thisArg, 3);
+ forEachRight(collection, function(value, index, collection) {
+ if (callback(value, index, collection)) {
+ result = value;
+ return false;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * Iterates over elements of a collection, executing the callback for each
+ * element. The callback is bound to `thisArg` and invoked with three arguments;
+ * (value, index|key, collection). Callbacks may exit iteration early by
+ * explicitly returning `false`.
+ *
+ * Note: As with other "Collections" methods, objects with a `length` property
+ * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
+ * may be used for object iteration.
+ *
+ * @static
+ * @memberOf _
+ * @alias each
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array|Object|string} Returns `collection`.
+ * @example
+ *
+ * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');
+ * // => logs each number and returns '1,2,3'
+ *
+ * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
+ * // => logs each number and returns the object (property order is not guaranteed across environments)
+ */
+ function forEach(collection, callback, thisArg) {
+ if (callback && typeof thisArg == 'undefined' && isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ if (callback(collection[index], index, collection) === false) {
+ break;
+ }
+ }
+ } else {
+ baseEach(collection, callback, thisArg);
+ }
+ return collection;
+ }
+
+ /**
+ * This method is like `_.forEach` except that it iterates over elements
+ * of a `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias eachRight
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array|Object|string} Returns `collection`.
+ * @example
+ *
+ * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');
+ * // => logs each number from right to left and returns '3,2,1'
+ */
+ function forEachRight(collection, callback, thisArg) {
+ var iterable = collection,
+ length = collection ? collection.length : 0;
+
+ callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
+ if (isArray(collection)) {
+ while (length--) {
+ if (callback(collection[length], length, collection) === false) {
+ break;
+ }
+ }
+ } else {
+ if (typeof length != 'number') {
+ var props = keys(collection);
+ length = props.length;
+ } else if (support.unindexedChars && isString(collection)) {
+ iterable = collection.split('');
+ }
+ baseEach(collection, function(value, key, collection) {
+ key = props ? props[--length] : --length;
+ return callback(iterable[key], key, collection);
+ });
+ }
+ return collection;
+ }
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of a collection through the callback. The corresponding value
+ * of each key is an array of the elements responsible for generating the key.
+ * The callback is bound to `thisArg` and invoked with three arguments;
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
+ * // => { '4': [4.2], '6': [6.1, 6.4] }
+ *
+ * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
+ * // => { '4': [4.2], '6': [6.1, 6.4] }
+ *
+ * // using "_.pluck" callback shorthand
+ * _.groupBy(['one', 'two', 'three'], 'length');
+ * // => { '3': ['one', 'two'], '5': ['three'] }
+ */
+ var groupBy = createAggregator(function(result, value, key) {
+ (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
+ });
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of the collection through the given callback. The corresponding
+ * value of each key is the last element responsible for generating the key.
+ * The callback is bound to `thisArg` and invoked with three arguments;
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * var keys = [
+ * { 'dir': 'left', 'code': 97 },
+ * { 'dir': 'right', 'code': 100 }
+ * ];
+ *
+ * _.indexBy(keys, 'dir');
+ * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
+ * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
+ * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ */
+ var indexBy = createAggregator(function(result, value, key) {
+ result[key] = value;
+ });
+
+ /**
+ * Invokes the method named by `methodName` on each element in the `collection`
+ * returning an array of the results of each invoked method. Additional arguments
+ * will be provided to each invoked method. If `methodName` is a function it
+ * will be invoked for, and `this` bound to, each element in the `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|string} methodName The name of the method to invoke or
+ * the function invoked per iteration.
+ * @param {...*} [arg] Arguments to invoke the method with.
+ * @returns {Array} Returns a new array of the results of each invoked method.
+ * @example
+ *
+ * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
+ * // => [[1, 5, 7], [1, 2, 3]]
+ *
+ * _.invoke([123, 456], String.prototype.split, '');
+ * // => [['1', '2', '3'], ['4', '5', '6']]
+ */
+ function invoke(collection, methodName) {
+ var args = slice(arguments, 2),
+ index = -1,
+ isFunc = typeof methodName == 'function',
+ length = collection ? collection.length : 0,
+ result = Array(typeof length == 'number' ? length : 0);
+
+ forEach(collection, function(value) {
+ result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
+ });
+ return result;
+ }
+
+ /**
+ * Creates an array of values by running each element in the collection
+ * through the callback. The callback is bound to `thisArg` and invoked with
+ * three arguments; (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias collect
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of the results of each `callback` execution.
+ * @example
+ *
+ * _.map([1, 2, 3], function(num) { return num * 3; });
+ * // => [3, 6, 9]
+ *
+ * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
+ * // => [3, 6, 9] (property order is not guaranteed across environments)
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.map(characters, 'name');
+ * // => ['barney', 'fred']
+ */
+ function map(collection, callback, thisArg) {
+ var index = -1,
+ length = collection ? collection.length : 0,
+ result = Array(typeof length == 'number' ? length : 0);
+
+ callback = lodash.createCallback(callback, thisArg, 3);
+ if (isArray(collection)) {
+ while (++index < length) {
+ result[index] = callback(collection[index], index, collection);
+ }
+ } else {
+ baseEach(collection, function(value, key, collection) {
+ result[++index] = callback(value, key, collection);
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Retrieves the maximum value of a collection. If the collection is empty or
+ * falsey `-Infinity` is returned. If a callback is provided it will be executed
+ * for each value in the collection to generate the criterion by which the value
+ * is ranked. The callback is bound to `thisArg` and invoked with three
+ * arguments; (value, index, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the maximum value.
+ * @example
+ *
+ * _.max([4, 2, 8, 6]);
+ * // => 8
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.max(characters, function(chr) { return chr.age; });
+ * // => { 'name': 'fred', 'age': 40 };
+ *
+ * // using "_.pluck" callback shorthand
+ * _.max(characters, 'age');
+ * // => { 'name': 'fred', 'age': 40 };
+ */
+ function max(collection, callback, thisArg) {
+ var computed = -Infinity,
+ result = computed;
+
+ // allows working with functions like `_.map` without using
+ // their `index` argument as a callback
+ if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
+ callback = null;
+ }
+ if (callback == null && isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ if (value > result) {
+ result = value;
+ }
+ }
+ } else {
+ callback = (callback == null && isString(collection))
+ ? charAtCallback
+ : lodash.createCallback(callback, thisArg, 3);
+
+ baseEach(collection, function(value, index, collection) {
+ var current = callback(value, index, collection);
+ if (current > computed) {
+ computed = current;
+ result = value;
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Retrieves the minimum value of a collection. If the collection is empty or
+ * falsey `Infinity` is returned. If a callback is provided it will be executed
+ * for each value in the collection to generate the criterion by which the value
+ * is ranked. The callback is bound to `thisArg` and invoked with three
+ * arguments; (value, index, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the minimum value.
+ * @example
+ *
+ * _.min([4, 2, 8, 6]);
+ * // => 2
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.min(characters, function(chr) { return chr.age; });
+ * // => { 'name': 'barney', 'age': 36 };
+ *
+ * // using "_.pluck" callback shorthand
+ * _.min(characters, 'age');
+ * // => { 'name': 'barney', 'age': 36 };
+ */
+ function min(collection, callback, thisArg) {
+ var computed = Infinity,
+ result = computed;
+
+ // allows working with functions like `_.map` without using
+ // their `index` argument as a callback
+ if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
+ callback = null;
+ }
+ if (callback == null && isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ if (value < result) {
+ result = value;
+ }
+ }
+ } else {
+ callback = (callback == null && isString(collection))
+ ? charAtCallback
+ : lodash.createCallback(callback, thisArg, 3);
+
+ baseEach(collection, function(value, index, collection) {
+ var current = callback(value, index, collection);
+ if (current < computed) {
+ computed = current;
+ result = value;
+ }
+ });
+ }
+ return result;
+ }
+
+ /**
+ * Retrieves the value of a specified property from all elements in the collection.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {string} property The name of the property to pluck.
+ * @returns {Array} Returns a new array of property values.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.pluck(characters, 'name');
+ * // => ['barney', 'fred']
+ */
+ var pluck = map;
+
+ /**
+ * Reduces a collection to a value which is the accumulated result of running
+ * each element in the collection through the callback, where each successive
+ * callback execution consumes the return value of the previous execution. If
+ * `accumulator` is not provided the first element of the collection will be
+ * used as the initial `accumulator` value. The callback is bound to `thisArg`
+ * and invoked with four arguments; (accumulator, value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @alias foldl, inject
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [accumulator] Initial value of the accumulator.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * var sum = _.reduce([1, 2, 3], function(sum, num) {
+ * return sum + num;
+ * });
+ * // => 6
+ *
+ * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
+ * result[key] = num * 3;
+ * return result;
+ * }, {});
+ * // => { 'a': 3, 'b': 6, 'c': 9 }
+ */
+ function reduce(collection, callback, accumulator, thisArg) {
+ var noaccum = arguments.length < 3;
+ callback = lodash.createCallback(callback, thisArg, 4);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ if (noaccum) {
+ accumulator = collection[++index];
+ }
+ while (++index < length) {
+ accumulator = callback(accumulator, collection[index], index, collection);
+ }
+ } else {
+ baseEach(collection, function(value, index, collection) {
+ accumulator = noaccum
+ ? (noaccum = false, value)
+ : callback(accumulator, value, index, collection)
+ });
+ }
+ return accumulator;
+ }
+
+ /**
+ * This method is like `_.reduce` except that it iterates over elements
+ * of a `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias foldr
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [callback=identity] The function called per iteration.
+ * @param {*} [accumulator] Initial value of the accumulator.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * var list = [[0, 1], [2, 3], [4, 5]];
+ * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
+ * // => [4, 5, 2, 3, 0, 1]
+ */
+ function reduceRight(collection, callback, accumulator, thisArg) {
+ var noaccum = arguments.length < 3;
+ callback = lodash.createCallback(callback, thisArg, 4);
+ forEachRight(collection, function(value, index, collection) {
+ accumulator = noaccum
+ ? (noaccum = false, value)
+ : callback(accumulator, value, index, collection);
+ });
+ return accumulator;
+ }
+
+ /**
+ * The opposite of `_.filter` this method returns the elements of a
+ * collection that the callback does **not** return truey for.
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of elements that failed the callback check.
+ * @example
+ *
+ * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
+ * // => [1, 3, 5]
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.reject(characters, 'blocked');
+ * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
+ *
+ * // using "_.where" callback shorthand
+ * _.reject(characters, { 'age': 36 });
+ * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
+ */
+ function reject(collection, callback, thisArg) {
+ callback = lodash.createCallback(callback, thisArg, 3);
+ return filter(collection, function(value, index, collection) {
+ return !callback(value, index, collection);
+ });
+ }
+
+ /**
+ * Retrieves a random element or `n` random elements from a collection.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to sample.
+ * @param {number} [n] The number of elements to sample.
+ * @param- {Object} [guard] Allows working with functions like `_.map`
+ * without using their `index` arguments as `n`.
+ * @returns {Array} Returns the random sample(s) of `collection`.
+ * @example
+ *
+ * _.sample([1, 2, 3, 4]);
+ * // => 2
+ *
+ * _.sample([1, 2, 3, 4], 2);
+ * // => [3, 1]
+ */
+ function sample(collection, n, guard) {
+ if (collection && typeof collection.length != 'number') {
+ collection = values(collection);
+ } else if (support.unindexedChars && isString(collection)) {
+ collection = collection.split('');
+ }
+ if (n == null || guard) {
+ return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
+ }
+ var result = shuffle(collection);
+ result.length = nativeMin(nativeMax(0, n), result.length);
+ return result;
+ }
+
+ /**
+ * Creates an array of shuffled values, using a version of the Fisher-Yates
+ * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to shuffle.
+ * @returns {Array} Returns a new shuffled collection.
+ * @example
+ *
+ * _.shuffle([1, 2, 3, 4, 5, 6]);
+ * // => [4, 1, 6, 3, 5, 2]
+ */
+ function shuffle(collection) {
+ var index = -1,
+ length = collection ? collection.length : 0,
+ result = Array(typeof length == 'number' ? length : 0);
+
+ forEach(collection, function(value) {
+ var rand = baseRandom(0, ++index);
+ result[index] = result[rand];
+ result[rand] = value;
+ });
+ return result;
+ }
+
+ /**
+ * Gets the size of the `collection` by returning `collection.length` for arrays
+ * and array-like objects or the number of own enumerable properties for objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @returns {number} Returns `collection.length` or number of own enumerable properties.
+ * @example
+ *
+ * _.size([1, 2]);
+ * // => 2
+ *
+ * _.size({ 'one': 1, 'two': 2, 'three': 3 });
+ * // => 3
+ *
+ * _.size('pebbles');
+ * // => 7
+ */
+ function size(collection) {
+ var length = collection ? collection.length : 0;
+ return typeof length == 'number' ? length : keys(collection).length;
+ }
+
+ /**
+ * Checks if the callback returns a truey value for **any** element of a
+ * collection. The function returns as soon as it finds a passing value and
+ * does not iterate over the entire collection. The callback is bound to
+ * `thisArg` and invoked with three arguments; (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias any
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {boolean} Returns `true` if any element passed the callback check,
+ * else `false`.
+ * @example
+ *
+ * _.some([null, 0, 'yes', false], Boolean);
+ * // => true
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.some(characters, 'blocked');
+ * // => true
+ *
+ * // using "_.where" callback shorthand
+ * _.some(characters, { 'age': 1 });
+ * // => false
+ */
+ function some(collection, callback, thisArg) {
+ var result;
+ callback = lodash.createCallback(callback, thisArg, 3);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ if ((result = callback(collection[index], index, collection))) {
+ break;
+ }
+ }
+ } else {
+ baseEach(collection, function(value, index, collection) {
+ return !(result = callback(value, index, collection));
+ });
+ }
+ return !!result;
+ }
+
+ /**
+ * Creates an array of elements, sorted in ascending order by the results of
+ * running each element in a collection through the callback. This method
+ * performs a stable sort, that is, it will preserve the original sort order
+ * of equal elements. The callback is bound to `thisArg` and invoked with
+ * three arguments; (value, index|key, collection).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an array of property names is provided for `callback` the collection
+ * will be sorted by each property value.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Array|Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of sorted elements.
+ * @example
+ *
+ * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
+ * // => [3, 1, 2]
+ *
+ * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
+ * // => [3, 1, 2]
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 },
+ * { 'name': 'barney', 'age': 26 },
+ * { 'name': 'fred', 'age': 30 }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.map(_.sortBy(characters, 'age'), _.values);
+ * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]
+ *
+ * // sorting by multiple properties
+ * _.map(_.sortBy(characters, ['name', 'age']), _.values);
+ * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
+ */
+ function sortBy(collection, callback, thisArg) {
+ var index = -1,
+ isArr = isArray(callback),
+ length = collection ? collection.length : 0,
+ result = Array(typeof length == 'number' ? length : 0);
+
+ if (!isArr) {
+ callback = lodash.createCallback(callback, thisArg, 3);
+ }
+ forEach(collection, function(value, key, collection) {
+ var object = result[++index] = getObject();
+ if (isArr) {
+ object.criteria = map(callback, function(key) { return value[key]; });
+ } else {
+ (object.criteria = getArray())[0] = callback(value, key, collection);
+ }
+ object.index = index;
+ object.value = value;
+ });
+
+ length = result.length;
+ result.sort(compareAscending);
+ while (length--) {
+ var object = result[length];
+ result[length] = object.value;
+ if (!isArr) {
+ releaseArray(object.criteria);
+ }
+ releaseObject(object);
+ }
+ return result;
+ }
+
+ /**
+ * Converts the `collection` to an array.
+ *
+ * @static
+ * @memberOf _
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to convert.
+ * @returns {Array} Returns the new converted array.
+ * @example
+ *
+ * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
+ * // => [2, 3, 4]
+ */
+ function toArray(collection) {
+ if (collection && typeof collection.length == 'number') {
+ return (support.unindexedChars && isString(collection))
+ ? collection.split('')
+ : slice(collection);
+ }
+ return values(collection);
+ }
+
+ /**
+ * Performs a deep comparison of each element in a `collection` to the given
+ * `properties` object, returning an array of all elements that have equivalent
+ * property values.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Collections
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Object} props The object of property values to filter by.
+ * @returns {Array} Returns a new array of elements that have the given properties.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
+ * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
+ * ];
+ *
+ * _.where(characters, { 'age': 36 });
+ * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
+ *
+ * _.where(characters, { 'pets': ['dino'] });
+ * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
+ */
+ var where = filter;
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array with all falsey values removed. The values `false`, `null`,
+ * `0`, `""`, `undefined`, and `NaN` are all falsey.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to compact.
+ * @returns {Array} Returns a new array of filtered values.
+ * @example
+ *
+ * _.compact([0, 1, false, 2, '', 3]);
+ * // => [1, 2, 3]
+ */
+ function compact(array) {
+ var index = -1,
+ length = array ? array.length : 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (value) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array excluding all values of the provided arrays using strict
+ * equality for comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to process.
+ * @param {...Array} [values] The arrays of values to exclude.
+ * @returns {Array} Returns a new array of filtered values.
+ * @example
+ *
+ * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
+ * // => [1, 3, 4]
+ */
+ function difference(array) {
+ return baseDifference(array, baseFlatten(arguments, true, true, 1));
+ }
+
+ /**
+ * This method is like `_.find` except that it returns the index of the first
+ * element that passes the callback check, instead of the element itself.
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to search.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
+ * { 'name': 'fred', 'age': 40, 'blocked': true },
+ * { 'name': 'pebbles', 'age': 1, 'blocked': false }
+ * ];
+ *
+ * _.findIndex(characters, function(chr) {
+ * return chr.age < 20;
+ * });
+ * // => 2
+ *
+ * // using "_.where" callback shorthand
+ * _.findIndex(characters, { 'age': 36 });
+ * // => 0
+ *
+ * // using "_.pluck" callback shorthand
+ * _.findIndex(characters, 'blocked');
+ * // => 1
+ */
+ function findIndex(array, callback, thisArg) {
+ var index = -1,
+ length = array ? array.length : 0;
+
+ callback = lodash.createCallback(callback, thisArg, 3);
+ while (++index < length) {
+ if (callback(array[index], index, array)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * This method is like `_.findIndex` except that it iterates over elements
+ * of a `collection` from right to left.
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to search.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36, 'blocked': true },
+ * { 'name': 'fred', 'age': 40, 'blocked': false },
+ * { 'name': 'pebbles', 'age': 1, 'blocked': true }
+ * ];
+ *
+ * _.findLastIndex(characters, function(chr) {
+ * return chr.age > 30;
+ * });
+ * // => 1
+ *
+ * // using "_.where" callback shorthand
+ * _.findLastIndex(characters, { 'age': 36 });
+ * // => 0
+ *
+ * // using "_.pluck" callback shorthand
+ * _.findLastIndex(characters, 'blocked');
+ * // => 2
+ */
+ function findLastIndex(array, callback, thisArg) {
+ var length = array ? array.length : 0;
+ callback = lodash.createCallback(callback, thisArg, 3);
+ while (length--) {
+ if (callback(array[length], length, array)) {
+ return length;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Gets the first element or first `n` elements of an array. If a callback
+ * is provided elements at the beginning of the array are returned as long
+ * as the callback returns truey. The callback is bound to `thisArg` and
+ * invoked with three arguments; (value, index, array).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias head, take
+ * @category Arrays
+ * @param {Array} array The array to query.
+ * @param {Function|Object|number|string} [callback] The function called
+ * per element or the number of elements to return. If a property name or
+ * object is provided it will be used to create a "_.pluck" or "_.where"
+ * style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the first element(s) of `array`.
+ * @example
+ *
+ * _.first([1, 2, 3]);
+ * // => 1
+ *
+ * _.first([1, 2, 3], 2);
+ * // => [1, 2]
+ *
+ * _.first([1, 2, 3], function(num) {
+ * return num < 3;
+ * });
+ * // => [1, 2]
+ *
+ * var characters = [
+ * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
+ * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.first(characters, 'blocked');
+ * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
+ *
+ * // using "_.where" callback shorthand
+ * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
+ * // => ['barney', 'fred']
+ */
+ function first(array, callback, thisArg) {
+ var n = 0,
+ length = array ? array.length : 0;
+
+ if (typeof callback != 'number' && callback != null) {
+ var index = -1;
+ callback = lodash.createCallback(callback, thisArg, 3);
+ while (++index < length && callback(array[index], index, array)) {
+ n++;
+ }
+ } else {
+ n = callback;
+ if (n == null || thisArg) {
+ return array ? array[0] : undefined;
+ }
+ }
+ return slice(array, 0, nativeMin(nativeMax(0, n), length));
+ }
+
+ /**
+ * Flattens a nested array (the nesting can be to any depth). If `isShallow`
+ * is truey, the array will only be flattened a single level. If a callback
+ * is provided each element of the array is passed through the callback before
+ * flattening. The callback is bound to `thisArg` and invoked with three
+ * arguments; (value, index, array).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to flatten.
+ * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new flattened array.
+ * @example
+ *
+ * _.flatten([1, [2], [3, [[4]]]]);
+ * // => [1, 2, 3, 4];
+ *
+ * _.flatten([1, [2], [3, [[4]]]], true);
+ * // => [1, 2, 3, [[4]]];
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
+ * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.flatten(characters, 'pets');
+ * // => ['hoppy', 'baby puss', 'dino']
+ */
+ function flatten(array, isShallow, callback, thisArg) {
+ // juggle arguments
+ if (typeof isShallow != 'boolean' && isShallow != null) {
+ thisArg = callback;
+ callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;
+ isShallow = false;
+ }
+ if (callback != null) {
+ array = map(array, callback, thisArg);
+ }
+ return baseFlatten(array, isShallow);
+ }
+
+ /**
+ * Gets the index at which the first occurrence of `value` is found using
+ * strict equality for comparisons, i.e. `===`. If the array is already sorted
+ * providing `true` for `fromIndex` will run a faster binary search.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {boolean|number} [fromIndex=0] The index to search from or `true`
+ * to perform a binary search on a sorted array.
+ * @returns {number} Returns the index of the matched value or `-1`.
+ * @example
+ *
+ * _.indexOf([1, 2, 3, 1, 2, 3], 2);
+ * // => 1
+ *
+ * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
+ * // => 4
+ *
+ * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
+ * // => 2
+ */
+ function indexOf(array, value, fromIndex) {
+ if (typeof fromIndex == 'number') {
+ var length = array ? array.length : 0;
+ fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
+ } else if (fromIndex) {
+ var index = sortedIndex(array, value);
+ return array[index] === value ? index : -1;
+ }
+ return baseIndexOf(array, value, fromIndex);
+ }
+
+ /**
+ * Gets all but the last element or last `n` elements of an array. If a
+ * callback is provided elements at the end of the array are excluded from
+ * the result as long as the callback returns truey. The callback is bound
+ * to `thisArg` and invoked with three arguments; (value, index, array).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to query.
+ * @param {Function|Object|number|string} [callback=1] The function called
+ * per element or the number of elements to exclude. If a property name or
+ * object is provided it will be used to create a "_.pluck" or "_.where"
+ * style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a slice of `array`.
+ * @example
+ *
+ * _.initial([1, 2, 3]);
+ * // => [1, 2]
+ *
+ * _.initial([1, 2, 3], 2);
+ * // => [1]
+ *
+ * _.initial([1, 2, 3], function(num) {
+ * return num > 1;
+ * });
+ * // => [1]
+ *
+ * var characters = [
+ * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
+ * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.initial(characters, 'blocked');
+ * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }]
+ *
+ * // using "_.where" callback shorthand
+ * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
+ * // => ['barney', 'fred']
+ */
+ function initial(array, callback, thisArg) {
+ var n = 0,
+ length = array ? array.length : 0;
+
+ if (typeof callback != 'number' && callback != null) {
+ var index = length;
+ callback = lodash.createCallback(callback, thisArg, 3);
+ while (index-- && callback(array[index], index, array)) {
+ n++;
+ }
+ } else {
+ n = (callback == null || thisArg) ? 1 : callback || n;
+ }
+ return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
+ }
+
+ /**
+ * Creates an array of unique values present in all provided arrays using
+ * strict equality for comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {...Array} [array] The arrays to inspect.
+ * @returns {Array} Returns an array of shared values.
+ * @example
+ *
+ * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
+ * // => [1, 2]
+ */
+ function intersection() {
+ var args = [],
+ argsIndex = -1,
+ argsLength = arguments.length,
+ caches = getArray(),
+ indexOf = getIndexOf(),
+ trustIndexOf = indexOf === baseIndexOf,
+ seen = getArray();
+
+ while (++argsIndex < argsLength) {
+ var value = arguments[argsIndex];
+ if (isArray(value) || isArguments(value)) {
+ args.push(value);
+ caches.push(trustIndexOf && value.length >= largeArraySize &&
+ createCache(argsIndex ? args[argsIndex] : seen));
+ }
+ }
+ var array = args[0],
+ index = -1,
+ length = array ? array.length : 0,
+ result = [];
+
+ outer:
+ while (++index < length) {
+ var cache = caches[0];
+ value = array[index];
+
+ if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {
+ argsIndex = argsLength;
+ (cache || seen).push(value);
+ while (--argsIndex) {
+ cache = caches[argsIndex];
+ if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {
+ continue outer;
+ }
+ }
+ result.push(value);
+ }
+ }
+ while (argsLength--) {
+ cache = caches[argsLength];
+ if (cache) {
+ releaseObject(cache);
+ }
+ }
+ releaseArray(caches);
+ releaseArray(seen);
+ return result;
+ }
+
+ /**
+ * Gets the last element or last `n` elements of an array. If a callback is
+ * provided elements at the end of the array are returned as long as the
+ * callback returns truey. The callback is bound to `thisArg` and invoked
+ * with three arguments; (value, index, array).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to query.
+ * @param {Function|Object|number|string} [callback] The function called
+ * per element or the number of elements to return. If a property name or
+ * object is provided it will be used to create a "_.pluck" or "_.where"
+ * style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {*} Returns the last element(s) of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ *
+ * _.last([1, 2, 3], 2);
+ * // => [2, 3]
+ *
+ * _.last([1, 2, 3], function(num) {
+ * return num > 1;
+ * });
+ * // => [2, 3]
+ *
+ * var characters = [
+ * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
+ * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.pluck(_.last(characters, 'blocked'), 'name');
+ * // => ['fred', 'pebbles']
+ *
+ * // using "_.where" callback shorthand
+ * _.last(characters, { 'employer': 'na' });
+ * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
+ */
+ function last(array, callback, thisArg) {
+ var n = 0,
+ length = array ? array.length : 0;
+
+ if (typeof callback != 'number' && callback != null) {
+ var index = length;
+ callback = lodash.createCallback(callback, thisArg, 3);
+ while (index-- && callback(array[index], index, array)) {
+ n++;
+ }
+ } else {
+ n = callback;
+ if (n == null || thisArg) {
+ return array ? array[length - 1] : undefined;
+ }
+ }
+ return slice(array, nativeMax(0, length - n));
+ }
+
+ /**
+ * Gets the index at which the last occurrence of `value` is found using strict
+ * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
+ * as the offset from the end of the collection.
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=array.length-1] The index to search from.
+ * @returns {number} Returns the index of the matched value or `-1`.
+ * @example
+ *
+ * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
+ * // => 4
+ *
+ * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
+ * // => 1
+ */
+ function lastIndexOf(array, value, fromIndex) {
+ var index = array ? array.length : 0;
+ if (typeof fromIndex == 'number') {
+ index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
+ }
+ while (index--) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Removes all provided values from the given array using strict equality for
+ * comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to modify.
+ * @param {...*} [value] The values to remove.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3, 1, 2, 3];
+ * _.pull(array, 2, 3);
+ * console.log(array);
+ * // => [1, 1]
+ */
+ function pull(array) {
+ var args = arguments,
+ argsIndex = 0,
+ argsLength = args.length,
+ length = array ? array.length : 0;
+
+ while (++argsIndex < argsLength) {
+ var index = -1,
+ value = args[argsIndex];
+ while (++index < length) {
+ if (array[index] === value) {
+ splice.call(array, index--, 1);
+ length--;
+ }
+ }
+ }
+ return array;
+ }
+
+ /**
+ * Creates an array of numbers (positive and/or negative) progressing from
+ * `start` up to but not including `end`. If `start` is less than `stop` a
+ * zero-length range is created unless a negative `step` is specified.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {number} [start=0] The start of the range.
+ * @param {number} end The end of the range.
+ * @param {number} [step=1] The value to increment or decrement by.
+ * @returns {Array} Returns a new range array.
+ * @example
+ *
+ * _.range(4);
+ * // => [0, 1, 2, 3]
+ *
+ * _.range(1, 5);
+ * // => [1, 2, 3, 4]
+ *
+ * _.range(0, 20, 5);
+ * // => [0, 5, 10, 15]
+ *
+ * _.range(0, -4, -1);
+ * // => [0, -1, -2, -3]
+ *
+ * _.range(1, 4, 0);
+ * // => [1, 1, 1]
+ *
+ * _.range(0);
+ * // => []
+ */
+ function range(start, end, step) {
+ start = +start || 0;
+ step = typeof step == 'number' ? step : (+step || 1);
+
+ if (end == null) {
+ end = start;
+ start = 0;
+ }
+ // use `Array(length)` so engines like Chakra and V8 avoid slower modes
+ // http://youtu.be/XAqIpGU8ZZk#t=17m25s
+ var index = -1,
+ length = nativeMax(0, ceil((end - start) / (step || 1))),
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = start;
+ start += step;
+ }
+ return result;
+ }
+
+ /**
+ * Removes all elements from an array that the callback returns truey for
+ * and returns an array of removed elements. The callback is bound to `thisArg`
+ * and invoked with three arguments; (value, index, array).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to modify.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a new array of removed elements.
+ * @example
+ *
+ * var array = [1, 2, 3, 4, 5, 6];
+ * var evens = _.remove(array, function(num) { return num % 2 == 0; });
+ *
+ * console.log(array);
+ * // => [1, 3, 5]
+ *
+ * console.log(evens);
+ * // => [2, 4, 6]
+ */
+ function remove(array, callback, thisArg) {
+ var index = -1,
+ length = array ? array.length : 0,
+ result = [];
+
+ callback = lodash.createCallback(callback, thisArg, 3);
+ while (++index < length) {
+ var value = array[index];
+ if (callback(value, index, array)) {
+ result.push(value);
+ splice.call(array, index--, 1);
+ length--;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The opposite of `_.initial` this method gets all but the first element or
+ * first `n` elements of an array. If a callback function is provided elements
+ * at the beginning of the array are excluded from the result as long as the
+ * callback returns truey. The callback is bound to `thisArg` and invoked
+ * with three arguments; (value, index, array).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias drop, tail
+ * @category Arrays
+ * @param {Array} array The array to query.
+ * @param {Function|Object|number|string} [callback=1] The function called
+ * per element or the number of elements to exclude. If a property name or
+ * object is provided it will be used to create a "_.pluck" or "_.where"
+ * style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a slice of `array`.
+ * @example
+ *
+ * _.rest([1, 2, 3]);
+ * // => [2, 3]
+ *
+ * _.rest([1, 2, 3], 2);
+ * // => [3]
+ *
+ * _.rest([1, 2, 3], function(num) {
+ * return num < 3;
+ * });
+ * // => [3]
+ *
+ * var characters = [
+ * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
+ * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
+ * ];
+ *
+ * // using "_.pluck" callback shorthand
+ * _.pluck(_.rest(characters, 'blocked'), 'name');
+ * // => ['fred', 'pebbles']
+ *
+ * // using "_.where" callback shorthand
+ * _.rest(characters, { 'employer': 'slate' });
+ * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
+ */
+ function rest(array, callback, thisArg) {
+ if (typeof callback != 'number' && callback != null) {
+ var n = 0,
+ index = -1,
+ length = array ? array.length : 0;
+
+ callback = lodash.createCallback(callback, thisArg, 3);
+ while (++index < length && callback(array[index], index, array)) {
+ n++;
+ }
+ } else {
+ n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
+ }
+ return slice(array, n);
+ }
+
+ /**
+ * Uses a binary search to determine the smallest index at which a value
+ * should be inserted into a given sorted array in order to maintain the sort
+ * order of the array. If a callback is provided it will be executed for
+ * `value` and each element of `array` to compute their sort ranking. The
+ * callback is bound to `thisArg` and invoked with one argument; (value).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedIndex([20, 30, 50], 40);
+ * // => 2
+ *
+ * // using "_.pluck" callback shorthand
+ * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
+ * // => 2
+ *
+ * var dict = {
+ * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
+ * };
+ *
+ * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
+ * return dict.wordToNumber[word];
+ * });
+ * // => 2
+ *
+ * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
+ * return this.wordToNumber[word];
+ * }, dict);
+ * // => 2
+ */
+ function sortedIndex(array, value, callback, thisArg) {
+ var low = 0,
+ high = array ? array.length : low;
+
+ // explicitly reference `identity` for better inlining in Firefox
+ callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity;
+ value = callback(value);
+
+ while (low < high) {
+ var mid = (low + high) >>> 1;
+ (callback(array[mid]) < value)
+ ? low = mid + 1
+ : high = mid;
+ }
+ return low;
+ }
+
+ /**
+ * Creates an array of unique values, in order, of the provided arrays using
+ * strict equality for comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {...Array} [array] The arrays to inspect.
+ * @returns {Array} Returns an array of combined values.
+ * @example
+ *
+ * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);
+ * // => [1, 2, 3, 5, 4]
+ */
+ function union() {
+ return baseUniq(baseFlatten(arguments, true, true));
+ }
+
+ /**
+ * Creates a duplicate-value-free version of an array using strict equality
+ * for comparisons, i.e. `===`. If the array is sorted, providing
+ * `true` for `isSorted` will use a faster algorithm. If a callback is provided
+ * each element of `array` is passed through the callback before uniqueness
+ * is computed. The callback is bound to `thisArg` and invoked with three
+ * arguments; (value, index, array).
+ *
+ * If a property name is provided for `callback` the created "_.pluck" style
+ * callback will return the property value of the given element.
+ *
+ * If an object is provided for `callback` the created "_.where" style callback
+ * will return `true` for elements that have the properties of the given object,
+ * else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias unique
+ * @category Arrays
+ * @param {Array} array The array to process.
+ * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
+ * @param {Function|Object|string} [callback=identity] The function called
+ * per iteration. If a property name or object is provided it will be used
+ * to create a "_.pluck" or "_.where" style callback, respectively.
+ * @param {*} [thisArg] The `this` binding of `callback`.
+ * @returns {Array} Returns a duplicate-value-free array.
+ * @example
+ *
+ * _.uniq([1, 2, 1, 3, 1]);
+ * // => [1, 2, 3]
+ *
+ * _.uniq([1, 1, 2, 2, 3], true);
+ * // => [1, 2, 3]
+ *
+ * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });
+ * // => ['A', 'b', 'C']
+ *
+ * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
+ * // => [1, 2.5, 3]
+ *
+ * // using "_.pluck" callback shorthand
+ * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+ function uniq(array, isSorted, callback, thisArg) {
+ // juggle arguments
+ if (typeof isSorted != 'boolean' && isSorted != null) {
+ thisArg = callback;
+ callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
+ isSorted = false;
+ }
+ if (callback != null) {
+ callback = lodash.createCallback(callback, thisArg, 3);
+ }
+ return baseUniq(array, isSorted, callback);
+ }
+
+ /**
+ * Creates an array excluding all provided values using strict equality for
+ * comparisons, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {Array} array The array to filter.
+ * @param {...*} [value] The values to exclude.
+ * @returns {Array} Returns a new array of filtered values.
+ * @example
+ *
+ * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
+ * // => [2, 3, 4]
+ */
+ function without(array) {
+ return baseDifference(array, slice(arguments, 1));
+ }
+
+ /**
+ * Creates an array that is the symmetric difference of the provided arrays.
+ * See http://en.wikipedia.org/wiki/Symmetric_difference.
+ *
+ * @static
+ * @memberOf _
+ * @category Arrays
+ * @param {...Array} [array] The arrays to inspect.
+ * @returns {Array} Returns an array of values.
+ * @example
+ *
+ * _.xor([1, 2, 3], [5, 2, 1, 4]);
+ * // => [3, 5, 4]
+ *
+ * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);
+ * // => [1, 4, 5]
+ */
+ function xor() {
+ var index = -1,
+ length = arguments.length;
+
+ while (++index < length) {
+ var array = arguments[index];
+ if (isArray(array) || isArguments(array)) {
+ var result = result
+ ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))
+ : array;
+ }
+ }
+ return result || [];
+ }
+
+ /**
+ * Creates an array of grouped elements, the first of which contains the first
+ * elements of the given arrays, the second of which contains the second
+ * elements of the given arrays, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @alias unzip
+ * @category Arrays
+ * @param {...Array} [array] Arrays to process.
+ * @returns {Array} Returns a new array of grouped elements.
+ * @example
+ *
+ * _.zip(['fred', 'barney'], [30, 40], [true, false]);
+ * // => [['fred', 30, true], ['barney', 40, false]]
+ */
+ function zip() {
+ var array = arguments.length > 1 ? arguments : arguments[0],
+ index = -1,
+ length = array ? max(pluck(array, 'length')) : 0,
+ result = Array(length < 0 ? 0 : length);
+
+ while (++index < length) {
+ result[index] = pluck(array, index);
+ }
+ return result;
+ }
+
+ /**
+ * Creates an object composed from arrays of `keys` and `values`. Provide
+ * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`
+ * or two arrays, one of `keys` and one of corresponding `values`.
+ *
+ * @static
+ * @memberOf _
+ * @alias object
+ * @category Arrays
+ * @param {Array} keys The array of keys.
+ * @param {Array} [values=[]] The array of values.
+ * @returns {Object} Returns an object composed of the given keys and
+ * corresponding values.
+ * @example
+ *
+ * _.zipObject(['fred', 'barney'], [30, 40]);
+ * // => { 'fred': 30, 'barney': 40 }
+ */
+ function zipObject(keys, values) {
+ var index = -1,
+ length = keys ? keys.length : 0,
+ result = {};
+
+ if (!values && length && !isArray(keys[0])) {
+ values = [];
+ }
+ while (++index < length) {
+ var key = keys[index];
+ if (values) {
+ result[key] = values[index];
+ } else if (key) {
+ result[key[0]] = key[1];
+ }
+ }
+ return result;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a function that executes `func`, with the `this` binding and
+ * arguments of the created function, only after being called `n` times.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {number} n The number of times the function must be called before
+ * `func` is executed.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var saves = ['profile', 'settings'];
+ *
+ * var done = _.after(saves.length, function() {
+ * console.log('Done saving!');
+ * });
+ *
+ * _.forEach(saves, function(type) {
+ * asyncSave({ 'type': type, 'complete': done });
+ * });
+ * // => logs 'Done saving!', after all saves have completed
+ */
+ function after(n, func) {
+ if (!isFunction(func)) {
+ throw new TypeError;
+ }
+ return function() {
+ if (--n < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ }
+
+ /**
+ * Creates a function that, when called, invokes `func` with the `this`
+ * binding of `thisArg` and prepends any additional `bind` arguments to those
+ * provided to the bound function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to bind.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {...*} [arg] Arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var func = function(greeting) {
+ * return greeting + ' ' + this.name;
+ * };
+ *
+ * func = _.bind(func, { 'name': 'fred' }, 'hi');
+ * func();
+ * // => 'hi fred'
+ */
+ function bind(func, thisArg) {
+ return arguments.length > 2
+ ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
+ : createWrapper(func, 1, null, null, thisArg);
+ }
+
+ /**
+ * Binds methods of an object to the object itself, overwriting the existing
+ * method. Method names may be specified as individual arguments or as arrays
+ * of method names. If no method names are provided all the function properties
+ * of `object` will be bound.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Object} object The object to bind and assign the bound methods to.
+ * @param {...string} [methodName] The object method names to
+ * bind, specified as individual method names or arrays of method names.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var view = {
+ * 'label': 'docs',
+ * 'onClick': function() { console.log('clicked ' + this.label); }
+ * };
+ *
+ * _.bindAll(view);
+ * jQuery('#docs').on('click', view.onClick);
+ * // => logs 'clicked docs', when the button is clicked
+ */
+ function bindAll(object) {
+ var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),
+ index = -1,
+ length = funcs.length;
+
+ while (++index < length) {
+ var key = funcs[index];
+ object[key] = createWrapper(object[key], 1, null, null, object);
+ }
+ return object;
+ }
+
+ /**
+ * Creates a function that, when called, invokes the method at `object[key]`
+ * and prepends any additional `bindKey` arguments to those provided to the bound
+ * function. This method differs from `_.bind` by allowing bound functions to
+ * reference methods that will be redefined or don't yet exist.
+ * See http://michaux.ca/articles/lazy-function-definition-pattern.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Object} object The object the method belongs to.
+ * @param {string} key The key of the method.
+ * @param {...*} [arg] Arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var object = {
+ * 'name': 'fred',
+ * 'greet': function(greeting) {
+ * return greeting + ' ' + this.name;
+ * }
+ * };
+ *
+ * var func = _.bindKey(object, 'greet', 'hi');
+ * func();
+ * // => 'hi fred'
+ *
+ * object.greet = function(greeting) {
+ * return greeting + 'ya ' + this.name + '!';
+ * };
+ *
+ * func();
+ * // => 'hiya fred!'
+ */
+ function bindKey(object, key) {
+ return arguments.length > 2
+ ? createWrapper(key, 19, slice(arguments, 2), null, object)
+ : createWrapper(key, 3, null, null, object);
+ }
+
+ /**
+ * Creates a function that is the composition of the provided functions,
+ * where each function consumes the return value of the function that follows.
+ * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
+ * Each function is executed with the `this` binding of the composed function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {...Function} [func] Functions to compose.
+ * @returns {Function} Returns the new composed function.
+ * @example
+ *
+ * var realNameMap = {
+ * 'pebbles': 'penelope'
+ * };
+ *
+ * var format = function(name) {
+ * name = realNameMap[name.toLowerCase()] || name;
+ * return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
+ * };
+ *
+ * var greet = function(formatted) {
+ * return 'Hiya ' + formatted + '!';
+ * };
+ *
+ * var welcome = _.compose(greet, format);
+ * welcome('pebbles');
+ * // => 'Hiya Penelope!'
+ */
+ function compose() {
+ var funcs = arguments,
+ length = funcs.length;
+
+ while (length--) {
+ if (!isFunction(funcs[length])) {
+ throw new TypeError;
+ }
+ }
+ return function() {
+ var args = arguments,
+ length = funcs.length;
+
+ while (length--) {
+ args = [funcs[length].apply(this, args)];
+ }
+ return args[0];
+ };
+ }
+
+ /**
+ * Creates a function which accepts one or more arguments of `func` that when
+ * invoked either executes `func` returning its result, if all `func` arguments
+ * have been provided, or returns a function that accepts one or more of the
+ * remaining `func` arguments, and so on. The arity of `func` can be specified
+ * if `func.length` is not sufficient.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var curried = _.curry(function(a, b, c) {
+ * console.log(a + b + c);
+ * });
+ *
+ * curried(1)(2)(3);
+ * // => 6
+ *
+ * curried(1, 2)(3);
+ * // => 6
+ *
+ * curried(1, 2, 3);
+ * // => 6
+ */
+ function curry(func, arity) {
+ arity = typeof arity == 'number' ? arity : (+arity || func.length);
+ return createWrapper(func, 4, null, null, null, arity);
+ }
+
+ /**
+ * Creates a function that will delay the execution of `func` until after
+ * `wait` milliseconds have elapsed since the last time it was invoked.
+ * Provide an options object to indicate that `func` should be invoked on
+ * the leading and/or trailing edge of the `wait` timeout. Subsequent calls
+ * to the debounced function will return the result of the last `func` call.
+ *
+ * Note: If `leading` and `trailing` options are `true` `func` will be called
+ * on the trailing edge of the timeout only if the the debounced function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to debounce.
+ * @param {number} wait The number of milliseconds to delay.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.
+ * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.
+ * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * // avoid costly calculations while the window size is in flux
+ * var lazyLayout = _.debounce(calculateLayout, 150);
+ * jQuery(window).on('resize', lazyLayout);
+ *
+ * // execute `sendMail` when the click event is fired, debouncing subsequent calls
+ * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
+ * 'leading': true,
+ * 'trailing': false
+ * });
+ *
+ * // ensure `batchLog` is executed once after 1 second of debounced calls
+ * var source = new EventSource('/stream');
+ * source.addEventListener('message', _.debounce(batchLog, 250, {
+ * 'maxWait': 1000
+ * }, false);
+ */
+ function debounce(func, wait, options) {
+ var args,
+ maxTimeoutId,
+ result,
+ stamp,
+ thisArg,
+ timeoutId,
+ trailingCall,
+ lastCalled = 0,
+ maxWait = false,
+ trailing = true;
+
+ if (!isFunction(func)) {
+ throw new TypeError;
+ }
+ wait = nativeMax(0, wait) || 0;
+ if (options === true) {
+ var leading = true;
+ trailing = false;
+ } else if (isObject(options)) {
+ leading = options.leading;
+ maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);
+ trailing = 'trailing' in options ? options.trailing : trailing;
+ }
+ var delayed = function() {
+ var remaining = wait - (now() - stamp);
+ if (remaining <= 0) {
+ if (maxTimeoutId) {
+ clearTimeout(maxTimeoutId);
+ }
+ var isCalled = trailingCall;
+ maxTimeoutId = timeoutId = trailingCall = undefined;
+ if (isCalled) {
+ lastCalled = now();
+ result = func.apply(thisArg, args);
+ if (!timeoutId && !maxTimeoutId) {
+ args = thisArg = null;
+ }
+ }
+ } else {
+ timeoutId = setTimeout(delayed, remaining);
+ }
+ };
+
+ var maxDelayed = function() {
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+ maxTimeoutId = timeoutId = trailingCall = undefined;
+ if (trailing || (maxWait !== wait)) {
+ lastCalled = now();
+ result = func.apply(thisArg, args);
+ if (!timeoutId && !maxTimeoutId) {
+ args = thisArg = null;
+ }
+ }
+ };
+
+ return function() {
+ args = arguments;
+ stamp = now();
+ thisArg = this;
+ trailingCall = trailing && (timeoutId || !leading);
+
+ if (maxWait === false) {
+ var leadingCall = leading && !timeoutId;
+ } else {
+ if (!maxTimeoutId && !leading) {
+ lastCalled = stamp;
+ }
+ var remaining = maxWait - (stamp - lastCalled),
+ isCalled = remaining <= 0;
+
+ if (isCalled) {
+ if (maxTimeoutId) {
+ maxTimeoutId = clearTimeout(maxTimeoutId);
+ }
+ lastCalled = stamp;
+ result = func.apply(thisArg, args);
+ }
+ else if (!maxTimeoutId) {
+ maxTimeoutId = setTimeout(maxDelayed, remaining);
+ }
+ }
+ if (isCalled && timeoutId) {
+ timeoutId = clearTimeout(timeoutId);
+ }
+ else if (!timeoutId && wait !== maxWait) {
+ timeoutId = setTimeout(delayed, wait);
+ }
+ if (leadingCall) {
+ isCalled = true;
+ result = func.apply(thisArg, args);
+ }
+ if (isCalled && !timeoutId && !maxTimeoutId) {
+ args = thisArg = null;
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Defers executing the `func` function until the current call stack has cleared.
+ * Additional arguments will be provided to `func` when it is invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to defer.
+ * @param {...*} [arg] Arguments to invoke the function with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.defer(function(text) { console.log(text); }, 'deferred');
+ * // logs 'deferred' after one or more milliseconds
+ */
+ function defer(func) {
+ if (!isFunction(func)) {
+ throw new TypeError;
+ }
+ var args = slice(arguments, 1);
+ return setTimeout(function() { func.apply(undefined, args); }, 1);
+ }
+
+ /**
+ * Executes the `func` function after `wait` milliseconds. Additional arguments
+ * will be provided to `func` when it is invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay execution.
+ * @param {...*} [arg] Arguments to invoke the function with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.delay(function(text) { console.log(text); }, 1000, 'later');
+ * // => logs 'later' after one second
+ */
+ function delay(func, wait) {
+ if (!isFunction(func)) {
+ throw new TypeError;
+ }
+ var args = slice(arguments, 2);
+ return setTimeout(function() { func.apply(undefined, args); }, wait);
+ }
+
+ /**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided it will be used to determine the cache key for storing the result
+ * based on the arguments provided to the memoized function. By default, the
+ * first argument provided to the memoized function is used as the cache key.
+ * The `func` is executed with the `this` binding of the memoized function.
+ * The result cache is exposed as the `cache` property on the memoized function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] A function used to resolve the cache key.
+ * @returns {Function} Returns the new memoizing function.
+ * @example
+ *
+ * var fibonacci = _.memoize(function(n) {
+ * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
+ * });
+ *
+ * fibonacci(9)
+ * // => 34
+ *
+ * var data = {
+ * 'fred': { 'name': 'fred', 'age': 40 },
+ * 'pebbles': { 'name': 'pebbles', 'age': 1 }
+ * };
+ *
+ * // modifying the result cache
+ * var get = _.memoize(function(name) { return data[name]; }, _.identity);
+ * get('pebbles');
+ * // => { 'name': 'pebbles', 'age': 1 }
+ *
+ * get.cache.pebbles.name = 'penelope';
+ * get('pebbles');
+ * // => { 'name': 'penelope', 'age': 1 }
+ */
+ function memoize(func, resolver) {
+ if (!isFunction(func)) {
+ throw new TypeError;
+ }
+ var memoized = function() {
+ var cache = memoized.cache,
+ key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];
+
+ return hasOwnProperty.call(cache, key)
+ ? cache[key]
+ : (cache[key] = func.apply(this, arguments));
+ }
+ memoized.cache = {};
+ return memoized;
+ }
+
+ /**
+ * Creates a function that is restricted to execute `func` once. Repeat calls to
+ * the function will return the value of the first call. The `func` is executed
+ * with the `this` binding of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var initialize = _.once(createApplication);
+ * initialize();
+ * initialize();
+ * // `initialize` executes `createApplication` once
+ */
+ function once(func) {
+ var ran,
+ result;
+
+ if (!isFunction(func)) {
+ throw new TypeError;
+ }
+ return function() {
+ if (ran) {
+ return result;
+ }
+ ran = true;
+ result = func.apply(this, arguments);
+
+ // clear the `func` variable so the function may be garbage collected
+ func = null;
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function that, when called, invokes `func` with any additional
+ * `partial` arguments prepended to those provided to the new function. This
+ * method is similar to `_.bind` except it does **not** alter the `this` binding.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [arg] Arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * var greet = function(greeting, name) { return greeting + ' ' + name; };
+ * var hi = _.partial(greet, 'hi');
+ * hi('fred');
+ * // => 'hi fred'
+ */
+ function partial(func) {
+ return createWrapper(func, 16, slice(arguments, 1));
+ }
+
+ /**
+ * This method is like `_.partial` except that `partial` arguments are
+ * appended to those provided to the new function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [arg] Arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * var defaultsDeep = _.partialRight(_.merge, _.defaults);
+ *
+ * var options = {
+ * 'variable': 'data',
+ * 'imports': { 'jq': $ }
+ * };
+ *
+ * defaultsDeep(options, _.templateSettings);
+ *
+ * options.variable
+ * // => 'data'
+ *
+ * options.imports
+ * // => { '_': _, 'jq': $ }
+ */
+ function partialRight(func) {
+ return createWrapper(func, 32, null, slice(arguments, 1));
+ }
+
+ /**
+ * Creates a function that, when executed, will only call the `func` function
+ * at most once per every `wait` milliseconds. Provide an options object to
+ * indicate that `func` should be invoked on the leading and/or trailing edge
+ * of the `wait` timeout. Subsequent calls to the throttled function will
+ * return the result of the last `func` call.
+ *
+ * Note: If `leading` and `trailing` options are `true` `func` will be called
+ * on the trailing edge of the timeout only if the the throttled function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {Function} func The function to throttle.
+ * @param {number} wait The number of milliseconds to throttle executions to.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.
+ * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * // avoid excessively updating the position while scrolling
+ * var throttled = _.throttle(updatePosition, 100);
+ * jQuery(window).on('scroll', throttled);
+ *
+ * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes
+ * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
+ * 'trailing': false
+ * }));
+ */
+ function throttle(func, wait, options) {
+ var leading = true,
+ trailing = true;
+
+ if (!isFunction(func)) {
+ throw new TypeError;
+ }
+ if (options === false) {
+ leading = false;
+ } else if (isObject(options)) {
+ leading = 'leading' in options ? options.leading : leading;
+ trailing = 'trailing' in options ? options.trailing : trailing;
+ }
+ debounceOptions.leading = leading;
+ debounceOptions.maxWait = wait;
+ debounceOptions.trailing = trailing;
+
+ return debounce(func, wait, debounceOptions);
+ }
+
+ /**
+ * Creates a function that provides `value` to the wrapper function as its
+ * first argument. Additional arguments provided to the function are appended
+ * to those provided to the wrapper function. The wrapper is executed with
+ * the `this` binding of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Functions
+ * @param {*} value The value to wrap.
+ * @param {Function} wrapper The wrapper function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var p = _.wrap(_.escape, function(func, text) {
+ * return '' + func(text) + '
';
+ * });
+ *
+ * p('Fred, Wilma, & Pebbles');
+ * // => 'Fred, Wilma, & Pebbles
'
+ */
+ function wrap(value, wrapper) {
+ return createWrapper(wrapper, 16, [value]);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a function that returns `value`.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {*} value The value to return from the new function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var object = { 'name': 'fred' };
+ * var getter = _.constant(object);
+ * getter() === object;
+ * // => true
+ */
+ function constant(value) {
+ return function() {
+ return value;
+ };
+ }
+
+ /**
+ * Produces a callback bound to an optional `thisArg`. If `func` is a property
+ * name the created callback will return the property value for a given element.
+ * If `func` is an object the created callback will return `true` for elements
+ * that contain the equivalent object properties, otherwise it will return `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {*} [func=identity] The value to convert to a callback.
+ * @param {*} [thisArg] The `this` binding of the created callback.
+ * @param {number} [argCount] The number of arguments the callback accepts.
+ * @returns {Function} Returns a callback function.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'barney', 'age': 36 },
+ * { 'name': 'fred', 'age': 40 }
+ * ];
+ *
+ * // wrap to create custom callback shorthands
+ * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {
+ * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);
+ * return !match ? func(callback, thisArg) : function(object) {
+ * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];
+ * };
+ * });
+ *
+ * _.filter(characters, 'age__gt38');
+ * // => [{ 'name': 'fred', 'age': 40 }]
+ */
+ function createCallback(func, thisArg, argCount) {
+ var type = typeof func;
+ if (func == null || type == 'function') {
+ return baseCreateCallback(func, thisArg, argCount);
+ }
+ // handle "_.pluck" style callback shorthands
+ if (type != 'object') {
+ return property(func);
+ }
+ var props = keys(func),
+ key = props[0],
+ a = func[key];
+
+ // handle "_.where" style callback shorthands
+ if (props.length == 1 && a === a && !isObject(a)) {
+ // fast path the common case of providing an object with a single
+ // property containing a primitive value
+ return function(object) {
+ var b = object[key];
+ return a === b && (a !== 0 || (1 / a == 1 / b));
+ };
+ }
+ return function(object) {
+ var length = props.length,
+ result = false;
+
+ while (length--) {
+ if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {
+ break;
+ }
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their
+ * corresponding HTML entities.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {string} string The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escape('Fred, Wilma, & Pebbles');
+ * // => 'Fred, Wilma, & Pebbles'
+ */
+ function escape(string) {
+ return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
+ }
+
+ /**
+ * This method returns the first argument provided to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'name': 'fred' };
+ * _.identity(object) === object;
+ * // => true
+ */
+ function identity(value) {
+ return value;
+ }
+
+ /**
+ * Adds function properties of a source object to the destination object.
+ * If `object` is a function methods will be added to its prototype as well.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {Function|Object} [object=lodash] object The destination object.
+ * @param {Object} source The object of functions to add.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.
+ * @example
+ *
+ * function capitalize(string) {
+ * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
+ * }
+ *
+ * _.mixin({ 'capitalize': capitalize });
+ * _.capitalize('fred');
+ * // => 'Fred'
+ *
+ * _('fred').capitalize().value();
+ * // => 'Fred'
+ *
+ * _.mixin({ 'capitalize': capitalize }, { 'chain': false });
+ * _('fred').capitalize();
+ * // => 'Fred'
+ */
+ function mixin(object, source, options) {
+ var chain = true,
+ methodNames = source && functions(source);
+
+ if (!source || (!options && !methodNames.length)) {
+ if (options == null) {
+ options = source;
+ }
+ ctor = lodashWrapper;
+ source = object;
+ object = lodash;
+ methodNames = functions(source);
+ }
+ if (options === false) {
+ chain = false;
+ } else if (isObject(options) && 'chain' in options) {
+ chain = options.chain;
+ }
+ var ctor = object,
+ isFunc = isFunction(ctor);
+
+ forEach(methodNames, function(methodName) {
+ var func = object[methodName] = source[methodName];
+ if (isFunc) {
+ ctor.prototype[methodName] = function() {
+ var chainAll = this.__chain__,
+ value = this.__wrapped__,
+ args = [value];
+
+ push.apply(args, arguments);
+ var result = func.apply(object, args);
+ if (chain || chainAll) {
+ if (value === result && isObject(result)) {
+ return this;
+ }
+ result = new ctor(result);
+ result.__chain__ = chainAll;
+ }
+ return result;
+ };
+ }
+ });
+ }
+
+ /**
+ * Reverts the '_' variable to its previous value and returns a reference to
+ * the `lodash` function.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @returns {Function} Returns the `lodash` function.
+ * @example
+ *
+ * var lodash = _.noConflict();
+ */
+ function noConflict() {
+ context._ = oldDash;
+ return this;
+ }
+
+ /**
+ * A no-operation function.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @example
+ *
+ * var object = { 'name': 'fred' };
+ * _.noop(object) === undefined;
+ * // => true
+ */
+ function noop() {
+ // no operation performed
+ }
+
+ /**
+ * Gets the number of milliseconds that have elapsed since the Unix epoch
+ * (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @example
+ *
+ * var stamp = _.now();
+ * _.defer(function() { console.log(_.now() - stamp); });
+ * // => logs the number of milliseconds it took for the deferred function to be called
+ */
+ var now = isNative(now = Date.now) && now || function() {
+ return new Date().getTime();
+ };
+
+ /**
+ * Converts the given value into an integer of the specified radix.
+ * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
+ * `value` is a hexadecimal, in which case a `radix` of `16` is used.
+ *
+ * Note: This method avoids differences in native ES3 and ES5 `parseInt`
+ * implementations. See http://es5.github.io/#E.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {string} value The value to parse.
+ * @param {number} [radix] The radix used to interpret the value to parse.
+ * @returns {number} Returns the new integer value.
+ * @example
+ *
+ * _.parseInt('08');
+ * // => 8
+ */
+ var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {
+ // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`
+ return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);
+ };
+
+ /**
+ * Creates a "_.pluck" style function, which returns the `key` value of a
+ * given object.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {string} key The name of the property to retrieve.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var characters = [
+ * { 'name': 'fred', 'age': 40 },
+ * { 'name': 'barney', 'age': 36 }
+ * ];
+ *
+ * var getName = _.property('name');
+ *
+ * _.map(characters, getName);
+ * // => ['barney', 'fred']
+ *
+ * _.sortBy(characters, getName);
+ * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }]
+ */
+ function property(key) {
+ return function(object) {
+ return object[key];
+ };
+ }
+
+ /**
+ * Produces a random number between `min` and `max` (inclusive). If only one
+ * argument is provided a number between `0` and the given number will be
+ * returned. If `floating` is truey or either `min` or `max` are floats a
+ * floating-point number will be returned instead of an integer.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {number} [min=0] The minimum possible value.
+ * @param {number} [max=1] The maximum possible value.
+ * @param {boolean} [floating=false] Specify returning a floating-point number.
+ * @returns {number} Returns a random number.
+ * @example
+ *
+ * _.random(0, 5);
+ * // => an integer between 0 and 5
+ *
+ * _.random(5);
+ * // => also an integer between 0 and 5
+ *
+ * _.random(5, true);
+ * // => a floating-point number between 0 and 5
+ *
+ * _.random(1.2, 5.2);
+ * // => a floating-point number between 1.2 and 5.2
+ */
+ function random(min, max, floating) {
+ var noMin = min == null,
+ noMax = max == null;
+
+ if (floating == null) {
+ if (typeof min == 'boolean' && noMax) {
+ floating = min;
+ min = 1;
+ }
+ else if (!noMax && typeof max == 'boolean') {
+ floating = max;
+ noMax = true;
+ }
+ }
+ if (noMin && noMax) {
+ max = 1;
+ }
+ min = +min || 0;
+ if (noMax) {
+ max = min;
+ min = 0;
+ } else {
+ max = +max || 0;
+ }
+ if (floating || min % 1 || max % 1) {
+ var rand = nativeRandom();
+ return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);
+ }
+ return baseRandom(min, max);
+ }
+
+ /**
+ * Resolves the value of property `key` on `object`. If `key` is a function
+ * it will be invoked with the `this` binding of `object` and its result returned,
+ * else the property value is returned. If `object` is falsey then `undefined`
+ * is returned.
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {Object} object The object to inspect.
+ * @param {string} key The name of the property to resolve.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = {
+ * 'cheese': 'crumpets',
+ * 'stuff': function() {
+ * return 'nonsense';
+ * }
+ * };
+ *
+ * _.result(object, 'cheese');
+ * // => 'crumpets'
+ *
+ * _.result(object, 'stuff');
+ * // => 'nonsense'
+ */
+ function result(object, key) {
+ if (object) {
+ var value = object[key];
+ return isFunction(value) ? object[key]() : value;
+ }
+ }
+
+ /**
+ * A micro-templating method that handles arbitrary delimiters, preserves
+ * whitespace, and correctly escapes quotes within interpolated code.
+ *
+ * Note: In the development build, `_.template` utilizes sourceURLs for easier
+ * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
+ *
+ * For more information on precompiling templates see:
+ * http://lodash.com/custom-builds
+ *
+ * For more information on Chrome extension sandboxes see:
+ * http://developer.chrome.com/stable/extensions/sandboxingEval.html
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {string} text The template text.
+ * @param {Object} data The data object used to populate the text.
+ * @param {Object} [options] The options object.
+ * @param {RegExp} [options.escape] The "escape" delimiter.
+ * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
+ * @param {Object} [options.imports] An object to import into the template as local variables.
+ * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
+ * @param {string} [sourceURL] The sourceURL of the template's compiled source.
+ * @param {string} [variable] The data object variable name.
+ * @returns {Function|string} Returns a compiled function when no `data` object
+ * is given, else it returns the interpolated text.
+ * @example
+ *
+ * // using the "interpolate" delimiter to create a compiled template
+ * var compiled = _.template('hello <%= name %>');
+ * compiled({ 'name': 'fred' });
+ * // => 'hello fred'
+ *
+ * // using the "escape" delimiter to escape HTML in data property values
+ * _.template('<%- value %> ', { 'value': '
+
+