[
  {
    "path": ".gitignore",
    "content": "*.gem\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: ruby\n\nrvm:\n  - 1.8.7\n  - 1.9.2\n  - 1.9.3\n  - jruby-18mode\n  - jruby-19mode\n  - rbx\n  - ree\n  - 2.0.0\n  - 2.1.0\n  - 2.2.0\n\nsudo: false\n\nenv:\n  - CI_TEST=core\n  - CI_TEST=cli\n\ngemfile:\n  - core/Gemfile\n  - cli/gemfiles/sass_3_3.gemfile\n  - cli/gemfiles/listen_2.gemfile\n\nscript: cd $CI_TEST && bundle exec rake\n\nmatrix:\n  exclude:\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: 1.8.7\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: 1.8.7\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: 1.8.7\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: 1.9.2\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: 1.9.2\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: 1.9.2\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: 1.9.3\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: 1.9.3\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: 1.9.3\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: jruby-18mode\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: jruby-18mode\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: jruby-18mode\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: jruby-19mode\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: jruby-19mode\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: jruby-19mode\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: rbx\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: rbx\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: rbx\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: ree\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: ree\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: ree\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: 2.0.0\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: 2.0.0\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: 2.0.0\n  - gemfile: cli/gemfiles/sass_3_3.gemfile\n    env: CI_TEST=core\n    rvm: 2.1.0\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=core\n    rvm: 2.1.0\n  - gemfile: core/Gemfile\n    env: CI_TEST=cli\n    rvm: 2.1.0\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=cli\n    rvm: 1.8.7\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=cli\n    rvm: 1.9.2\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=cli\n    rvm: jruby-18mode\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=cli\n    rvm: jruby-19mode\n  - gemfile: cli/gemfiles/listen_2.gemfile\n    env: CI_TEST=cli\n    rvm: ree\n\nnotifications:\n  irc: {channels: \"irc.freenode.org#compass\"}\n  campfire:\n    rooms:\n      secure: GXnvuoZ8BVMv+JwJIBb0Ey1ARbfeypmCvpmynykD5taooedTqwyTeT32jw1YTQAOuBewgeWW1H4bF10ySz0GWmu6X2sNx9CVYT1dFudoMvLtnvEmAe0JyyRuSCBFj45jP21eRUAACltxzyX4q/gh+zRIlaRin9YBo/Xv84gDzLw=\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "  Contributing Stylesheets to Compass\n  ===================================\n\n  **Please make all pull requests against the master branch**\n\n  Thank you for your interest in contributing to Compass. Our goal is to make it as easy\n  as we can for you to contribute changes to compass -- So if there's something here that\n  seems harder than it ought to be, please let us know.\n\n  If you find a bug **in this document**, you are bound to contribute a fix. Stop reading now\n  if you do not wish to abide by this rule.\n\n  **Step 1**: If you do not have a github account, create one.\n\n  **Step 2**: Fork Compass to your account. Go to the [main repo](http://github.com/chriseppstein/compass)\n  and click the fork button.\n\n  ![Fork Me](http://img.skitch.com/20101015-n4ssnfyj16e555cnn7wp2pg717.png)\n\n  Now we're at a decision point. What kind of change do you intend to make?\n\n  * [Fix a typo (or some other trivial change)](#trivial-changes)\n  * [Documentation Changes](#documentation-changes)\n  * [Fixing Stylesheet Bugs](#stylesheet-bugs)\n  * [New Stylesheet Features](#stylesheet-changes)\n  * [Ruby Changes](#ruby-changes)\n\n  Here's some general information about the project you might find useful along the way:\n\n  * [Submitting Patches](#patches)\n  * [Project Structure](#project-structure)\n  * [General Philosophy](#project-philosophy)\n  * [Stylesheet Conventions](#stylesheet-conventions)\n  * [Miscellaneous Stuff](#faq)\n    * [Setting up Git](#setting-up-git)\n    * [Using Compass while Under Development](#running-local-code)\n    * [Running Tests](#running-tests)\n    * [Recovering from a cherry-pick or a rebase](#recovering-from-rebased-or-cherry-picked-changesets)\n\n  <h2 id=\"trivial-changes\">Making Trivial Changes</h2>\n\n  Thanks to Github, making small changes is super easy. After forking the project navigate\n  to the file you want to change and click the edit link.\n\n  ![Edit Me](http://img.skitch.com/20101015-n2x2iaric7wkey2x7u4fa2m1hj.png)\n\n  Change the file, write a commit message, and click the `Commit` button.\n\n  ![Commit Me](http://img.skitch.com/20101015-br74tfwtd1ur428mq4ejt12kfc.png)\n  Now you need to get your change [accepted](#patches).\n\n\n  <h2 id=\"documentation-changes\">Making Documentation Changes</h2>\n\n  The compass documentation is stored in two places. First, the `doc-src` directory is\n  where the documentation lives -- however much of the documentation is generated\n  from comments in the Sass files themselves. More information on [changing\n  documentation][documentation]. Once your changes are pushed, please\n  [submit them](#patches).\n\n  <h2 id=\"stylesheet-bugs\">Fixing Stylesheet Bugs</h2>\n\n  **Step 3**: If this is a bug you discovered. Please [report it][issues] before working on a fix.\n  This helps us better understand the patch.\n\n  **Step 4**: Get [the code](#setting-up-git) if you haven't yet done so.\n\n  **Step 5**: Fix the bug and commit the changes. Please make sure to mention the bug\n  id in your commit message like so:\n\n      Fixed the display of the fizzlebuzz in IE6.\n\n      Closes GH-123.\n\n  **Step 6**: Verify the fix in as many browsers as you can as well as against your own\n  project. How to [use compass while changing it](#running-local-code).\n\n  **Step 7**: Make sure the tests pass. More info on [running tests](#running-tests)\n  If the tests fail, fix the tests or the stylesheets accordingly. If the tests, don't\n  fail, that means this aspect was not well enough tested. Please [add or augment\n  a test](#writing-tests).\n\n  You're done. Please [submit your changes](#patches).\n\n  <h2 id=\"stylesheet-changes\">Making Stylesheet Changes</h2>\n\n  It is a good idea to discuss new features ideas with the compass users and developers\n  before building something. Please don't be shy; send an email to the [compass mailing\n  list](http://groups.google.com/group/compass-users).\n\n  Many feature ideas are good but not obviously a good fit for the compass core library.\n  In these cases, you can and should create a [compass extension][extensions]. Sometimes\n  this is because the concept does not align with the [compass philosophy](#project-philosophy).\n  But sometimes it's just because we think the idea needs time to bake. [Documentation on\n  making extensions.][extensions]\n\n  **Step 3**: Get [the code](#setting-up-git) if you haven't yet done so.\n\n  **Step 4**: Add the feature -- contact the mailing list if you have any questions.\n\n  **Step 5**: Add a test case. More info on [writing tests for compass](#writing-tests).\n\n  **Step 6**: Documentation - Add or update the reference documentation. Add\n  an example of using the feature. See the [doc readme for details][documentation].\n\n  You're done. Please [submit your changes](#patches).\n\n  <h2 id=\"ruby-changes\">Making Ruby Changes</h2>\n\n  At this time, if you're a rubyist who's planning on working on the ruby-side of\n  things, it's assumed you know how to read code and use standard ruby tools like\n  rake, gem, bundler, test/unit, cucumber, rspec, etc. If you have any questions,\n  please ask. No changes will be accepted without accompanying tests.\n\n  <h2 id=\"patches\">Submitting Patches</h2>\n\n  If you are submitting features that have more than one changeset, please create a\n  topic branch to hold the changes while they are pending merge and also to track\n  iterations to the original submission. To create a topic branch:\n\n      $ git checkout -b new_branch_name\n      ... make more commits if needed ...\n      $ git push origin new_branch_name\n\n  You can now see these changes online at a url like:\n\n      http://github.com/your_user_name/compass/commits/new_branch_name\n\n  If you have single-commit patches, it is fine to keep them on master. But do keep in\n  mind that these changesets might be\n  [cherry-picked](#recovering-from-rebased-or-cherry-picked-changesets).\n\n  Once your changeset(s) are on github, select the appropriate branch containing your\n  changes and send a pull request. Make sure to choose the same upstream branch that\n  you developed against (probably stable or master). Most of the description of your\n  changes should be in the commit messages -- so no need to write a whole lot in the\n  pull request message. However, the pull request message is a good place to provide a\n  rationale or use case for the change if you think one is needed. More info on [pull\n  requests][pulls].\n\n  ![Pull Request Example](http://img.skitch.com/20101015-rgfh43yhk7e61fchj9wccne9cq.png)\n\n  Pull requests are then managed like an issue from the [compass issues page][issues].\n  A code review will be performed by a compass core team member, and one of three outcomes\n  will result:\n\n  1. The change is rejected -- Not all changes are right for [compass's\n     philosophy](#project-philosophy). If your change is rejected it might be better\n     suited for a plugin, at least until it matures and/or proves itself with the users.\n  2. The change is rejected, *unless* -- Sometimes, there are missing pieces, or\n     other changes that need to be made before the change can be accepted. Comments\n     will be left on the commits indicating what issues need to be addressed.\n  3. The change is accepted -- The change is merged into compass, sometimes minor\n     changes are then applied by the committer after the merge.\n\n  <h2 id=\"project-structure\">Project Structure</h2>\n\n      compass/\n        bin/\n          compass             - CLI executable\n        devbin/               - development scripts after installing the bundle\n        doc-src/              - source for documentation\n        docs/                 - generated documentation\n        features/             - tests for compass\n        frameworks/           - All frameworks in this directory are loaded automatically\n          compass/            - The compass framework\n            stylesheets/      - The compass libraries\n            templates/        - The compass project templates and patterns\n          blueprint/\n            stylesheets/      - The blueprint libraries\n            templates/        - The blueprint project templates and patterns\n        lib/\n          compass.rb          - The main compass ruby library\n          compass/\n            app_integration/  - integration with app frameworks\n            commands/         - UI agnostic support for the CLI\n            configuration/    - support for project configuration\n            exec/             - UI code for the CLI\n            installers/       - support for installing templates\n            sass_extensions/  - enhancements to Sass\n              functions/      - Sass functions exposed by compass\n              monkey_patches/ - Changes to sass itself\n        test/                 - unit tests\n\n  <h2 id=\"project-philosophy\">General Philosophy</h2>\n\n  1. Users specify their own selectors. Compass never forces a user\n     to use a presentational class name.\n  2. Compass does not require javascript. It is a CSS framework.\n  3. Compass core is \"design agnostic\". This is why compass core has no\n     grid framework -- grids are not design agnostic.\n  4. Compass frameworks are not special. If compass can do it, so should an extension\n     be able.\n  5. Sass is awesome -- Compass should make sass more accessible and\n     demonstrate how to use Sass to its fullest potential.\n  6. Developing across browsers is hard and will always be hard. It takes\n     a community to get it right.\n  7. By default, Compass supports as many browsers as it can. Where it can't\n     it progressively enhances. Where it degrades, the documentation should\n     make a note. Deviation from this requires an excellent reason.\n  8. Compass is a proving ground for Sass features. The watcher and color\n     functions are examples of features that started in Compass and got\n     moved to Sass.\n\n  <h2 id=\"stylesheet-conventions\">Stylesheet Conventions</h2>\n\n  1. All framework stylesheets are partials. Their filename begin with an underscore.\n     Otherwise, Sass will create stylesheets directly into the user's CSS directory.\n  2. Compass imports do not emit styles. There are a few limited exceptions to this like\n     the resets and base classes for inheritance.\n  3. Mixins with two-level defaults. Mixins often provide two levels of default\n     values. The first is a global default that can be overridden once. The second\n     is a default that can be overridden when the mixin is included.\n  4. Mixin argument names are part of the public API, make sure they are understandable and not\n     needlessly truncated or terse.\n  5. If adding a new folder of stylesheets, add a single stylesheet with the same name that\n     imports all of the stylesheets in the folder.\n  6. Try to avoid passing selectors as arguments. This is what mixins are for.\n\n\n  <h2 id=\"faq\">Common Problems &amp; Miscellaneous Info</h2>\n\n  <h3 id=\"setting-up-git\">Setting up Git</h3>\n\n  Please follow [these instructions](http://help.github.com/git-email-settings/)\n  to set up your email address and attribution information.\n\n  Download your git repo:\n\n      git clone git@github.com:your_username/compass.git\n\n  Set up a remote to the main repo:\n\n      cd compass\n      git remote add chriseppstein git://github.com/chriseppstein/compass.git\n\n  Getting recent changes from the main repo:\n\n      git fetch chriseppstein\n\n  <h3 id=\"running-local-code\">Using Compass while Under Development</h3>\n\n  1. Use the bin script. `/path/to/compass/bin/compass` is a version of the compass\n     command line that uses the local changes you have made. You can add `/path/to/compass/bin`\n     to your `$PATH`, or refer to it directly.\n  2. `gem build compass.gemspec`\n  3. `gem install compass-<version for the file that was just created>.gem` -- If installing to your\n     system gems, you'll probably need to add `sudo` to the front. If you don't know\n     what that means, you probably need to add `sudo` to the front.\n  4. In a [bundled][bundler] environment, you can configure your gem to use compass\n     while you work on it like so: `gem 'compass', :path => \"/Users/myusername/some/path/to/compass\"`\n     Bundler will perform some sort of charm on ruby to make it work.\n5. Configuring ruby directly. If you're a ruby pro, you probably don't need to be\n   told that you can set compass on the load path like so: `export RUBYLIB=/Users/myusername/some/path/to/compass/lib`\n\n<h3 id=\"running-tests\">Running Tests</h3>\n\n1. You must have Ruby installed on your system. After [setting up git](#setting-up-git),\n   change to the root directory of your git checkout of Compass.\n\n   `cd compass`\n\n2. Install the bundler Ruby gem.\n\n   `gem install bundler`\n\n   If installing to your system gems, you'll probably need to add `sudo` to the\n   front of that command. If you don't know what that means, you probably need\n   to add `sudo` to the front.\n\n3. Install development dependencies:\n\n   `bundle install --binstubs devbin`\n\n4. Running core library and stylesheet tests:\n\n   `bundle exec rake test features`\n\n5. Running behavior tests\n\n   `./devbin/cucumber`\n\nIf stylesheet tests fail, the output of the test project is captured in\n`test/fixtures/stylesheets/<project>/saved/` and the error message will report where\nthe error was. Here's an example:\n\n![Stylesheet Test Failure](http://img.skitch.com/20101015-k4t11k8n7xs2r53ftjhrji629d.png)\n\n<h3 id=\"writing-tests\">Writing Stylesheet Tests</h3>\n\nCompass has stylesheet tests to ensure that:\n\n- each stylesheet compiles\n- each stylesheet can be imported directly without any other dependencies\n- refactorings that should not affect the output, don't\n\nAt some point, it would be great to have a test system that verifies that the stylesheets\n*work correctly* in various browsers. If you have ideas for how to accomplish this in a sane\nway, please let us know.\n\nIn the `test/fixtures/stylesheets` directory, there are a number of compass projects.\nThe tests work by adding or updating the sass files, running the tests to make sure they fail,\nand then changing the expected css output to make the test pass. It is rudimentary, but as\na safety net, it has caught a number of problems that might have been missed otherwise.\nIf you add a new stylesheet to compass, please make sure to add a new test stylesheet\nthat only imports the newly added stylesheet and add rules that use the new features in that\nstylesheet.\n\n<h3 id=\"recovering-from-rebased-or-cherry-picked-changesets\">You cherry-picked/rebased\nmy changes. What should I do?</h3>\nDepending on any number of reasons, including but not limited to the alignment of the stars,\nYour changes might not be merged into compass using a simple merge. For instance, we might\ndecide to place a change against master into stable instead, or we might squish all your\nchanges together into a single commit at the time of merge, or we might want a change you've\nsubmitted but not a change that it was placed onto top of. In these cases, there are\na couple of ways you can react:\n\n1. If you have some changes on a branch that were not yet accepted, but other changes on that\n   branch were accepted then you should run the following command (make sure to fetch first):\n   `git checkout branch_name; git rebase chriseppstein/master` (assuming the change was applied\n   to the master branch)\n2. If all your changes on the topic branch were accepted or you don't care to keep it around\n   anymore: `git checkout master; git branch -D branch_name; git push origin :branch_name`\n\n[pulls]: http://help.github.com/pull-requests/\n[issues]: http://github.com/chriseppstein/compass/issues\n[documentation]: http://github.com/chriseppstein/compass/blob/stable/doc-src/README.markdown\n[bundler]: http://gembundler.com/\n[extensions]: /help/tutorials/extensions/\n"
  },
  {
    "path": "Guardfile",
    "content": "group :tests do\n  guard :test do\n    watch(%r{^lib/(.+)\\.rb$}) { |m| \"test/#{m[1]}_test.rb\" }\n    watch(%r{^test/.+_test\\.rb$})\n    watch(%r{^test/units/.+_test\\.rb$})\n    watch('test/test_helper.rb') { \"test\" }\n  end\nend\n\ngroup :features do\n  guard :cucumber do\n    watch(%r{^features/.+\\.feature$})\n    watch(%r{^features/support/.+$}) { 'features' }\n    watch(%r{^features/step_definitions/(.+)_steps\\.rb$}) { |m| Dir[File.join(\"**/#{m[1]}.feature\")][0] || 'features' }\n  end\nend"
  },
  {
    "path": "LICENSE.markdown",
    "content": "Copyright (c) 2009-2014 Christopher M. Eppstein\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\nNo attribution is required by products that make use of this software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name(s) of the above copyright\nholders shall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in this Software without prior written authorization.\n\nContributors to this project agree to grant all rights to the copyright\nholder of the primary product. Attribution is maintained in the source\ncontrol history of the product.\n"
  },
  {
    "path": "README.markdown",
    "content": "# Compass Stylesheet Authoring Framework\n\n**Depreciated:** Compass is no longer supported.\n\nBuild Status: [![Build Status](https://travis-ci.org/Compass/compass.png)](https://travis-ci.org/Compass/compass)\n\nCode Quality: [![Code Climate](https://codeclimate.com/github/Compass/compass.png)](https://codeclimate.com/github/Compass/compass)\n\n## Resources\n\n* [Compass Homepage](http://compass-style.org/)\n* [Installing Compass](http://compass-style.org/install/)\n* [Compass Reference](http://compass-style.org/install/reference/)\n\n## Author\nCompass is written by [Chris Eppstein](http://chriseppstein.github.io/).<br>\nChris is a software engineer at [LinkedIn](http://www.linkedin.com/) and a member of the [Sass](https://github.com/nex3/sass) core team.\n\n## Core Team Members\n\n* [Scott Davis](https://github.com/scottdavis)\n* [Miriam Suzanne](https://github.com/mirisuzanne)\n* [Brandon Mathis](https://github.com/imathis)\n\n## Major Contributors\n\n* [Nico Hagenburger](https://github.com/hagenburger)\n\n## License\nCopyright (c) 2008-2014 Christopher M. Eppstein<br>\nAll Rights Reserved.<br>\nReleased under a [slightly modified MIT License](LICENSE.markdown).\n"
  },
  {
    "path": "Rakefile",
    "content": "\nGEMS = ['core', 'cli', 'import-once']\n\n\ntask :default => %w[test]\n\ndesc \"Run all tests\"\ntask :test do\n  sh %{./test_all.sh} do |ok, res|\n     Rake::Task[\"test_cleanup\"].invoke if ok\n  end\nend\n\ndesc \"build gems\"\ntask :build_gems => [:test] do\n  GEMS.each do |gem|\n    chdir gem do\n      if gem == 'cli'\n        sh \"gem build compass.gemspec\"\n      else\n        sh \"gem build compass-#{gem}.gemspec\"\n      end\n    end\n  end\nend\n\ndesc \"publish gems\"\ntask :publish_gems => [:build_gems] do\n  GEMS.each do |gem|\n    chdir gem do\n      if gem == 'cli'\n        sh \"gem push compass.gemspec\"\n      else\n        sh \"gem push compass-#{gem}.gemspec\"\n      end\n    end\n  end\nend\n\ndesc \"Clean up all test files\"\ntask :test_cleanup do\n  dirs = [\n    'core/devbin/',\n    'core/.sass-cache/',\n    'core/test/integrations/projects/busted_font_urls/tmp/',\n    'core/test/integrations/projects/busted_image_urls/tmp/',\n    'core/test/integrations/projects/compass/tmp/',\n    'core/test/integrations/projects/envtest/tmp/',\n    'core/test/integrations/projects/image_urls/tmp/',\n    'core/test/integrations/projects/relative/tmp/',\n    'core/test/integrations/projects/uses_only_stylesheets_ext/tmp/',\n    'core/test/integrations/projects/valid/tmp/',\n    'import-once/.sass-cache/'\n  ]\n  dirs.each { |dir| rm_rf dir }\nend\n\n\ndesc \"Bundle Update\"\ntask :bundle_update do\n  GEMS.each do |gem|\n    chdir gem do\n      sh \"bundle update\"\n    end\n  end\nend\n"
  },
  {
    "path": "TODO.md",
    "content": "FYI: I'm abandoning the even/odd release numbering scheme in favor of using preview releases. Going forward the master branch will use the following release numbering:\n\n* 0.11.0.alpha.N.shortsha (Not tagged)\n* 0.11.0.beta.N (tagged, new features expected)\n* 0.11.0.rc.N (tagged, no new features expected)\n\nMUST:\n* A proper welcome page for blueprint projects (or delete it)\n* Rails Integration\n\nNICE:\n* some extension commands\n* Better help for commands and patterns\n* Color Palette extraction and management commands\n\nv0.11\n=====\nPlanned Release Date: Aug 2, 2010\nThis is a quick iteration release. The focus on turning out\neven better documentation and some stylesheet updates and\nenhancements that take better advantage of the Sass 3 features.\n\n### Docs (can be done on stable)\n\n* Improve the design\n* Better tutorials and getting started guides.\n* Terminal for Designers\n* Better examples & example navigation\n* Contribution guide:\n  * Compass stylesheets\n  * Compass ruby code\n  * Documentation patches\n* SCSS Style Guide\n* Bundler 1.0 support\n* Upgrade nanoc\n* Better search experience\n* Search mixins and constants and code fragments that might use those.\n* Awesome homepage that is better integrated with the docs.\n* HTML5 the docs so they can run locally in offline mode.\n\n### Compass Core\n\n* Updates as necessary to the CSS3 module as the spec process develops.\n* Typography module\n\n### Blueprint\n\n* Provide an option to use @extend in the blueprint grid\n\n### Rails\n\n* Fully integrated support of Rails 3\n\n### Other\n\n* Consider adding app integration with: Node.js, Django, Drupal, Wordpress\n  (Wherever opinionated layouts exist). Also, try to make one of these a plugin\n  to test out the concept.\n* clean up all the argument names in preparation for keyword argument support from sass.\n\nv0.12 \n=====\n\nThis release depends on Sass 3.2 and is aimed at taking advantage of\nthe new sass 3.2 feature set as well as really making the extensions\nsystem come alive. Since I don't foresee any deprecations in Sass 3.2,\nthis will not be a coordinated release. Instead, this release will\ntrail Sass 3.2 by a month or two.\n\n### Compass Core\n\n* Figure out what to do about multiple attribute properties like background.\n  Might require list and function support from sass.\n\n### Blueprint\n\n* If sass 3.2 is out with @function support, use that for grid\n  calculations, otherwise punt to 1.0.\n\n### Extensions\n\n* Extension registry on compass-style.org.\n* One step publishing via github + webhooks\n* Easy install via CLI\n* Local (per-user) extension repo with auto-discovery.\n* Video showing how easy it is to create, publish, and install an extension.\n\n\nv1.0 - Polaris\n==============\n\n### Blueprint\n\n* If the @extend version of the grid is full of win, make it the default.\n\n### Sassdoc\n\nExtract the compass documentation system into a stand-alone project.\n\n### Extensions\n\n* Build basic docs and host them for all extensions using sassdoc.\n* Support for selling extensions and taking a cut for umdf.org?\n\n### Project Tools\n\n* enable building project docs using the sassdoc tool.\n\nv2.0\n====\n\nVersion 2 is all about making compass easier to use. Compass and Sass\nwill have a GUI that makes it simple to manage your projects.\n\n### GUI Prerelease 1\n\n* Concept brainstorming\n* mockups\n* How can compass gui and sass gui interoperate or plug in.\n\n### GUI Prerelease 2\n\nBeta release as a separate install.\n\n### GUI Prerelease 3\n\n* Iterate based on feedback.\n* Integrate with a Sass GUI.\n* Embed the docs\n\n### One-click Installers\n\nInstall compass and sass with one click\n\n* Windows (Only if someone else wants to build and maintain it.)\n* Mac (.dmg + drag & drop app or installer)\n* Linux (Get distro packages going and in place for the 1.0 release)\n"
  },
  {
    "path": "cli/.gitignore",
    "content": "*.DS_Store\n*.tmproj\n*.lock\ntmp/*\ndevbin\n.sass-cache\ntest/tmp\ntest/fixtures/stylesheets/*/tmp\ntest/fixtures/stylesheets/*/saved\ntest/fixtures/stylesheets/empty\ntest/fixtures/stylesheets/*/sass/.sass-cache\ntest/fixtures/stylesheets/valid/css/*\npkg/*\ncompass-*.gem\ncoverage*\ndocs\n.bundle\nattic\ndevbin\n.rvmrc\n*.rbc\nvendor/ruby\nvendor\nGemfile.lock\n*.pkg\nRELEASE_VERSION\n"
  },
  {
    "path": "cli/Gemfile",
    "content": "source 'https://rubygems.org'\n\ngemspec unless defined?(CI)\n\nunless ENV['PKG']\n\n  gem \"sass\", \"~> 3.3.13\" unless defined?(CI)\n  gem \"compass-core\", :path => \"../core\" unless defined?(CI)\n  gem \"compass-import-once\", :path => \"../import-once\" unless defined?(CI)\n  gem 'sass-globbing', \"~> 1.1.1\"\n  gem \"cucumber\", \"~> 1.2.1\"\n  gem \"rspec\", \"~> 2.0.0\"\n  gem \"compass-validator\", \"3.0.1\"\n  gem \"css_parser\", \"~> 1.0.1\"\n  gem \"rubyzip\", \"0.9.9\"\n  gem 'mocha', '0.11.4'\n  gem 'minitest', '2.12.1'\n  gem 'diff-lcs', '~> 1.1.2'\n  gem 'rake'\n  gem 'json', '~> 1.7.7', :platforms => :ruby_18\n  gem 'true', \"~> 0.2.3\"\n  gem 'test-unit', '~> 3.0.9'\n\n  # Warning be carful adding OS dependant gems above this line it will break the CI server please\n  # place them below so they are excluded\n\n  unless ENV[\"CI\"]\n    gem 'rb-fsevent'\n    gem 'ruby_gntp'\n    gem \"ruby-prof\", :platforms => [:mri_19, :mri_20]\n    gem \"rcov\", :platforms => :mri_18\n    gem 'guard', :platforms => [:mri_20]\n    gem 'guard-test', :platforms => [:mri_20]\n    gem 'guard-cucumber', :platforms => [:mri_20]\n    # gem 'packager'\n    gem 'colorize'\n    gem 'pry'\n  end\nend\n"
  },
  {
    "path": "cli/Rakefile",
    "content": "sh \"git checkout lib/compass/generated_version.rb\"\nrequire 'rubygems'\nrequire 'rubygems/package_task'\nrequire 'rake/testtask'\nrequire 'fileutils'\n\n\nif ENV[\"PKG\"]\n  $: << File.expand_path(File.dirname(__FILE__))+\"/lib\"\nelse\n  require 'bundler/setup'\nend\n\nunless ENV['CI']\n  require 'colorize'\n  require 'fileutils'\nend\n\nbegin\n  require 'rake/dsl_definition'\nrescue LoadError\n  # pass\nend\n\n# ----- Default: Testing ------\ntask :default => [:test, :features]\n\nbegin\n  require 'cucumber'\n  require 'cucumber/rake/task'\n\n  Cucumber::Rake::Task.new(:features) do |t|\n    #t.cucumber_opts = %w{--format progress}\n  end\nrescue LoadError\n  $stderr.puts \"cannot load cucumber\"\nend\n\nRake::TestTask.new :test do |t|\n  t.libs << 'lib'\n  t.libs << 'test'\n  test_files = FileList['test/**/*_test.rb']\n  test_files.exclude('test/rails/*', 'test/haml/*')\n  t.test_files = test_files\n  t.verbose = true\nend\n\nRake::TestTask.new :units do |t|\n  t.libs << 'lib'\n  t.libs << 'test'\n  test_files = FileList['test/units/**/*_test.rb']\n  test_files.exclude('test/rails/*', 'test/haml/*')\n  t.test_files = test_files\n  t.verbose = true\nend\n\nRake::TestTask.new :integrations do |t|\n  t.libs << 'lib'\n  t.libs << 'test'\n  test_files = FileList['test/integrations/**/*_test.rb']\n  test_files.exclude('test/rails/*', 'test/haml/*')\n  t.test_files = test_files\n  t.verbose = true\nend\n\nnamespace :git do\n  task :clean do\n    sh \"git\", \"clean\", \"-fdx\"\n  end\nend\n\n\nbegin\n  require 'cucumber/rake/task'\n  require 'rcov/rcovtask'\n  namespace :rcov do\n    Cucumber::Rake::Task.new(:cucumber) do |t|\n      t.rcov = true\n      t.rcov_opts = %w{--exclude osx\\/objc,gems\\/,spec\\/,features\\/ --aggregate coverage.data}\n      t.rcov_opts << %[-o \"coverage\"]\n    end\n\n    Rcov::RcovTask.new(:units) do |rcov|\n      rcov.libs << 'lib'\n      test_files = FileList['test/**/*_test.rb']\n      test_files.exclude('test/rails/*', 'test/haml/*')\n      rcov.pattern    = test_files\n      rcov.output_dir = 'coverage'\n      rcov.verbose    = true\n      rcov.rcov_opts = %w{--exclude osx\\/objc,gems\\/,spec\\/,features\\/ --aggregate coverage.data}\n      rcov.rcov_opts << %[-o \"coverage\" --sort coverage]\n    end\n\n\n    desc \"Run both specs and features to generate aggregated coverage\"\n    task :all do |t|\n      rm \"coverage.data\" if File.exist?(\"coverage.data\")\n      Rake::Task[\"rcov:units\"].invoke\n      Rake::Task[\"rcov:cucumber\"].invoke\n    end\n  end\nrescue LoadError => e\n  puts \"WARNING: #{e}\"\nend\n\nnamespace :test do\n  debug = false\n  desc \"update test expectations if needed\"\n  task :update do\n    Rake::Task['test:update:fixtures'].invoke\n  end\n  task :debug do\n    debug = true\n    Rake::Task['test:update:fixtures'].invoke\n  end\n  namespace :update do\n    EXPECTED = 'css'\n    TMP = 'tmp'\n    #desc \"update fixture expectations for test cases if needed\"\n    task :fixtures do\n      fixtures = File.join('test/fixtures/stylesheets/compass'.split('/'))\n      # remove any existing temporary files\n      FileUtils.rm_rf(File.join(File.dirname(__FILE__), fixtures, TMP, '.'))\n      # compile the fixtures\n      puts \"checking test cases...\"\n      CHECKMARK = \"\\u2713 \"\n      filter = debug ? '--trace' : \"| grep 'error.*#{fixtures}'\"\n      errors = %x[compass compile #{fixtures} #{filter}]\n      # check for compilation errors\n      if not errors.empty?\n        puts \"Please fix the following errors before proceeding:\".colorize(:red) if not debug\n        puts errors\n      else\n        # check to see what's changed\n        diff = %x[diff -r #{File.join(fixtures, EXPECTED, '')} #{File.join(fixtures, TMP, '')}]\n        # ignore non-CSS files in css/\n        diff.gsub!(/^Only in .*\\/css\\/(.*)\\:.*[^.]/, '')\n        if diff.empty?\n          puts \"#{CHECKMARK}Cool! Looks like all the tests are up to date\".colorize(:green)\n        else\n          puts \"The following changes were found:\"\n          puts \"====================================\"\n          # check for new or removed expectations\n          diff.scan(/^Only in .*\\/(#{EXPECTED}|#{TMP})\\/(.*)\\: (.*).css/).each do |match|\n            config = (match[0] == TMP) ? [:green, '>', 'NEW TEST'] : [:red, '<', 'DELETED']\n            puts \"[#{File.join(match[1], match[2])}]  #{config[2].colorize(config[0])}\".colorize(:cyan)\n            new_file = File.join(File.dirname(__FILE__), fixtures, match[0], match[1], match[2]) + '.css'\n            puts File.read(new_file).gsub(/^(.*)/, config[1] + ' \\1').colorize(config[0])\n          end\n          diff = diff.gsub(/^diff\\s\\-r\\s.*\\/tmp\\/(.*).css/, '[\\1]'.colorize(:cyan))\n          diff = diff.gsub(/^Only in .*\\n?/, '')\n          diff = diff.gsub(/^(\\<.*)/, '\\1'.colorize(:red))\n          diff = diff.gsub(/^(\\>.*)/, '\\1'.colorize(:green))\n          diff = diff.gsub(/^(\\d+.*)/, '\\1'.colorize(:cyan))\n          puts diff\n          puts \"====================================\"\n          puts \"Are all of these changes expected? [y/n]\".colorize(:yellow)\n          if (($stdin.gets.chomp)[0] == 'y')\n            FileUtils.rm_rf(File.join(File.dirname(__FILE__), fixtures, EXPECTED, '.'))\n            FileUtils.cp_r(File.join(File.dirname(__FILE__), fixtures, TMP, '.'), File.join(File.dirname(__FILE__), fixtures, EXPECTED))\n            puts \"#{CHECKMARK}Thanks! The test expectations have been updated\".colorize(:green)\n          else\n            puts \"Please manually update the test cases and expectations\".colorize(:red)\n          end\n        end\n      end\n    end\n  end\nend\n\n# Release tasks\ngemspec_file = FileList['compass.gemspec'].first\nspec = eval(File.read(gemspec_file), binding, gemspec_file)\nspec.files.delete(\"VERSION\")\nspec.files.delete(\"VERSION_NAME\")\n\ndef spec.bump!\n  segments = version.to_s.split(\".\")\n  segments[-1] = segments.last.succ\n  self.version = Gem::Version.new(segments.join(\".\"))\nend\n\n# Set SAME_VERSION when moving to a new major version and you want to specify the new version\n# explicitly instead of bumping the current version.\n# E.g. rake build SAME_VERSION=true\nspec.bump! unless ENV[\"SAME_VERSION\"]\n\ndesc \"Run tests and build compass-#{spec.version}.gem\"\ntask :build => [:default, :gem]\n\ntask :gem => :release_version\n\ntask :release_version do\n  open(\"lib/compass/generated_version.rb\", \"w\") do |f|\n    f.write(<<VERSION_EOF)\nmodule Compass\n  VERSION = \"#{spec.version}\"\n  VERSION_NAME = \"#{File.read('VERSION_NAME').strip}\"\nend\nVERSION_EOF\n  end\nend\n\ndesc \"Make the prebuilt gem compass-#{spec.version}.gem public.\"\ntask :publish => [:record_version, :push_gem, :tag]\n\ndesc \"Build & Publish version #{spec.version}\" \ntask :release => [:build, :publish]\n\nGem::PackageTask.new(spec) do |pkg|\n  pkg.need_zip = true\n  pkg.need_tar = true\nend\n\ndesc \"Record the new version in version control for posterity\"\ntask :record_version do\n  unless ENV[\"SAME_VERSION\"]\n    open(FileList[\"VERSION\"].first, \"w\") do |f|\n      f.write(spec.version.to_s)\n    end\n    sh \"git add VERSION\"\n    sh \"git checkout lib/compass/generated_version.rb\"\n    sh %Q{git commit -m \"Bump version to #{spec.version}.\"}\n  end\nend\n\ndesc \"Tag the repo as #{spec.version} and push the code and tag.\"\ntask :tag do\n  sh \"git tag -a -m 'Version #{spec.version}' #{spec.version}\"\n  sh \"git push --tags origin #{`git rev-parse --abbrev-ref HEAD`}\"\nend\n\ndesc \"Push compass-#{spec.version}.gem to the rubygems server\"\ntask :push_gem do\n  sh \"gem push pkg/compass-#{spec.version}.gem\"\nend\n\n"
  },
  {
    "path": "cli/VERSION",
    "content": "1.0.3"
  },
  {
    "path": "cli/VERSION_NAME",
    "content": "Polaris\n"
  },
  {
    "path": "cli/bin/compass",
    "content": "#!/usr/bin/env ruby\n# The compass command line utility\n\n# This allows compass to run easily from a git checkout without install.\ndef fallback_load_path(path)\n  retried = false\n  begin\n    yield\n  rescue LoadError\n    unless retried\n      $: << path\n      retried = true\n      retry\n    end\n    raise\n  end\nend\n\nfallback_load_path(File.join(File.dirname(__FILE__), '..', 'lib')) do\n  require 'compass'\n  require 'compass/exec'\nend\n\nif defined?(Bundler)\n  require 'bundler/shared_helpers'\n  Bundler.require :assets if Bundler::SharedHelpers.in_bundle?\nend\n\nrunner = Proc.new do\n  Compass::Exec::SubCommandUI.new(ARGV).run!\nend\n\nif ARGV.delete(\"--profile\")\n  require 'ruby-prof'\n  RubyProf.start\n  exit_code = runner.call\n  result = RubyProf.stop\n\n  # Print a flat profile to text\n  printer = RubyProf::FlatPrinter.new(result)\n  printer.print(STDERR, 0)\n  exit exit_code\nelse\n  exit runner.call || 1\nend\n"
  },
  {
    "path": "cli/compass.gemspec",
    "content": "path = File.expand_path(\"lib\", File.dirname(__FILE__))\n$:.unshift(path) unless $:.include?(path)\nrequire 'compass/version'\n\nGem::Specification.new do |gemspec|\n  gemspec.name = \"compass\"\n  gemspec.version = Compass::VERSION # Update VERSION file to set this.\n  gemspec.description = \"Compass is a Sass-based Stylesheet Framework that streamlines the creation and maintenance of CSS.\"\n  gemspec.homepage = \"http://compass-style.org\"\n  gemspec.authors = [\"Chris Eppstein\", \"Scott Davis\", \"Eric M. Suzanne\", \"Brandon Mathis\", \"Nico Hagenburger\"]\n  gemspec.email = \"chris@eppsteins.net\"\n  gemspec.executables = %w(compass)\n  gemspec.require_paths = %w(lib)\n  gemspec.rubygems_version = \"1.3.5\"\n  gemspec.summary = %q{A Real Stylesheet Framework}\n\n  gemspec.add_dependency 'sass', '>= 3.3.13', '< 3.5'\n  gemspec.add_dependency 'compass-core', \"~> #{File.read(File.join(File.dirname(__FILE__),\"..\",\"core\",\"VERSION\")).strip}\"\n  gemspec.add_dependency 'compass-import-once', \"~> #{File.read(File.join(File.dirname(__FILE__),\"..\",\"import-once\",\"VERSION\")).strip}\"\n  gemspec.add_dependency 'chunky_png', '~> 1.2'\n  gemspec.add_dependency 'rb-fsevent', '>= 0.9.3'\n  gemspec.add_dependency 'rb-inotify', '>= 0.9'\n\n  gemspec.post_install_message = <<-MESSAGE\n    Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!\n  MESSAGE\n\n  gemspec.files = %w(LICENSE.markdown VERSION VERSION_NAME Rakefile)\n  gemspec.files += Dir.glob(\"bin/*\")\n  gemspec.files += Dir.glob(\"data/**/*\")\n  gemspec.files += Dir.glob(\"frameworks/**/*\")\n  gemspec.files += Dir.glob(\"lib/**/*\")\n  gemspec.files += Dir.glob(\"test/**/*.*\")\n  gemspec.files -= Dir.glob(\"test/fixtures/stylesheets/*/saved/**/*.*\")\n  gemspec.test_files = Dir.glob(\"test/**/*.*\")\n  gemspec.test_files -= Dir.glob(\"test/fixtures/stylesheets/*/saved/**/*.*\")\n  gemspec.test_files += Dir.glob(\"features/**/*.*\")\nend\n\n"
  },
  {
    "path": "cli/features/command_line.feature",
    "content": "Feature: Command Line\n  In order to manage my stylesheets\n  As a user on the command line\n  I want to create a new project\n\n  Scenario: Install a project without a framework\n    When I create a project using: compass create my_project\n    Then a directory my_project/ is created\n    And a configuration file my_project/config.rb is created\n    And a sass file my_project/sass/screen.scss is created\n    And a sass file my_project/sass/print.scss is created\n    And a sass file my_project/sass/ie.scss is created\n    And a css file my_project/stylesheets/screen.css is created\n    And a css file my_project/stylesheets/print.css is created\n    And a css file my_project/stylesheets/ie.css is created\n    And I am told how to link to /stylesheets/screen.css for media \"screen, projection\"\n    And I am told how to link to /stylesheets/print.css for media \"print\"\n    And I am told how to conditionally link \"IE\" to /stylesheets/ie.css for media \"screen, projection\"\n\n  Scenario: Install a project with specific directories\n    When I create a project using: compass create custom_project --using compass --sass-dir sass --css-dir css --images-dir assets/imgs\n    Then a directory custom_project/ is created\n    And a directory custom_project/sass/ is created\n    And a directory custom_project/css/ is created\n    And a sass file custom_project/sass/screen.scss is created\n    And a css file custom_project/css/screen.css is created\n\n  Scenario: Creating a bare project\n    When I create a project using: compass create bare_project --bare\n    Then a directory bare_project/ is created\n    And a configuration file bare_project/config.rb is created\n    And a directory bare_project/sass/ is created\n    And a directory bare_project/stylesheets/ is not created\n    And I am congratulated\n    And I am told that I can place stylesheets in the sass subdirectory\n    And I am told how to compile my sass stylesheets\n\n  Scenario: Compiling a project with errors\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    And the project has a file named \"sass/error.scss\" containing:\n      \"\"\"\n        .broken {\n      \"\"\"\n    When I run: compass compile\n    Then the command exits with a non-zero error code\n\n  Scenario: Creating a bare project with a framework\n    When I create a project using: compass create bare_project --using blueprint --bare\n    Then an error message is printed out: A bare project cannot be created when a framework is specified.\n    And the command exits with a non-zero error code\n\n  Scenario: Compiling an existing project.\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass compile\n    Then a directory tmp/ is created\n    And a css file tmp/simple.css is created\n\n  Scenario: Compiling an existing project with a specified project\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    And I am in the parent directory\n    When I run: compass compile tmp_valid\n    Then a directory tmp_valid/tmp/ is created\n    And a css file tmp_valid/tmp/simple.css is created\n\n  Scenario: Recompiling a project with no changes\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass compile\n    And I run: compass compile\n\n  Scenario: compiling a specific file in a project\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    And I run: compass compile sass/simple.sass\n    Then a sass file sass/another_simple.scss is not mentioned\n    And a css file tmp/simple.css is reported written\n    And a css file tmp/simple.css is created\n    And a css file tmp/another_simple.css is not created\n\n  Scenario: Re-compiling a specific file in a project with no changes\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass compile\n    And I run: compass compile sass/simple.sass --force\n    Then a sass file sass/another_simple.scss is not mentioned\n    And a css file tmp/simple.css is reported written\n\n  Scenario: Basic help\n    When I run: compass help\n    Then I should see the following \"primary\" commands:\n      | clean   |\n      | compile |\n      | create  |\n      | init    |\n      | watch   |\n    And I should see the following \"other\" commands:\n      | config      |\n      | extension   |\n      | frameworks  |\n      | help        |\n      | imports     |\n      | install     |\n      | interactive |\n      | sprite      |\n      | stats       |\n      | unpack      |\n      | validate    |\n      | version     |\n\n  Scenario: Recompiling a project with no material changes\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass compile\n    And I wait 1 second\n    And I touch sass/simple.sass\n    And I run: compass compile\n    Then a css file tmp/simple.css is reported written\n\n  Scenario: Recompiling a project with changes\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass compile\n    And I wait 1 second\n    And I add some sass to sass/simple.sass\n    And I run: compass compile\n    And a css file tmp/simple.css is reported written\n\n  Scenario: Cleaning a project\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass compile\n    And I run: compass clean\n    Then the following files are reported removed:\n      | .sass-cache/           |\n      | tmp/simple.css         |\n      | tmp/another_simple.css |\n    And the following files are removed:\n      | .sass-cache/           |\n      | tmp/simple.css         |\n      | tmp/another_simple.css |\n\n  @now\n  Scenario: Watching a project for changes\n    Given ruby supports fork\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass compile\n    And I run in a separate process: compass watch \n    And I wait 4 seconds\n    And I touch sass/simple.sass\n    And I wait 2 seconds\n    And I shutdown the other process\n    Then a css file tmp/simple.css is reported written\n\n  Scenario: Generate a compass configuration file\n    Given I should clean up the directory: config\n    When I run: compass config config/compass.rb --sass-dir sass --css-dir assets/css\n    Then a configuration file config/compass.rb is created\n    And the following configuration properties are set in config/compass.rb:\n      | property | value      |\n      | sass_dir | sass       |\n      | css_dir  | assets/css |\n\n  Scenario Outline: Print out a configuration value\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass config -p <property>\n    Then I should see the following output: <value>\n    And the command exits <exit>\n  \n    Examples:\n      | property        | value                    | exit     |\n      | extensions_dir  | extensions               | normally |\n      | extensions_path | $PROJECT_PATH/extensions | normally |\n      | css_dir         | tmp                      | normally |\n      | css_path        | $PROJECT_PATH/tmp        | normally |\n      | sass_dir        | sass                     | normally |\n      | sass_path       | $PROJECT_PATH/sass       | normally |\n      | foobar          | ERROR: configuration property 'foobar' does not exist | with a non-zero error code | \n\n  @validator\n  Scenario: Validate the generated CSS\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: compass validate\n    Then my css is validated\n    And I am informed that my css is valid.\n\n  @stats\n  Scenario: Get stats for my project\n    Given I am using the existing project in test/fixtures/stylesheets/valid\n    When I run: bundle exec compass stats\n    Then I am told statistics for each file:\n      | Filename                 | Rules | Properties |    Mixins Defs | Mixins Used | Filesize | CSS Selectors | CSS Properties | CSS Filesize |\n      | sass/simple.sass         |   \\d+ |        \\d+ |            \\d+ |         \\d+ |  \\d+ K?B |           \\d+ |            \\d+ |      \\d+ K?B |\n      | sass/another_simple.scss |   \\d+ |        \\d+ |            \\d+ |         \\d+ |  \\d+ K?B |           \\d+ |            \\d+ |      \\d+ K?B |\n      | Total.*                  |   \\d+ |        \\d+ |            \\d+ |         \\d+ |  \\d+ K?B |           \\d+ |            \\d+ |      \\d+ K?B |\n\n  @listframeworks\n  Scenario: List frameworks registered with compass\n    When I run: compass frameworks\n    Then I should see the following lines of output:\n      | compass    |\n\n"
  },
  {
    "path": "cli/features/extensions.feature",
    "content": "Feature: Extensions\n  In order to have an open source ecosystem for stylesheets\n  As a compass user\n  I can install extensions that others have created\n  And I can create and publish my own extensions\n\n  @listframeworks\n  Scenario: Extensions directory for stand_alone projects\n    Given I am using the existing project in test/fixtures/stylesheets/compass\n    And the \"extensions\" directory exists\n    And and I have a fake extension at extensions/testing\n    When I run: compass frameworks\n    Then the list of frameworks includes \"testing\"\n\n  @listframeworks\n  Scenario: Shared extensions directory\n    Given the \"~/.compass/extensions\" directory exists\n    And and I have a fake extension at ~/.compass/extensions/testing\n    And I am using the existing project in test/fixtures/stylesheets/compass\n    When I run: compass frameworks\n    Then the list of frameworks includes \"testing\"\n\n  @listframeworks\n  Scenario: Frameworks without templates\n    Given I am using the existing project in test/fixtures/stylesheets/uses_only_stylesheets_ext\n    When I run: compass frameworks\n    Then the list of frameworks includes \"only_stylesheets\"\n"
  },
  {
    "path": "cli/features/step_definitions/command_line_steps.rb",
    "content": "$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../test')))\n\nrequire 'bundler/setup'\nrequire 'test_helper'\n\nrequire 'compass/exec'\ninclude Compass::TestCaseHelper\ninclude Compass::CommandLineHelper\ninclude Compass::IoHelper\n\nBefore do\n  Compass.reset_configuration!\n  @cleanup_directories = []\n  @original_working_directory = Dir.pwd\nend\n \nAfter do\n  Dir.chdir @original_working_directory\n  @cleanup_directories.each do |dir|\n    FileUtils.rm_rf dir\n  end\nend\n\nGiven \"ruby supports fork\" do\n  if RUBY_PLATFORM == \"java\"\n    pending\n  end\nend\n\n# Given Preconditions\nGiven %r{^I am using the existing project in ([^\\s]+)$} do |project|\n  tmp_project = \"tmp_#{File.basename(project)}\"\n  @cleanup_directories << tmp_project\n  FileUtils.cp_r project, tmp_project\n  Dir.chdir tmp_project\nend\n\nGiven %r{^I am in the parent directory$} do\n  Dir.chdir \"..\"\nend\n\nGiven /^I should clean up the directory: (\\w+)$/ do |directory|\n  @cleanup_directories << directory\nend\n\nGiven %r{^the project has a file named \"([^\"]*)\" containing:$} do |arg1, string|\n  File.open(arg1, \"w\") do |f|\n    f << string\n  end\nend\n\n\n# When Actions are performed\nWhen /^I create a project using: compass create ([^\\s]+) ?(.+)?$/ do |dir, args|\n  @cleanup_directories << dir\n  compass 'create', dir, *(args || '').split\nend\n\nWhen /^I initialize a project using: compass init ?(.+)?$/ do |args|\n  compass 'init', *(args || '').split\nend\n\nWhen /^I run: compass ([^\\s]+) ?(.+)?$/ do |command, args|\n  compass command, *(args || '').split\nend\n\nWhen /^I run in a separate process: compass ([^\\s]+) ?(.+)?$/ do |command, args|\n  unless @other_process = fork \n    @last_result = ''\n    @last_error = ''\n    Signal.trap(\"HUP\") do\n      open('/tmp/last_result.compass_test.txt', 'w') do |file|\n        file.puts $stdout.string\n      end\n      open('/tmp/last_error.compass_test.txt', 'w') do |file|\n        file.puts $stderr.string\n      end\n      exit!\n    end\n    # this command will run forever\n    # we kill it with a HUP signal from the parent process.\n    args = (args || '').split\n    args << { :wait => 5 }\n    compass command, *args\n    exit!\n  end\nend\n\nWhen /^I shutdown the other process$/ do\n  Process.kill(\"HUP\", @other_process)\n  Process.wait\n  @last_result = File.read('/tmp/last_result.compass_test.txt')\n  @last_error = File.read('/tmp/last_error.compass_test.txt')\nend\n\nWhen /^I touch ([^\\s]+)$/ do |filename|\n  FileUtils.touch filename\nend\n\nWhen /^I wait ([\\d.]+) seconds?$/ do |count|\n  sleep count.to_f\nend\n\nWhen /^I add some sass to ([^\\s]+)$/ do |filename|\n  open(filename, \"w+\") do |file|\n    file.puts \".added .some .arbitrary\"\n    file.puts \"  sass: code\"\n  end\nend\n\n# Then postconditions\nThen /^a directory ([^ ]+) is (not )?created$/ do |directory, negated|\n  File.directory?(directory).should == !negated\nend\n \nThen /an? \\w+ file ([^ ]+) is (not )?removed/ do |filename, negated|\n  File.exists?(filename).should == !!negated\nend\n\nThen /an? \\w+ file ([^ ]+) is (not )?created/ do |filename, negated|\n  File.exists?(filename).should == !negated\nend\n\nThen \"the following files are reported removed:\" do |table|\n  table.rows.each do |css_file|\n    #need to find a better way but this works for now\n    step %Q{a css file #{css_file.first} is reported removed}\n  end\nend\n\nThen \"the following files are removed:\" do |table|\n  table.rows.each do |css_file|\n    step %Q{a css file #{css_file.first} is removed}\n  end\nend\n\nThen /an? \\w+ file ([^ ]+) is reported removed/ do |filename|\n  @last_result.should =~ /delete.*#{Regexp.escape(filename)}/\nend\n\nThen /an? \\w+ file ([^ ]+) is reported written/ do |filename|\n  @last_result.should =~ /write.*#{Regexp.escape(filename)}/\nend\n\nThen /a \\w+ file ([^ ]+) is (?:reported )?compiled/ do |filename|\n  @last_result.should =~ /compile.*#{Regexp.escape(filename)}/\nend\n\nThen /a \\w+ file ([^ ]+) is reported unchanged/ do |filename|\n  @last_result.should =~ /unchanged.*#{Regexp.escape(filename)}/\nend\n\nThen /a \\w+ file ([^ ]+) is reported identical/ do |filename|\n  @last_result.should =~ /identical.*#{Regexp.escape(filename)}/\nend\n\nThen /a \\w+ file ([^ ]+) is reported overwritten/ do |filename|\n  @last_result.should =~ /overwrite.*#{Regexp.escape(filename)}/\nend\n\nThen /a \\w+ file ([^ ]+) is not mentioned/ do |filename|\n  @last_result.should_not =~ /#{Regexp.escape(filename)}/\nend\n\nThen /I am told how to link to ([^ ]+) for media \"([^\"]+)\"/ do |stylesheet, media|\n  @last_result.should =~ %r{<link href=\"#{stylesheet}\" media=\"#{media}\" rel=\"stylesheet\" type=\"text/css\" />}\nend\n\nThen /I am told how to conditionally link \"([^\"]+)\" to ([^ ]+) for media \"([^\"]+)\"/ do |condition, stylesheet, media|\n  @last_result.should =~ %r{<!--\\[if #{condition}\\]>\\s+<link href=\"#{stylesheet}\" media=\"#{media}\" rel=\"stylesheet\" type=\"text/css\" />\\s+<!\\[endif\\]-->}mi\nend\n\nThen /^an error message is printed out: (.+)$/ do |error_message|\n  @last_error.should =~ Regexp.new(Regexp.escape(error_message))\nend\n\nThen /^the command exits with a non\\-zero error code$/ do\n  @last_exit_code.should_not == 0\nend\n\nThen /^the command exits normally$/ do\n  @last_exit_code.should == 0\nend\n\nThen /^I am congratulated$/ do\n  @last_result.should =~ /Congratulations!/\nend\n\nThen /^I am told that I can place stylesheets in the ([^\\s]+) subdirectory$/ do |subdir|\n  @last_result.should =~ /You may now add sass stylesheets to the #{subdir} subdirectory of your project./\nend\n\nThen /^I am told how to compile my sass stylesheets$/ do\n  @last_result.should =~ /You must compile your sass stylesheets into CSS when they change.\\nThis can be done in one of the following ways:/\nend\n\nThen /^I should be shown a list of \"([^\"]+)\" commands$/ do |kind|\n  @last_result.should =~ /^#{kind.capitalize} Commands:$/\n  @last_command_list = []\n  found = false\n  indent = nil\n  @last_result.split(\"\\n\").each do |line|\n    if line =~ /^#{kind.capitalize} Commands:$/\n      found = true\n    elsif found && line =~ /^\\s+/\n      @last_command_list << line\n    elsif found && line =~ /^$|^\\w/\n      break\n    end\n  end\n\nend\n\nThen /^the list of commands should describe the ([^ ]+) command$/ do |command|\n  @last_result.should =~ /^\\s+\\* #{command}\\s+- [A-Z].+$/\nend\n\nThen /^the following configuration properties are set in ([^ ]+):$/ do |config_file, table|\n  \n  config = Compass::Configuration::FileData.new_from_file(config_file)\n  table.hashes.each do |hash|\n   config.send(hash['property']).should == hash['value']\n  end\nend\n\nThen /^my css is validated$/ do\n  if @last_error =~ /The Compass CSS Validator could not be loaded/\n    pending \"Missing Dependency: sudo gem install compass-validator\"\n  else\n    @last_result.should =~ /files? validated/\n  end\nend\n\nThen /^I am informed that my css is valid.$/ do\n  @last_result.should =~ /Result: Valid/\nend\n\nThen /^I am told statistics for each file:$/ do |table|\n  # table is a Cucumber::Ast::Table\n  table.raw.each do |row|\n    re = Regexp.new row.join(' *\\| *')\n    @last_result.should =~ re\n  end\nend\n\nThen /^I should see the following \"([^\"]+)\" commands:$/ do |kind, table|\n\n\n  step %Q{I should be shown a list of \"#{kind}\" commands}\n\n  commands = @last_command_list.map{|c| c =~ /^\\s+\\* ([^ ]+)\\s+- [A-Z].+$/; [$1]}\n  table.diff!(commands)\nend\n     \n\nThen /^the image ([^ ]+) has a size of (\\d+)x(\\d+)$/ do |file, width, height| \n  # see http://snippets.dzone.com/posts/show/805\n  size = File.open(file, \"rb\") {|io| io.read}[0x10..0x18].unpack('NN')\n  size.should == [width.to_i, height.to_i]\nend\n\nThen /^I should see the following lines of output:$/ do |table|\n  table.diff!([['compass']])\nend\n\nThen /^I should see the following output: (.+)$/ do |expected|\n  (@last_result.strip + @last_error.strip).should == expected.gsub(/\\$PROJECT_PATH/,Dir.pwd).strip\nend\n"
  },
  {
    "path": "cli/features/step_definitions/extension_steps.rb",
    "content": "Given /^the \"([^\\\"]*)\" directory exists$/ do |directory|\n  directory.gsub!('~', ENV[\"HOME\"]) if directory.include?('~/')\n  FileUtils.mkdir_p directory\nend\n\nGiven /^and I have a fake extension at (.*)$/ do |directory|\n  directory.gsub!('~', ENV[\"HOME\"]) if directory.include?('~/')\n  FileUtils.mkdir_p File.join(directory, 'stylesheets')\n  FileUtils.mkdir_p File.join(directory, 'templates/project')\n  open(File.join(directory, 'templates/project/manifest.rb'),\"w\") do |f|\n    f.puts %Q{\n      description \"This is a fake extension\"\n\n      help \"this is the fake help\"\n\n      welcome_message \"this is a fake welcome\"\n    }\n  end\nend\n\nThen /^the list of frameworks includes \"([^\\\"]*)\"$/ do |framework|\n  @last_result.split(\"\\n\").map{|f| f.gsub(/(^\\s+[*-]\\s+)|(\\s+$)/,'')}.should include(framework)\nend\n\n"
  },
  {
    "path": "cli/gemfiles/listen_2.gemfile",
    "content": "CI=true\nmain_gemfile = File.expand_path(File.join(File.dirname(__FILE__), \"..\", \"Gemfile\"))\neval File.read(main_gemfile), nil, main_gemfile\n\ngem 'sass', '~> 3.3.12'\ngem 'compass', :path => \"../\"\ngem 'compass-core', :path => \"../../core\"\ngem 'compass-import-once', :path => \"../../import-once\"\ngem 'listen', '~> 2.7.1'\n\ngemspec :path=>\"../\"\n"
  },
  {
    "path": "cli/gemfiles/sass_3_3.gemfile",
    "content": "CI=true\nmain_gemfile = File.expand_path(File.join(File.dirname(__FILE__), \"..\", \"Gemfile\"))\neval File.read(main_gemfile), nil, main_gemfile\n\ngem 'sass', \"~> 3.3.12\"\ngem 'compass', :path => \"../\"\ngem 'compass-core', :path => \"../../core\"\ngem 'compass-import-once', :path => \"../../import-once\"\n\ngemspec :path=>\"../\"\n"
  },
  {
    "path": "cli/gemfiles/sass_local.gemfile",
    "content": "CI=true\nmain_gemfile = File.expand_path(File.join(File.dirname(__FILE__), \"..\", \"Gemfile\"))\neval File.read(main_gemfile), nil, main_gemfile\n\ngem 'sass', :path => \"../../sass\"\ngem 'compass', :path => \"../\"\n\ngemspec :path=>\"../\"\n"
  },
  {
    "path": "cli/lib/compass/actions.rb",
    "content": "module Compass\n  module Actions\n\n    attr_writer :logger\n\n    def logger\n      @logger ||= ::Compass::Logger.new\n    end\n\n    # copy/process a template in the compass template directory to the project directory.\n    def copy(from, to, options = nil, binary = false)\n      options ||= self.options if self.respond_to?(:options)\n      if binary\n        contents = File.new(from,\"rb\").read\n      else\n        contents = File.new(from).read\n      end  \n      write_file to, contents, options, binary\n    end\n\n    # create a directory and all the directories necessary to reach it.\n    def directory(dir, options = nil)\n      options ||= self.options if self.respond_to?(:options)\n      options ||= {}\n      if File.exists?(dir) && File.directory?(dir)\n          # do nothing\n      elsif File.exists?(dir)\n        msg = \"#{basename(dir)} already exists and is not a directory.\"\n        raise Compass::FilesystemConflict.new(msg)\n      else\n        log_action :directory, separate(\"#{basename(dir)}/\"), options\n        FileUtils.mkdir_p(dir)\n      end\n    end\n\n    # Write a file given the file contents as a string\n    def write_file(file_name, contents, options = nil, binary = false)\n      options ||= self.options if self.respond_to?(:options)\n      skip_write = false\n      contents = process_erb(contents, options[:erb]) if options[:erb]\n      if File.exists?(file_name)\n        existing_contents = IO.read(file_name)\n        if existing_contents == contents\n          log_action :identical, basename(file_name), options\n          skip_write = true\n        elsif options[:force]\n          log_action :overwrite, basename(file_name), options\n        else\n          msg = \"File #{basename(file_name)} already exists. Run with --force to force overwrite.\"\n          raise Compass::FilesystemConflict.new(msg)\n        end\n      else\n        log_action :create, basename(file_name), options\n      end\n      if skip_write\n        FileUtils.touch file_name\n      else\n        mode = \"w\"\n        mode << \"b\" if binary\n        open(file_name, mode) do |file|\n          file.write(contents)\n        end\n      end\n    end\n\n    def process_erb(contents, ctx = nil)\n      ctx = Object.new.instance_eval(\"binding\") unless ctx.is_a? Binding\n      ERB.new(contents).result(ctx)\n    end\n\n    def remove(file_name)\n      file_name ||= ''\n      if File.directory?(file_name)\n        FileUtils.rm_rf file_name\n        log_action :remove, basename(file_name)+\"/\", options\n      elsif File.exists?(file_name)\n        File.unlink file_name\n        log_action :remove, basename(file_name), options\n      end\n    end\n\n    def basename(file)\n      relativize(file) {|f| File.basename(file)}\n    end\n\n    def relativize(path)\n      path = File.expand_path(path)\n      if path.index(working_path+File::SEPARATOR) == 0\n        path[(working_path+File::SEPARATOR).length..-1]\n      elsif block_given?\n        yield path\n      else\n        path\n      end\n    end\n\n    # Write paths like we're on unix and then fix it\n    def separate(path)\n      path.gsub(%r{/}, File::SEPARATOR)\n    end\n\n    # Removes the trailing separator, if any, from a path.\n    def strip_trailing_separator(path)\n      (path[-1..-1] == File::SEPARATOR) ? path[0..-2] : path\n    end\n\n    def log_action(action, file, options)\n      quiet = !!options[:quiet]\n      quiet = false if options[:loud] && options[:loud] == true\n      quiet = false if options[:loud] && options[:loud].is_a?(Array) && options[:loud].include?(action)\n      unless quiet\n        logger.record(action, file, options[:extra].to_s)\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/app_integration/stand_alone/configuration_defaults.rb",
    "content": "module Compass\n  module AppIntegration\n    module StandAlone\n      module ConfigurationDefaults\n        def default_project_type\n          :stand_alone\n        end\n\n        def sass_dir_without_default\n          \"sass\"\n        end\n\n        def javascripts_dir_without_default\n          \"javascripts\"\n        end\n\n        def css_dir_without_default\n          \"stylesheets\"\n        end\n\n        def images_dir_without_default\n          \"images\"\n        end\n\n        def default_cache_dir\n          \".sass-cache\"\n        end\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/app_integration/stand_alone/installer.rb",
    "content": "module Compass\n  module Installers\n    class Base\n    end\n    class ManifestInstaller < Base\n    end\n  end\n\n  module AppIntegration\n    module StandAlone\n      class Installer < Compass::Installers::ManifestInstaller\n\n        def init\n          directory targetize(\"\")\n          super\n        end\n\n        def write_configuration_files(config_file = nil)\n          config_file ||= targetize('config.rb')\n          write_file config_file, config_contents\n        end\n\n        def config_files_exist?\n          File.exists? targetize('config.rb')\n        end\n\n        def config_contents\n          project_path, Compass.configuration.project_path = Compass.configuration.project_path, nil\n          Compass.configuration.serialize\n        ensure\n          Compass.configuration.project_path = project_path\n        end\n\n        def prepare\n          write_configuration_files unless config_files_exist? || !@manifest.generate_config?\n        end\n\n        def completed_configuration\n          nil\n        end\n\n        def finalize(options = {})\n          if options[:create] && !manifest.welcome_message_options[:replace]\n            puts <<-NEXTSTEPS\n\n*********************************************************************\nCongratulations! Your compass project has been created.\n\nYou may now add and edit sass stylesheets in the #{Compass.configuration.sass_dir} subdirectory of your project.\n\nSass files beginning with an underscore are called partials and won't be\ncompiled to CSS, but they can be imported into other sass stylesheets.\n\nYou can configure your project by editing the config.rb configuration file.\n\nYou must compile your sass stylesheets into CSS when they change.\nThis can be done in one of the following ways:\n  1. To compile on demand:\n     compass compile [path/to/project]\n  2. To monitor your project for changes and automatically recompile:\n     compass watch [path/to/project]\n\nMore Resources:\n  * Website: http://compass-style.org/\n  * Sass: http://sass-lang.com\n  * Community: http://groups.google.com/group/compass-users/\n\nNEXTSTEPS\n          end\n          puts manifest.welcome_message if manifest.welcome_message\n          if manifest.has_stylesheet? && !manifest.welcome_message_options[:replace]\n            puts \"\\nTo import your new stylesheets add the following lines of HTML (or equivalent) to your webpage:\"\n            puts stylesheet_links\n          end\n        end\n\n        def compilation_required?\n          @manifest.compile?\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/app_integration/stand_alone.rb",
    "content": "%w(configuration_defaults installer).each do |lib|\n  require \"compass/app_integration/stand_alone/#{lib}\"\nend\n\nmodule Compass\n  module AppIntegration\n    module StandAlone\n\n      extend self\n\n      def installer(*args)\n        Installer.new(*args)\n      end\n\n      def configuration\n        Compass::Configuration::Data.new('stand_alone').\n          extend(ConfigurationDefaults)\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/app_integration.rb",
    "content": "require \"compass/app_integration/stand_alone\"\n\nmodule Compass\n  module AppIntegration\n    module Helpers\n      #attr_accessor :project_types\n      DEAFULT_PROJECT_TYPES = {\n        :stand_alone => \"Compass::AppIntegration::StandAlone\"\n      }\n\n      def init\n        @project_types ||= DEAFULT_PROJECT_TYPES.dup\n      end\n\n      def project_types\n        @project_types\n      end\n\n      def default?\n        @project_types.keys === DEAFULT_PROJECT_TYPES.keys\n      end\n\n      def lookup(type)\n        unless @project_types[type].nil?\n          eval @project_types[type]\n        else\n          raise Compass::Error, \"No application integration exists for #{type}\"\n        end\n      end\n\n      def register(type, klass)\n        @project_types[type] = klass\n      end\n\n    end\n    extend Helpers\n    init\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/base.rb",
    "content": "module Compass\n  module Commands\n    class Base\n      def self.register(command_name)\n        Compass::Commands[command_name] = self\n      end\n\n      include Actions\n\n      attr_accessor :working_path, :options\n\n      def initialize(working_path, options)\n        self.working_path = working_path.to_s\n        self.options = options\n      end\n      \n      def execute\n        perform\n      end\n\n      def perform\n        raise StandardError.new(\"Not Implemented\")\n      end\n\n      def successful?\n        !@failed\n      end\n\n      def failed!\n        @failed = true\n      end\n\n      protected\n\n      def framework\n        unless Compass::Frameworks[options[:framework]]\n          raise Compass::Error.new(\"No such framework: #{options[:framework].inspect}\")\n        end\n        Compass::Frameworks[options[:framework]]\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/clean_project.rb",
    "content": "require 'compass/commands/project_base'\nrequire 'compass/compiler'\n\nmodule Compass\n  module Commands\n    module CleanProjectOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{\n          Usage: compass clean [path/to/project] [options]\n\n          Description:\n          Remove generated files and the sass cache.\n\n          Options:\n        }.split(\"\\n\").map{|l| l.gsub(/^ */,'')}.join(\"\\n\")\n\n        super\n      end\n    end\n\n    class CleanProject < UpdateProject\n\n      register :clean\n\n      def initialize(working_path, options)\n        super\n        assert_project_directory_exists!\n      end\n\n      def perform\n        compiler = new_compiler_instance\n        compiler.clean!\n        Compass::SpriteImporter.find_all_sprite_map_files(Compass.configuration.generated_images_path).each do |sprite|\n          remove sprite\n        end\n      end\n\n      def determine_cache_location\n        Compass.configuration.cache_path || Sass::Plugin.options[:cache_location] || File.join(working_path, \".sass-cache\")\n      end\n\n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(CleanProjectOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def primary; true; end\n\n        def description(command)\n          \"Remove generated files and the sass cache\"\n        end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n\n        def parse_arguments!(parser, arguments)\n          if arguments.size > 0\n            parser.options[:project_name] = arguments.shift if File.directory?(arguments.first)\n            unless arguments.empty?\n              parser.options[:sass_files] = arguments.dup\n              parser.options[:force] = true\n            end\n          end\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/create_project.rb",
    "content": "require 'fileutils'\nrequire 'compass/commands/stamp_pattern'\n\nmodule Compass\n  module Commands\n    module CreateProjectOptionsParser\n      def set_options(opts)\n\n        if $command == \"create\"\n          opts.banner = %Q{\n            Usage: compass create path/to/project [options]\n\n            Description:\n            Create a new compass project at the path specified.\n\n            Options:\n          }.split(\"\\n\").map{|l| l.gsub(/^ */,'')}.join(\"\\n\")\n\n          opts.on_tail(\"--bare\", \"Don't generate any Sass or CSS files.\") do\n            self.options[:bare] = true\n          end\n        else\n          opts.banner = %Q{\n            Usage: compass init project_type path/to/project [options]\n\n            Description:\n            Initialize an existing project at the path specified.\n\n            Supported Project Types:\n            * rails\n\n            Options:\n          }.split(\"\\n\").map{|l| l.gsub(/^ */,'')}.join(\"\\n\").strip\n        end\n\n        opts.on(\"--using PATTERN\", \"A framework's pattern to use when creating the project.\") do |framework|\n          framework = framework.split('/', 2)\n          self.options[:framework] = framework[0]\n          self.options[:pattern] = framework[1]\n        end\n\n        opts.on(\"-x\", \"--syntax SYNTAX\", [:sass, :scss], \"Specify the syntax to use when generating stylesheets.\", \"One of sass or scss. Defaults to scss.\") do |syntax|\n          self.options[:preferred_syntax] = syntax\n        end\n\n        opts.on(\"--prepare\", \"Prepare the project by only creating configuration files.\") do\n          self.options[:prepare] = true\n        end\n\n        super\n\n      end\n    end\n\n    class CreateProject < StampPattern\n\n      register :create\n      register :init\n\n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(CreateProjectOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def description(command)\n          if command.to_sym == :create\n            \"Create a new compass project\"\n          else\n            \"Add compass to an existing project\"\n          end\n        end\n\n        def primary; true; end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parse_options!(parser, arguments)\n          parse_arguments!(parser, arguments)\n          if parser.options[:framework] && parser.options[:bare]\n            raise Compass::Error, \"A bare project cannot be created when a framework is specified.\"\n          end\n          set_default_arguments(parser)\n          parser.options\n        end\n\n        def parse_init!(arguments)\n          parser = option_parser(arguments)\n          parse_options!(parser, arguments)\n          if arguments.size > 0\n            parser.options[:project_type] = arguments.shift.to_sym\n          end\n          parse_arguments!(parser, arguments)\n          set_default_arguments(parser)\n          parser.options\n        end\n\n        def parse_options!(parser, arguments)\n          parser.parse!\n          parser\n        end\n\n        def parse_arguments!(parser, arguments)\n          if arguments.size == 1\n            parser.options[:project_name] = arguments.shift\n          elsif arguments.size == 0\n            # default to the current directory.\n          else\n            raise Compass::Error, \"Too many arguments were specified.\"\n          end\n        end\n\n        def set_default_arguments(parser)\n          parser.options[:framework] ||= :compass\n          parser.options[:pattern] ||= \"project\"\n        end\n      end\n\n      def is_project_creation?\n        true\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/default.rb",
    "content": "module Compass\n  module Commands\n    module DefaultOptionsParser\n      def set_options(opts)\n        opts.on(\"--trace\") do\n          self.options[:trace] = true\n        end\n        opts.on(\"-?\", \"-h\", \"--help\") do\n          self.options[:command] = Proc.new do\n            Help.new(working_path, options.merge(:help_command => \"help\"))\n          end\n        end\n        opts.on(\"-q\", \"--quiet\") do\n          self.options[:quiet] = true\n        end\n        opts.on(\"-v\", \"--version\") do\n          self.options[:command] = Proc.new do\n            PrintVersion.new(working_path, options)\n          end\n        end\n        super\n      end\n    end\n    class Default < Base\n      \n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(DefaultOptionsParser)\n        end\n        # def usage\n        #   $stderr.puts caller.join(\"\\n\")\n        #   \"XXX\"\n        # end\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parser.options[:command] ||= Proc.new do\n            Help.new(working_path, options.merge(:help_command => \"help\"))\n          end\n          parser.options\n        end\n      end\n\n      def execute\n        instance_eval(&options[:command]).execute\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/extension_command.rb",
    "content": "require 'fileutils'\nrequire 'compass/commands/base'\n\nmodule Compass\n  module Commands\n    module ExtensionsOptionParser\n      def set_options(opts)\n        opts.banner = %Q{\nUsage: compass extension install EXTENSION_NAME [options]\n       compass extension uninstall EXTENSION_NAME [options]\n       compass extension list\n\nDescription:\n  Manage the list of extensions on your system.\n  Compass to all of your compass projects.\n\nExample:\n  compass extension install sassy-buttons\n  compass extension uninstall sassy-buttons\n\n}\n        super\n      end\n    end\n\n    class ExtensionCommand < Base\n\n      register :extension\n\n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(ExtensionsOptionParser)\n        end\n        def usage\n          option_parser([]).to_s\n        end\n        def description(command)\n          \"Manage the list of compass extensions on your system\"\n        end\n        def parse!(arguments)\n          {:arguments => arguments}\n        end\n      end\n      include InstallerCommand\n\n      def initialize(working_path, options)\n        super(working_path, options)\n      end\n\n      # all commands must implement perform\n      def perform\n        require 'rubygems/gem_runner'\n        Gem::GemRunner.new.run(options[:arguments])\n      end\n\n    end\n  end\nend\n\n"
  },
  {
    "path": "cli/lib/compass/commands/help.rb",
    "content": "module Compass\n  module Commands\n    module HelpOptionsParser\n      def set_options(opts)\n        banner = %Q{Usage: compass help [command]\n\nDescription:\n  The Compass Stylesheet Authoring Framework helps you\n  build and maintain your stylesheets and makes it easy\n  for you to use stylesheet libraries provided by others.\n\nDonating:\n  Compass is charityware. If you find it useful please make\n  a tax deductable donation: http://umdf.org/compass\n\nTo get help on a particular command please specify the command.\n\n}\n        \n        primary_commands = Compass::Commands.all.select do |c|\n          cmd = Compass::Commands[c]\n          cmd.respond_to?(:primary) && cmd.primary\n        end\n        other_commands = Compass::Commands.all - primary_commands\n\n        banner << command_list(\"Primary Commands:\", primary_commands)\n        banner << command_list(\"Other Commands:\", other_commands)\n \n        banner << \"\\nAvailable Frameworks & Patterns:\\n\\n\"\n        banner << Compass::Frameworks.pretty_print\n        banner << \"\\nGlobal Options:\\n\"\n        opts.banner = banner\n\n        super\n      end\n\n      def command_list(header, commands)\n        list = \"#{header}\\n\"\n        commands.sort_by{|c| c.to_s}.each do |command|\n          list << \"  * #{command}\"\n          if Compass::Commands[command].respond_to? :description\n            list << \"\\t- #{Compass::Commands[command].description(command)}\"\n          end\n          list << \"\\n\"\n        end\n        list\n      end\n    end\n    class Help < Base\n      register :help\n      \n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(HelpOptionsParser)\n        end\n        def usage\n          option_parser([]).to_s\n        end\n        def description(command)\n          \"Get help on a compass command or extension\"\n        end\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parser.options[:help_command] = arguments.shift || 'help'\n          parser.options\n        end\n      end\n\n      def execute\n        if Compass::Commands.command_exists? options[:help_command]\n          $command = options[:help_command]\n          puts Compass::Commands[options[:help_command]].usage\n          $command = \"help\"\n        elsif Compass::Frameworks.template_exists? options[:help_command]\n          puts Compass::Frameworks.template_usage(options[:help_command])\n        else\n          raise OptionParser::ParseError, \"No such command: #{options[:help_command]}\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/imports.rb",
    "content": "module Compass\n  module Commands\n    class Imports < ProjectBase\n      attr_accessor :options\n      register :imports\n      def initialize(working_path, options)\n        super\n      end\n  \n      def execute\n        print ::Compass::Frameworks::ALL.map{|f|\n                  \"-I #{f.stylesheets_directory}\"\n                }.join(' ')\n      end\n      class << self\n        def description(command)\n          \"Emit an imports suitable for passing to the sass command-line.\"\n        end\n        def usage\n          \"Usage: compass imports\\n\\n\" +\n          \"Prints out the imports known to compass.\\n\"+\n          \"Useful for passing imports to the sass command line:\\n\" +\n          \"  sass -r compass `compass imports` a_file_using_compass.sass\"\n        end\n        def parse!(arguments)\n          if arguments.join(\"\").strip.size > 0\n            raise OptionParser::ParseError, \"This command takes no options or arguments.\"\n          else\n            {}\n          end\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/installer_command.rb",
    "content": "require 'compass/installers'\n\nmodule Compass\n  module Commands\n    module InstallerCommand\n      include Compass::Installers\n\n      def configure!\n        add_project_configuration\n        Compass.add_configuration(options, 'command_line')\n        Compass.discover_extensions!\n        Compass.add_configuration(installer.completed_configuration, 'installer')\n      end\n\n      def app\n        @app ||= Compass::AppIntegration.lookup(Compass.configuration.project_type)\n      end\n\n      def installer\n        @installer ||= if options[:bare]\n          Compass::Installers::BareInstaller.new(*installer_args)\n        else\n          app.installer(*installer_args)\n        end\n      end\n\n      def installer_args\n        [template_directory(options[:pattern] || \"project\"), project_directory, options]\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/interactive.rb",
    "content": "\nrequire 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n  module Commands\n    module InteractiveOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{\n          Usage: compass interactive [path/to/project] [options]\n\n          Description:\n            Interactively evaluate SassScript\n\n          Options:\n        }.strip.split(\"\\n\").map{|l| l.gsub(/^ {0,10}/,'')}.join(\"\\n\")\n\n        super\n      end\n    end\n    class Interactive < ProjectBase\n\n      register :interactive\n\n      def initialize(working_path, options)\n        super\n      end\n\n      def perform\n        require 'sass/repl'\n        Sass::Repl.new.run\n      end\n\n      class << self\n\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(InteractiveOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def description(command)\n          \"Interactively evaluate SassScript\"\n        end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parser.options\n        end\n\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/list_frameworks.rb",
    "content": "module Compass\n  module Commands\n    class ListFrameworks < ProjectBase\n      attr_accessor :options\n      register :frameworks\n      def initialize(working_path, options)\n        super\n      end\n  \n      def execute\n        if options[:quiet]\n          Compass::Frameworks::ALL.each do |framework|\n            puts framework.name unless framework.name =~ /^_/\n          end\n        else\n          puts \"Available Frameworks & Patterns:\\n\\n\"\n          puts Compass::Frameworks.pretty_print\n        end\n      end\n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n        end\n        def usage\n          option_parser([]).to_s\n        end\n        def description(command)\n          \"List the available frameworks\"\n        end\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parser.options\n        end\n      end\n    end\n  end\nend"
  },
  {
    "path": "cli/lib/compass/commands/print_version.rb",
    "content": "module Compass\n  module Commands\n    module VersionOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{Usage: compass version [options]\n\nOptions:\n}\n        opts.on_tail(\"-?\", \"-h\", \"--help\", \"Print out this message.\") do\n          puts opts\n          exit\n        end\n        opts.on(\"-q\", \"--quiet\", \"Just print the version string.\") do\n          self.options[:quiet] = true\n        end\n        opts.on(\"--major\", \"Print the major version number\") do\n          self.options[:major] = true\n          self.options[:custom] = true\n        end\n        opts.on(\"--minor\", \"Print up to the minor version number\") do\n          self.options[:major] = true\n          self.options[:minor] = true\n          self.options[:custom] = true\n        end\n        opts.on(\"--patch\", \"Print up to the patch version number\") do\n          self.options[:major] = true\n          self.options[:minor] = true\n          self.options[:patch] = true\n          self.options[:custom] = true\n        end\n      end\n    end\n\n    class PrintVersion < Base\n      register :version\n\n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(VersionOptionsParser)\n        end\n        def usage\n          option_parser([]).to_s\n        end\n        def description(command)\n          \"Print out version information\"\n        end\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parser.options\n        end\n        def long_output_string\n          lines = []\n          lines << \"Compass #{::Compass.version[:string]}\"\n          if name = ::Compass.version[:name]\n            lines.last << \" (#{name})\"\n          end\n          lines << \"Copyright (c) 2008-#{Time.now.year} Chris Eppstein\"\n          lines << \"Released under the MIT License.\"\n          lines << \"Compass is charityware.\"\n          lines << \"Please make a tax deductable donation for a worthy cause: http://umdf.org/compass\"\n          lines.join(\"\\n\")\n        end\n      end\n\n      attr_accessor :options\n\n      def initialize(working_path, options)\n        self.options = options\n      end\n  \n      def execute\n        if options[:custom]\n          version = \"\"\n          version << \"#{Compass.version[:major]}\" if options[:major]\n          version << \".#{Compass.version[:minor]}\" if options[:minor]\n          version << \".#{Compass.version[:patch]}\" if options[:patch]\n          puts version\n        elsif options[:quiet]\n          puts ::Compass.version[:string]\n        else\n          puts self.class.long_output_string\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/project_base.rb",
    "content": "require 'fileutils'\nrequire 'pathname'\nrequire 'compass/commands/base'\nrequire 'compass/commands/installer_command'\n\nmodule Compass\n  module Commands\n    class ProjectBase < Base\n      attr_accessor :project_directory, :project_name, :options\n\n      def initialize(working_path, options = {})\n        super(working_path, options)\n        self.project_name = determine_project_name(working_path, options)\n        Compass.add_configuration({:project_path => determine_project_directory(working_path, options)}, \"implied\")\n        configure!\n      end\n\n      def execute\n        super\n      end\n\n      protected\n\n      def configure!\n        add_project_configuration\n        Compass.add_configuration(options, \"command_line\")\n        Compass.discover_extensions! unless skip_extension_discovery?\n      end\n\n      def add_project_configuration\n        defaults = Compass.configuration_for(options, \"cli_defaults\")\n        if options[:project_type]\n          project_type_config = Compass.configuration_for(options[:project_type])\n          project_type_config.inherit_from!(Compass.default_configuration)\n          defaults.inherit_from!(project_type_config)\n        end\n        Compass.add_project_configuration(options[:configuration_file], :defaults => defaults) do\n          options[:project_type]\n        end\n      end\n\n      def projectize(path)\n        Compass.projectize(path)\n      end\n\n      def project_directory\n        Compass.configuration.project_path\n      end\n\n      def project_css_subdirectory\n        Compass.configuration.css_dir\n      end\n\n      def project_src_subdirectory\n        Compass.configuration.sass_dir\n      end\n\n      def project_images_subdirectory\n        Compass.configuration.images_dir\n      end\n\n      def assert_project_directory_exists!\n        if File.exists?(project_directory) && !File.directory?(project_directory)\n          raise Compass::FilesystemConflict.new(\"#{project_directory} is not a directory.\")\n        elsif !File.directory?(project_directory)\n          raise Compass::Error.new(\"#{project_directory} does not exist.\")\n        end\n      end\n\n      private\n\n      def determine_project_name(working_path, options)\n        if options[:project_name]\n          File.basename(strip_trailing_separator(options[:project_name]))\n        else\n          File.basename(working_path)\n        end\n      end\n\n      def determine_project_directory(working_path, options)\n        if options[:project_name]\n          if absolute_path?(options[:project_name])\n            options[:project_name]\n          else\n            File.join(working_path, options[:project_name])\n          end\n        else\n          working_path\n        end\n      end\n\n      def absolute_path?(path)\n        # Pretty basic implementation\n        path.index(File::SEPARATOR) == 0 || path.index(':') == 1\n      end\n\n      def skip_extension_discovery?\n        false\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/project_stats.rb",
    "content": "require 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n  module Commands\n    module StatsOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{\n          Usage: compass stats [path/to/project] [options]\n\n          Description:\n            Compile project at the path specified (or the current\n            directory if not specified) and then compute statistics\n            for the sass and css files in the project.\n\n          Options:\n        }.strip.split(\"\\n\").map{|l| l.gsub(/^ {0,10}/,'')}.join(\"\\n\")\n\n        super\n      end\n    end\n    class ProjectStats < UpdateProject\n\n      register :stats\n\n      def initialize(working_path, options)\n        super\n        assert_project_directory_exists!\n      end\n\n      def perform\n        super\n        require 'compass/stats'\n        compiler = new_compiler_instance\n        sass_files = sorted_sass_files(compiler)\n        total_label = \"Total (#{sass_files.size} files):\"\n        rows       = [[           :-,           :-,           :-,            :-,            :-,          :-,              :-,               :-,             :- ],\n                      [   'Filename',      'Rules', 'Properties', 'Mixins Defs', 'Mixins Used',  'Filesize', 'CSS Selectors', 'CSS Properties', 'CSS Filesize' ],\n                      [           :-,           :-,           :-,            :-,            :-,          :-,              :-,               :-,             :- ]]\n        maximums   =  [ total_label.length,      5,           10,            14,            11,          13,              13,               14,             14 ]\n        alignments =  [        :left,       :right,       :right,        :right,        :right,      :right,          :right,           :right,         :right ]\n        delimiters =  [ ['| ', ' |'],  [' ', ' |'],  [' ', ' |'],   [' ', ' |'],   [' ', ' |'], [' ', ' |'],     [' ', ' |'],      [' ', ' |'],    [' ', ' |'] ]\n        formatters =  [          nil,          nil,          nil,           nil,           nil,         :kb,             nil,             nil,             :kb ]\n        totals     =  [ total_label,             0,            0,             0,             0,           0,               0,                0,              0 ]\n\n        columns = rows.first.size\n\n        sass_files.each do |sass_file|\n          css_file = compiler.corresponding_css_file(sass_file) unless sass_file[0..0] == '_'\n          row = filename_columns(sass_file)\n          row += sass_columns(sass_file)\n          row += css_columns(css_file)\n          row.each_with_index do |c, i|\n            maximums[i] = [maximums[i].to_i, c.size].max\n            totals[i] = totals[i] + c.to_i if i > 0\n          end\n          rows << row\n        end\n        rows << [:-] * columns\n        rows << totals.map{|t| t.to_s}\n        rows << [:-] * columns\n        rows.each do |row|\n          row.each_with_index do |col, i|\n            print pad(col, maximums[i], :align => alignments[i], :left => delimiters[i].first, :right => delimiters[i].last, :formatter => formatters[i])\n          end\n          print \"\\n\"\n        end\n        if @missing_css_parser\n          puts \"\\nInstall #{@missing_css_parser} to enable stats on your css files:\\n\\n\\tgem install #{@missing_css_parser}\"\n        end\n      end\n\n      def pad(c, max, options = {})\n        options[:align] ||= :left\n        if c == :-\n          filler = '-'\n          c = ''\n        else\n          filler = ' '\n        end\n        c = send(:\"format_#{options[:formatter]}\", c) if options[:formatter]\n        spaces = max - c.size\n        filled = filler * [spaces,0].max\n        \"#{options[:left]}#{filled if options[:align] == :right}#{c}#{filled if options[:align] == :left}#{options[:right]}\"\n      end\n\n      def format_kb(v)\n        return v unless v =~ /^\\d+$/\n        v = Integer(v)\n        if v < 1024\n          \"#{v} B\"\n        else\n          v = v / 1024.0\n          \"#{v.ceil} KB\"\n        end\n      end\n\n      def sorted_sass_files(compiler)\n        sass_files = compiler.sass_files\n        sass_files.map! do |s| \n          filename = Compass.deprojectize(s, File.join(Compass.configuration.project_path, Compass.configuration.sass_dir))\n          [s, File.dirname(filename), File.basename(filename)]\n        end\n        sass_files = sass_files.sort_by do |s,d,f|\n          File.join(d, f[0] == ?_ ? f[1..-1] : f)\n        end\n        sass_files.map!{|s,d,f| s}\n      end\n\n      def filename_columns(sass_file)\n        filename = Compass.deprojectize(sass_file, working_path)\n        [filename]\n      end\n\n      def sass_columns(sass_file)\n        sf = Compass::Stats::SassFile.new(sass_file)\n        sf.analyze!\n        %w(rule_count prop_count mixin_def_count mixin_count file_size).map do |t|\n          sf.send(t).to_s\n        end\n      end\n\n      def css_columns(css_file)\n        if File.exists?(css_file)\n          cf = Compass::Stats::CssFile.new(css_file)\n          cf.analyze!\n          %w(selector_count prop_count file_size).map do |t|\n            cf.send(t).to_s\n          end\n        else\n          return [ '--', '--' , '--']\n        end\n      rescue LoadError => e\n        @missing_css_parser = e.message =~ /iconv/ ? \"iconv\" : \"css_parser\"\n        return [ 'DISABLED', 'DISABLED', 'DISABLED' ]\n      end\n\n      class << self\n\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(StatsOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def description(command)\n          \"Report statistics about your stylesheets\"\n        end\n\n        def primary; false; end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n\n        def parse_arguments!(parser, arguments)\n          if arguments.size == 1\n            parser.options[:project_name] = arguments.shift\n          elsif arguments.size == 0\n            # default to the current directory.\n          else\n            raise Compass::Error, \"Too many arguments were specified.\"\n          end\n        end\n\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/project_structure.rb",
    "content": "require 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n  module Commands\n    module StructureOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{\n          Usage: compass structure [path/to/project] [options]\n\n          Description:\n            Display the import structure of your stylesheets.\n\n          Options:\n        }.strip.split(\"\\n\").map{|l| l.gsub(/^ {0,10}/,'')}.join(\"\\n\")\n\n        super\n      end\n    end\n    class ProjectStats < UpdateProject\n\n      register :structure\n\n      def initialize(working_path, options)\n        super\n        assert_project_directory_exists!\n      end\n\n      def perform\n        @compiler = new_compiler_instance\n        (options[:sass_files] || sorted_sass_files).each do |sass_file|\n          print_tree(Compass.projectize(sass_file))\n        end\n      end\n\n      def print_tree(file, depth = 0, importer = @compiler.importer)\n        puts ((depth > 0 ? \"|  \" : \"   \") * depth) + \"+- \" + Compass.deprojectize(file)\n        @compiler.staleness_checker.send(:compute_dependencies, file, importer).each do |(dep, dep_importer)|\n          print_tree(dep, depth + 1, dep_importer)# unless Compass.deprojectize(dep)[0...1] == \"/\"\n        end\n      end\n\n      def sorted_sass_files\n        sass_files = @compiler.sass_files\n        sass_files.map! do |s| \n          filename = Compass.deprojectize(s, File.join(Compass.configuration.project_path, Compass.configuration.sass_dir))\n          [s, File.dirname(filename), File.basename(filename)]\n        end\n        sass_files = sass_files.sort_by do |s,d,f|\n          File.join(d, f[0] == ?_ ? f[1..-1] : f)\n        end\n        sass_files.map!{|s,d,f| s}\n      end\n\n      class << self\n\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(StructureOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def description(command)\n          \"Report statistics about your stylesheets\"\n        end\n\n        def primary; false; end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n\n        def parse_arguments!(parser, arguments)\n          if arguments.size > 0\n            parser.options[:project_name] = arguments.shift if File.directory?(arguments.first)\n            parser.options[:sass_files] = arguments\n          end\n        end\n\n      end\n\n    end\n  end\nend\n\n"
  },
  {
    "path": "cli/lib/compass/commands/registry.rb",
    "content": "module Compass::Commands\n  module Registry\n    def register(name, command_class)\n      @commands ||= Hash.new\n      @commands[name.to_sym] = command_class\n    end\n    def get(name)\n      return unless name\n      @commands ||= Hash.new\n      @commands[name.to_sym] || @commands[abbreviation_of(name)]\n    end\n    def abbreviation_of(name)\n      re = /^#{Regexp.escape(name)}/\n      matching = @commands.keys.select{|k| k.to_s =~ re}\n      if matching.size == 1\n        matching.first\n      elsif name =~ /^-/\n        nil\n      elsif matching.size > 1\n        raise Compass::Error, \"Ambiguous abbreviation '#{name}'. Did you mean one of: #{matching.join(\", \")}\"\n      else\n        raise Compass::Error, \"Command not found: #{name}\"\n      end\n    end\n    def abbreviation?(name)\n      re = /^#{Regexp.escape(name)}/\n      @commands.keys.detect{|k| k.to_s =~ re}\n    end\n    def command_exists?(name)\n      @commands ||= Hash.new\n      name && (@commands.has_key?(name.to_sym) || abbreviation?(name))\n    end\n    def all\n      @commands.keys\n    end\n    alias_method :[], :get\n    alias_method :[]=, :register\n  end\n  extend Registry\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/sprite.rb",
    "content": "require 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n  module Commands\n    module SpriteOptionsParser\n      def set_options(opts)\n        opts.on(\"-f SPRITE_FILE\") do |output_file|\n          self.options[:output_file] = output_file\n        end\n        opts.on(\"--skip-overrides\", \"Skip the generation of sprite overrides\") do |skip_overrides|\n          self.options[:skip_overrides] = skip_overrides\n        end\n        opts.banner = %Q{\n          Usage: compass sprite [options] \"images/path/to/sprites/*.png\"\n\n          Description:\n            Generate a sprite import based on the given sprite directory.\n            Alternatively, you can simply do this in your sass files:\n\n                @import \"sprite-folder/*.png\"\n\n            And a magical, custom made sprite file will be imported.\n\n          Options:\n        }.strip.split(\"\\n\").map{|l| l.gsub(/^ {0,10}/,'')}.join(\"\\n\")\n\n        super\n      end\n    end\n    class Sprite < ProjectBase\n\n      register :sprite\n\n      def initialize(working_path, options)\n        super\n        assert_project_directory_exists!\n      end\n\n      def perform\n        relative_uri = options[:uri].gsub(/^#{Compass.configuration.images_dir}\\//, '')\n        name = Compass::SpriteImporter.sprite_name(relative_uri)\n        sprites = Compass::SpriteImporter.new\n        options[:output_file] ||= File.join(Compass.configuration.sass_path, \"sprites\", \"_#{name}.#{Compass.configuration.preferred_syntax}\")\n        options[:skip_overrides] ||= false\n        contents = Compass::SpriteImporter.content_for_images(relative_uri, name, options[:skip_overrides])\n        if options[:output_file][-4..-1] != \"scss\"\n          contents = Sass::Engine.new(contents, Compass.sass_engine_options.merge(:syntax => :scss)).to_tree.to_sass\n        end\n        directory File.dirname(options[:output_file])\n        write_file options[:output_file], contents\n      end\n\n      class << self\n\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(SpriteOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def description(command)\n          \"Generate an import for your sprites.\"\n        end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n\n        def parse_arguments!(parser, arguments)\n          parser.options[:uri] = arguments.shift\n          unless arguments.size == 0\n            raise Compass::Error, \"Please specify at least one image to sprite.\"\n          end\n        end\n\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/stamp_pattern.rb",
    "content": "require 'fileutils'\nrequire 'compass/commands/base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n  module Commands\n    module StampPatternOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{Usage: compass install extension/pattern [path/to/project] [options]\n\nDescription:\n  Install an extension's pattern into your compass project\n\nExample:\n  compass install blueprint/buttons\n\nOptions:\n}\n        opts.on(\"-x\", \"--syntax SYNTAX\", [:sass, :scss], \"Specify the syntax to use when generating stylesheets.\", \"One of sass or scss. Defaults to scss.\") do |syntax|\n          self.options[:preferred_syntax] = syntax\n        end\n\n        super\n      end\n    end\n\n    class StampPattern < ProjectBase\n\n      register :install\n\n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(StampPatternOptionsParser)\n        end\n        def usage\n          option_parser([]).to_s\n        end\n        def description(command)\n          \"Install an extension's pattern into your compass project\"\n        end\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n        def parse_arguments!(parser, arguments)\n          if arguments.size == 0\n            raise OptionParser::ParseError, \"Please specify a pattern.\"\n          end\n          pattern = arguments.shift.split('/', 2)\n          parser.options[:framework] = pattern[0]\n          parser.options[:pattern] = pattern[1]\n          if arguments.size > 0\n            parser.options[:project_name] = arguments.shift\n          end\n          if arguments.size > 0\n            raise OptionParser::ParseError, \"Unexpected trailing arguments: #{arguments.join(\" \")}\"\n          end\n        end\n\n      end\n      include InstallerCommand\n\n      def initialize(working_path, options)\n        super(working_path, options)\n      end\n\n      # all commands must implement perform\n      def perform\n        installer.init\n        installer.run(:skip_finalization => true, :skip_preparation => !is_project_creation?)\n        UpdateProject.new(working_path, options).perform if installer.compilation_required?\n        installer.finalize(options.merge(:create => is_project_creation?))\n      end\n\n      def is_project_creation?\n        false\n      end\n\n      def template_directory(pattern)\n        File.join(framework.templates_directory, pattern)\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/unpack_extension.rb",
    "content": "require 'compass/commands/project_base'\nrequire 'fileutils'\n\nmodule Compass\n  module Commands\n    module ExtensionOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{\n          Usage: compass unpack EXTENSION\n\n          Description:\n            Copy an extension into your extensions folder for easy access to the source code.\n            This makes it easier to peruse the source in unfamiliar projects. It is not recommended\n            that you change other extensions' source -- this makes it hard to take updates from\n            the original author. The following extensions are available:\n            \n          FRAMEWORKS\n            \n          Options:\n        }.strip.split(\"\\n\").map{|l| l.gsub(/^ {0,10}/,'')}.join(\"\\n\")\n        opts.banner.gsub!(/FRAMEWORKS/,Compass::Frameworks.pretty_print(true))\n        super\n      end\n    end\n\n    class UnpackExtension < ProjectBase\n\n      register :unpack\n\n      def initialize(working_path, options)\n        super\n        assert_project_directory_exists!\n      end\n\n      def perform\n        framework = Compass::Frameworks[options[:framework]]\n        unless framework\n          raise Compass::Error, \"No extension named \\\"#{options[:framework]}\\\" was found.\"\n        end\n        files = Dir[\"#{framework.path}/**/*\"]\n        extension_dir = File.join(Compass.configuration.extensions_path, framework.name)\n        FileUtils.rm_rf extension_dir\n        FileUtils.mkdir_p extension_dir\n        write_file File.join(extension_dir, \"DO_NOT_MODIFY\"), readme(framework)\n        files.each do |f|\n          next if File.directory?(f)\n          ending = f[(framework.path.size+1)..-1]\n          destination = File.join(extension_dir, ending)\n          FileUtils.mkdir_p(File.dirname(destination))\n          copy f, destination\n        end\n        puts \"\\nYou have unpacked \\\"#{framework.name}\\\"\"\n        puts\n        puts readme(framework)\n      end\n\n      def readme(framework)\n        %Q{| This is a copy of the \"#{framework.name}\" extension.\n           |\n           | It now overrides the original which was found here:\n           |\n           | #{framework.path}\n           |\n           | Unpacking an extension is useful when you need to easily peruse the\n           | extension's source. You might find yourself tempted to change the\n           | stylesheets here. If you do this, you'll find it harder to take\n           | updates from the original author. Sometimes this seems like a good\n           | idea at the time, but in a few months, you'll probably regret it.\n           |\n           | In the future, if you take an update of this framework, you'll need to run\n           |\n           |     compass unpack #{framework.name}\n           |\n           | again or remove this unpacked extension.\n           |}.gsub(/^\\s*\\| ?/,\"\")\n      end\n\n      def skip_extension_discovery?\n        true\n      end\n\n      class << self\n\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(ExtensionOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def description(command)\n          \"Copy an extension into your extensions folder.\"\n        end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n\n        def parse_arguments!(parser, arguments)\n          if arguments.size == 1\n            parser.options[:framework] = arguments.shift\n          elsif arguments.size == 0\n            raise Compass::Error, \"Please specify an extension to unpack.\"\n          else\n            raise Compass::Error, \"Too many arguments were specified.\"\n          end\n        end\n\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/update_project.rb",
    "content": "require 'compass/commands/project_base'\nrequire 'compass/compiler'\n\nmodule Compass\n  module Commands\n    module CompileProjectOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{\n          Usage: compass compile [path/to/project] [path/to/project/src/file.sass ...] [options]\n\n          Description:\n          compile project at the path specified or the current directory if not specified.\n\n          Options:\n        }.split(\"\\n\").map{|l| l.gsub(/^ */,'')}.join(\"\\n\")\n\n        opts.on(\"--[no-]sourcemap\", \"Generate a sourcemap during compilation.\") do |sm|\n          self.options[:sourcemap] = sm\n        end\n\n        opts.on(\"--time\", \"Display compilation times.\") do\n          self.options[:time] = true\n        end\n\n        opts.on(\"--debug-info\", \"Turns on sass's debuging information\") do\n          self.options[:debug_info]= true\n        end\n\n        opts.on(\"--no-debug-info\", \"Turns off sass's debuging information\") do\n          self.options[:debug_info]= false\n        end\n        super\n      end\n    end\n\n    class UpdateProject < ProjectBase\n\n      register :compile\n\n      def initialize(working_path, options)\n        super\n        assert_project_directory_exists!\n      end\n\n      def perform\n        compiler = new_compiler_instance\n        check_for_sass_files!(compiler)\n        prepare_project!(compiler)\n        compiler.compile!\n        if compiler.error_count > 0\n          compiler.logger.red do\n            compiler.logger.log \"Compilation failed in #{compiler.error_count} files.\"\n          end\n          failed! \n        end\n      end\n\n      def prepare_project!(compiler)\n        if options[:project_name]\n          Compass.configuration.project_path = File.expand_path(options[:project_name])\n        end\n\n        if config_file = new_config?(compiler)\n          compiler.logger.record :modified, relativize(config_file)\n          compiler.logger.record :clean, relativize(Compass.configuration.css_path)\n          compiler.clean!\n        end\n      end\n\n      # Determines if the configuration file is newer than any css file\n      def new_config?(compiler)\n        config_file = Compass.detect_configuration_file\n        return false unless config_file\n        config_mtime = File.mtime(config_file)\n        compiler.file_list.each do |(_, css_filename, _)|\n          return config_file if File.exists?(css_filename) && config_mtime > File.mtime(css_filename)\n        end\n        nil\n      end\n\n      def check_for_sass_files!(compiler)\n        file_list = compiler.file_list\n        if file_list.empty?\n          message = \"Compass can't find any Sass files to compile.\\nIs your compass configuration correct?.\\nIf you're trying to start a new project, you have left off the directory argument.\\n\"\n          message << \"Run \\\"compass -h\\\" to get help.\"\n          raise Compass::Error, message\n        elsif missing = file_list.find {|(sass_file, _, _)| !File.exist?(sass_file)}\n          raise Compass::Error, \"File not found: #{missing[0]}\"\n        end\n      end\n\n      def new_compiler_instance\n        Compass::SassCompiler.new(compiler_options)\n      end\n\n      def compiler_options\n        transfer_options(options, {}, :time, :debug_info, :only_sass_files, :force, :quiet)\n      end\n\n      def transfer_options(from, to, *keys)\n        keys.each do |k|\n          to[k] = from[k] unless from[k].nil?\n        end\n        to\n      end\n\n      class << self\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(CompileProjectOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def primary; true; end\n\n        def description(command)\n          \"Compile Sass stylesheets to CSS\"\n        end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n\n        def parse_arguments!(parser, arguments)\n          if arguments.size > 0\n            parser.options[:project_name] = arguments.shift if File.directory?(arguments.first)\n            unless arguments.empty?\n              parser.options[:only_sass_files] = absolutize(*arguments)\n            end\n          end\n        end\n\n        def absolutize(*paths)\n          paths.map {|path| File.expand_path(path) }\n        end\n\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/validate_project.rb",
    "content": "require 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n  module Commands\n    module ValidationOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{\n          Usage: compass validate [path/to/project] [options]\n\n          Description:\n            Compile project at the path specified or the current\n            directory if not specified and then validate the \n            generated CSS.\n\n          Options:\n        }.strip.split(\"\\n\").map{|l| l.gsub(/^ {0,10}/,'')}.join(\"\\n\")\n\n        super\n      end\n    end\n    class ValidateProject < ProjectBase\n\n      register :validate\n\n      def initialize(working_path, options)\n        super\n        assert_project_directory_exists!\n      end\n\n      def perform\n        require 'compass/validator'\n        UpdateProject.new(working_path, options).perform\n        Dir.chdir Compass.configuration.project_path do\n          Validator.new(project_css_subdirectory).validate()\n        end\n      end\n\n      class << self\n\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(ValidationOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def description(command)\n          \"Validate your generated css.\"\n        end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n\n        def parse_arguments!(parser, arguments)\n          if arguments.size == 1\n            parser.options[:project_name] = arguments.shift\n          elsif arguments.size == 0\n            # default to the current directory.\n          else\n            raise Compass::Error, \"Too many arguments were specified.\"\n          end\n        end\n\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/watch_project.rb",
    "content": "# encoding: UTF-8\nrequire 'fileutils'\nrequire 'pathname'\nrequire 'compass/commands/update_project'\nrequire \"compass/sass_compiler\"\n\nmodule Compass\n  module Commands\n    module WatchProjectOptionsParser\n      def set_options(opts)\n        super\n\n        opts.banner = %Q{\n          Usage: compass watch [path/to/project] [path/to/project/src/file.sass ...] [options]\n\n          Description:\n          watch the project for changes and recompile when they occur.\n\n          Options:\n        }.split(\"\\n\").map{|l| l.gsub(/^ */,'')}.join(\"\\n\")\n\n        opts.on(\"--poll\", :NONE, \"Check periodically if there's been changes.\") do\n          self.options[:poll] = 1 # check every 1 second.\n        end\n\n      end\n    end\n\n    class WatchProject < UpdateProject\n\n      register :watch\n\n      attr_accessor :last_update_time, :last_sass_files\n\n      def perform\n        compiler = new_compiler_instance\n        compiler.logger.time = true if options[:time]\n        prepare_project!(compiler)\n        compiler.logger.log \">>> #{compiler.logger.color(:green)}Compass is watching for changes.#{compiler.logger.color(:clear)} #{compiler.logger.color(:red)}Press Ctrl-C to Stop.#{compiler.logger.color(:clear)}\"\n        begin\n          compiler.watch!(:additional_watch_paths => additional_watch_paths, &method(:notify_watches))\n          happy_styling!(compiler.logger)\n        rescue Interrupt\n          happy_styling!(compiler.logger)\n        end\n      end\n\n      def happy_styling!(logger)\n          logger.log \"\\n#{logger.color(:yellow)}★★★ #{logger.color(:blue)}Happy Styling!#{logger.color(:yellow)} ★★★#{logger.color(:clear)}\"\n      end\n\n      def compiler_options\n        super.merge(:poll => options[:poll], :full_exception => true)\n      end\n\n      def additional_watch_paths\n        Compass.configuration.watches.map do |watch|\n          pathname = Pathname.new(File.join(Compass.configuration.project_path, watch.glob))\n          real_path = nil\n          pathname.ascend do |p|\n            if p.exist?\n              real_path = p\n              break\n            end\n          end\n          real_path\n        end.compact.uniq\n      end\n\n      def notify_watches(modified, added, removed)\n        project_path = Compass.configuration.project_path\n        files = {:modified => modified,\n                 :added    => added,\n                 :removed  => removed}\n\n        run_once, run_each = Compass.configuration.watches.partition {|w| w.run_once_per_changeset?}\n\n        run_once.each do |watcher|\n          if file = files.values.flatten.detect{|f| watcher.match?(f) }\n            action = files.keys.detect{|k| files[k].include?(file) }\n            watcher.run_callback(project_path, relative_to(file, project_path), action)\n          end\n        end\n\n        run_each.each do |watcher|\n          files.each do |action, list|\n            list.each do |file|\n              if watcher.match?(file)\n                watcher.run_callback(project_path, relative_to(file, project_path), action)\n              end\n            end\n          end\n        end\n      end\n\n      def relative_to(f, dir)\n        Pathname.new(f).relative_path_from(Pathname.new(dir))\n      rescue ArgumentError # does not share a common path.\n        f\n      end\n\n      class << self\n        def description(command)\n          \"Compile Sass stylesheets to CSS when they change\"\n        end\n\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(CompileProjectOptionsParser)\n          parser.extend(WatchProjectOptionsParser)\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands/write_configuration.rb",
    "content": "require 'compass/commands/project_base'\n\nmodule Compass\n  module Commands\n    module ConfigurationOptionsParser\n      def set_options(opts)\n        opts.banner = %Q{\n          Usage: compass config [path/to/config_file.rb] [options]\n\n          Description:\n            Generate a configuration file for the options specified.\n            Compass will recognize configuration files in the\n            following locations relative to the project root:\n              * #{Compass::Configuration::Helpers::KNOWN_CONFIG_LOCATIONS.join(\"\n              * \")}\n            Any other location, and you'll need to specify it when working with the command line tool using the -c option.\n\n          Options:\n        }.strip.split(\"\\n\").map{|l| l.gsub(/^ {0,10}/,'')}.join(\"\\n\")\n        opts.on(\"--debug [PROPERTY]\", \"Debug your configuration by printing out details.\") do |prop|\n          self.options[:debug] = prop.nil? ? true : prop.to_sym\n        end\n        opts.on(\"-p PROPERTY\", \"--property PROPERTY\", \"Print out the value of a particular configuration property\") do |prop|\n          self.options[:display] = prop.to_sym\n        end\n\n        super\n      end\n    end\n    class WriteConfiguration < ProjectBase\n\n      register :config\n\n      include InstallerCommand\n\n      def initialize(working_path, options)\n        super\n        assert_project_directory_exists!\n      end\n\n      def add_project_configuration\n        Compass.add_project_configuration\n      end\n\n      def perform\n        if options[:display]\n          if Compass.configuration.respond_to?(options[:display])\n            puts Compass.configuration.send(options[:display])\n          else\n            raise Compass::Error, \"ERROR: configuration property '#{options[:display]}' does not exist\"\n          end\n        elsif options[:debug]\n          puts \"Configuration sources:\"\n          c = Compass.configuration\n          while c\n            print c.name\n            c = c.inherited_data\n            print \", \" if c\n          end\n          print \"\\n\"\n          Compass.configuration.debug.each do |prop, values|\n            if options[:debug].is_a?(Symbol)\n              next unless prop == options[:debug]\n            end\n            puts \"***** #{prop} = #{values.first[:resolved].inspect} *****\"\n            [:default, :value, :raw, :resolved].each do |kind|\n              puts \"#{kind}: \" + values.inject([]){|m, v| m << v[kind]}.map{|v| v.nil? ? '-' : v.inspect}.join(\", \")\n            end\n          end\n        else\n          config_file = options[:configuration_file]\n          config_file ||= Compass.detect_configuration_file\n          config_file ||= Compass::Configuration::Helpers::KNOWN_CONFIG_LOCATIONS.first\n          directory File.dirname(config_file)\n          installer.write_configuration_files(config_file)\n        end\n      end\n\n      def installer_args\n        [nil, project_directory, options]\n      end\n\n      def explicit_config_file_must_be_readable?\n        false\n      end\n\n      class << self\n\n        def option_parser(arguments)\n          parser = Compass::Exec::CommandOptionParser.new(arguments)\n          parser.extend(Compass::Exec::GlobalOptionsParser)\n          parser.extend(Compass::Exec::ProjectOptionsParser)\n          parser.extend(ConfigurationOptionsParser)\n        end\n\n        def usage\n          option_parser([]).to_s\n        end\n\n        def description(command)\n          \"Generate a configuration file for the provided command line options.\"\n        end\n\n        def parse!(arguments)\n          parser = option_parser(arguments)\n          parser.parse!\n          parse_arguments!(parser, arguments)\n          parser.options\n        end\n\n        def parse_arguments!(parser, arguments)\n          if arguments.size == 1\n            parser.options[:configuration_file] = arguments.shift\n          elsif arguments.size == 0\n            # default to the current directory.\n          else\n            raise Compass::Error, \"Too many arguments were specified.\"\n          end\n        end\n\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/commands.rb",
    "content": "module Compass::Commands\nend\n\nrequire 'compass/commands/registry'\n\n%w(base project_base default help list_frameworks \n   update_project watch_project create_project clean_project extension_command\n   imports installer_command print_version project_stats stamp_pattern\n   sprite validate_project write_configuration interactive unpack_extension\n).each do |lib|\n  require \"compass/commands/#{lib}\"\nend\n\nCompass.discover_extensions!"
  },
  {
    "path": "cli/lib/compass/compiler.rb",
    "content": "require 'pathname'\n\nmodule Compass\n  class Compiler\n\n    include Actions\n\n    attr_accessor :working_path, :from, :to, :options, :sass_options, :staleness_checker, :importer\n\n    def initialize(working_path, from, to, options)\n      Compass::Deprecation.deprecated!(:compass_compiler_constructor,\n        \"Compass::Compiler is deprecated. Use Compass::SassCompiler instead.\")\n      self.working_path = working_path.to_s\n      self.from, self.to = File.expand_path(from), to\n      self.logger = options.delete(:logger)\n      sass_opts = options.delete(:sass) || {}\n      self.options = options\n      self.sass_options = options.dup\n      self.sass_options.delete(:quiet)\n      self.sass_options.update(sass_opts)\n      self.sass_options[:cache_location] ||= determine_cache_location\n      self.sass_options[:filesystem_importer] ||= Sass::Importers::Filesystem\n      self.sass_options[:importer] = self.importer = self.sass_options[:filesystem_importer].new(from)\n      self.sass_options[:compass] ||= {}\n      self.sass_options[:compass][:logger] = self.logger\n      self.sass_options[:compass][:environment] = Compass.configuration.environment\n      self.sass_options[:compass][:compiler_in_use] = true\n      reset_staleness_checker!\n    end\n\n    def reset_staleness_checker!\n      self.staleness_checker = nil\n      #Sass::Plugin::StalenessChecker.dependencies_cache = {}\n      self.staleness_checker = Sass::Plugin::StalenessChecker.new(sass_options)\n    end\n\n    def determine_cache_location\n      Compass.configuration.cache_path || Sass::Plugin.options[:cache_location] || File.join(working_path, \".sass-cache\")\n    end\n\n    def sass_files(options = {})\n      exclude_partials = options.fetch(:exclude_partials, true)\n      @sass_files = self.options[:sass_files] || Dir.glob(separate(\"#{from}/**/#{'[^_]' if exclude_partials}*.s[ac]ss\"))\n    end\n\n    def relative_stylesheet_name(sass_file)\n      sass_file[(from.length + 1)..-1]\n    end\n\n    def stylesheet_name(sass_file)\n      if sass_file.index(from) == 0\n        sass_file[(from.length + 1)..-6].sub(/\\.css$/,'')\n      else\n        raise Compass::Error, \"You must compile individual stylesheets from the project directory.\"\n      end\n    end\n\n    def css_files\n      @css_files ||= sass_files.map{|sass_file| corresponding_css_file(sass_file)}\n    end\n\n    def sourcemap_files\n      @sourcemap_files ||= sass_files.map{|sass_file| corresponding_sourcemap_file(sass_file)}\n    end\n\n    def corresponding_css_file(sass_file)\n      \"#{to}/#{stylesheet_name(sass_file)}.css\"\n    end\n\n    def corresponding_sourcemap_file(sass_file)\n      \"#{to}/#{stylesheet_name(sass_file)}.css.map\"\n    end\n\n    def target_directories\n      css_files.map{|css_file| File.dirname(css_file)}.uniq.sort.sort_by{|d| d.length }\n    end\n\n    # Returns the sass file that needs to be compiled, if any.\n    def out_of_date?\n      sass_files.zip(css_files).each do |sass_filename, css_filename|\n        return sass_filename if needs_update?(css_filename, sass_filename)\n      end\n      false\n    end\n\n    def needs_update?(css_filename, sass_filename)\n      staleness_checker.stylesheet_needs_update?(css_filename, File.expand_path(sass_filename), importer)\n    end\n\n    # Determines if the configuration file is newer than any css file\n    def new_config?\n      config_file = Compass.detect_configuration_file\n      return false unless config_file\n      config_mtime = File.mtime(config_file)\n      css_files.each do |css_filename|\n        return config_file if File.exists?(css_filename) && config_mtime > File.mtime(css_filename)\n      end\n      nil\n    end\n\n    def reset!\n      reset_staleness_checker!\n      @sass_files = nil\n      @css_files = nil\n      @sourcemap_files = nil\n    end\n\n    def clean!\n      remove options[:cache_location]\n      css_files.zip(sourcemap_files).each do |css_file, sourcemap_file|\n        remove css_file\n        remove sourcemap_file\n      end\n    end\n\n    def run\n      failure_count = 0\n      if new_config?\n        # Wipe out the cache and force compilation if the configuration has changed.\n        remove options[:cache_location] if options[:cache_location]\n        options[:force] = true\n      end\n\n      # Make sure the target directories exist\n      target_directories.each {|dir| directory dir}\n\n      # Compile each sass file.\n      result = timed do\n        sass_files.zip(css_files, sourcemap_files).each do |sass_filename, css_filename, sourcemap_filename|\n          begin\n            compile_if_required sass_filename, css_filename, sourcemap_filename\n          rescue Sass::SyntaxError => e\n            failure_count += 1\n            handle_exception(sass_filename, css_filename, e)\n          end\n        end\n      end\n      if options[:time]\n        puts \"Compilation took #{(result.__duration * 1000).round / 1000.0}s\"\n      end\n      return failure_count\n    end\n\n    def compile_if_required(sass_filename, css_filename, sourcemap_filename = nil)\n      if should_compile?(sass_filename, css_filename, sourcemap_filename)\n        compile sass_filename, css_filename, sourcemap_filename\n      else\n        logger.record :unchanged, basename(sass_filename) unless options[:quiet]\n        remove(sourcemap_filename) if sourcemap_filename && !options[:sourcemap]\n      end\n    end\n\n    def timed(timed_thing = lambda {|res| res})\n      start_time = Time.now\n      res = yield\n      end_time = Time.now\n      has_duration = timed_thing.call(res)\n      has_duration.instance_variable_set(\"@__duration\", end_time - start_time)\n      def has_duration.__duration\n        @__duration\n      end\n      res\n    end\n\n    # Compile one Sass file\n    def compile(sass_filename, css_filename, sourcemap_filename = nil)\n      css_content, sourcemap = logger.red do\n        timed(lambda {|r| r[0]}) do\n          engine = engine(sass_filename, css_filename, sourcemap_filename)\n          if sourcemap_filename && options[:sourcemap]\n            engine.render_with_sourcemap(relative_path(css_filename, sourcemap_filename))\n          else\n            [engine.render, nil]\n          end\n        end\n      end\n      duration = options[:time] ? \"(#{(css_content.__duration * 1000).round / 1000.0}s)\" : \"\"\n      write_file(css_filename, css_content, options.merge(:force => true, :extra => duration), sass_options[:unix_newlines])\n      Compass.configuration.run_stylesheet_saved(css_filename)\n      if sourcemap && sourcemap_filename\n        sourcemap_content = sourcemap.to_json(:css_path => css_filename,\n                                              :sourcemap_path => sourcemap_filename)\n        write_file(sourcemap_filename, sourcemap_content, options.merge(:force => true), sass_options[:unix_newlines])\n        Compass.configuration.run_sourcemap_saved(sourcemap_filename)\n      elsif sourcemap_filename && File.exist?(sourcemap_filename)\n        remove sourcemap_filename\n        Compass.configuration.run_sourcemap_removed(sourcemap_filename)\n      end\n    end\n\n    def relative_path(from_path, to_path)\n      Pathname.new(to_path).relative_path_from(Pathname.new(from_path).dirname).to_s\n    end\n\n    def should_compile?(sass_filename, css_filename, sourcemap_filename = nil)\n      return true if css_filename && !File.exist?(css_filename)\n      return true if sourcemap_filename && options[:sourcemap] && !File.exist?(sourcemap_filename)\n      options[:force] ||\n        needs_update?(css_filename, sass_filename) ||\n        (options[:sourcemap] && needs_update?(sourcemap_filename, sass_filename))\n    end\n\n    # A sass engine for compiling a single file.\n    def engine(sass_filename, css_filename, sourcemap_filename = nil)\n      syntax = (sass_filename =~ /\\.(s[ac]ss)$/) && $1.to_sym || :sass\n      opts = sass_options.merge(:filename => sass_filename,\n                                :css_filename => css_filename,\n                                :syntax => syntax,\n                                :sourcemap_filename => sourcemap_filename)\n      Sass::Engine.new(open(sass_filename).read, opts)\n    end\n\n    # Place the syntax error into the target css file,\n    # formatted to display in the browser (in development mode)\n    # if there's an error.\n    def handle_exception(sass_filename, css_filename, e)\n      exception_file = basename(e.sass_filename || sass_filename)\n      file = basename(sass_filename)\n      exception_file = nil if exception_file == file\n      formatted_error = \"(Line #{e.sass_line}#{ \" of #{exception_file}\" if exception_file}: #{e.message})\"\n      logger.record :error, file, formatted_error\n      Compass.configuration.run_stylesheet_error(sass_filename, formatted_error)\n      write_file css_filename, error_contents(e, sass_filename), options.merge(:force => true), sass_options[:unix_newlines]\n    end\n\n    # Haml refactored this logic in 2.3, this is backwards compatibility for either one\n    def error_contents(e, sass_filename)\n      if show_full_exception?\n        e.sass_template = sass_filename\n        Sass::SyntaxError.exception_to_css(e)\n      else\n        header = Sass::SyntaxError.send(:header_string, e, 1)\n        <<END\n/*\n#{header.gsub(\"*/\", \"*\\\\/\")}\n\nBacktrace:\\n#{e.backtrace.join(\"\\n\").gsub(\"*/\", \"*\\\\/\")}\n*/\nEND\n      end\n    end\n\n    # We don't want to show the full exception in production environments.\n    def show_full_exception?\n      Compass.configuration.environment == :development\n    end\n\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/configuration/comments.rb",
    "content": "module Compass\n  module Configuration\n    # Comments are emitted into the configuration file when serialized and make it easier to understand for new users.\n    module Comments\n\n      def comment_for_http_path\n        unless top_level.http_path_without_default\n          \"# Set this to the root of your project when deployed:\\nhttp_path = #{top_level.http_path.to_s.inspect}\\n\"\n        else\n          \"\"\n        end\n      end\n\n      def comment_for_relative_assets\n        unless top_level.relative_assets\n          %q{# To enable relative paths to assets via compass helper functions. Uncomment:\n# relative_assets = true\n}\n        else\n          \"\"\n        end\n      end\n\n      def comment_for_line_comments\n        if top_level.line_comments\n          %q{# To disable debugging comments that display the original location of your selectors. Uncomment:\n# line_comments = false\n}\n        else\n          \"\"\n        end\n      end\n\n      def comment_for_output_style\n        unless top_level.output_style_without_default\n          %Q{# You can select your preferred output style here (can be overridden via the command line):\n# output_style = :expanded or :nested or :compact or :compressed\n}\n        else\n          \"\"\n        end\n      end\n\n      def comment_for_preferred_syntax\n        if top_level.preferred_syntax_without_default.nil? && top_level.sass_dir\n          %Q{\n# If you prefer the indented syntax, you might want to regenerate this\n# project again passing --syntax sass, or you can uncomment this:\n# preferred_syntax = :sass\n# and then run:\n# sass-convert -R --from scss --to sass #{top_level.sass_dir} scss && rm -rf sass && mv scss sass\n}\n        else\n          \"\"\n        end\n      end\n    end\n    class Data\n      include Comments\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/configuration/file_data.rb",
    "content": "module Compass\n  module Configuration\n    class FileData < Data\n      def self.new_from_file(config_file, defaults = nil)\n        data = new(config_file)\n        data.with_defaults(defaults) do\n          data._parse(config_file)\n        end\n        data\n      end\n\n      def self.new_from_string(contents, filename, defaults = nil)\n        data = new(filename)\n        data.with_defaults(defaults) do\n          data.parse_string(contents, filename)\n        end\n        data\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/configuration/helpers.rb",
    "content": "module Compass\n  module Configuration\n    @callbacks_loaded = false\n    # The helpers are available as methods on the Compass module. E.g. Compass.configuration\n    module Helpers\n      def configuration_for(config, filename = nil, defaults = nil)\n        if config.nil?\n          nil\n        elsif config.is_a?(Compass::Configuration::Data)\n          config\n        elsif config.instance_of?(Hash)\n          Compass::Configuration::Data.new(filename, config)\n        elsif config.respond_to?(:read)\n          filename ||= config.to_s if config.is_a?(Pathname)\n          Compass::Configuration::FileData.new_from_string(config.read, filename, defaults)\n        elsif config.is_a?(Hash)\n          Compass::Configuration::Data.new(filename, config)\n        elsif config.is_a?(String)\n          Compass::Configuration::FileData.new_from_file(config, defaults)\n        elsif config.is_a?(Symbol)\n          Compass::AppIntegration.lookup(config).configuration\n        else\n          raise \"I don't know what to do with: #{config.inspect}\"\n        end\n      end\n\n      def sass_plugin_configuration\n        configuration.to_sass_plugin_options\n      end\n\n      def configure_sass_plugin!\n        require 'sass/plugin'\n        config = sass_plugin_configuration\n        locations = config.delete(:template_location)\n        Sass::Plugin.options.merge!(config)\n        locations.each do |sass_dir, css_dir|\n          unless Sass::Plugin.engine_options[:load_paths].include?(sass_dir)\n            Sass::Plugin.add_template_location sass_dir, css_dir\n          end\n        end\n        unless @callbacks_loaded\n          on_saved = Proc.new do |sass_file, css_file|\n                       Compass.configuration.run_stylesheet_saved(css_file)\n                     end\n          if Sass::Plugin.respond_to?(:on_updated_stylesheet)\n            Sass::Plugin.on_updated_stylesheet(&on_saved)\n          else\n            Sass::Plugin.on_updating_stylesheet(&on_saved)\n          end\n          \n          Sass::Plugin.on_compilation_error do |e, filename, css|\n            Compass.configuration.run_stylesheet_error(filename, e.message)\n          end\n          \n          @callbacks_loaded = true\n        end\n      end\n\n      def sass_engine_options\n        configuration.to_sass_engine_options\n      end\n\n      # Read the configuration file for this project\n      def add_project_configuration(*args)\n        options = args.last.is_a?(Hash) ? args.pop : {}\n        configuration_file_path = args.shift || detect_configuration_file\n\n        raise ArgumentError, \"Too many arguments\" if args.any?\n        if AppIntegration.default? && data = configuration_for(configuration_file_path, nil, configuration_for(options[:defaults]))\n          if data.raw_project_type\n            add_configuration(data.raw_project_type.to_sym)\n          elsif options[:project_type]\n            add_configuration(options[:project_type])\n          else\n            add_configuration(:stand_alone)\n          end\n          add_configuration(data)\n        else\n          add_configuration(options[:project_type] || configuration.project_type_without_default || (yield if block_given?) || :stand_alone)\n        end\n      end\n\n      # TODO: Deprecate the src/config.rb location.\n      KNOWN_CONFIG_LOCATIONS = ['config/compass.rb', \".compass/config.rb\", \"config/compass.config\", \"config.rb\", \"src/config.rb\"]\n\n      # Finds the configuration file, if it exists in a known location.\n      def detect_configuration_file(project_path = nil)\n        possible_files = KNOWN_CONFIG_LOCATIONS.map{|f| projectize(f, project_path) }\n        possible_files.detect{|f| File.exists?(f)}\n      end\n\n      def handle_configuration_change!\n        if (compiler = Compass.compiler).new_config?\n          compiler.clean!\n        end\n      end\n\n      # @deprecated\n      def compiler\n        Compass::Deprecation.deprecated!(:compiler_accessor,\n          \"Compass.compiler is deprecated. Use Compass.sass_compiler instead.\")\n        Compass::Deprecation.mark_as_issued(:compass_compiler_constructor)\n        Compass::Compiler.new(*Compass.configuration.to_compiler_arguments)\n      end\n\n      def sass_compiler(*args)\n        Compass::SassCompiler.new(*args)\n      end\n    end\n  end\n\n  extend Configuration::Helpers\nend\n"
  },
  {
    "path": "cli/lib/compass/configuration/serialization.rb",
    "content": "module Compass\n  module Configuration\n    # The serialization module manages reading and writing the configuration file(s).\n    module Serialization\n      def parse(config_file)\n        raise Compass::Error, \"Compass.configuration.parse(filename) has been removed. Please call Compass.add_project_configuration(filename) instead.\"\n      end\n\n      # parses a configuration file which is a ruby script\n      def _parse(config_file)\n        unless File.readable?(config_file)\n          raise Compass::Error, \"Configuration file, #{config_file}, not found or not readable.\"\n        end\n        open(config_file) do |f|\n          parse_string(f.read, config_file)\n        end\n      end\n\n      def get_binding\n        binding\n      end\n      def parse_string(contents, filename)\n        bind = get_binding\n        eval(contents, bind, filename)\n        local_vars_set = eval(\"local_variables\", bind)\n        local_vars_set.each do |local_var|\n          if (ATTRIBUTES+ARRAY_ATTRIBUTES).include?(local_var.to_sym)\n            value = eval(local_var.to_s, bind)\n            value = value.to_s if value.is_a?(Pathname)\n            self.send(\"#{local_var}=\", value)\n          end\n        end\n        if @added_import_paths\n          @added_import_paths.each do |p|\n            self.additional_import_paths << p unless self.additional_import_paths.include?(p)\n          end\n        end\n        issue_deprecation_warnings\n      end\n\n      def serialize\n        contents = \"\"\n        (required_libraries || []).each do |lib|\n          contents << %Q{require '#{lib}'\\n}\n        end\n        unless (required_libraries || []).include?(\"compass/import-once/activate\") ||\n               (required_libraries || []).include?(\"compass/import-once\")\n          contents << \"require 'compass/import-once/activate'\\n\"\n        end\n        (loaded_frameworks || []).each do |lib|\n          contents << %Q{load '#{lib}'\\n}\n        end\n        (framework_path || []).each do |lib|\n          contents << %Q{discover '#{lib}'\\n}\n        end\n        contents << \"# Require any additional compass plugins here.\\n\"\n        contents << \"\\n\" if (required_libraries || []).any?\n        (ATTRIBUTES + ARRAY_ATTRIBUTES).each do |prop|\n          value = send(\"#{prop}_without_default\")\n          if value.is_a?(Proc)\n            $stderr.puts \"WARNING: #{prop} is code and cannot be written to a file. You'll need to copy it yourself.\"\n          end\n          if respond_to?(\"comment_for_#{prop}\")\n            contents << \"\\n\"\n            contents << send(\"comment_for_#{prop}\")\n          end\n          if block_given? && (to_emit = yield(prop, value))\n            contents << to_emit\n          else\n            contents << serialize_property(prop, value) unless value.nil?\n          end\n        end\n        contents\n      end\n\n      def serialize_property(prop, value)\n        if value.respond_to?(:serialize_to_config)\n          value.serialize_to_config(prop) + \"\\n\"\n        else\n          %Q(#{prop} = #{value.inspect}\\n)\n        end\n      end\n\n      def issue_deprecation_warnings\n        if http_images_path == :relative\n          $stderr.puts \"DEPRECATION WARNING: Please set relative_assets = true to enable relative paths.\"\n        end\n      end\n\n    end\n    class Data\n      include Serialization\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/dependencies.rb",
    "content": "begin\n  require 'sass'\nrescue LoadError\n  require 'rubygems'\n  begin\n    require 'sass'\n  rescue LoadError\n    puts \"Unable to load Sass. Please install it with one of the following commands:\"\n    puts \"  gem install sass --pre\"\n    raise\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/deprecation.rb",
    "content": "module Compass\n  module Deprecation\n    class << self\n      attr_accessor :issued_deprecations\n    end\n    self.issued_deprecations = {}\n\n    def self.deprecated!(identifier, message)\n      return if Deprecation.issued_deprecations[identifier]\n      Deprecation.issued_deprecations[identifier] = true\n      warn message\n      warn \"Called from #{caller[1]}\"\n    end\n\n    def self.mark_as_issued(identifier)\n      Deprecation.issued_deprecations[identifier] = true\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/errors.rb",
    "content": "require 'compass/error'\nmodule Compass\n  class FilesystemConflict < Error\n  end\n\n  class MissingDependency < Error\n  end\n  class SpriteException < Error; end\nend\n"
  },
  {
    "path": "cli/lib/compass/exec/command_option_parser.rb",
    "content": "module Compass::Exec\n  class CommandOptionParser\n    attr_accessor :options, :arguments, :opts\n    def initialize(arguments)\n      self.arguments = arguments\n      self.options = {}\n    end\n    def parse!\n      opts.parse!(arguments)\n    end\n    def opts\n      OptionParser.new do |opts|\n        self.set_options(opts)\n      end\n    end\n    def set_options(opts)\n\n    end\n    def to_s\n      opts.to_s\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/exec/global_options_parser.rb",
    "content": "module Compass::Exec::GlobalOptionsParser\n  def set_options(opts)\n    super\n    set_global_options(opts)\n  end\n  def set_global_options(opts)\n    opts.on('-r LIBRARY', '--require LIBRARY',\n            \"Require the given ruby LIBRARY before running commands.\",\n            \"  This is used to access compass plugins without having a\",\n            \"  project configuration file.\"\n      ) do |library|\n        ::Compass.configuration.require library\n      end\n\n    opts.on('-l FRAMEWORK_DIR', '--load FRAMEWORK_DIR',\n            \"Load the framework or extensions found in the FRAMEWORK directory.\"\n      ) do |framework_dir|\n        require 'pathname'\n        ::Compass.configuration.load Pathname.new(framework_dir).realpath\n      end\n\n    opts.on('-L FRAMEWORKS_DIR', '--load-all FRAMEWORKS_DIR',\n            \"Load all the frameworks or extensions found in the FRAMEWORKS_DIR directory.\"\n      ) do |frameworks_dir|\n        require 'pathname'\n        ::Compass.configuration.discover Pathname.new(frameworks_dir).realpath\n      end\n\n    opts.on('-I IMPORT_PATH', '--import-path IMPORT_PATH',\n            \"Makes files under the IMPORT_PATH folder findable by Sass's @import directive.\"\n      ) do |import_path|\n        require 'pathname'\n        ::Compass.configuration.add_import_path Pathname.new(import_path).realpath\n      end\n\n    opts.on('-q', '--quiet', :NONE, 'Quiet mode.') do\n      self.options[:quiet] = true\n    end\n\n    opts.on('--trace', :NONE, 'Show a full stacktrace on error') do\n      self.options[:trace] = true\n    end\n\n    opts.on('--force', :NONE, 'Allows compass to overwrite existing files.') do\n      self.options[:force] = true\n    end\n\n    opts.on('--boring', :NONE, 'Turn off colorized output.') do\n      self.options[:color_output] = false\n    end\n\n    opts.on_tail(\"-?\", \"-h\", \"--help\", \"Show this message\") do\n      puts opts\n      exit\n    end\n\n  end\n\nend\n"
  },
  {
    "path": "cli/lib/compass/exec/helpers.rb",
    "content": "module Compass::Exec\n  module Helpers\n    extend self\n    def report_error(e, options)\n      $stderr.puts \"#{e.class} on line #{get_line e} of #{get_file e}: #{e.message}\"\n      if options[:trace]\n        e.backtrace[1..-1].each { |t| $stderr.puts \"  #{t}\" }\n      else\n        $stderr.puts \"Run with --trace to see the full backtrace\"\n      end\n    end\n\n    def get_file(exception)\n      exception.backtrace[0].split(/:/, 2)[0]\n    end\n\n    def get_line(exception)\n      exception.backtrace[0].scan(/:(\\d+)/)[0]\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/exec/project_options_parser.rb",
    "content": "module Compass::Exec::ProjectOptionsParser\n  def set_options(opts)\n    super\n    set_project_options(opts)\n  end\n  def set_dir_or_path(type, dir)\n    if Pathname.new(dir).absolute?\n      self.options[:\"#{type}_path\"] = dir.tr('\\\\','/')\n    else\n      self.options[:\"#{type}_dir\"] = dir.tr('\\\\','/')\n    end\n  end\n\n  def set_project_options(opts)\n    opts.on('-c', '--config CONFIG_FILE', 'Specify the location of the configuration file explicitly.') do |configuration_file|\n      self.options[:configuration_file] = configuration_file\n    end\n\n    opts.on('--app APP', 'Tell compass what kind of application it is integrating with. E.g. rails') do |project_type|\n      self.options[:project_type] = project_type.to_sym\n    end\n\n    opts.on('--app-dir PATH', 'The base directory for your application.') do |project_path|\n      self.options[:project_path] = project_path\n    end\n\n    opts.on('--sass-dir SRC_DIR', \"The source directory where you keep your sass stylesheets.\") do |sass_dir|\n      set_dir_or_path(:sass, sass_dir)\n    end\n\n    opts.on('--css-dir CSS_DIR', \"The target directory where you keep your css stylesheets.\") do |css_dir|\n      set_dir_or_path(:css, css_dir)\n    end\n\n    opts.on('--images-dir IMAGES_DIR', \"The directory where you keep your images.\") do |images_dir|\n      set_dir_or_path(:images, images_dir)\n    end\n\n    opts.on('--javascripts-dir JS_DIR', \"The directory where you keep your javascripts.\") do |javascripts_dir|\n      set_dir_or_path(:javascripts, javascripts_dir)\n    end\n\n    opts.on('--fonts-dir FONTS_DIR', \"The directory where you keep your fonts.\") do |fonts_dir|\n      set_dir_or_path(:fonts, fonts_dir)\n    end\n\n    opts.on('-e ENV', '--environment ENV', [:development, :production], 'Use sensible defaults for your current environment.',\n            '  One of: development (default), production') do |env|\n      self.options[:environment] = env\n    end\n\n    opts.on('-s STYLE', '--output-style STYLE', [:nested, :expanded, :compact, :compressed], 'Select a CSS output mode.',\n            '  One of: nested, expanded, compact, compressed') do |style|\n      self.options[:output_style] = style\n    end\n\n    opts.on('--relative-assets', :NONE, 'Make compass asset helpers generate relative urls to assets.') do\n      self.options[:relative_assets] = true\n    end\n\n    opts.on('--no-line-comments', :NONE, 'Disable line comments.') do\n      self.options[:line_comments] = false\n    end\n\n    opts.on('--http-path HTTP_PATH', 'Set this to the root of your project when deployed') do |http_path|\n      self.options[:http_path] = http_path\n    end\n\n    opts.on('--generated-images-path GENERATED_IMAGES_PATH', 'The path where you generate your images') do |generated_images_path|\n      self.options[:generated_images_path] = generated_images_path\n    end\n  end\n\nend\n"
  },
  {
    "path": "cli/lib/compass/exec/sub_command_ui.rb",
    "content": "require 'compass/exec/global_options_parser'\nrequire 'compass/exec/project_options_parser'\n\nmodule Compass::Exec\n  class SubCommandUI\n\n    attr_accessor :args\n\n    def initialize(args)\n      self.args = args\n    end\n\n    def run!\n      begin\n        return perform!\n      rescue Exception => e\n        raise e if e.is_a? SystemExit\n        if e.is_a?(::Compass::Error) || e.is_a?(OptionParser::ParseError)\n          $stderr.puts e.message\n        else\n          ::Compass::Exec::Helpers.report_error(e, @options || {})\n        end\n        return 1\n      end\n    end\n    \n    protected\n    \n    def perform!\n      $command = args.shift\n      command_class = Compass::Commands[$command]\n      unless command_class\n        args.unshift($command)\n        $command = \"help\"\n        command_class = Compass::Commands::Default\n      end\n      @options = if command_class.respond_to?(\"parse_#{$command}!\")\n        command_class.send(\"parse_#{$command}!\", args)\n      else\n        command_class.parse!(args)\n      end\n      cmd = command_class.new(Dir.getwd, @options)\n      cmd.execute\n      cmd.successful? ? 0 : 1\n    rescue OptionParser::ParseError => e\n      puts \"Error: #{e.message}\"\n      puts command_class.usage if command_class.respond_to?(:usage)\n    end\n    \n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/exec.rb",
    "content": "require 'compass/dependencies'\nrequire 'optparse'\nrequire 'compass/logger'\nrequire 'compass/errors'\nrequire 'compass/actions'\nrequire 'compass/installers'\nrequire 'compass/commands'\nrequire 'rbconfig'\nrequire 'pathname'\nbegin\n  require 'win32console' if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/\nrescue LoadError\n  $boring = true\nend\n\nmodule Compass::Exec\nend\n\n%w(helpers sub_command_ui\n   global_options_parser project_options_parser\n   command_option_parser).each do |lib|\n  require \"compass/exec/#{lib}\"\nend\n"
  },
  {
    "path": "cli/lib/compass/generated_version.rb",
    "content": "module Compass\n  # This file intentionall does nothing.\n  # The compass build scripts put the release VERSION constant here.\nend\n"
  },
  {
    "path": "cli/lib/compass/installers/bare_installer.rb",
    "content": "module Compass\n  module Installers\n\n    class BareInstaller < Base\n      def completed_configuration\n        nil\n      end\n\n      def init\n        directory targetize(\"\")\n        directory targetize(Compass.configuration.sass_dir)\n      end\n\n      def prepare\n      end\n\n      def install\n        config_file ||= targetize('config.rb')\n        write_file config_file, config_contents\n      end\n\n      def config_contents\n        project_path, Compass.configuration.project_path = Compass.configuration.project_path, nil\n        Compass.configuration.serialize\n      ensure\n        Compass.configuration.project_path = project_path\n      end\n\n      def finalize(options = {})\n        puts <<-NEXTSTEPS\n\n*********************************************************************\nCongratulations! Your compass project has been created.\n\nYou may now add sass stylesheets to the #{Compass.configuration.sass_dir} subdirectory of your project.\n\nSass files beginning with an underscore are called partials and won't be\ncompiled to CSS, but they can be imported into other sass stylesheets.\n\nYou can configure your project by editing the config.rb configuration file.\n\nYou must compile your sass stylesheets into CSS when they change.\nThis can be done in one of the following ways:\n  1. To compile on demand:\n     compass compile [path/to/project]\n  2. To monitor your project for changes and automatically recompile:\n     compass watch [path/to/project]\n\nMore Resources:\n  * Website: http://compass-style.org/\n  * Sass: http://sass-lang.com\n  * Community: http://groups.google.com/group/compass-users/\nNEXTSTEPS\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/installers/base.rb",
    "content": "module Compass\n  module Installers\n\n    class Base\n\n      include Actions\n\n      attr_accessor :template_path, :target_path, :working_path\n      attr_accessor :options\n\n      def initialize(template_path, target_path, options = {})\n        @template_path = template_path\n        @target_path = target_path\n        @working_path = Dir.getwd\n        @options = options\n        self.logger = options[:logger]\n      end\n\n      [:css_dir, :sass_dir, :images_dir, :javascripts_dir, :http_stylesheets_path, :fonts_dir, :preferred_syntax].each do |dir|\n        define_method dir do\n          Compass.configuration.send(dir)\n        end\n        define_method \"#{dir}_without_default\" do\n          Compass.configuration.send(\"#{dir}_without_default\")\n        end\n      end\n\n      # Runs the installer.\n      # Every installer must conform to the installation strategy of prepare, install, and then finalize.\n      # A default implementation is provided for each step.\n      def run(run_options = {})\n        prepare unless run_options[:skip_preparation]\n        install unless options[:prepare]\n        finalize(options.merge(run_options)) unless options[:prepare] || run_options[:skip_finalization]\n      end\n\n      # The default prepare method -- it is a no-op.\n      # Generally you would create required directories, etc.\n      def prepare\n      end\n\n      # The install method override this to install\n      def install\n        raise \"Not Yet Implemented\"\n      end\n\n      # The default finalize method -- it is a no-op.\n      # This could print out a message or something.\n      def finalize(options = {})\n      end\n\n      def compilation_required?\n        false\n      end\n\n      def pattern_name_as_dir\n        \"#{options[:pattern_name]}/\" if options[:pattern_name]\n      end\n\n      def self.installer(type, installer_opts = {}, &locator)\n        locator ||= lambda{|to| to}\n        loc_method = \"install_location_for_#{type}\".to_sym\n        define_method(\"simple_#{loc_method}\", locator)\n        define_method(loc_method) do |to, options|\n          if options[:like] && options[:like] != type\n            send(\"install_location_for_#{options[:like]}\", to, options)\n          else\n            send(\"simple_#{loc_method}\", to)\n          end\n        end\n        define_method \"install_#{type}\" do |from, to, options|\n          from = templatize(from)\n          to = targetize(send(loc_method, to, options))\n          is_binary = installer_opts[:binary] || options[:binary]\n          if is_binary\n            copy from, to, nil, is_binary\n          else\n            contents = File.new(from).read\n            if options.delete(:erb)\n              ctx = TemplateContext.ctx(:to => to, :options => options)\n              contents = process_erb(contents, ctx)\n            end\n            write_file to, contents\n          end\n        end\n      end\n\n      installer :stylesheet do |to|\n        \"#{sass_dir}/#{pattern_name_as_dir}#{to}\"\n      end\n\n      def install_stylesheet(from, to, options)\n        from = templatize(from)\n        to = targetize(install_location_for_stylesheet(to, options))\n        contents = File.new(from).read\n        if options.delete(:erb)\n          ctx = TemplateContext.ctx(:to => to, :options => options)\n          contents = process_erb(contents, ctx)\n        end\n        if preferred_syntax.to_s != from[-4..-1]\n          # logger.record :convert, basename(from)\n          tree = Sass::Engine.new(contents, Compass.sass_engine_options.merge(:syntax => from[-4..-1].intern)).to_tree\n          contents = tree.send(\"to_#{preferred_syntax}\")\n          to[-4..-1] = preferred_syntax.to_s\n        end\n        write_file to, contents\n      end\n\n      installer :css do |to|\n        \"#{css_dir}/#{to}\"\n      end\n\n      installer :image, :binary => true do |to|\n        \"#{images_dir}/#{to}\"\n      end\n\n      installer :javascript do |to|\n        \"#{javascripts_dir}/#{to}\"\n      end\n\n      installer :font do |to|\n        \"#{fonts_dir}/#{to}\"\n      end\n\n      installer :file do |to|\n        \"#{pattern_name_as_dir}#{to}\"\n      end\n\n      installer :html do |to|\n        \"#{pattern_name_as_dir}#{to}\"\n      end\n\n      def install_directory(from, to, options)\n        d = if within = options[:within]\n          if respond_to?(within)\n            targetize(\"#{send(within)}/#{to}\")\n          else\n            raise Compass::Error, \"Unrecognized location: #{within}\"\n          end\n        else\n          targetize(to)\n        end\n        directory d\n      end\n\n      alias install_html_without_haml install_html\n      def install_html(from, to, options)\n        if to =~ /\\.haml$/\n          require 'haml'\n          to = to[0..-(\".haml\".length+1)]\n          if respond_to?(:install_location_for_html)\n            to = install_location_for_html(to, options)\n          end\n          contents = File.read(templatize(from))\n          if options.delete(:erb)\n            ctx = TemplateContext.ctx(:to => to, :options => options)\n            contents = process_erb(contents, ctx)\n          end\n          Compass.configure_sass_plugin!\n          html = Haml::Engine.new(contents, :filename => templatize(from)).render\n          write_file(targetize(to), html, options)\n        else\n          install_html_without_haml(from, to, options)\n        end\n      end\n\n      # returns an absolute path given a path relative to the current installation target.\n      # Paths can use unix style \"/\" and will be corrected for the current platform.\n      def targetize(path)\n        strip_trailing_separator File.join(target_path, separate(path))\n      end\n\n      # returns an absolute path given a path relative to the current template.\n      # Paths can use unix style \"/\" and will be corrected for the current platform.\n      def templatize(path)\n        strip_trailing_separator File.join(template_path, separate(path))\n      end\n\n      # Emits an HTML fragment that can be used to link to the compiled css files\n      def stylesheet_links\n        \"\"\n      end\n    end\n  end\nend\nrequire 'compass/installers/bare_installer'\nrequire 'compass/installers/manifest_installer'\n"
  },
  {
    "path": "cli/lib/compass/installers/manifest.rb",
    "content": "module Compass\n  module Installers\n\n    class Manifest\n      include Enumerable\n\n      # A Manifest entry\n      class Entry < Struct.new(:type, :from, :options)\n        def to\n          options[:to] || from\n        end\n      end\n\n      attr_reader :options\n      def initialize(manifest_file = nil, options = {})\n        @entries = []\n        @options = options\n        @generate_config = true\n        @compile_after_generation = true\n        parse(manifest_file) if manifest_file\n      end\n\n      def self.known_extensions\n        @known_extensions ||= {}\n      end\n\n      def self.plural_types\n        @plural_types ||= {}\n      end\n\n      def self.type(t, options = {})\n        Array(options[:extensions]).each do |ext|\n          self.known_extensions[ext] = t\n        end\n        self.plural_types[options[:plural]] = t if options[:plural]\n        eval <<-END\n          def #{t}(from, options = {})\n             @entries << Entry.new(:#{t}, from, options)\n          end\n          def has_#{t}?\n            @entries.detect {|e| e.type == :#{t}}\n          end\n          def each_#{t}\n            @entries.select {|e| e.type == :#{t}}.each {|e| yield e}\n          end\n        END\n      end\n\n      type :stylesheet, :plural => :stylesheets, :extensions => %w(scss sass)\n      type :image,      :plural => :images,      :extensions => %w(png gif jpg jpeg tiff gif)\n      type :javascript, :plural => :javascripts, :extensions => %w(js)\n      type :font,       :plural => :fonts,       :extensions => %w(eot otf woff ttf)\n      type :html,       :plural => :html,        :extensions => %w(html haml)\n      type :file,       :plural => :files\n      type :directory,  :plural => :directories\n\n      def discover(type)\n        type = self.class.plural_types[type] || type\n        dir = File.dirname(@manifest_file)\n        Dir.glob(\"#{dir}/**/*\").each do |file|\n          next if /manifest\\.rb/ =~ file\n          short_name = file[(dir.length+1)..-1]\n          options = {}\n          ext = if File.extname(short_name) == \".erb\"\n            options[:erb] = true\n            File.extname(short_name[0..-5])\n          else\n            File.extname(short_name)\n          end[1..-1]\n          file_type = self.class.known_extensions[ext]\n          file_type = :file if file_type.nil?\n          file_type = :directory if File.directory?(file)\n          if type == :all || type == file_type\n            send(file_type, short_name, options)\n          end\n        end\n      end\n\n      def help(value = nil)\n        if value\n          @help = value\n        else\n          @help\n        end\n      end\n\n      attr_reader :welcome_message_options\n\n      def welcome_message(value = nil, options = {})\n        if value\n          @welcome_message = value\n          @welcome_message_options = options\n        else\n          @welcome_message\n        end\n      end\n\n      def welcome_message_options\n        @welcome_message_options || {}\n      end\n\n      def description(value = nil)\n        if value\n          @description = value\n        else\n          @description\n        end\n      end\n\n      # Enumerates over the manifest files\n      def each\n        @entries.each {|e| yield e}\n      end\n\n      def generate_config?\n        @generate_config\n      end\n\n      def compile?\n        @compile_after_generation\n      end\n\n      protected\n\n      def no_configuration_file!\n        @generate_config = false\n      end\n\n      def skip_compilation!\n        @compile_after_generation = false\n      end\n\n      def with_manifest(manifest_file)\n        @manifest_file = manifest_file\n        yield\n      ensure\n        @manifest_file = nil\n      end\n\n      # parses a manifest file which is a ruby script\n      # evaluated in a Manifest instance context\n      def parse(manifest_file)\n        with_manifest(manifest_file) do\n          if File.exists?(manifest_file)\n            open(manifest_file) do |f| \n              eval(f.read, instance_binding, manifest_file)\n            end \n          else\n              eval(\"discover :all\", instance_binding, manifest_file)\n          end \n        end \n      end \n\n\n      def instance_binding\n        binding\n      end\n    end\n\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/installers/manifest_installer.rb",
    "content": "module Compass\n  module Installers\n\n    class ManifestInstaller < Base\n\n      attr_accessor :manifest\n\n      def initialize(template_path, target_path, options = {})\n        super\n        @manifest = Manifest.new(manifest_file, options) if template_path\n      end\n\n      def manifest_file\n        @manifest_file ||= File.join(template_path, \"manifest.rb\")\n      end\n\n      # Initializes the project to work with compass\n      def init\n        dirs = manifest.map do |entry|\n          unless entry.type == :directory\n            loc = send(\"install_location_for_#{entry.type}\", entry.to, entry.options)\n            File.dirname(loc)\n          end\n        end.compact\n\n        if manifest.has_stylesheet?\n          dirs << sass_dir\n          dirs << css_dir\n        end\n\n        dirs.uniq.sort.each do |dir|\n          directory targetize(dir)\n        end\n      end\n\n      # The default install method. Calls install_<type> methods in the order specified by the manifest.\n      def install\n        manifest.each do |entry|\n          send(\"install_#{entry.type}\", entry.from, entry.to, entry.options)\n        end\n      end\n\n      def stylesheet_links\n        html = \"<head>\\n\"\n        manifest.each_stylesheet do |stylesheet|\n          # Skip partials.\n          next if File.basename(stylesheet.from)[0..0] == \"_\"\n          media = if stylesheet.options[:media]\n            %Q{ media=\"#{stylesheet.options[:media]}\"}\n          end\n          ss_line = %Q{  <link href=\"#{http_stylesheets_path}/#{stylesheet.to.sub(/\\.s[ac]ss$/,'.css')}\"#{media} rel=\"stylesheet\" type=\"text/css\" />}\n          if stylesheet.options[:condition]\n            ss_line = \"  <!--[if #{stylesheet.options[:condition]}]>\\n    #{ss_line}\\n  <![endif]-->\"\n          end\n          html << ss_line + \"\\n\"\n        end\n        html << \"</head>\"\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/installers/template_context.rb",
    "content": "module Compass\n  module Installers\n    class TemplateContext\n\n      def self.ctx(*arguments)\n        new(*arguments).send(:get_binding)\n      end\n\n      def initialize(template, locals = {})\n        @template = template\n        @locals = locals\n      end\n\n      def http_stylesheets_path\n        config.http_stylesheets_path ||\n        config.default_for(:http_stylesheets_path) ||\n        config.http_root_relative(config.css_dir)\n      end\n\n      Compass::Configuration::ATTRIBUTES.each do |attribute|\n        unless instance_methods.include?(attribute.to_s)\n          define_method attribute do\n            config.send(attribute) || config.default_for(attribute)\n          end\n        end\n      end\n\n      def config\n        Compass.configuration\n      end\n\n      alias configuration config\n\n      protected\n\n      def get_binding\n        @locals.each do |k, v|\n          eval(\"#{k} = v\")\n        end\n        binding\n      end\n    end\n  end\nend"
  },
  {
    "path": "cli/lib/compass/installers.rb",
    "content": "%w(manifest template_context base manifest_installer bare_installer).each do |f|\n  require \"compass/installers/#{f}\"\nend\n"
  },
  {
    "path": "cli/lib/compass/logger.rb",
    "content": "module Compass\n\n  class Logger\n\n    COLORS = { :clear => 0, :red => 31, :green => 32, :yellow => 33, :blue => 34 }\n\n    ACTION_COLORS = {\n      :error     => :red,\n      :warning   => :yellow,\n      :info      => :green,\n      :compile   => :green,\n      :overwrite => :yellow,\n      :modified  => :yellow,\n      :clean     => :yellow,\n      :write     => :green,\n      :create    => :green,\n      :remove    => :yellow,\n      :delete    => :yellow,\n      :deleted   => :yellow,\n      :created   => :yellow,\n      :exists    => :green,\n      :directory => :green,\n      :identical => :green,\n      :convert   => :green,\n      :unchanged => :yellow\n    }\n\n    DEFAULT_ACTIONS = ACTION_COLORS.keys\n\n    ACTION_CAN_BE_QUIET = {\n      :error     => false,\n      :warning   => true,\n      :info      => true,\n      :compile   => true,\n      :overwrite => true,\n      :modified  => true,\n      :clean     => true,\n      :write     => true,\n      :create    => true,\n      :remove    => true,\n      :delete    => true,\n      :deleted   => true,\n      :created   => true,\n      :exists    => true,\n      :directory => true,\n      :identical => true,\n      :convert   => true,\n      :unchanged => true\n    }\n\n    attr_accessor :actions, :options, :time\n\n    def initialize(*actions)\n      self.options = actions.last.is_a?(Hash) ? actions.pop : {}\n      @actions = DEFAULT_ACTIONS.dup\n      @actions += actions\n    end\n\n    # Record an action that has occurred\n    def record(action, *arguments)\n      return if options[:quiet] && ACTION_CAN_BE_QUIET[action]\n      msg = \"\"\n      if time\n        msg << Time.now.strftime(\"%I:%M:%S.%3N %p\")\n      end\n      msg << color(ACTION_COLORS[action]) if Compass.configuration.color_output\n      msg << \"#{action_padding(action)}#{action}\"\n      msg << color(:clear) if Compass.configuration.color_output\n      msg << \" #{arguments.join(' ')}\"\n      log msg\n    end\n\n    def green\n      wrap(:green) { yield }\n    end\n\n    def red\n      wrap(:red) { yield }\n    end\n\n    def yellow\n      wrap(:yellow) { yield }\n    end\n\n    def wrap(c, reset_to = :clear)\n      $stderr.write(color(c))\n      $stdout.write(color(c))\n      yield\n    ensure\n      $stderr.write(color(reset_to))\n      $stdout.write(color(reset_to))\n      $stdout.flush\n    end\n\n    def color(c)\n      if Compass.configuration.color_output && c && COLORS.has_key?(c.to_sym)\n        if defined?($boring) && $boring\n          \"\"\n        else\n          \"\\e[#{COLORS[c.to_sym]}m\"\n        end\n      else\n        \"\"\n      end\n    end\n\n    # Emit a log message without a trailing newline\n    def emit(msg)\n      print msg\n      $stdout.flush\n    end\n\n    # Emit a log message with a trailing newline\n    def log(msg)\n      puts msg\n      $stdout.flush\n    end\n\n    # add padding to the left of an action that was performed.\n    def action_padding(action)\n      ' ' * [(max_action_length - action.to_s.length), 0].max\n    end\n\n    # the maximum length of all the actions known to the logger.\n    def max_action_length\n      @max_action_length ||= actions.inject(0){|memo, a| [memo, a.to_s.length].max}\n    end\n  end\n\n  class NullLogger < Logger\n    def record(*args)\n    end\n\n    def log(msg)\n    end\n\n    def emit(msg)\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/quick_cache.rb",
    "content": "module QuickCache\n\n  # cache a value in memory for just a few seconds\n  # This can speed up reads of values that change relatively infrequently\n  # but might be read many times in a short burst of reads.\n  def quick_cache(key, ttl = 1)\n    @quick_cache ||= {}\n    if @quick_cache[key] && @quick_cache[key].first > Time.now - ttl\n      @quick_cache[key].last\n    else\n      (@quick_cache[key] = [Time.now, yield]).last\n    end\n  end\n\nend\n"
  },
  {
    "path": "cli/lib/compass/rails.rb",
    "content": "# Rails requires compass by requiring this file.\nrequire 'compass'\n"
  },
  {
    "path": "cli/lib/compass/sass_compiler.rb",
    "content": "require 'sass/plugin'\n\nclass Compass::SassCompiler\n\n  include Compass::Actions\n\n  attr_writer :logger\n  attr_reader :quiet\n  attr_reader :error_count\n  attr_accessor :config\n  attr_accessor :display_compilation_times\n  attr_accessor :working_path\n  attr_accessor :only_sass_files\n\n  def initialize(options = {}, config = Compass.configuration)\n    options = options.dup\n    self.config = config\n    self.display_compilation_times = options.delete(:time)\n    self.working_path = options.delete(:working_path) || Dir.pwd\n    self.only_sass_files = options.delete(:only_sass_files) || []\n    @quiet = options[:quiet]\n    plugin_options = config.to_sass_plugin_options.merge(options)\n    if only_sass_files.any?\n      plugin_options[:template_location] = []\n      plugin_options[:load_paths] = config.sass_load_paths\n    end\n    plugin_options[:always_update] = true if options.delete(:force)\n    plugin_options[:compass] ||= {}\n    plugin_options[:compass][:logger] = logger\n    @compiler = Sass::Plugin::Compiler.new(plugin_options)\n    @start_times = {}\n    @error_count = 0\n\n    public_methods(true).grep(/^when_/).each do |callback|\n      @compiler.send(callback.to_s.sub(/^when_/, 'on_')) {|*args| send(callback, *args) }\n    end\n  end\n\n  def compile!\n    @compiler.update_stylesheets(individual_files)\n  end\n\n  def watch!(options = {}, &block)\n    skip_initial_update = options.fetch(:skip_initial_update, false)\n    begin\n      @compiler.watch(individual_files, options.merge(:skip_initial_update => skip_initial_update), &block)\n    rescue Sass::SyntaxError => e\n      skip_initial_update = true\n      retry\n    end\n  end\n\n  def individual_files\n    only_sass_files.map {|sass_file| [sass_file, corresponding_css_file(sass_file)]}\n  end\n\n  def clean!\n    @compiler.clean(individual_files)\n  end\n\n  def file_list\n    @compiler.file_list(individual_files)\n  end\n\n  def when_updating_stylesheets(individual_files)\n    @start_times = {}\n    @error_count = 0\n  end\n\n  def when_compilation_starting(sass_file, css, sourcemap)\n    @start_times[sass_file] = Time.now\n  end\n\n  def when_template_created(sass_file)\n    logger.record :created, relativize(sass_file)\n  end\n\n  def when_template_deleted(sass_file)\n    logger.record :deleted, relativize(sass_file)\n  end\n\n  def when_template_modified(sass_file)\n    logger.record :modified, relativize(sass_file)\n  end\n\n  def when_updated_stylesheet(sass_file, css, sourcemap)\n    if css && display_compilation_times && @start_times[sass_file]\n      duration = ((Time.now - @start_times[sass_file]) * 1000).round / 1000.0\n      logger.record :write, \"#{relativize(css)} (#{duration}s)\"\n    else\n      logger.record :write, relativize(css) if css\n    end\n    config.run_stylesheet_saved(css) if css\n\n    logger.record :write, relativize(sourcemap) if sourcemap\n    config.run_sourcemap_saved(sourcemap) if sourcemap\n  end\n\n  def when_creating_directory(dirname)\n    logger.record :directory, relativize(dirname)\n  end\n\n  def when_deleting_css(filename)\n    logger.record :delete, relativize(filename)\n    config.run_stylesheet_removed(filename) if filename\n  end\n\n  def when_deleting_sourcemap(filename)\n    logger.record :delete, relativize(filename)\n    config.run_sourcemap_removed(filename) if filename\n  end\n\n  def when_compilation_error(error, sass_file, css_file, sourcemap_file)\n    @error_count += 1\n    if error.respond_to?(:sass_filename)\n      error_filename = error.sass_filename || sass_file\n      if relativize(error_filename) == relativize(sass_file)\n        logger.record :error, \"#{relativize(sass_file)} (Line #{error.sass_line}: #{error.message})\"\n      else\n        logger.record :error, \"#{relativize(sass_file)} (Line #{error.sass_line} of #{relativize(error_filename)}: #{error.message})\"\n      end\n    else\n      logger.record :error, \"#{relativize(sass_file)} (#{error.backtrace.first}: #{error.message})\"\n    end\n    config.run_stylesheet_error(sass_file, error.message)\n  end\n\n  def logger\n    @logger ||= Compass::Logger.new(:quiet => quiet)\n  end\n\n  def corresponding_css_file(sass_file)\n    \"#{config.css_path}/#{stylesheet_name(sass_file)}.css\"\n  end\n\n  def stylesheet_name(sass_file)\n    if sass_file.index(config.sass_path) == 0\n      sass_file[(config.sass_path.length + 1)..-6].sub(/\\.css$/,'')\n    else\n      raise Compass::Error, \"Individual stylesheets must be in the sass directory.\"\n    end\n  end\n\n  def sass_files(options = {})\n    @compiler.template_location_array.map do |(sass_dir, css_dir)|\n      glob = options[:include_partials] ?\n               File.join(\"**\",\"*.s[ac]ss*\") :\n               File.join(\"**\",\"[^_]*.s[ac]ss*\")\n      Dir.glob(File.join(sass_dir, glob))\n    end.flatten\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/functions/sprites.rb",
    "content": "module Compass::SassExtensions::Functions::Sprites\n\n  extend Compass::SassExtensions::Functions::SassDeclarationHelper\n  extend Sass::Script::Value::Helpers\n  include Sass::Script::Value::Helpers\n\n  ZERO = number(0)\n  BOOL_FALSE = bool(false)\n  VALID_SELECTORS = %w(hover active target focus)\n\n  # Provides a consistent interface for getting a variable in ruby\n  # from a keyword argument hash that accounts for underscores/dash equivalence\n  # and allows the caller to pass a symbol instead of a string.\n  module VariableReader\n    def get_var(variable_name)\n      self[variable_name.to_s.gsub(/-/,\"_\")]\n    end\n  end\n\n  # Returns the width of the generated sprite map\n  def sprite_width(map, sprite=nil)\n    verify_map(map, 'sprite-width')\n    file = get_sprite_file(map, sprite)\n    width, _ = image_dimensions(file)\n    number(width, \"px\")\n  end\n  declare :sprite_width, [:map]\n  declare :sprite_width, [:map, :sprite]\n  \n  # Returns the height of the generated sprite map\n  def sprite_height(map, sprite=nil)\n    verify_map(map, 'sprite-height')\n    file = get_sprite_file(map, sprite)\n    _, height = image_dimensions(file)\n    number(height, \"px\")\n  end\n  declare :sprite_height, [:map]\n  declare :sprite_height, [:map, :sprite]\n\n  # Returns a list of all sprite names\n  def sprite_names(map)\n    verify_map(map, 'sprite-names')\n    list(map.sprite_names.map { |f| identifier(f) }, :comma)\n  end\n  declare :sprite_names, [:map]\n\n  # Returns the system path of the sprite file\n  def sprite_path(map)\n    verify_map(map, 'sprite-path')\n    identifier(map.filename)\n  end\n  declare :sprite_path, [:map]\n\n  # Returns the sprite file as an inline image\n  #    @include \"icon/*.png\";\n  #     #{$icon-sprite-base-class} {\n  #       background-image: inline-sprite($icon-sprites);\n  #      }\n  def inline_sprite(map)\n    verify_map(map, \"sprite-url\")\n    map.generate\n    path = map.filename\n    inline_image_string(data(path), compute_mime_type(path))\n  end\n  declare :inline_sprite, [:map]\n\n  # Creates a Compass::SassExtensions::Sprites::SpriteMap object. A sprite map, when used in a property is the same\n  # as calling sprite-url. So the following background properties are equivalent:\n  #\n  #     $icons: sprite-map(\"icons/*.png\");\n  #     background: sprite-url($icons) no-repeat;\n  #     background: $icons no-repeat;\n  #\n  # The sprite map object will generate the sprite map image, if necessary,\n  # the first time it is converted to a url. Simply constructing it has no side-effects.\n  def sprite_map(glob, kwargs = {})\n    kwargs.extend VariableReader\n    Compass::SassExtensions::Sprites::SpriteMap.from_uri(glob, self, kwargs)\n  end\n  declare :sprite_map, [:glob], :var_kwargs => true\n\n  # Returns the image and background position for use in a single shorthand property:\n  #\n  #     $icons: sprite-map(\"icons/*.png\"); // contains icons/new.png among others.\n  #     background: sprite($icons, new) no-repeat;\n  #\n  # Becomes:\n  #\n  #     background: url('/images/icons.png?12345678') 0 -24px no-repeat;\n  #\n  # If the `use_percentages` parameter is passed as true, percentages will be\n  # used to position the sprite. Example output:\n  #     \n  #     background: url('/images/icons.png?12345678') 0 50% no-repeat;\n  #\n  def sprite(map, sprite, offset_x = ZERO, offset_y = ZERO, use_percentages = BOOL_FALSE)\n    sprite = convert_sprite_name(sprite)\n    verify_map(map)\n    verify_sprite(sprite)\n    url = sprite_url(map)\n    position = sprite_position(map, sprite, offset_x, offset_y, use_percentages)\n    list([url] + position.value, :space)\n  end\n  declare :sprite, [:map, :sprite]\n  declare :sprite, [:map, :sprite, :offset_x]\n  declare :sprite, [:map, :sprite, :offset_x, :offset_y]\n  declare :sprite, [:map, :sprite, :offset_x, :offset_y, :use_percentages]\n\n  # Returns the name of a sprite map\n  # The name is derived from the folder than contains the sprites.\n  def sprite_map_name(map)\n    verify_map(map, \"sprite-map-name\")\n    identifier(map.name)\n  end\n  declare :sprite_name, [:sprite]\n\n  # Returns the path to the original image file for the sprite with the given name\n  def sprite_file(map, sprite)\n    sprite = convert_sprite_name(sprite)\n    verify_map(map, \"sprite\")\n    verify_sprite(sprite)\n    if image = map.image_for(sprite.value)\n      image_path = Pathname.new(File.expand_path(image.file))\n      images_path = Pathname.new(File.expand_path(Compass.configuration.images_path))\n      quoted_string(image_path.relative_path_from(images_path).to_s)\n    else\n      missing_image!(map, sprite)\n    end\n  end\n  declare :sprite_file, [:map, :sprite]\n\n  # Returns boolean if sprite has a parent\n  def sprite_does_not_have_parent(map, sprite)\n    sprite = convert_sprite_name(sprite)\n    verify_map map\n    verify_sprite sprite\n    bool(map.image_for(sprite.value).parent.nil?)\n  end\n  declare :sprite_does_not_have_parent, [:map, :sprite]\n\n  #return the name of the selector file\n  def sprite_selector_file(map, sprite, selector)\n    sprite = convert_sprite_name(sprite)\n    image = map.image_for(sprite)\n    if map.send(:\"has_#{selector.value}?\", sprite.value)\n      return identifier(image.send(selector.value).name)\n    end\n\n    raise Sass::SyntaxError, \"Sprite: #{sprite.value} does not have a #{selector} state\"\n  end\n\n  declare :sprite_selector_file, [:map, :sprite, :selector]\n\n  # Returns boolean if sprite has the selector\n  def sprite_has_selector(map, sprite, selector)\n    sprite = convert_sprite_name(sprite)\n    verify_map map\n    verify_sprite sprite\n    unless VALID_SELECTORS.include?(selector.value)\n      raise Sass::SyntaxError, \"Invalid Selctor did you mean one of: #{VALID_SELECTORS.join(', ')}\"\n    end\n    bool map.send(:\"has_#{selector.value}?\", sprite.value)\n  end\n  \n  declare :sprite_has_selector, [:map, :sprite, :selector]\n\n  # Determines if the CSS selector is valid\n  IDENTIFIER_RX = /\\A#{Sass::SCSS::RX::IDENT}\\Z/\n  def sprite_has_valid_selector(selector)\n    unless selector.value =~ IDENTIFIER_RX\n      raise Sass::SyntaxError, \"#{selector} must be a legal css identifier\"\n    end\n    bool true\n  end\n\n  # Returns a url to the sprite image.\n  def sprite_url(map)\n    verify_map(map, \"sprite-url\")\n    map.generate\n    generated_image_url(identifier(\"#{map.path}-s#{map.uniqueness_hash}.png\"))\n  end\n  declare :sprite_url, [:map]\n\n  # Returns the position for the original image in the sprite.\n  # This is suitable for use as a value to background-position:\n  #\n  #     $icons: sprite-map(\"icons/*.png\");\n  #     background-position: sprite-position($icons, new);\n  #\n  # Might generate something like:\n  #\n  #     background-position: 0 -34px;\n  #\n  # You can adjust the background relative to this position by passing values for\n  # `$offset-x` and `$offset-y`:\n  #\n  #     $icons: sprite-map(\"icons/*.png\");\n  #     background-position: sprite-position($icons, new, 3px, -2px);\n  #\n  # Would change the above output to:\n  #\n  #     background-position: 3px -36px;\n  #\n  # If you set the `use_percentages` parameter to true, the position will be\n  # expressed in percentages. An example:\n  #\n  #     background-position: sprite-position($icons, new, 0, 0, true);\n  #\n  # Would result in something like this:\n  #\n  #     background-position: 0 42%;\n  # \n  def sprite_position(map, sprite = nil, offset_x = ZERO, offset_y = ZERO, use_percentages = BOOL_FALSE)\n    assert_type offset_x, :Number\n    assert_type offset_y, :Number\n    sprite = convert_sprite_name(sprite)\n    verify_map(map, \"sprite-position\")\n    unless sprite.is_a?(Sass::Script::Value::String) || sprite.is_a?(Sass::Script::Value::Number)\n      raise Sass::SyntaxError, %Q(The second argument to sprite-position must be a sprite name. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)\n    end\n    image = map.image_for(sprite.value)\n    unless image\n      missing_image!(map, sprite)\n    end\n    if use_percentages.value\n      xdivis = map.width - image.width;\n      x = (offset_x.value + image.left.to_f) / (xdivis.nonzero? || 1) * 100\n      x = x == 0 ? number(x) : number(x, \"%\")\n      ydivis = map.height - image.height;\n      y = (offset_y.value + image.top.to_f) / (ydivis.nonzero? || 1) * 100\n      y = y == 0 ? number(y) : number(y, \"%\")\n    else\n      if offset_x.unit_str == \"%\"\n        x = offset_x # CE: Shouldn't this be a percentage of the total width?\n      else\n        x = offset_x.value - image.left\n        x = x == 0 ? number(x) : number(x, \"px\")\n      end\n      y = offset_y.value - image.top\n      y = y == 0 ? number(y) : number(y, \"px\")\n    end\n    list(x, y, :space)\n  end\n  declare :sprite_position, [:map]\n  declare :sprite_position, [:map, :sprite]\n  declare :sprite_position, [:map, :sprite, :offset_x]\n  declare :sprite_position, [:map, :sprite, :offset_x, :offset_y]\n  declare :sprite_position, [:map, :sprite, :offset_x, :offset_y, :use_percentages]\n\nprotected\n\n  def get_sprite_file(map, sprite=nil)\n    if sprite\n      map.image_for(sprite).file\n    else\n      map.filename\n    end\n  end\n\n  def reversed_color_names\n    if Sass::Script::Value::Color.const_defined?(:HTML4_COLORS_REVERSE)\n      Sass::Script::Value::Color::HTML4_COLORS_REVERSE\n    else\n      Sass::Script::Value::Color::COLOR_NAMES_REVERSE\n    end\n  end\n\n  def convert_sprite_name(sprite)\n    case sprite\n      when Sass::Script::Value::Color\n        rgb = if reversed_color_names.keys.first.size == 3\n                sprite.rgb\n              else\n                # Sass 3.3 includes the alpha channel\n                sprite.rgba\n              end\n        identifier(reversed_color_names[rgb])\n      when Sass::Script::Value::Bool\n        identifier(sprite.to_s)\n      else\n        sprite\n    end\n  end\n\n  def verify_map(map, error = \"sprite\")\n    unless map.is_a?(Compass::SassExtensions::Sprites::SpriteMap)\n      missing_sprite!(error)\n    end\n  end\n\n  def verify_sprite(sprite)\n    unless sprite.is_a?(Sass::Script::Value::String) || sprite.is_a?(Sass::Script::Value::Number)\n      raise Sass::SyntaxError, %Q(The second argument to sprite() must be a sprite name. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)\n    end\n  end\n\n  def missing_image!(map, sprite)\n    raise Sass::SyntaxError, \"No sprite called #{sprite} found in sprite map #{map.path}/#{map.name}. Did you mean one of: #{map.sprite_names.join(\", \")}\"\n  end\n\n  def missing_sprite!(function_name)\n    raise Sass::SyntaxError, %Q(The first argument to #{function_name}() must be a sprite map. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)\n  end\n\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/functions.rb",
    "content": "module Compass::SassExtensions::Functions\n  module SassDeclarationHelper\n    def declare(*args)\n      Sass::Script::Functions.declare(*args)\n    end\n  end\nend\n\n%w(sprites).each do |func|\n  require \"compass/sass_extensions/functions/#{func}\"\nend\n\nmodule Sass::Script::Functions\n  include Compass::SassExtensions::Functions::Sprites\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/engines/chunky_png_engine.rb",
    "content": "begin\n  require 'oily_png'\nrescue LoadError\n  require 'chunky_png'\nend\n\nmodule Compass\n  module SassExtensions\n    module Sprites\n      class ChunkyPngEngine < Compass::SassExtensions::Sprites::Engine\n\n        def construct_sprite\n          @canvas = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)\n          images.each do |image|\n            input_png = begin\n              ChunkyPNG::Image.from_file(image.file)\n            rescue ChunkyPNG::SignatureMismatch\n              raise Compass::SpriteException, \"You have provided a file that does not have a PNG signature. Only PNG files are supported by the default sprite engine\"\n            end\n            canvas.replace! input_png, image.left, image.top\n          end\n        end    \n        \n        def save(filename)\n          if canvas.nil?\n            construct_sprite\n          end\n          \n          canvas.save(filename,  Compass.configuration.chunky_png_options)\n        end\n        \n      end\n    end\n  end\nend  "
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/engines.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      class Engine\n        attr_accessor :width, :height, :images, :canvas\n        def initialize(width, height, images)\n          @width, @height, @images = width, height, images\n          @canvas = nil\n        end\n        \n        def construct_sprite\n          raise ::Compass::Error, \"You must implement construct_sprite\"\n        end\n        \n        def save(filename)\n          raise ::Compass::Error, \"You must implement save(filename)\"\n        end\n        \n      end\n    end\n  end\nend\n\n\nrequire 'compass/sass_extensions/sprites/engines/chunky_png_engine'\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/image.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      class Image\n        include Sass::Script::Value::Helpers\n        ACTIVE = %r{[_-]active$}\n        TARGET = %r{[_-]target$}\n        HOVER = %r{[_-]hover$}\n        FOCUS = %r{[_-]focus$}\n        PARENT = %r{(.+)[-_](.+)$}\n\n        REPEAT_X = 'repeat-x'\n        REPEAT_Y = 'repeat-y'\n        NO_REPEAT = 'no-repeat'\n\n        VALID_REPEATS = [REPEAT_Y, REPEAT_X, NO_REPEAT]\n\n        attr_reader :relative_file, :options, :base, :name\n        attr_accessor :top, :left\n\n        def initialize(base, relative_file, options)\n          @base, @relative_file, @options = base, relative_file, options\n          @left = @top = 0\n          @name = File.basename(relative_file, '.png')\n        end\n\n        # The Full path to the image\n        def file\n          @file ||= find_file\n        end\n\n        def find_file\n          Compass.configuration.sprite_load_path.compact.each do |path|\n            f = File.join(path, relative_file)\n            if File.exists?(f)\n              return f\n            end\n          end\n        end\n\n        # Width of the image\n        def width\n          dimensions.first\n        end\n\n        def size\n          @size ||= File.size(file)\n        end\n\n        # Height of the image\n        def height\n          dimensions.last\n        end\n\n        def get_var_file(var)\n          options.get_var \"#{base.name}_#{name}_#{var}\"\n        end\n\n        # Value of <tt> $#{name}-repeat </tt> or <tt> $repeat </tt>\n        def repeat\n          @repeat ||= begin\n            rep = (get_var_file(\"repeat\") || options.get_var(\"repeat\") || identifier(NO_REPEAT)).value\n            unless VALID_REPEATS.include? rep\n              raise SpriteException, \"Invalid option for repeat \\\"#{rep}\\\" - valid options are #{VALID_REPEATS.join(', ')}\"\n            end\n\n            rep\n          end\n        end\n\n        def repeat_x?\n          repeat == REPEAT_X\n        end\n\n        def repeat_y?\n          repeat == REPEAT_Y\n        end\n\n        def no_repeat?\n          repeat == NO_REPEAT\n        end\n\n        # Value of <tt> $#{name}-position </tt> or <tt> $position </tt> defaults to <tt>0px</tt>\n        def position\n          @position ||= get_var_file(\"position\") || options.get_var(\"position\") || number(0, \"px\")\n        end\n\n        # Offset within the sprite\n        def offset\n          @offset ||= (position.unitless? || position.unit_str == \"px\") ? position.value : 0\n        end\n\n        # Spacing between this image and the next\n        def spacing\n          @spacing ||= (get_var_file(\"spacing\") || options.get_var(\"spacing\") || number(0, 'px')).value\n        end\n\n        # MD5 hash of this file\n        def digest\n          Digest::MD5.file(file).hexdigest\n        end\n\n        # mtime of this file\n        def mtime\n          File.mtime(file)\n        end\n\n        # Is hover selector\n        def hover?\n          name =~ HOVER\n        end\n\n        # Hover selector Image object if exsists\n        def hover\n          base.get_magic_selector_image(name, 'hover')\n        end\n\n        # Is target selector\n        def target?\n          name =~ TARGET\n        end\n\n        # Target selector Image object if exsists\n        def target\n          base.get_magic_selector_image(name, 'target')\n        end\n\n        # Is active selector\n        def active?\n          name =~ ACTIVE\n        end\n\n        # Active selector Image object if exsists\n        def active\n          base.get_magic_selector_image(name, 'active')\n        end\n\n        # Is active selector\n        def focus?\n          name =~ FOCUS\n        end\n\n        # Active selector Image object if exsists\n        def focus\n          base.get_magic_selector_image(name, 'focus')\n        end\n\n        def parent\n          if [hover?, target?, active?, focus?].any?\n            PARENT.match name\n            base.image_for($1)\n          end\n        end\n\n        private\n          def dimensions\n            @dimensions ||= Compass::Core::SassExtensions::Functions::ImageSize::ImageProperties.new(file).size\n          end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/image_methods.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      module ImageMethods\n        # Fetches the Sprite::Image object for the supplied name\n         def image_for(name)\n          if name.is_a?(Sass::Script::Value::String)\n            name = name.value\n          end\n          name = name.to_s\n          @images.detect { |img| img.name.downcase == name.downcase}\n         end\n\n         # Returns true if the image name has a hover selector image\n         def has_hover?(name)\n           !get_magic_selector_image(name, 'hover').nil?\n         end\n\n         # Returns true if the image name has a target selector image\n         def has_target?(name)\n           !get_magic_selector_image(name, 'target').nil?\n         end\n\n         # Returns true if the image name has a focus selector image\n         def has_focus?(name)\n           !get_magic_selector_image(name, 'focus').nil?\n         end\n\n         # Returns true if the image name has an active selector image\n         def has_active?(name)\n           !get_magic_selector_image(name, 'active').nil?\n         end\n\n         SEPERATORS = ['_', '-']\n\n         def get_magic_selector_image(name, selector)\n          SEPERATORS.each do |seperator|\n            file = image_for(\"#{name}#{seperator}#{selector}\")\n            return file if !file.nil?\n          end\n\n          nil\n        end\n\n         # Return and array of image names that make up this sprite\n         def sprite_names\n           image_names.map { |f| File.basename(f, '.png') }\n         end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/image_row.rb",
    "content": "require 'forwardable'\n\nmodule Compass\n  module SassExtensions\n    module Sprites\n      class ImageRow\n        extend Forwardable\n\n        attr_reader :images, :max_width\n        def_delegators :@images, :last, :delete, :empty?, :length\n        \n        def initialize(max_width)\n          @images = []\n          @max_width = max_width\n        end\n        \n        def add(image)\n          return false if !will_fit?(image)\n          @images << image\n          true\n        end\n\n        alias :<< :add\n        \n        def height\n          images.map(&:height).max\n        end\n        \n        def width\n          images.map(&:width).max\n        end\n\n        def total_width\n          images.inject(0) {|sum, img| sum + img.width }\n        end\n        \n        def efficiency\n          1 - (total_width.to_f / max_width.to_f)\n        end\n\n        def will_fit?(image)\n          (total_width + image.width) <= max_width\n        end\n      end\n    end\n  end\nend"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/images.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      class Images < Array\n\n        def sort_by!(method)\n          invert = false\n          if method.to_s[0] == '!'[0] # have todo this for 1.8.7 compat\n            method = method.to_s[1..-1]\n            invert = true\n          end\n          method = method.to_sym\n          self.sort! do |a, b|\n            unless a.send(method) == b.send(method)\n              a.send(method) <=> b.send(method)\n            else\n              other = ([:size, :name] - [method]).first\n              a.send(other) <=> b.send(other)\n            end\n          end\n          self.reverse! if invert\n        end\n\n\n\n      end\n    end\n  end\nend"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/layout/diagonal.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      module Layout\n        class Diagonal < SpriteLayout\n\n          def layout!\n            calculate_width!\n            calculate_height!\n            calculate_positions!\n          end\n\n        private # ===========================================================================================>\n\n          def calculate_width!\n            @width = @images.inject(0) {|sum, img| sum + img.width}\n          end\n\n          def calculate_height!\n            @height = @images.inject(0) {|sum, img| sum + img.height}\n          end\n\n          def calculate_positions!\n            previous = nil\n            @images.each_with_index do |image, index|\n              if previous.nil?\n                previous = image\n                image.top = @height - image.height\n                image.left = 0\n                next\n              end\n              image.top = previous.top - image.height\n              image.left = previous.left + previous.width\n              previous = image\n            end\n          end\n\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/layout/horizontal.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      module Layout\n        class Horizontal < SpriteLayout\n\n          def layout!\n            calculate_height!\n            calculate_width!\n            calculate_positions!\n            tile_images_that_repeat!\n          end\n\n        private # ===========================================================================================>\n\n          def calculate_height!\n            @height = @images.map {|image| image.height + image.offset}.max\n            if repeating_images?\n              calculate_repeat_extra_height!\n            end\n            @height\n          end\n\n          def calculate_width!\n            @width = @images.inject(0) { |sum, image| sum += (image.width + image.spacing) }\n          end\n\n          def repeating_images?\n            @repeating_images ||= @images.any?(&:repeat_y?)\n          end\n\n          def calculate_repeat_extra_height!\n            m = @images.inject(1) {|m,img| img.repeat_y? ? m.lcm(img.height) : m }\n            remainder = @height % m\n            @height += (m - remainder) unless remainder.zero?\n          end\n\n          def calculate_positions!\n            @images.each_with_index do |image, index|\n              image.top = image.position.unit_str == '%' ? (@height - image.height) * (image.position.value / 100.0) : image.position.value\n              next if index == 0\n              last_image = @images[index-1]\n              image.left = last_image.left + last_image.width + [image.spacing, last_image.spacing].max\n            end\n          end\n\n          def tile_images_that_repeat!\n            return unless repeating_images?\n            @images.map {|img| img if img.repeat_y?}.compact.each do |image|\n              y = (image.top + image.height)\n              while y < @height do\n                begin\n                  img = image.dup\n                  img.top = y.to_i\n                  @images << img\n                  y += image.height\n                end \n              end #while\n            end \n          end \n\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/layout/smart.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      module Layout\n        class Smart < SpriteLayout\n\n          def layout!\n            calculate_positions!\n          end\n\n        private # ===========================================================================================>\n\n          def calculate_positions!\n            fitter = ::Compass::SassExtensions::Sprites::RowFitter.new(@images)\n            current_y = 0\n            fitter.fit!.each do |row|\n              current_x = 0\n              row.images.each_with_index do |image, index|\n                image.left = current_x\n                image.top = current_y\n                current_x += image.width\n              end\n              current_y += row.height\n            end\n            @width = fitter.width\n            @height = fitter.height\n          end\n\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/layout/vertical.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      module Layout\n        class Vertical < SpriteLayout\n\n          def layout!\n            calculate_width!\n            calculate_positions!\n            calculate_height!\n            tile_images_that_repeat!\n          end\n\n        private # ===========================================================================================>\n\n          def calculate_width!\n            @width = @images.map { |image| image.width + image.offset }.max\n            if repeating_images?\n              calculate_repeat_extra_width!\n            end\n\n            @width\n          end\n\n          def calculate_height!\n            last    = @images.last\n            @height = last.top + last.height\n          end\n\n          def repeating_images?\n            @repeating_images ||= @images.any?(&:repeat_x?)\n          end\n\n          def calculate_repeat_extra_width!\n            m = @images.inject(1) {|m,img| img.repeat_x? ? m.lcm(img.width) : m }\n            remainder = @width % m\n            @width += (m - remainder) unless remainder.zero?\n          end\n\n          def calculate_positions!\n            @images.each_with_index do |image, index|\n            image.left = (image.position.unit_str == \"%\" ? (@width - image.width) * (image.position.value / 100.0) : image.position.value).to_i\n            next if index == 0\n            last_image = @images[index-1]\n            image.top = last_image.top + last_image.height + [image.spacing,  last_image.spacing].max\n            end #each_with_index\n          end #method\n\n          def tile_images_that_repeat!\n            return unless repeating_images?\n            @images.map {|img| img if img.repeat_x?}.compact.each do |image|\n              x = image.left - (image.left / image.width).ceil * image.width\n              while x < @width do\n                begin\n                  img = image.dup\n                  img.top = image.top\n                  img.left = x.to_i\n                  @images << img\n                  x += image.width \n                end #begin\n              end #while\n            end #map\n          end #method\n        end #Vertical\n      end #Layout\n    end #Sprites\n  end #SassExtensions\nend #Compass"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/layout.rb",
    "content": "require 'rational'\nmodule Compass\n  module SassExtensions\n    module Sprites\n      module Layout\n        class SpriteLayout\n\n          attr_reader :images, :options\n          attr_accessor :height, :width\n\n          def initialize(images, kwargs={})\n            @images  = images\n            @options = kwargs\n            @height  = 0\n            @width   = 0\n            \n            layout!\n          end\n\n          def layout!\n            raise Compass::SpriteException, \"You must impliment layout!\"\n          end\n\n          def properties\n            if @width.zero?\n              raise Compass::SpriteException, \"You must set the width fetching the properties\"\n            end\n            if @height.zero?\n              raise Compass::SpriteException, \"You must set the height fetching the properties\"\n            end\n\n            [@images, @width, @height]\n          end\n\n        end\n      end\n    end\n  end\nend"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/layout_methods.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      module LayoutMethods\n        HORIZONTAL = 'horizontal'\n        DIAGONAL = 'diagonal'\n        SMART = 'smart'\n        VERTICAL = 'vertical'\n        \n        def smart?\n          layout == SMART\n        end\n        \n        def horizontal?\n          layout == HORIZONTAL\n        end\n        \n        def diagonal?\n          layout == DIAGONAL\n        end\n\n        def vertical?\n          layout == VERTICAL\n        end\n        \n        def layout\n          @layout ||= @kwargs.get_var('layout').value\n        end\n        \n        # Calculates the overal image dimensions\n        # collects image sizes and input parameters for each sprite\n        def compute_image_positions!\n          case layout\n          when SMART\n            require 'compass/sass_extensions/sprites/layout/smart'\n            @images, @width, @height = Layout::Smart.new(@images, @kwargs).properties\n          when DIAGONAL\n            require 'compass/sass_extensions/sprites/layout/diagonal'\n            @images, @width, @height = Layout::Diagonal.new(@images, @kwargs).properties\n          when HORIZONTAL\n            require 'compass/sass_extensions/sprites/layout/horizontal'\n            @images, @width, @height = Layout::Horizontal.new(@images, @kwargs).properties\n          else\n            require 'compass/sass_extensions/sprites/layout/vertical'\n            @images, @width, @height = Layout::Vertical.new(@images, @kwargs).properties\n          end\n        end\n        \n      end\n    end\n  end\nend\n  \n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/row_fitter.rb",
    "content": "require 'forwardable'\n\nmodule Compass\n  module SassExtensions\n    module Sprites\n      class RowFitter\n        extend Forwardable\n\n        attr_reader :images, :rows\n        def_delegators :rows, :[]\n\n        def initialize(images)\n          @images = images.sort do |a,b|\n            if a.height == b.height\n              b.width <=> a.width\n            else\n              a.height <=> b.height\n            end\n          end\n          @rows = []\n        end\n\n        def fit!(style = :scan)\n          send(\"#{style}_fit\")\n          @rows\n        end\n\n        def width\n          @width ||= @images.collect(&:width).max\n        end\n        \n        def height\n          @height ||= @rows.inject(0) {|sum, row| sum += row.height}\n        end\n\n        def efficiency\n          @rows.inject(0) { |sum, row| sum += row.efficiency } ** @rows.length\n        end\n\n        private\n        def new_row(image = nil)\n          row = Compass::SassExtensions::Sprites::ImageRow.new(width)\n          row.add(image) if image\n          row\n        end\n\n        def fast_fit\n          row = new_row\n          @images.each do |image|\n            if !row.add(image)\n              @rows << row\n              row = new_row(image)\n            end\n          end\n\n          @rows << row\n        end\n\n        def scan_fit\n          fast_fit\n\n          moved_images = []\n\n          begin\n            removed = false\n\n            catch :done do\n              @rows.each do |row|\n                (@rows - [ row ]).each do |other_row|\n                  other_row.images.each do |image|\n                    if !moved_images.include?(image)\n                      if row.will_fit?(image)\n                        other_row.delete(image)\n                        row << image\n\n                        @rows.delete(other_row) if other_row.empty?\n                        removed = true\n\n                        moved_images << image\n                        throw :done\n                      end\n                    end\n                  end\n                end\n              end\n            end\n          end while removed\n        end\n      end\n    end\n  end\nend"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/sprite_map.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      class SpriteMap < Sass::Script::Value::Base\n        attr_accessor :image_names, :path, :name, :map, :kwargs\n        attr_accessor :images, :width, :height, :engine\n\n        include SpriteMethods\n        include ImageMethods\n        include LayoutMethods\n        include Sass::Script::Value::Helpers\n\n\n        # Initialize a new sprite object from a relative file path\n        # the path is relative to the <tt>images_path</tt> confguration option\n        def self.from_uri(uri, context, kwargs)\n          uri = uri.value\n          path, name = Compass::SpriteImporter.path_and_name(uri)\n          files = Compass::SpriteImporter.files(uri)\n          sprites = files.map do |sprite|\n            relative_name(sprite)\n          end\n          new(sprites, path, name, context, kwargs)\n        end\n        \n        def self.relative_name(sprite)\n          sprite = File.expand_path(sprite)\n          Compass.configuration.sprite_load_path.each do |path|\n            path_with_slash = \"#{File.expand_path(path)}/\"\n            \n            if sprite.include?(path_with_slash)\n              return sprite.gsub(path_with_slash, '')\n            end\n          end\n        end\n\n        def initialize(sprites, path, name, context, kwargs)\n          @image_names = sprites\n          @path = path\n          @name = name\n          @kwargs = kwargs\n          @kwargs['cleanup'] ||= bool(true)\n          @kwargs['layout'] ||= identifier('vertical')\n          @kwargs['sort_by'] ||= identifier('none')\n          @images = nil\n          @width = nil\n          @height = nil\n          @engine = nil\n          @evaluation_context = context\n          compute_image_metadata!\n        end\n\n        def sort_method\n          @kwargs['sort_by'].value\n        end\n\n        def inspect\n          puts 'images'\n          @images.each do |img|\n            puts img.file\n          end\n          puts \"options\"\n          @kwargs.each do |k,v|\n            puts \"#{k}:#{v}\"\n          end\n        end\n\n        def to_s(kwargs = self.kwargs)\n          sprite_url(self).value\n        end\n\n        def respond_to?(meth)\n          super || @evaluation_context.respond_to?(meth)\n        end\n\n        def method_missing(meth, *args, &block)\n          if @evaluation_context.respond_to?(meth)\n            @evaluation_context.send(meth, *args, &block)\n          else\n            super\n          end\n        end\n\n        private \n\n        def modulize\n          @modulize ||= Compass::configuration.sprite_engine.to_s.scan(/([^_.]+)/).flatten.map {|chunk| \"#{chunk[0].chr.upcase}#{chunk[1..-1]}\" }.join\n        end\n\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites/sprite_methods.rb",
    "content": "module Compass\n  module SassExtensions\n    module Sprites\n      module SpriteMethods\n        \n        # Changing this string will invalidate all previously generated sprite images.\n        # We should do so only when the packing algorithm changes\n        SPRITE_VERSION = \"2\"\n        \n        # Calculates the overal image dimensions\n        # collects image sizes and input parameters for each sprite\n        # Calculates the height\n        def compute_image_metadata!\n          @width = 0\n          init_images\n          compute_image_positions!\n          init_engine\n        end\n        \n        def init_engine\n          @engine = eval(\"::Compass::SassExtensions::Sprites::#{modulize}Engine.new(nil, nil, nil)\")\n          @engine.width = @width\n          @engine.height = @height\n          @engine.images = @images\n        end\n        \n        # Creates the Sprite::Image objects for each image and calculates the width\n        def init_images\n          @images = Images.new\n          image_names.each do |relative_file|\n            @images << Image.new(self, relative_file, kwargs)\n          end\n          unless sort_method == 'none'\n            @images.sort_by! sort_method\n          end\n        end\n\n        def name_and_hash\n          \"#{path}-s#{uniqueness_hash}.png\"\n        end\n\n        # The on-the-disk filename of the sprite\n        def filename\n          File.join(Compass.configuration.generated_images_path, name_and_hash)\n        end\n\n        def relativize(path)\n          Pathname.new(path).relative_path_from(Pathname.new(Dir.pwd)).to_s rescue path\n        end\n\n        # Generate a sprite image if necessary\n        def generate\n          if generation_required?\n            if kwargs.get_var('cleanup').value\n              cleanup_old_sprites\n            end\n            engine.construct_sprite\n            Compass.configuration.run_sprite_generated(engine.canvas)\n            save!\n          else\n            log :unchanged, filename\n          end\n        end\n        \n        def cleanup_old_sprites\n          Sass::Util.glob(File.join(Compass.configuration.generated_images_path, \"#{path}-s*.png\")).each do |file|\n            log :remove, file\n            FileUtils.rm file\n            Compass.configuration.run_sprite_removed(file)\n          end\n        end\n        \n        # Does this sprite need to be generated\n        def generation_required?\n          !File.exists?(filename) || outdated? || options[:force]\n        end\n\n        # Returns the uniqueness hash for this sprite object\n        def uniqueness_hash\n          @uniqueness_hash ||= begin\n            sum = Digest::MD5.new\n            sum << SPRITE_VERSION\n            sum << path\n            sum << layout\n            images.each do |image|\n              [:relative_file, :height, :width, :repeat, :spacing, :position, :digest].each do |attr|\n                sum << image.send(attr).to_s\n              end\n            end\n            sum.hexdigest[0...10]\n          end\n          @uniqueness_hash\n        end\n\n        # Saves the sprite engine\n        def save!\n          FileUtils.mkdir_p(File.dirname(filename))\n          saved = engine.save(filename)\n          log :create, filename\n          Compass.configuration.run_sprite_saved(filename)\n          @mtime = nil if saved\n          saved\n        end\n\n        # All the full-path filenames involved in this sprite\n        def image_filenames\n          @images.map(&:file)\n        end\n\n        # Checks whether this sprite is outdated\n        def outdated?\n          if File.exists?(filename)\n            return @images.any? {|image| image.mtime.to_i > self.mtime.to_i }\n          end\n          true\n        end\n\n        # Mtime of the sprite file\n        def mtime\n          @mtime ||= File.mtime(filename)\n        end\n        \n       # Calculate the size of the sprite\n        def size\n          [width, height]\n        end\n\n        def log(action, filename, *extra)\n          if options[:compass] && options[:compass][:logger] && !options[:quiet]\n            options[:compass][:logger].record(action, relativize(filename), *extra)\n          end\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions/sprites.rb",
    "content": "require 'digest/md5'\nrequire 'compass/sprite_importer'\n\nmodule Compass\n  module SassExtensions\n    module Sprites\n    end\n  end\nend\n\nrequire 'compass/sass_extensions/sprites/images'\nrequire 'compass/sass_extensions/sprites/layout'\nrequire 'compass/sass_extensions/sprites/image_row'\nrequire 'compass/sass_extensions/sprites/row_fitter'\nrequire 'compass/sass_extensions/sprites/image'\nrequire 'compass/sass_extensions/sprites/layout_methods'\nrequire 'compass/sass_extensions/sprites/sprite_methods'\nrequire 'compass/sass_extensions/sprites/image_methods'\nrequire 'compass/sass_extensions/sprites/sprite_map'\nrequire 'compass/sass_extensions/sprites/engines'\n\n"
  },
  {
    "path": "cli/lib/compass/sass_extensions.rb",
    "content": "unless Sass::Script::Functions.methods.grep(/\\Adeclare\\Z/).any?\n  raise LoadError, \"It looks like you've got an incompatible version of Sass. This often happens when you have an old haml gem installed. Please upgrade Haml to v3.1 or above.\"\nend\n\nmodule Compass::SassExtensions\nend\n\nrequire 'compass/sass_extensions/functions'\nrequire 'compass/sass_extensions/sprites'\n"
  },
  {
    "path": "cli/lib/compass/sprite_importer/binding.rb",
    "content": "require 'ostruct'\nmodule Compass\n  module Sprites\n    class Binding < OpenStruct\n      \n      def get_binding\n        binding\n      end\n    end\n  end\nend"
  },
  {
    "path": "cli/lib/compass/sprite_importer/content.erb",
    "content": "@import \"compass/utilities/sprites/base\";\n\n// General Sprite Defaults\n// You can override them before you import this file.\n$<%= name %>-sprite-dimensions : false !default;\n$<%= name %>-use-percentages   : false !default;\n$<%= name %>-position          : 0% !default;\n$<%= name %>-spacing           : 0 !default;\n$<%= name %>-repeat            : no-repeat !default;\n$<%= name %>-prefix            : '' !default;\n$<%= name %>-clean-up          : true !default;\n$<%= name %>-layout            : vertical !default;\n$<%= name %>-inline            : false !default;\n$<%= name %>-sort-by           : 'none' !default;\n$<%= name %>-class-separator   : $default-sprite-separator !default;\n$<%= name %>-sprite-base-class : \".<%= name %>#{$<%= name %>-class-separator}sprite\" !default;\n\n<% if skip_overrides %> \n  $<%= name %>-sprites: sprite-map(\"<%= uri %>\", $layout: $<%= name %>-layout, $cleanup: $<%= name %>-clean-up, $spacing: $<%= name %>-spacing, $position : $<%= name %>-position);\n<% else %>  \n // These variables control the generated sprite output\n // You can override them selectively before you import this file.\n <% sprite_names.each do |sprite_name| %>\n   $<%= name %>-<%= sprite_name %>-position: $<%= name %>-position !default;\n   $<%= name %>-<%= sprite_name %>-spacing:  $<%= name %>-spacing !default;\n   $<%= name %>-<%= sprite_name %>-repeat:   $<%= name %>-repeat !default;\n <% end %>\n\n $<%= name %>-sprites: sprite-map(\"<%= uri %>\",\n <% sprite_names.each do |sprite_name| %>\n   $<%= name %>-<%= sprite_name %>-position: $<%= name %>-<%= sprite_name %>-position, \n   $<%= name %>-<%= sprite_name %>-spacing:  $<%= name %>-<%= sprite_name %>-spacing, \n   $<%= name %>-<%= sprite_name %>-repeat:   $<%= name %>-<%= sprite_name %>-repeat,\n <% end %>\n $layout   : $<%= name %>-layout,\n $cleanup  : $<%= name %>-clean-up,\n $spacing  : $<%= name %>-spacing,\n $position : $<%= name %>-position,\n $sort-by  : $<%= name %>-sort-by\n );\n<% end %>\n\n// All sprites should extend this class\n// The <%= name %>-sprite mixin will do so for you.\n@if $<%= name %>-inline {\n  #{$<%= name %>-sprite-base-class} {\n    background-image: inline-sprite($<%= name %>-sprites);\n  } \n} @else {\n  #{$<%= name %>-sprite-base-class} {\n    background-image: sprite-url($<%= name %>-sprites);\n    background-repeat: no-repeat;\n  }\n}\n//sass functions to return the dimensions of a sprite image as units\n<% [:width, :height].each do |dimension| %>\n  @function <%= name %>-sprite-<%= dimension %>($name) {\n    @return sprite-<%= dimension %>($<%= name %>-sprites, $name);\n  }\n<% end %>\n\n// Use this to set the dimensions of an element\n// based on the size of the original image.\n@mixin <%= name %>-sprite-dimensions($name) {\n  @include sprite-dimensions($<%= name %>-sprites, $name)\n}\n\n// Move the background position to display the sprite.\n@mixin <%= name %>-sprite-position($name, $offset-x: 0, $offset-y: 0, $use-percentages: $<%= name %>-use-percentages) {\n  @include sprite-background-position($<%= name %>-sprites, $name, $offset-x, $offset-y, $use-percentages)\n}\n\n// Extends the sprite base class and set the background position for the desired sprite.\n// It will also apply the image dimensions if $dimensions is true.\n@mixin <%= name %>-sprite($name, $dimensions: $<%= name %>-sprite-dimensions, $offset-x: 0, $offset-y: 0, $use-percentages: $<%= name %>-use-percentages, $separator: $<%= name %>-class-separator) {\n  @extend #{$<%= name %>-sprite-base-class};\n  @include sprite($<%= name %>-sprites, $name, $dimensions, $offset-x, $offset-y, $use-percentages, $separator: $separator);\n}\n\n@mixin <%= name %>-sprites($sprite-names, $dimensions: $<%= name %>-sprite-dimensions, $prefix: sprite-map-name($<%= name %>-sprites), $offset-x: 0, $offset-y: 0, $use-percentages: $<%= name %>-use-percentages, $separator: $<%= name %>-class-separator) {\n  @include sprites($<%= name %>-sprites, $sprite-names, $<%= name %>-sprite-base-class, $dimensions, $prefix, $offset-x, $offset-y, $use-percentages, $separator: $separator)\n}\n\n// Generates a class for each sprited image.\n@mixin all-<%= name %>-sprites($dimensions: $<%= name %>-sprite-dimensions, $prefix: sprite-map-name($<%= name %>-sprites), $offset-x: 0, $offset-y: 0, $use-percentages: $<%= name %>-use-percentages, $separator: $<%= name %>-class-separator) {\n  @include <%= name %>-sprites(<%= sprite_names.join(\" \") %>, $dimensions, $prefix, $offset-x, $offset-y, $use-percentages, $separator: $separator);\n}\n"
  },
  {
    "path": "cli/lib/compass/sprite_importer.rb",
    "content": "require 'erb'\nrequire 'compass/sprite_importer/binding'\nmodule Compass\n  class SpriteImporter < Sass::Importers::Base\n    VAILD_FILE_NAME       = /\\A#{Sass::SCSS::RX::IDENT}\\Z/\n    SPRITE_IMPORTER_REGEX = %r{((.+/)?([^\\*.]+))/(.+?)\\.png}\n    VALID_EXTENSIONS      = ['.png']\n    \n    TEMPLATE_FOLDER       = File.join(File.expand_path('../', __FILE__), 'sprite_importer')\n    CONTENT_TEMPLATE_FILE = File.join(TEMPLATE_FOLDER, 'content.erb')\n    CONTENT_TEMPLATE      = ERB.new(File.read(CONTENT_TEMPLATE_FILE))\n\n\n\n    # finds all sprite files\n    def self.find_all_sprite_map_files(path)\n      hex = \"[0-9a-f]\"\n      glob = \"*-s#{hex*10}{#{VALID_EXTENSIONS.join(\",\")}}\"\n      Sass::Util.glob(File.join(path, \"**\", glob))\n    end\n    \n    def find(uri, options)\n      if uri =~ SPRITE_IMPORTER_REGEX\n        return self.class.sass_engine(uri, self.class.sprite_name(uri), self, options)\n      end\n      nil\n    end\n    \n    def find_relative(uri, base, options)\n      nil\n    end\n    \n    def to_s\n      self.class.name\n    end\n    \n    def hash\n      self.class.name.hash\n    end\n\t\n    def eql?(other)\n      other.class == self.class\n    end\n    \n    def mtime(uri, options)\n      self.class.files(uri).sort.inject(Time.at(0)) do |max_time, file|\n        (t = File.mtime(file)) > max_time ? t : max_time\n      end\n    end\n    \n    def key(uri, options={})\n      [self.class.name + \":sprite:\" + File.dirname(File.expand_path(uri)), File.basename(uri)]\n    end\n\n    def public_url(*args)\n      nil\n    end\n\n    \n    def self.path_and_name(uri)\n      if uri =~ SPRITE_IMPORTER_REGEX\n        [$1, $3]\n      else\n        raise Compass::Error, \"invalid sprite path\"\n      end\n    end\n\n    # Name of this spite\n    def self.sprite_name(uri)\n      _, name = path_and_name(uri)\n      name\n    end\n\n    # The on-disk location of this sprite\n    def self.path(uri)\n      path, _ = path_and_name(uri)\n      path\n    end\n    \n    # Returns the Glob of image files for the uri\n    def self.files(uri)\n      Compass.configuration.sprite_load_path.compact.each do |folder|\n        files = Sass::Util.glob(File.join(folder, uri)).sort\n        next if files.empty?\n        return files\n      end\n\n      path = Compass.configuration.sprite_load_path.to_a.join(', ')\n      raise Compass::SpriteException, %Q{No files were found in the load path matching \"#{uri}\". Your current load paths are: #{path}}\n    end\n\n    # Returns an Array of image names without the file extension\n    def self.sprite_names(uri)\n      files(uri).collect do |file|\n        File.basename(file, '.png')\n      end\n    end\n    \n    # Returns the sass_options for this sprite\n    def self.sass_options(uri, importer, options)\n      options.merge!(:filename => uri.gsub(%r{\\*/},\"*\\\\/\"), :syntax => :scss, :importer => importer)\n    end\n    \n    # Returns a Sass::Engine for this sprite object\n    def self.sass_engine(uri, name, importer, options)\n      content = content_for_images(uri, name, options[:skip_overrides])\n      Sass::Engine.new(content, sass_options(uri, importer, options))\n    end\n\n    # Generates the Sass for this sprite file\n    def self.content_for_images(uri, name, skip_overrides = false)\n      binder = Compass::Sprites::Binding.new(:name => name, :uri => uri, :skip_overrides => skip_overrides, :sprite_names => sprite_names(uri), :files => files(uri))\n      CONTENT_TEMPLATE.result(binder.get_binding)\n    end\n  end\nend\n\n"
  },
  {
    "path": "cli/lib/compass/stats.rb",
    "content": "module Compass\n  module Stats\n    class StatsVisitor\n      attr_accessor :rule_count, :prop_count, :mixin_def_count, :mixin_count\n      def initialize\n        self.rule_count = 0\n        self.prop_count = 0\n        self.mixin_def_count = 0\n        self.mixin_count = 0\n      end\n      def visit(node)\n        self.prop_count += 1 if node.is_a?(Sass::Tree::PropNode) && !node.children.any?\n        if node.is_a?(Sass::Tree::RuleNode)\n          self.rule_count += node.rule.reject{|r| r.is_a?(Sass::Script::Tree::Node)}.map{|r| r.split(/,/)}.flatten.compact.size\n        end\n        self.mixin_def_count += 1 if node.is_a?(Sass::Tree::MixinDefNode)\n        self.mixin_count += 1 if node.is_a?(Sass::Tree::MixinNode)\n      end\n      def up(node)\n      end\n      def down(node)\n      end\n      def import?(node)\n        return false\n        full_filename = node.send(:import)\n        full_filename != Compass.deprojectize(full_filename)\n      end\n    end\n    class CssFile\n      attr_accessor :path, :css\n      attr_accessor :selector_count, :prop_count\n      attr_accessor :file_size\n      def initialize(path)\n        require 'css_parser'\n        self.path = path\n        self.css = CssParser::Parser.new\n        self.css.add_block!(contents)\n        self.selector_count = 0\n        self.prop_count = 0\n      end\n      def contents\n        @contents ||= File.read(path)\n      end\n      def lines\n        contents.inject(0){|m,c| m + 1 }\n      end\n      def analyze!\n        self.file_size = File.size(path)\n        css.each_selector do |selector, declarations, specificity|\n          sels = selector.split(/,/).size\n          props = declarations.split(/;/).size\n          self.selector_count += sels\n          self.prop_count += props\n        end\n      end\n    end\n    class SassFile\n      attr_accessor :path\n      attr_reader :visitor\n      attr_accessor :file_size\n\n      def initialize(path)\n        self.path = path\n      end\n      def contents\n        @contents ||= File.read(path)\n      end\n      def tree\n        opts = Compass.configuration.to_sass_engine_options\n        opts[:syntax] = path[-4..-1].to_sym\n        @tree = Sass::Engine.new(contents, opts).to_tree\n      end\n      def visit_tree!\n        @visitor = StatsVisitor.new\n        tree.visit_depth_first(@visitor)\n        @visitor\n      end\n      def analyze!\n        self.file_size = File.size(path)\n        visit_tree!\n      end\n      def lines\n        contents.inject(0){|m,c| m + 1 }\n      end\n      def rule_count\n        visitor.rule_count\n      end\n      def prop_count\n        visitor.prop_count\n      end\n      def mixin_def_count\n        visitor.mixin_def_count\n      end\n      def mixin_count\n        visitor.mixin_count\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/test_case.rb",
    "content": "module Compass\n  # Write your unit test like this if you want to make sure all your stylesheets compile.\n  #\n  # require 'compass/test_case'\n  # class StylesheetsTest < Compass::TestCase\n  #   def test_stylesheets\n  #     my_sass_files.each do |sass_file|\n  #       assert_compiles(sass_file) do |result|\n  #         assert_not_blank result\n  #       end\n  #     end\n  #   end\n  #   protected\n  #   def my_sass_files\n  #     Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), \"../..\", \"app/stylesheets/**/[^_]*.sass\")))\n  #   end\n  # end\n  class TestCase < (defined?(ActiveSupport::TestCase) ? ActiveSupport::TestCase : Test::Unit::TestCase)\n\n    def setup\n      super\n      @last_compile = nil\n    end\n\n    def compile(stylesheet)\n      input =  open(stylesheet)\n      template = input.read()\n      input.close()\n      @last_compile = ::Sass::Engine.new(template, ::Sass::Plugin.engine_options(:filename => stylesheet)).render\n      yield @last_compile if block_given?\n    end\n\n    def assert_compiles(stylesheet, &block)\n      compile(stylesheet, &block)\n    end\n\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/validator.rb",
    "content": "begin\n  require 'rubygems'\n  require 'compass-validator'\nrescue LoadError => e\n  if e.message =~ /core_ext/\n    raise Compass::MissingDependency, <<-ERRORMSG\nThe Compass CSS Validator is out of date. Please upgrade it:\nsudo gem install compass-validator --version \">= 3.0.1\"\nERRORMSG\n  else\n    raise Compass::MissingDependency, <<-ERRORMSG\nThe Compass CSS Validator could not be loaded. Please install it:\nsudo gem install compass-validator\nERRORMSG\n  end\nend\n"
  },
  {
    "path": "cli/lib/compass/version.rb",
    "content": "require 'compass/generated_version'\nmodule Compass\n  module Version\n    def scope(file) # :nodoc:\n      File.join(File.dirname(__FILE__), '..', '..', file)\n    end\n\n    def parse_version(version, name)\n      nil_or_int = lambda{|i| i.nil? ? nil : i.to_i}\n      segments = version.split(\".\")\n      {\n        :string => version,\n        :name => name,\n        :major => nil_or_int.call(segments.shift),\n        :minor => nil_or_int.call(segments.shift),\n        :patch => nil_or_int.call(segments.shift),\n        :state => segments.shift,\n        :iteration => nil_or_int.call(segments.shift)\n      }\n    end\n\n    # Returns a hash representing the version.\n    # The :major, :minor, and :teeny keys have their respective numbers.\n    # The :string key contains a human-readable string representation of the version.\n    # The :rev key will have the current revision hash.\n    #\n    # This method swiped from Haml and then modified, some credit goes to Nathan Weizenbaum\n    def version\n      Compass::VERSION_DETAILS\n    end\n  end\n\n  extend Compass::Version\n\n  unless defined?(::Compass::VERSION)\n    VERSION = File.read(scope(\"VERSION\")).strip \n    VERSION_NAME = File.read(scope(\"VERSION_NAME\")).strip\n  end\n\n  VERSION_DETAILS = parse_version(VERSION, VERSION_NAME)\n\nend\n"
  },
  {
    "path": "cli/lib/compass.rb",
    "content": "module Compass\nend\n\n%w(core\n   deprecation\n   dependencies\n   sass_extensions\n   version\n   errors\n   quick_cache\n   logger\n   actions\n).each do |lib|\n  require \"compass/#{lib}\"\nend\n\nrequire 'sass/callbacks'\n\nmodule Compass\n  def base_directory\n    File.expand_path(File.join(File.dirname(__FILE__), '..'))\n  end\n  def lib_directory\n    File.expand_path(File.join(File.dirname(__FILE__)))\n  end\n  module_function :base_directory, :lib_directory\n  extend QuickCache\nend\n\n%w(configuration/helpers\n   configuration/comments\n   configuration/serialization\n   configuration/file_data\n   app_integration\n   compiler\n   sprite_importer\n).each do |lib|\n  require \"compass/#{lib}\"\nend\n"
  },
  {
    "path": "cli/test/fixtures/extensions/only_stylesheets/compass_init.rb",
    "content": "Compass::Frameworks.register(\"only-stylesheets\", :stylesheets_dir => File.join(File.dirname(__FILE__),\"scss\"))\n"
  },
  {
    "path": "cli/test/fixtures/extensions/only_stylesheets/scss/only_stylesheets/foo.scss",
    "content": "@mixin only-stylesheets {\n  color: red;\n}\n"
  },
  {
    "path": "cli/test/fixtures/fonts/bgrove.base64.txt",
    "content": "AAEAAAAOAIAAAwBgRkZUTVRX4doAAEkcAAAAHE9TLzJXOYGVAAABaAAAAFZjbWFwo9b83AAAA5wAAAGCY3Z0IAAhAnkAAAUgAAAABGdhc3D//wADAABJFAAAAAhnbHlmHjQt6QAABhQAADqcaGVhZO/rWMkAAADsAAAANmhoZWEG3gJsAAABJAAAACRobXR44bASCgAAAcAAAAHca2VybgkODBcAAECwAAACpmxvY2FEK1KSAAAFJAAAAPBtYXhwAMYAngAAAUgAAAAgbmFtZXbvKHoAAENYAAAD/3Bvc3Q8IkO/AABHWAAAAbwAAQAAAAYAAJqBq3tfDzz1AAsD6AAAAADG9QrgAAAAAMb1CuD/C/6AA9IDpAAAAAgAAgAAAAAAAAABAAADpP6AAFoD/v8L/3YD0gABAAAAAAAAAAAAAAAAAAAAdwABAAAAdwBtAA0AAAAAAAIAAAABAAEAAABAAC4AAAAAAAEB1gH0AAUACAKKArsAAACMAooCuwAAAd8AMQECAAACAAYDAAAAAAAAAAAAAwAAAAgAAAAAAAAAAFBmRWQAQAAgISIC7v8GAFoDpAGAAAAAAQAAAAAAAAFsACECrwA8AU0AAAGqAAAAxwAuARUANAIZAC8CKQAoApsAKwI4ACgAkQA0ANoANADa/9MB7wAuAe8ALwC2//4B7wAvAMcALgIzAC4CAAA0AUkAKAHtACgB5wAoAggAKAHzADQB9AA0Aj4ALgIVACgB6wArAL8AKgC4//4B4QAoAe8ALwHhAC4B5wAoApcAKAKvADQCpQA0Ak4AKAJAADQB+QA0AfkANAKGACgCqQA0AUMALgJNACgCYAA0AfgANAKtADQCAQA0ApcAKAHzADQCmwAoAfkANAIqACgB8wAuAq8ANAKpAC4CsAA0AgQALgKrADICCwAsAJYANAIzAC4Alf+6AfAALQHXACkAhQAuAfQAKAH0ADQBpwAoAfMAKAHnACgCUwAuAfQAKAIAADQBQwAuAOv/HwH3ADQBQwAuArUAPAH/ADQB5wAoAfMANAHsACgB2QA0AZ4ALQH0AC4B/wA0AiQALQKwADQB8gAuAgAANAHzAC4BGQAtAKEAPAEZ/7gBvQAyALsAMAGnADAAmQBCAf4APAKjADACuQA8AU8AKgH/ADYB5wAwAfEANgH+ADwB8gA2AgwANAMuADwD/gAwAVMANgDZ/wwCiAA8AqUALgK0ADYCvwA8AAAAAwAAAAMAAAAcAAEAAAAAAHwAAwABAAAAHAAEAGAAAAAUABAAAwAEAAAAfgCiAKcAqQCuALEAvyEi//8AAAAAACAAoQCmAKkArgCwAL8hIv//AAH/4//B/77/vf+5/7j/q99OAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaGMAZQAAAGdmcAAAAAAAAGkAAAAAAAAAAAAAAAAAAGpiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAnkAAAAqAFwAXABcAIYAogEqAaYB8AJQAmICjAK2A0ADcgOgA7YD1APyBDwEcgS8BSAFZgWuBfQGOAZ+BtIHCAdQB4IHpgfYCCoIogjQCS4JXgmQCcwKDApUCpIKvgr2Cz4Lbgu4C/YMGAxODKYM/g1KDXYNog3YDiYOdg66DwgPMA9OD3YPrg/CD9QQChBKEH4QvBD6EToRhhHCEhISXhKoEtQTJBNSE3ITshP2FDAUdBSwFOYVEhVaFc4WGBZoFqgWuhcEF0IXaheyF84YMBh8GNAY7hkuGX4ZshnoGhwaVhqqGx4bbhvAHC4cjBzWHU4AAgAhAAABKgKaAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIREnMxEjIQEJ6MfHApr9ZiECWAAAAgA8//8ChQMZAA8AHwAAEyEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCaeAYUpOTkp/nsoOjoBrf57FyIiFwGFFyEhAxk5Kf2qKTk5KQJWKTkqIRf9qhchIRcCVhchAAMALv/kAJkDGQAJABMAGwAAExEUIyI1ETQzMgIyFhQGIyImNTQXIhUUMzI1NHgUFRUUKiwfHxYXHzYNDQwDB/2lERECWxL9Nh8uHh8WFwoNDAwNAAIANAIZAOEC8wAIABEAABMyHQEUIj0BNDMyHQEUIj0BNEkUKZgVKQLzErYSErYSErYSErYSAAAAAgAvAG4B7AItAFwAbAAAEjIWHQEUFjsBMjY9ATQ2FhcVFBY7ATIWFAYrASIGHQEUFjsBMhYUBisBIgYdAQ4BIiY9ATQmKwEiBh0BFAYiJj0BNCYrASImNjsBMjY9ATQmKwEiJjY7ATI2PQE0FyIGHQEUFjsBMjY9ATQmI6kRDAwGagYLFRQBCgZMCQkJCUwGCgoGTAkJCQlMBgoBDBEMDAZpBgwMEQwLBkwLCgoLTAYLCwZMCwoKC0wGCzsGDAwGagYLCwYCLAkJTAYLCwZMDAkJDEwGCwwRDAsHawYKDBEMCwZMCQkJCUwGCwsGTAkJCQlMBgsUFQoGawcLFRQLBkwJjwsGagcLCwdqBgsAAAAFACj/2wIBA0AAPwBHAE4AUgBZAAATMh0BMzU0MzIdAR4BFRQGIiY1NCYnER8BHgEVFAYHFRQiPQEjFRQiPQEuATU0NjMyFhUUFhcRJy4BNTQ2NzU0FwcRFxEiJiMHDgEVFB8CETMRFxE+ATU0J9sUQxUUQlQMEQw9MEEWIi1gRilDKUNVCwgJDT4xSSYvW0M2DUMCCAJgM0U7PSlDKTZKPANAEhcXEhIeEW5GCQoKCTVUEf6VJg4UUy1GaAUSEhISEhISGBFuRwoKCwk1VREBcCsWUzBFZQgYElIB/ssmAVsBAgdNNEcqI0j+oAE6GP7fBU42RisAAAUAKwAFAnADDQAHABYAHgAmAC4AABIyFhQGIiY0JDIWFRQHAQYjIiY1NDcBBCIGFBYyNjQSMhYUBiImNDYiBhQWMjY0dmhLS2hLAe8UDgL+UQUKCQ4CAa/+uEgyMkgyvGpKSmpKo0gyMkgyAw1LaEtLaEsMCAUE/SgIDAgFBALYITJIMjJI/lFLaEtLaCIySDIySAADACj//wIMAxkAKQA1AEIAABM0NjMyFhUUDwETNjU0JyY1NDMyFhUUBxcWFRQGIi8BBiMiJjQ/AScuATciBhUUHwE3NjU0JgMHDgQVFBYzMjdcY0hHYEdptww2Dw8aSBw3Aw8RBS5Eal6EQlpHDBWqN0kSTms0Sl80ARQXGBBqTF42AnBGY2lEUjNK/vkcIEUzDw4QZEE2L04FBQgNB0NLe7A9QWYNN55NMyQeb0sqOzNO/pYlAQ4WIC8bR2NGAAABADQCGQBdAvMACAAAEzIdARQiPQE0SRQpAvMSthISthIAAAABADT/rAEIA2UAGgAAEzQ+AzMyFRQHDgEdARQWFxYVFCMiJy4BNTQiMTgsDBARSFFcPREQBwpUXgH0Rn9SPhwQEAsruF/ZdqwlChEQBTDLcgAAAAAB/9P/rACnA2UAGwAAExQOAyMiNTQ3PgE9ATQmJyY1NDMyHgMVpiIxOSwLEBFGU1RFERAMLDgyIQEfR39TPhsQEQoqtWjZZbQpCxAQHD5TfkYAAAAFAC4BYgHCAvcAJwA3AEcAVwBmAAATNDYyFh0BFBY7ATIWFAYrASIGHQEUBiImPQE0JisBIiY0NjsBMjY1JyY1NDYzMh8BFhUUBiMiJzc2MzIWFRQPAQYjIiY1NDcHNjMyFhcUDwEGIyImNTQ3PgEyHwEWFRQGIyIvASY14wwRDAcEmQgJCQiZBAcMEQwHA5kJCQkJmQMHfAUOCQYFOgYMCQkFygUHCQ0FOQYJCQsFkAYICAwBBjoFBgkOBcULEgY5BQ0JBwU6BQLkCQkJCZkDBwwRDAcDmQkJCQmZAwcMEQwHA1UFBwgOBToFCQkLBVcFDggHBToFCwkJBZAGCwkJBjoFDggHBTQLBToFBwgOBToFCQABAC8AXgHAAe4AIwAAEzQ2Fh0BFBY7ATIWBisBIgYdARQGJj0BNCYrASImNjsBMjY14xUUBwSZCwkJC5kEBxQVBwOZCwoKC5kDBwHeCwkJC5kEBhUVBgSZCwkJC5kEBhUVBgQAAv/9/5wAjwBQABQAHQAAFzI+ATU0LgE1NDYyFhUUBiMiJjQ+ASIGFRQzMjY0EBAeEBUVHi0gSzQJCQlXCwYMBQg7DA0EAwkYFBcfHxc0Sg0QDGIIBQwHCgAAAAABAC8BEQHAATsACQAAEyEyFgYjISImNkABcAsJCQv+kAsKCgE7FRUVFQAAAAIALv/lAJkAUAAJABEAADcyFhQGIiY1NDYXFDMyNTQjImQWHx8sIB8KDQwMDVAeLh8fFxYfNQ0NDAAAAAEALgAOAgYDDQAPAAABNjMyFhUUBwEGIyImNTQ3Ad8FCgkOA/5SBQkJDwIDBAgMCAUE/SgIDAgFBAAAAAMANAACAcwDGQAUACEAMAAAEjIWFREOASImJzQmNTQ2NRE0JjU0JCIGFREeATMyNjURNAcyFhUUDwEGIiY1ND8BNquqdwR2pHYDAQEBARCIXgJeQkRfOAgOBdYEEA4G1gUDGXZV/nZRcXJSAgQCAQMBAXYBAwFVTV5E/nlBW19EAYBDkg4JBwXHBA4IBwbGBQAAAAABACgAAwEbAxwAJQAAEyImNTQ2MzIWFREzMhYdARQGKwEiJj0BNDY7AREOARUUHgEVFAZcDiZKNQsJVQQHBwTSBAcHBFQcJQ8PCwI8OyY1SggM/SQGBBUEBgYEFQQGAsUHLx4VHhEHCA4AAAABACgAAQHAAxgANgAAEjIWFRQOBg8CBgcGFRQWMyEyHQEUIyEiJjU0PgU/ATY1NCYjIgYHFAYiJjU0nqp3BAgIDAkMBwUEG6tQEjIlAQ0KCv7yNEsECggRBxMB/C9fRENeAQwRDAMYdlUPHhgWEw4OBwQEGZVQFSEkMgoVCks0DRgVDxIIEQHlL0RDX15ECQoKCVUAAQAo//8BvwMYAEgAABMUHwEUBiMiJyY1NDYzMhYXFQYHBgcGFRQfARYXFQ4BIyImNTQ3NjMyFhUHBhUUFjMyNj0BNC8BJjU0Nz4CPwE2PQE0JiMiBlEHBw8JCwQQd1VRdQUFIg8tDg08IwUFdVFVdxAECwkPBwdfRENfEz8fHAcOEQUVFV9DRF8CTBcXFwgNCyYpVXdwUBUxIRAsERkYEDsgMxZQcHdVKSYLDQgXFxdDYF9EAR8WPx8sKx4GDhEFFhgfAURfXwACACj//gHaAxkAIQAwAAAAMhYVAzMyHQEUKwERFAYrASImNREjIiY1ND4FPwEXIgcjDgEHBhUUFjsBESYBMi4fAVIKClIGBBUEBq41SgUKCRAIEgG4JgQDAQHEGRIyJa0CAxkfFv6yChUK/pwEBwcEAWRLNA4YFg8SCA8BqRoDAbIZFSAkMgFQCgAAAAEANP//AcsDFAA1AAATMzIVFCsBIgYXFRQVHAEVFBY7ATIWFAYiJjU0NzYzMhYVFAcGFRQWMzI2NTQmKwEuAT0BNDaw7BIS7CAzATUbUlV2dqp3EAQMCQ4BDV9EQ19eRE4xTEkDFBQVMx4CCA4CYDgdNXaqd3dVKSYLDAgEAx8gQ2BfRENfAUYtuTBJAAAAAAIANAAAAc0DFwALADEAAAEiBgcVFBYzMjY0JjcVFAYiJjU0JiIGHQEUFzI/AT4BMzIWFAYjIiY1NDYxETQ2MzIWAQBCXwFfQ0RfX4gNEAxfh18DAgIIE1AwVXd3VVR4AXZVUXsBblxCBUNfX4df6AoICgoIQ19eRPMKAQIIFyh2qnd2VAICAX5VdnUAAQAu//8CEwMXAC8AAAEUBg8BAzMyFCsBAwYdARQGKwEiJj0BNDc2PwEjIjU0OwETNjU0IyEiPQE0MyEyFgITBQICmS8SEkehEwYEFQQGCglQSikSEkGoAQz+WgoKAacWHgLhCQ4EA/7/Kf7wIRVJBAcHBEkYGRKGfRQVARoBBA0KFQogAAAAAAMAKP/+Ae0DIQAdACUALQAABCImNTQ2NzY0Jy4BNTQ2MhYVFAYHBhQXHgMVFAQyNjQmIgYUEjI2NCYiBhQBaLyETSYEBCFShLyFUyAEBAohKh7+0Zhra5hqaphra5hqAntYQ2YPAQoCDWNIWHt7WEdkDQIKAQQZLEcoWFJkjGRjjgEaZIxkY44AAAAAAgAr//4BxAMdACAANwAAAR4BFRQHAwcGIyIvASY1NDcTNiYPAQYjIiY1NDc+ATMyFyYjIgYHBhUUFhcWMzI2NzI2MTY1NCYBbCotJdxxAgcEAhEEAvwHCwgXCAhacyUdWTFAHSkzJ0cYHiQhKjQmRRcBAh0kAvcdWjFANP7JogQCCwMGBAIBZgoCAwMBe1JANCktRh0kISozJ0YYHiIgBCkzKEcAAAAABAAq//8AlQHKAAkAEQAbACMAABMyFhQGIiY1NDYXIhUUMzI1NAMyFhQGIiY1NDYXIhUUMzI1NGAWHx8sIB8XDQ0MDBYfHywgHxcNDQwByh4uHx8XFh8pDA0NDP7JHi4fHxcWHykMDQ0MAAAABP/9/7wAjwHPAAcAEAAoADAAABIyFhQGIiY0FyIGFBYyNjU0AzI+ATU0LgE1NDYyFh0BDgEjJjU0NjMyNyIGFBYzMjRDLR8fLR82BgcHCwdVER4PFhUfLR8DSTMSCQkBSQYHBwYMAc8eLh8gLAoHCggIBQz+Pw0NAgILGRMWHx4XAzNIAhIIDWEHCgcYAAAAAQAo//8BtQMNABwAAAEyFhUUBwEGFRQeAR8BARYVFAYjIicBJjU0NwE2AZ0JDgX+uRcJBwkIAT0GDwgHBf6zHSMBRwUDDQ8IBwX+yhcXCxQJCAf+0wUHCA8FAT0dKC4dATcFAAIALwC4AcABmAAJABMAABMhMhYGIyEiJjYXIR4BBiMhIiY2QAFwCwkJC/6QCwoKCwFwCwkJC/6QCwoKAZgVFBQVtgEUFRUUAAEALv//AboDDQAcAAATMhcBFhUUBwEGIyImNTQ3ATI+AjU0JwEmNTQ2RQUFAUgiIf63BQYIDgUBPQEQBwgW/rkFDgMNBf7JHC8pIf7IBQ8IBwUBLQ4JFQsYFgE2BQcIDwAAAAADACj/5AG/AxgAKAAyADoAABMUFjEUBiMiJyY1NDYyFhUUBgcGBwYXFRQiPQE0PgM3PgE1NCYiBhIyFhUUBiMiJjQXIhUUMzI1NFEODwgLBRB3qnZGNhYKGgEpERUcDAQsN16IX40uHh8WFx82DQ0MAk0XLwgNCyYqVXZ2VT9mFwsKGiKTEhKSGSoZFQUCE1AzQ19f/b8fFhcfICwKDA0NDAAAAAIAKAAAAm8DFgBOAFgAACUUDgMjIiYQNjMyHgEXFBYdARQGIyInDgEjIiY0NjMyFzc+AjMyFhUUDgEHFAYVFBYVFAYVFBYyNjU0LgEjIgYQFjMyPgI3NjMyFic0JiMiBhQWMjYCQBUrN1IreaureVCDSAcBOSkrHBJDKTpSUjpDKgECAwgFCQ8EBgIBAgEiLiI4dkxok5NoK00zGwkEDwgKlT8kKTk6UDq9CSo3MSLoAUboap9ZBA4DCik5HiozYoxhPgQEBAUMBwIKHRcEDAMEDAQCBAIXISIXTZpx0P7c0CY7KBMKCtE/PERiRUEAAAIANAAAAnsDFwAVABsAAAEyFhURFCsBIjURIREUKwEiJjURPgEWIgYHISYBWHmqChUK/gsKFAQHBqfcypIDAfQDAxfno/59CgoBZP6cCgYEAYOl5SnIj48AAAAAAwA0AAECfQMZAB8ALwBAAAATNjMwFzM3HgEVFA4BDwEGFhcWFxYVFAYjIS4BJxE0NhciBh0BFBYzITI/ATY0JiMDIgYdAR4BMzIzITI2NTQmJ68JDDxsAVN1Ex8GHQMDBEUjMXdV/v4ySAFIOCQzDAkBFRMRMTBfRPcJDAEwIAEBAQhBW1U+AxgBAQEBeFMYMTUPHQMNARcqOUtVdwJGMgIeNEknMiTtBw4RMjCGX/5/DwjbIjBhQj9cBgABACgAAQIhAxgAHwAAASYjIgYQFjMyNzYzMhYVFAcGIyImNTQ2MzIXFhQGIyIB/UtmaJOUZ2hJBwoICwdUenmrq3l6VAYMBwoCh2jQ/tzRaAoLCQkKdOiko+h0CBIMAAACADQAAAIYAxYADwAdAAATMx4BFRQGByMuAScTIzQ2FyIGFREeARczMjYQJiOsU3WkqXhKMkYBAQFFOyQzATAhRWiTk2gDFgbmn6PmAghCMAIdM0glMiT94yEuAtABJNAAAAAAAQA0AAIBywMZACoAABMhMh0BFCMhIgYdARQWOwEyHQEUKwEGHQEeATMhMhYdARQGIyEiJicRNDazAQ0KCv7zJDIJBdgKCtgOAjIjAQwEBwcE/vM0SQJLAxkKFQozJPMECQoVCgQL5CMvBgQVBAZHMwIdNUsAAAAAAQA0AAABywMXAC8AABMhMhYdARQGIyEiJxUiBh0BFBY7ATIWHQEUBisBBhURFCsBIiY1ETQxNyM0NjMVNrgBCAQHBwT++AMBJDMKBdcEBwcE1w8KFAQHAQFLNQEDFwYEFQQGAQEyJPMECgYEFAQHBAv+qwoGBAKLAQI0SwEBAAABACgAAAJeAxcAMQAAJTI2NzU2NTY1NCYnISImPQE0MyEeARUUDwIOASMiJjU0NjMyFxYUBiMiJyYjIgYQFgFMSH0hAQIvIv79BAYKAQUyRgIDASWTVHmrq3lzWwcNCAkGS2Zok5Qpb2oCAgEMBSMyAQcEFAoCSjMRCAwBdX3opKPodAkQCwdo0P7c0QAAAAABADQAAAJ1AxgALAAAEzMyFhURFBYzITI2NRE0NjsBMhYVERQrASImNRE0JiMhIgYVERQrASI1ETQ2PhUEBgkHAdAFCgcEFAMHChQEBwkG/jAGCgoVCgYDGAgD/psGCwoHAWUEBwgD/P0KBgQBVQYJCgX+qwoKAwMEBwAAAQAuAAABFQMXAB8AABMzMhYdARQGKwERMzIWHQEUBisBIj0BNDsBESMiPQE0ONIEBwcEVFQEBwcE0goKVVUKAxcGBBUEBv07BgQVBAYKFQoCxQoVCgAAAAEAKAABAh8DGAAnAAATITIWHQEUBisBEQ4BIyImJzU0NjsBMhYdAR4BMzI2NREjIiY9ATQ2+QEbBAcHBFQCd1NUdwEHBBQEBgFfQ0RfngQHBwMYBgQVBAb92FJ0dlQGBAcHBAZDXmBDAiIGBBUEBgABADT//wIzAxkAMQAAATIWFRQPAwYUHwEBFhUUBiMiLwImKwEiBhURFCsBIjURNDY7ATIXERQ7ATI3ATYCGgkPA4jPCwgIDAFWAxEIBQOH3QgJMAYJChUKBgQVBQUPGwwIAXYDAxkQCAUDh9AKCQUIC/6pAwQJEAOI3AgKBf6qCgoDAwQHC/6cEQgBdgMAAAABADQAAAHKAxgAHgAAEzMyFh8BER4BFyEyFh0BFA4BBwYjIiYrASImJxE0Nj8UAgUCAQIxIQEOBAcEBgEBHhJdEmsySwMHAxgFAwL9bCEuAQYEFQIEAwEBAUUyApYEBgABADQAAAJ5AxgAMwAAATI+ATU3PgEzMhYVERQrASI1ETQjIgYPAQ4BIiYvASYnJhURFCsBIjURNDsBMhYfAh4BAVcYKBBPCEQtBAYKFQoDCR8ITgo+YEMJSw0gBgoVCgkBLEQJTAQIKAGIGhkG/SI4CAP8/QoKAtkDHRb/HTg5JvUjEAMG/ScKCgMDCzYk9gsTIgAAAQA0AAEBzQMZACgAABMyFhcTFhcWMjY1ETQ2OwEyFhURFAYjIiYnAy4BJyYVERQrASI1ETQ2PjFCB7kOGQMFBAYEFQQGBgQqRAy5CBMSBgoVCgYDGT0d/ackDQIDAwLVBAcHBPz9AwczJwJZFhQJAwb9JwoKAwMDCAAAAAIAKAABAm8DGAAIABEAABIyFhAGIiY1NCUiBhAWMjYQJtPyqqryqwEkaJOUzpOTAxjn/rjo6KSjv9D+3NHRASTQAAAAAgA0AAABywMXABUAJQAAEzMeAR0BDgErASIGFREUKwEiNRE0NhciBh0BFBY7ATI2PQE0JiOwVFN0AXdUlgUHChUKSDYjMgcFlkNgYEMDFwJ2UxJUeAgE/qgKCgKONEknMyP0BQhgQxJDXwAAAgAo//8CcAMWACAAQAAABSIuAyMiDgIjIiY1NDYyFhUUDgMVFBYzMhYUBicyFhUXFRQxMj4BNTQmIyIGEBYzMjc2PQE0JiMiJjQ2AlwXJhcRCAEDHSQ+IHmrq/KqFB0dFC0iCQsL3jZEAQUfIJNnaJOUZ05AAzIkCgsLAQ0SEw0UFxTopKPo56Q3ZUIxGgINKwwRDPxIFQEBATp3P5LQ0P7c0UADCAkkMgwRDAAAAAACADQAAQHMAxkAMQBAAAATNDYzOgE7AR4BHQEOASsBFhcBFhUUBiMiJwEuBCc0JjUnNDU0IyIGFREUKwEiNRMiBh0BFDsBMjY9ATQmIzRPMQEPBjpTcwF2VGoDFgEaAxAJBAP+5gkNBgMDAQEBAwUHChUKfiMyDJZDX19DApk4RwJ1UxNUdx8W/uYDBAkQAwEaChEQCQ8DAQQBAQEBAwkE/qgKCgLkMyP0DF9DEkNfAAEAKAAAAgIDGQA2AAAlMjY1NCclLgE1NDY7AR4BFRQGIiY1NCYrAQciBhUUFwUXHgIVFAYjNSMiJjU0NjMyFhUUFjMBTztSPf7eJi9oSldRbwwRDF9DKiI6UjwBEhYNHyRqSlRVdwsICQ1fRCpQOUUsqRZTMEppBXVSCQoKCURfAVA5RiufDggdRyhKagF3VQoKCwlDYAAAAQAuAAIBxQMbAB0AABMhMhYdARQGKwEiBhURFAYrASImNRE0JisBIj0BNDgBggQHBwSWCQ0GBBUEBg0JlwoDGwYEFQQGDwj9MgQHBwQCzggPChUKAAAAAAEANAAAAnsDFwAbAAABETQ2OwEyFREOASMiJjURNDY7ATIVERceATI2AlIHBBQKBqZ3easHBBQKAQOSypIBfwGOBAYK/n2l5eejAYMEBgr+nCqPx8cAAAABAC7//QJ8AxsAIAAAATIWFRQVAw4BIyImJwMmNTQ2MzIXEx4BMzI+AzcTNgJlBw/MCDUiITQIxAENCQ4EwQQiEw0WCwgCAcsEAxoLCQMC/UchKiUdAsMDAggLDf1JFhoLDRIHAgK0DQAAAAABADQAAAJ8AxsANwAAJQ4CKwEuATURNDY7ATIWFREeATsBPgE1ETQ7ATIVERQWFzMyNjURNDY7ATIWFREOAgcjIi4BAVgPLhwJJkFbBgQVBAYCSDIYIjAKFQowIhkzSQYEFQQGATlEHyQKHC46FxwHBF9CAmsEBwcE/ZEyRgIyIgEQCgr+8CMyAUkzAmsEBwcE/ZY2TyABBh0AAAABAC7//gHXAxgAMwAAEzIXExYyNxM2MzIWFRQHAwcGFRQXExYVFAYjIicDJyYiBwMGIyImNTQ3EzY1NCcDJjU0NkYMBKICEQKhBQoJDwKhDQYHrgIPCAsFlgwCEgKiBQoJDwKuBwauAg4DFwn+wAQEAUAJDAkDBP7BGAoNDwz+qQQECAwJASkWBQX+wQkMCAQEAVcMDw0KAVcEBAgMAAAAAQAy//8CegMYADEAAAE0NTA1NDsBMhYdARQGBw4BFREWBisBIiY1ETQmJy4BPQI0NjsBMhYdARceAjI+AQJQChUEBpBqCQwBBwQVAwcNCGuPBwMVBAYBAkRxhXJDAr8MHiMLBwRBlN0WAg4H/t0EBwcEASMHDgIV3ZQBQQQHBwQjKl2eW1ueAAEALP/+Ad8DFAA2AAATIR4BFRQHFQcDMzIVFCsBAw8BBhUUMyEyFh0BFAYjIS4BNTQ3EyMiNDsBEzc1NzY1NCMhIjU0RQFmFh4HAqMvEhJHwwEBAQ0BbAQHBwT+kRYdCbY/EhJXrgMBAQz+mw0DFAIeFRALAQL+7BQV/rYBAQEECwcEFQQGAh4VEQ0BMykBJwQBAQEEDBUUAAAAAAEANP+DANwDlwAZAAATMhUUKwEiBgcRFBY7ATIVFCsBLgE1ETQ2N8oSEhciMwEyJBcSEho0SEkzA5cUFTEg/OUkMhQVAkk0AxsyRgIAAAAAAQAuAA4CBgMNAA8AABMmNTQ2MzIXARYVFAYjIicxAw8JCgUBrwIPCQkFAu8EBQgMCP0oBAUIDAgAAAAAAf+6/4MAYQOXABkAAAMeARURFAYHIyI1NDsBMjY1ES4BKwEiNTQzGzNJSDQaEREXJDIBMyIXEREDlwJGMvzlNEkCFRQyJAMbIDEVFAAAAAABAC0BeQHEAxIAIQAAEyImMScmNTQ3EzYzMhcTFhUUDwEGJicDLgE1LgEHAwYjIkcBARMFAbgGDQ4FtwEFEwMKAZ0BAQMDBKIDBwEBegEJAgcDAgF3CQn+iQIDBwIJAQMDAUABAwEIAQX+twYAAAAAAQAp/+YBsAACAAoAACQUKwIiJjY7AgGwDLi4CAYGCLi4AhwODgAAAAEALgIZAFcC8wAIAAATMh0BFCI9ATRDFCkC8xK2EhK2EgAAAAIAKAAAAcABmAAbACMAABMyFhc1NDY7ATIWFREUBisBIiY9AQ4BIyImNDYWIgYUFjI2NPQxVhwGBBUEBgYEFQQGHFYxVXd3mYhfX4hfAZgsJUYEBwcE/n4EBwcERiUsd6p3KV+IX1+IAAAAAAIANAABAcwDFgAfACsAABMzMhYVETYzMhYUBiMiJxUUBisBIiY9ATQmNDY1ETQ2EyIGBxUeATMyNjQmPxUEBjxmVXd3VWU9BgQVBAYBAQbFQF0FBV1ARF9fAxYHBP49UHaqd1FFBAcHBLUBCAQHAQI0BAf+WVdAFkBYYIZfAAAAAQAoAAABewGYACEAABMyFhUUDwEGIyIuASMiBhQWMzI2NzYfARYVFA4BIyImNDb0LVkDDgMDBh0wHERfX0QdPAwICA4EJUEhVXd3AZgpDgUDDQISE1+IXxgMBgYNBAMIGhd3qncAAAACACgAAQG/AxYAGwAoAAABMhYVERQGKwEiJj0BDgEjIiY0NjMyFhcRNDYzAyIGFRQWMzI2NzUuAQG1BAYGBBUEBhxWMVV2dlUxVhwGBK1DX19DQF4FBV4DFgcE/QIEBwcERSUsd6p2KyUBwwQH/llfQ0RfWEAWQFcAAAAAAQAoAAIBvwGZACsAABMyFh0BFCMhIiY9ATQ2OwEuASMiBhQWOwE2NzYzMh8BFhUUBw4BByMiJjQ29FR3Cf7sBAcHBPIJWzxEX19EGEAtDwgCAhIFERJKMBpVd3cBmXdUCQgGBBUEBjtPYIZfBi0UAQkDBQcVFCsDdqp3AAEALgABAiwDGQAvAAABMhYXFRQGKwEiJj0BLgEjIgYdATMyFh0BFAYrAREUBisBIiY1ESMiPQE0OwE1PgEBYVR2AQYEFQQGAV5DRF/8BAcHBPwGBBUEBl0KCl0CdwMZdVQGBAcHBAZDXV9DtgYEFQQG/p0EBwcEAWMKFQq8UnMAAgAo/oIBwAGZACgANAAAEzIXNTQ2OwEyFhURBw4BIyImJzU0NjsBMhYdAR4BMzI2NREGIyImNDYXIgYUFjMyNjc1LgH0ZT0HBBQEBwECdlNUdwEGBBUEBgFfQ0RePWVVd3dVRF9fREBdBQVdAZlRRQQHBwT9wAZSc3VUBgQHBwQGQ11fQwEFUXeqdylghmBYQBZAWAAAAAABADT//wHMAxMAKgAAEzMyFhURNjMyFhcVFAYrASImPQEuASMiBgcVFAYrASImPQE0JjQ2NRE0Nj8VBAY9ZVR3AQYEFQQGAV9DQF0FBgQVBAYBAQYDEwcE/j1Rd1TBBAcHBMFDX1hAywQHBwS2AQcECAECMwQHAAACAC4AAQEWAiQADwA7AAATMzIWBxUWBicjIiY9ATQ2BzMyFhURFBY7ATIWHQEUBisCIjEjIiY9ATQ2OwEyNicRNCYrASImPQE0NooeBQoBAQoFHgUJCTBXBAcKBUUEBwgDXxQBXgQHBwREBwoBCAYqAwgHAiQKBR0FCwEKBR0FCosHBP6rBQkHBBQEBwcEFAQHCAYBKQUJBgQVAwcAAAAAAv8f/oIAtwIjAA8ANgAAEzMyFgcVFgYrASImPQE0NgMiJjU0NjsBMhYdAR4BMzI2NRE0JisBIiY9ATQ2OwEyFxYVEQ4Cix0FCgEBCgUdBgkJmlF7BwMVBAYBX0NDXwgGKgMIBwRXCAECAj9ZAiMLBB0FCwsFHQUK/F9zXQQHBwQGQ11fQwITBggHAxUEBggIu/6BP2AtAAABADT//gHKAxgAMwAAEzMyFhURFBUUMzI/ATYyHwEWDwEGFRQXBRYVFA8BBisBIi8BJSYjIhcVFAYrASImNRE0Nj4VBAYFAhXkAwoCDggJ5xIMAToEAgcEBA8BBAL+0QsFCAEGBBUEBgYDGAcE/lYDAhETzQIDDwgH0BAKCQn2AwYEAggGAgLtChLcBAcHBAMBBAcAAQAuAAABFQMZAB4AACEjIiY1ES4BKwEiJj0BNDsBMhYVER4BOwEyFh0BFAYBCgE0SQIvIQIDBwoBNEgCMCECAwgHSzUCHiIwBgQVCko1/eEhMQYEFQQGAAEAPP/+AoEBlgA7AAATMzIWFQc2MzIXFjMyPgI3MzIWFxUUKwEiJj0BNCYjIgYVERQGKwEiJj0BNCYjIgYVERQrASImNRE0NkcVBAYBLDllKQICBBIXMB4GTFcBChUEBkk4KDwGBBQEB0g4KTwJFQQHBwGWBwQgKTwDExcUAVBQ6wsHBOs+OTYn/vsEBwcE6z45Nif++wsHBAGCBAcAAAABADQAAAHLAZcAHwAAEzMyHQE+ATMyFhcVFCsBIj0BLgEjIgYHFRQrASI1ETQ+FQocVjFUdgEKFQoBXkNAXgUKFQoBlwpHJSt2VMIKCsJDXldAzAoKAYMKAAAAAAIAKAABAb8BmAAHABEAABIyFhQGIiY0JCIGFBYzMjY1NJ+qdnaqdwEQiF9fRENfAZh2qnd3qk1fhmBfREMAAAACADT+gwHLAZgAHwArAAATIiY1ETQmNDY9ATQ2OwEyFh0BNjMyFhQGIyInERQGIxMyNjQmIyIGBxUeAT8EBgEBBgQVBAY9ZVV2dlVmPAYErEReX0NAXQUFXf6DBwQCNAEHBAgBtQQHBwRFUXeqdlD+PQQHAadeiF9YQBZAVwAAAAIAKP6BAncBmAAkADAAABMyFzU0OwEyHQEUFhQGFREUFjMyMzIWFRQGIyImJxEGIyImNDYXIgYUFjMyNjc1LgH0ZjwKFQoBAV5DAQEJCwoKVHcBPGZVd3dVRF9fREBdBQVdAZhQRQoKtgEHBAgB/otDYA0JCAt2VAEGUHeqdilfhmBXQBdAVwABADQAAgGsAZoAKQAAATIeAxUUBiMiJy4BIyIGBxUUBisBIiY9ATQmNDY9ATQ2OwEyFh0BNgEAHzonHg0QCQgEFUcqQF0FBgQVBAYBAQYEFQQGPAGYEhkcFQUIDQYgJ1dAywQHBwS1AQgEBwG4BAcHBEdQAAEALQAAAXEBmAAvAAABNCYjIgYVFBYXFh8BHgEVFAYiJjU0MzIWFRQWMzI2NTQnJi8BJjU0NjIWFRQjIiYBSUkxMkc5TRUMETAzX4ZfFAgNRzIxSDQWSRR0X4ZfEwgNASsdJygcHxwSBQMEDjcgLUBALQ4HBxwoJx0kEwgRBSFILUBALQ4HAAABAC4AAgHGAlYALQAAEzMyFh0BMzIWHQEUBisBFRQWFRQWMzIzMhYVFAYjIiYnNSMiJj0BNDY7ATU0Nu8VBAatBAcHBK0BXkIBAQkLCgpUdwGsBAcHBKwGAlYHBIcGBBUEBr0CCwNDYA0JCAt1VNAGBBUEBocEBwABADQAAAHLAZgAJQAAISMiJj0BDgEjIiYnNTQ2OwEyFh0BHgEzMjY3NTQ2OwEyFhURFAYBwRUEBhxWMVR2AQYEFQQGAV5DQF4FBgQVBAYGBwRHJSt2VMEEBwcEwUNeV0DLBAcHBP5+BAcAAAABAC3//gH4AZsAGwAAEyY1NDYzMhcTMB4BMzI3EzYzMhYVFAcDBiMiJy8CDwkKBbMDBAQGBbMFCgkPArENJSMOAX4EBAgNCv6eBQMIAWIJDAgEBP6hISEAAQA0//8CfAGZADUAACUOASsBLgE9ATQ2OwEyFh0BHgE7AT4BPQE0OwEyHQEUFhczMjY1Jz0BNDY7ATIWHQEUBgcjJgFYFzkSJkFbBgQUBAcCRzIZIjAKFQowIhkzSQEHBBQEB2U4Jj45IRkEX0LnBAcHBOsyRgIyIkcKCkciMgJJMwEB6QQGBgTsR1sCAwAAAQAuAAABxQGYAFkAAAEzMhYxHwEWFTAWFRQGFCIxDwEGHwEWHQEUFjEUByMPATAGKwEwJiImIycmDwEGIwYrASIvAiY9AjQ/ATYvASY9ATQyNT8BMjYxMzIWMTIfARY/ATQ7ATYBqQUBAgEPAgEBAQGmBQWmAgECAQ8BAgEDAwEBAacEB6UBAQQCAwIBAQ8CAqYFBaYCAQEQAQIDAQMCAqUFBqYBAgEBmAEBDwIBBAEBAgICpwUFpwIBBAECAgIQAQEBAagEBKcBAgECDwIBAgYBAqcFBacCAQgBAQIQAQECpgQEpgIBAAEANP6CAcwBmwA2AAATMzIWHQEUFhUUFjMyNjc1NDY7ATIWFREHDgEjIiYnNTQ2OwEyFh0BHgEzMjY1EQYjIiY9ATQ2PhUEBgFfQ0BdBQcEFAQHAQJ2U1R3AQYEFQQGAV9DRF49ZVV3BgGbBwS7AQYBRF9YQMsEBwcE/cAGUnN1VAYEBwcEBkNdX0MBBVF3VcMEBwABAC4AAgHFAZkAOwAAJSEiPQE0PwE2JisBIiY9ATQ2OwEyPwI2JiMhIj0BNDMhMh0BFA8BBhY7ATIdARQrASIPAQYzITIdARQBu/59CgSVAQIBLAQHBwRWBgl0CQICBP7BCgoBgwoDjwECASIKCkwGBooGBwFFCgIKFQQEkAEDBgQVBAYJcAgCBwoVCgoVBAOKAQIKFQoGhgYKFQoAAAAAAQAt/4EBYQOVAC8AADM1NCYjIiY0NjMyNjcRNDY3MzIVFCsBIgYHERQGIyIUMzIWFxEUFjsBMhUUKwEuAbkyJBcfHxcjMQJJMxoSEhciMwFLNA0NMkwBMiQXEhIaNEj8JDMfLB8xIwEKMkYCFBUyIP73MksYSC/++yQyFRQCSQABADz/6gBlAywACAAAEzIVERQiNRE0UBUpAywS/OISEgMeEgAB/7j/gQDsA5cANgAAAzQ2MzIWMx4BFREeATsBMhYUBisBIgYdARQGByMiNTQ7ATI2NRE+ATsBMjQrASImNREuASsBIkgTBgQNAjNJAjEjARceHhcBJDJINBoSEhckMgFMMgEMDAE0SwEzIhcSA4EGEAICRjL+9iMxHywfMyT8NEkCFBUyJAEFL0gYSzIBCSAyAAAAAQAyAbUBiwJLACsAABMiNTQ2MzIXHgIXMzI2NTQmNTQ2MzIXFhUUBiMiJy4CJyMiBhUUFhUUBkcVPCgqHwgRFhUFGCEEEAkMAwY9KC0cBxEXFQUXIgQPAb0sKjgjCSkWAiIXBg8BCAoJEBEpNyIJKBcCIhcIDgEIDAAAAAMAMAAAAJsDNQAHABEAGQAANxQiNRE0MhU2IiY0NjMyFhUUJzI1NCMiFRR6KSkCLCAfFxYfNQwMDRISEgJbEhJdICwfHxYXCg0MDA0AAAAAAgAwAAMBggIZACoAMAAAEzIdAR4BFRQPAQYvASYnET4CMzIfARYVFAYHFRQjIj0BLgE9ATQ2NzU0FQ4BFBYX+RQnTgMOCQoMHCkdKRMEAwQOA0wpFBVMaGhMPE9PPAIZEikEJg8DAw0ICgkSBf69BBIPAw0DAw8lBDMSEjMJc04BTnMJKhJmCFt6XAgAAAAAAgBC/+gAawMqAAcADwAAEzQyFREUIjURNDIVERQiNUIpKSkpAVQSEv6mEhIDHhIS/sESEgAAAAACADz+gAHUAxcAOQBGAAATPgEzMhYXFRQGKwEiJj0BLgEjIgYVETYzMhYVFAYVEQ4BIyImJzU0NjsBMhYdAR4BMjY1EQYjIiY1ITQmIgYHFRQWMzI2NzwDe05UdwEGBBUEBgFfQ0RfPWZXdQEEe0xUdwEGBBUEBgFfhl89ZVh0AW5fhl8BYENFXAECTF5tdVQGBAcHBAZDXV9D/vtQe1ACCAH+i2BsdlQGBAcHBAZDXl9EAQVRfFBEXl9CAURfYUEAAAAAAwAwAMcCfQMUAAcADwA0AAASMhYUBiImNCQiBhQWMjY0JzIWFRQPAQYjIi4BIyIGFRQWMzI+ATMyHwEWFRQGIyImPQE0Nt30rKz0rQGQ0pWV0pT+LFsDDwMDBRswH0RfX0QfMBsFAwMPAlcvVXd3AxSs9K2t9IOU0pWV0mIoEQMDDQISE19DRF8TEgINAgQQKXZVAVV2AAAEADwAxwKJAxQABwAPACwAOQAAEjIWFAYiJjQkIgYUFjI2NCUzMhYUBiMiJyYVFxYVFAYjIi8BFRQrASI1ETQ2FyMiBh0BHgEzMjY0Jun0rKz0rQGQ0pWV0pT+xUw1Sko1HxwFsAUPCAcFqAoVCh9gTAQGAjIiJDIyAxSs9K2t9IOU0pWV0n1KakoOAgO0BwUIDgWtowoKAYYUHikHBFAiLzJIMgAAAAACACoCFgEoAxUABwAPAAASMhYUBiImNDYiBhQWMjY0dWhLSmpKo0gyMkgyAxVLakpKaiIzSDIySAAAAAABADYAVQHKAesALwAAEzQ2MhYdARQWOwEyFhQGKwEiBh0BMzIWFAYjISImNDY7ATU0JisBIiY0NjsBMjY16w0RDAYEmQgKCgiZBAajCAkJCP6QCQkJCaMGBJkICgoImQQGAdkICgoImQQHDBANBgSDDBEMDBEMgwQGDRAMBwQAAAMAMP//AccDMwAmADAAOAAABCImNTQ+ATc+ASc1NDIdARQHDgEVFBYzMjY1NCcmNTQ2MzIXFhUUAyImNDYyFhUUBicyNTQjIhUUAVGqdxI+MRcfASlTI0BfRENfDAEPCQsED8wXHx8uHh8WDAwNAXdVH0BLFAorGpMSEpNUIw9MO0NgX0QjHAMDCA4LJCxVAlIgLB8fFhcfKQ0MDA0AAAABADb//wHMAxcAIwAANxwBFRQGKwEiJj0BNDcBNjU0IyEiPQE0MyEeARUUBwEOA18EBxQEBhMBWQEM/qkKCgFYFh4I/q0BCgMEUwshBRUOBwRJJB8CRgEEDQoVCgEfFhEN/cYBEgcSAAIAPP//AdQDFwAQACIAAAUiJjURNDYyFh0BBxEWDgIDIgYVER4BMzI2NRE3NCY1NCYBCFZ2d6p3AQEUK1Y3RF8CX0JDXwEBXwF4VAGAVXd3VQQB/n4TPEUxAu9gQ/56QVxfRAF7AQECAURfAAEANgACAc0BmQAhAAAlISI9ATQ3ATYmIyEiPQE0MyEyFh0BFAcBBjMhMhYdARQGAcL+fgoEAUkCAgT+wQoKAYIEBwT+tAYHAUQEBwcCChUEBAE+AgcKFQoGBBUDBP6+BgYEFQQGAAAAAQA0AAAB6AMXACYAADMiJjU0NwE2NTQjISImPQE0NjMhHgEVFAcBBhUUFjMhMhYdARQGI2oQJQkBfwIM/pMEBwcEAW4WHgr+gwMHBgFsBAcHBBsbDw8ChwQDDAYEFQQGAR4WEBD9ewYBBQcGBBUEBwAAAAANADz+gAMEAxQAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwAAEyERIRMRMxEzETMRMxEzEQEVMzUzFTM1MxUzNQUVMzUzFTM1MxUzNQURMxEzETMRMxEzETwCyP04CaYIqgXg/cOmCKoF4P3DpgiqBeD9w6YIqgXgAxT7bASO/owBdP6MAXT+jAF0/oPGxsbGxsbNxsbGxsbGy/6OAXL+jgFy/o4BcgACADABewPSA6QATQBZAAABMh4DMzI+AjczMhYXFRQrASImPQE0JiMiBhURFAYrASImPQE0JiMiBhURFAYrASImJzUjIiY9ATQ2OwE1NDsBMh0BMzIWHQE+ATMFFRQWFRQWFxE0JiMCGx8zHhULAgQSFzAeBktYAQoVBAZIOSg8BgQVBAZIOSg8BgQXVHcBjgQHBwSOChUKoA0XGCoi/tgBWkAMBwMSDRMTDRMYFAFRUOsLBwTrPjk2J/77BAcHBOs+OTYn/vsEB3VUpgYEFQQGhwoKhxQQBxYUKJMCCwNBXwMBMQcOAAAAAwA2AAABHgJTAAcADQA6AAASMhYUBiImNBY0IyIUMwczMhYVERQWOwEyFh0BFAYnIwciNDEjBiY9ATQ2OwEyNicRNCYrASImPQE0Nn8sICAsIEIMDAw4VwQHCgVFBAcIA18UAV4EBwcERAcKAQgGKgMIBwJTICwfHywiGBh5BwT+qwUJBwMVBAcBAQEBBwQVAwcIBgEpBQkGBBUEBgAAAAP/C/6BAK4CUgAHAA8APwAAEjIWFAYiJjQWIgYUFjI2NAc7AjIVMB0DBw4BIyImJzU0NjsBMhYdAR4BMzI2PQQ0JisCIiY9ATQ2YiwgICwfOgoHBwoHQ0MRAwsBAndSVHcBBgQVBAYBX0NDXwgGDhwDCAcCUiAsHx8sCgcKBwcKiQvByllcBlJ0dlQGBAcHBAZDXV9DXFnKlQUIBwQUBAcAAAAAAgA8AAECYwMZADUAVQAAEyEyFh0BFAYnISIGFRQdARQWOwEyFh0BFAYrAQ4BHQEeATsCMhYdARQGIyEiJicRNDU0NjMXMzIWHQEzMhYdARQGKwEVFBUUFjcyFgYjIiYnPQE0NsABCAMHBwP+8yMzCQXYAwcHA9gFCQIyI22fAwgIA/7zM0oCSzTSFAQHrAQHBwSsYEMLDAoNVHgBBwMZBwMVBAcBMyQBAfEECQYEFQQGAggF5CMvBwMVBAZHMwIbAQE1S8MIA7IGBBUEBpIHCURgARUUdlOl2wQHAAEALv//AngBmQBJAAATMh8FPwE2Mh8CPwQ2MzIVFDEGFQ8JBiMiLwUmIhUPBAYjIi8KNCc0MTRCEwQECBEiKj4/BR0FPz4pIxEIBAQTFAECBQgRIh4OCAMCAhARBlIXCwYDAQQDBgsXUgYSDwICBAcOHiIRCAUCAQGZCw4aNWuBe3wJCXx7gWs1Gg4LDAEDAQcNGzVqXC4XDAYHDaEsFwsFAgIFCxcsoQ0HBgwXLlxqNRsNBwEDAQwAAAAAAQA2//0CfwMaAC4AABMmNjMyFxMWMzI3Ez4BMzIWFxMWMzI3EzYzMhYHAw4BIyImJwMmIgcDDgEjIiYnNgEOCRECfQEKCwIxBB0UFR0EMQELCgJ8AxAKDgJ8Ax4UFR4CMQMUAjEDHhUUHgMDBAkMD/0mCQsBHhQZGxX+5QsJAtoPDAn9JxMbHBQBGg0N/uYUHBsTAAEAPAABAoQDGgBaAAATMzIWHQEcARUWFRYXFhceAjI+ATc2NzY3NjU8ATc1NDY7ATIWFRkBFAYrASImPQQ0JhUGBwYHBgcOASImJyYnJi8BLgEVBh0EFAYrASImNRkBNDZGFQQGAQEDBQoTRVxmW0YTCQUDAQEBBgQVAwcHAxUEBgUBBAUGCw0oa3dqKQwLBgUFAQMBBgQVAwcHAxkHAxICBgEcCiMoSUSG0XV10YZESSgjChwCDQQIAwcHA/5+/n8EBwcEvWYsFgIBAgYPFBMnI216em0jJhMVFAMBAgECFi1kvQQHBwQBgQGCAwcAAAEAAAAAAAEAAAKeAAIAAAAYAWAB/AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fv+1/6v/q/+r/6v/sP+r/5wAAAAAAAD/q/+//7//tf+w/6v/v/+w/5wAAAAAAAD/q//Y/87/zv/O/9j/yf/O/5wAAAAAAAD/zgAAAAD/zgAA/5L/tf9RAAD/0/+DAAD/5wAAAAD/5wAA/87/0/+1AAD/5//JAAAAAAAAAAAAAAAAAAAAAAAA/78AAAAAAAAAAP/nAAAAAP/d/9P/0/+//84AAP/OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAA/87/0/+1AAAAAP+/AAD/3QAAAAD/3QAA/8T/3f+1AAD/5//OAAD/zv/nAAAAAAAAAAAAAAAA/5wAAAAAAAD/5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/yf+DABEATAFIABAAoAEAABAAoAAQAKAAoABYAKAAWAAQABAAEAAQABAAEAAQABAAEACgAKAAEAAoAKAAEAAQABAAEABwABAAEACgAFgAEAAQABAAKACgAEAAEAAQAEAAEAAQABAAEAAQABAAEADQALgA0AAQALgAKADQAOgBAAAQABAAiADoAOgAuAC4ANAA0AC4ATAA0AEYANAAEADQAA8ATwASAAAAEgAAABQAAAAAABQAFgAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAgACAA4AAgAAAAQABAAAAAAABgAGAAIABgAAAAYAAgAQAAgADAAIAAoAAAAKAAAAAAAOAK4AAQAAAAAAAACwAWIAAQAAAAAAAQANAi8AAQAAAAAAAgAGAksAAQAAAAAAAwAmAqAAAQAAAAAABAAOAuUAAQAAAAAABQAQAxYAAQAAAAAABgANA0MAAwABBAkAAAFgAAAAAwABBAkAAQAaAhMAAwABBAkAAgAMAj0AAwABBAkAAwBMAlIAAwABBAkABAAcAscAAwABBAkABQAgAvQAAwABBAkABgAaAycAQwByAGUAYQB0AGUAZAAgAGIAeQAgAE4AYQB0AGgAYQBuACAARQBhAGQAeQAsACAAdQBzAGkAbgBnACAASQBuAGsAcwBjAGEAcABlACAAKABoAHQAdABwADoALwAvAHcAdwB3AC4AaQBuAGsAcwBjAGEAcABlAC4AbwByAGcAKQAgAGEAbgBkACAARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgACgAaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGYAbwByAGcAZQAuAHMAZgAuAG4AZQB0ACkALgAgACAAVABoAGkAcwAgAGYAbwBuAHQAIABoAGEAcwAgAGIAZQBlAG4AIAByAGUAbABlAGEAcwBlAGQAIABpAG4AdABvACAAdABoAGUAIABwAHUAYgBsAGkAYwAgAGQAbwBtAGEAaQBuACAAYgB5ACAAdABoAGUAIABhAHUAdABoAG8AcgAuAABDcmVhdGVkIGJ5IE5hdGhhbiBFYWR5LCB1c2luZyBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcpIGFuZCBGb250Rm9yZ2UgMi4wIChodHRwOi8vZm9udGZvcmdlLnNmLm5ldCkuICBUaGlzIGZvbnQgaGFzIGJlZW4gcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbiBieSB0aGUgYXV0aG9yLgAAQgBsAG8AbwBtAGkAbgBnAEcAcgBvAHYAZQAAQmxvb21pbmdHcm92ZQAATQBlAGQAaQB1AG0AAE1lZGl1bQAARgBvAG4AdABGAG8AcgBnAGUAIAA6ACAAQgBsAG8AbwBtAGkAbgBnACAARwByAG8AdgBlACAAOgAgADkALQAxADAALQAyADAAMAA5AABGb250Rm9yZ2UgOiBCbG9vbWluZyBHcm92ZSA6IDktMTAtMjAwOQAAQgBsAG8AbwBtAGkAbgBnACAARwByAG8AdgBlAABCbG9vbWluZyBHcm92ZQAAVgBlAHIAcwBpAG8AbgAgADAAMAA2AC4AMAAwADAAIAAAVmVyc2lvbiAwMDYuMDAwIAAAQgBsAG8AbwBtAGkAbgBnAEcAcgBvAHYAZQAAQmxvb21pbmdHcm92ZQAAAAIAAAAAAAD/nAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAQIAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAowCEAOgAhgCLAIoAgwCTAKIBAwEEAQUBBgEHAIwBCAEJAQoBCwEMAQ0HdW5pMDAwMA91bmNyb3NzZWRfc2V2ZW4OdW5jcm9zc2VkX3plcm8LdW5jcm9zc2VkX3oLdW5jcm9zc2VkX1oVZ2x5cGhfZGVzaWduX3RlbXBsYXRlD2lfYWx0ZXJuYXRlLjI2Mg9qX2FsdGVybmF0ZS4yNjMGRXQuMjY0D3dfYWx0ZXJuYXRlLjI2NQ9XX2FsdGVybmF0ZS4yNjYPTV9hbHRlcm5hdGUuMjY3AAAAAf//AAIAAAABAAAAAMbCNwkAAAAAxr0CEAAAAADG2KjA\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/busted_font_urls/config.rb",
    "content": "# Require any additional compass plugins here.\nproject_type = :stand_alone\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nfonts_dir = \"fonts\"\noutput_style = :compact\n# To enable relative image paths using the images_url() function:\n# http_images_path = :relative\nhttp_fonts_path = \"/fonts\"\nline_comments = false\n\nasset_cache_buster do |path, file|\n  pathname = Pathname.new(path)\n  dirname = pathname.dirname\n  basename = pathname.basename(pathname.extname)\n  extname = pathname.extname\n\n  case pathname.basename(pathname.extname).to_s\n  when \"grid\"\n    new_path = \"#{dirname}/#{basename}-BUSTED#{extname}\"\n    {:path => new_path, :query => nil}\n  when \"feed\"\n    \"query_string\"\n  when \"dk\"\n    {:query => \"query_string\"}\n  end\nend\n\n\nasset_host do |path|\n  \"http://assets%d.example.com\" % (path.size % 4)\nend\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/busted_font_urls/css/screen.css",
    "content": ".showgrid { font-family: url('http://assets3.example.com/fonts/grid-BUSTED.ttf'); }\n\n.no-buster { font-family: url('http://assets3.example.com/fonts/grid.ttf'); }\n\n.buster-by-default { font-family: url('http://assets3.example.com/fonts/grid-BUSTED.ttf'); }\n\n.feed { font-family: url('http://assets3.example.com/fonts/feed.ttf?query_string'); }\n\n.dk { font-family: url('http://assets1.example.com/fonts/sub/dk.ttf?query_string'); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/busted_font_urls/sass/screen.sass",
    "content": ".showgrid\n  font-family: font-url(\"grid.ttf\", $only-path: false, $cache-buster: true)\n\n.no-buster\n  font-family: font-url(\"grid.ttf\", $only-path: false, $cache-buster: false)\n\n.buster-by-default\n  font-family: font-url(\"grid.ttf\")\n\n.feed\n  font-family: font-url(\"feed.ttf\", $only-path: false, $cache-buster: true)\n\n.dk\n  font-family: font-url(\"sub/dk.ttf\", $only-path: false, $cache-buster: true)\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/busted_image_urls/config.rb",
    "content": "# Require any additional compass plugins here.\nproject_type = :stand_alone\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"images\"\noutput_style = :compact\n# To enable relative image paths using the images_url() function:\n# http_images_path = :relative\nhttp_images_path = \"/images\"\nline_comments = false\n\nasset_cache_buster do |path, file|\n  pathname = Pathname.new(path)\n  \n  case pathname.basename(pathname.extname).to_s\n  when \"grid\"\n    new_path = \"%s/%s-BUSTED%s\" % [pathname.dirname, pathname.basename(pathname.extname), pathname.extname]\n    {:path => new_path, :query => nil}\n  when \"feed\"\n    \"query_string\"\n  when \"dk\"\n    {:query => \"query_string\"}\n  end\nend\n\n\nasset_host do |path|\n  \"http://assets%d.example.com\" % (path.size % 4)\nend\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/busted_image_urls/css/screen.css",
    "content": ".showgrid { background-image: url('http://assets0.example.com/images/grid-BUSTED.png'); }\n\n.inlinegrid { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAUEAYAAACv1qP4AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAZ0lEQVRYw+3QwQ2AIBAFUTEUwI3+uzN7gDscsIgxEuO8An52J11X73OudfxMraXkzHfO3Y98nQEhA0IGhAwIGRAyIGRAyICQASEDQgaEDAgZEDIgZEDIgJABoZzSGK3tPuN9ERFP7Nw4fg+c5g8V1wAAAABJRU5ErkJggg=='); }\n\n.no-buster { background-image: url('http://assets0.example.com/images/grid.png'); }\n\n.feed { background-image: url('http://assets0.example.com/images/feed.png?query_string'); }\n\n.dk { background-image: url('http://assets0.example.com/images/flags/dk.png?query_string'); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/busted_image_urls/sass/screen.sass",
    "content": ".showgrid\n  background-image: image-url(\"grid.png\")\n\n.inlinegrid\n  background-image: inline-image(\"grid.png\")\n\n.no-buster\n  background-image: image-url(\"grid.png\", $only-path: false, $cache-buster: false)\n\n.feed\n  background-image: image-url(\"feed.png\")\n\n.dk\n  background-image: image-url(\"flags/dk.png\")"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/config.rb",
    "content": "# Require any additional compass plugins here.\nrequire 'true'\nrequire 'compass/import-once/activate'\nproject_type = :stand_alone\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"images\"\noutput_style = :nested\n# To enable relative image paths using the images_url() function:\n# http_images_path = :relative\nhttp_images_path = \"/images\"\nline_comments = false\n\nasset_cache_buster do |path, file|\n  \"busted=true\"\nend\n\ndisable_warnings = true\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/animation-with-legacy-ie.css",
    "content": "@-moz-keyframes test {\n  0%, 100% {\n    opacity: 1; }\n\n  50% {\n    opacity: 0; } }\n@-webkit-keyframes test {\n  0%, 100% {\n    opacity: 1; }\n\n  50% {\n    opacity: 0; } }\n@keyframes test {\n  0%, 100% {\n    opacity: 1; }\n\n  50% {\n    opacity: 0; } }\n.animation {\n  -moz-animation: test;\n  -webkit-animation: test;\n  animation: test; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/animation.css",
    "content": "@-moz-keyframes test {\n  0%, 100% {\n    background-color: red; }\n\n  50% {\n    background-color: blue; } }\n@-webkit-keyframes test {\n  0%, 100% {\n    background-color: red; }\n\n  50% {\n    background-color: blue; } }\n@keyframes test {\n  0%, 100% {\n    background-color: red; }\n\n  50% {\n    background-color: blue; } }\n.animation {\n  -moz-animation: test;\n  -webkit-animation: test;\n  animation: test; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/appearance.css",
    "content": ".searchfield {\n  -moz-appearance: searchfield;\n  -webkit-appearance: searchfield; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/background-clip.css",
    "content": ".background-clip {\n  -moz-background-clip: border;\n  -o-background-clip: border-box;\n  -webkit-background-clip: border;\n  background-clip: border-box; }\n\n.background-clip-multiple {\n  -moz-background-clip: border, padding, content;\n  -o-background-clip: border-box, padding-box, content-box;\n  -webkit-background-clip: border, padding, content;\n  background-clip: border-box, padding-box, content-box; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/background-origin.css",
    "content": ".background-origin {\n  -moz-background-origin: border;\n  -o-background-origin: border-box;\n  -webkit-background-origin: border;\n  background-origin: border-box; }\n\n.background-origin-multiple {\n  -moz-background-origin: border, padding, content;\n  -o-background-origin: border-box, padding-box, content-box;\n  -webkit-background-origin: border, padding, content;\n  background-origin: border-box, padding-box, content-box; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/background-size.css",
    "content": ".background-size-default {\n  -moz-background-size: 100% auto;\n  -o-background-size: 100% auto;\n  -webkit-background-size: 100% auto;\n  background-size: 100% auto; }\n\n.background-size-single {\n  -moz-background-size: 50% 25%;\n  -o-background-size: 50% 25%;\n  -webkit-background-size: 50% 25%;\n  background-size: 50% 25%; }\n\n.background-size-multiple {\n  -moz-background-size: 4em 3em, 100% auto, 50%;\n  -o-background-size: 4em 3em, 100% auto, 50%;\n  -webkit-background-size: 4em 3em, 100% auto, 50%;\n  background-size: 4em 3em, 100% auto, 50%; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/border_radius.css",
    "content": ".simple {\n  -moz-border-radius: 4px / 4px;\n  -webkit-border-radius: 4px 4px;\n  border-radius: 4px / 4px; }\n\n.compound {\n  -moz-border-radius: 2px 5px / 3px 6px;\n  -webkit-border-radius: 2px 3px;\n  border-radius: 2px 5px / 3px 6px; }\n\n.crazy {\n  -moz-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px;\n  -webkit-border-radius: 1px 2px;\n  border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/box-sizing.css",
    "content": ".div {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.div {\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box; }\n\n.div {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/box.css",
    "content": ".hbox {\n  display: -webkit-box;\n  display: -moz-box;\n  display: -ms-box;\n  display: box;\n  -webkit-box-orient: horizontal;\n  -moz-box-orient: horizontal;\n  -ms-box-orient: horizontal;\n  box-orient: horizontal;\n  -webkit-box-align: stretch;\n  -moz-box-align: stretch;\n  -ms-box-align: stretch;\n  box-align: stretch; }\n  .hbox > * {\n    -webkit-box-flex: 0;\n    -moz-box-flex: 0;\n    -ms-box-flex: 0;\n    box-flex: 0; }\n\n.vbox {\n  display: -webkit-box;\n  display: -moz-box;\n  display: -ms-box;\n  display: box;\n  -webkit-box-orient: vertical;\n  -moz-box-orient: vertical;\n  -ms-box-orient: vertical;\n  box-orient: vertical;\n  -webkit-box-align: stretch;\n  -moz-box-align: stretch;\n  -ms-box-align: stretch;\n  box-align: stretch; }\n  .vbox > * {\n    -webkit-box-flex: 0;\n    -moz-box-flex: 0;\n    -ms-box-flex: 0;\n    box-flex: 0; }\n\n.spacer {\n  -webkit-box-flex: 1;\n  -moz-box-flex: 1;\n  -ms-box-flex: 1;\n  box-flex: 1; }\n\n.reverse {\n  -webkit-box-direction: reverse;\n  -moz-box-direction: reverse;\n  -ms-box-direction: reverse;\n  box-direction: reverse; }\n\n.box-flex-0 {\n  -webkit-box-flex: 0;\n  -moz-box-flex: 0;\n  -ms-box-flex: 0;\n  box-flex: 0; }\n\n.box-flex-1 {\n  -webkit-box-flex: 1;\n  -moz-box-flex: 1;\n  -ms-box-flex: 1;\n  box-flex: 1; }\n\n.box-flex-2 {\n  -webkit-box-flex: 2;\n  -moz-box-flex: 2;\n  -ms-box-flex: 2;\n  box-flex: 2; }\n\n.box-flex-group-0 {\n  -webkit-box-flex-group: 0;\n  -moz-box-flex-group: 0;\n  -ms-box-flex-group: 0;\n  box-flex-group: 0; }\n\n.box-flex-group-1 {\n  -webkit-box-flex-group: 1;\n  -moz-box-flex-group: 1;\n  -ms-box-flex-group: 1;\n  box-flex-group: 1; }\n\n.box-flex-group-2 {\n  -webkit-box-flex-group: 2;\n  -moz-box-flex-group: 2;\n  -ms-box-flex-group: 2;\n  box-flex-group: 2; }\n\n.start {\n  -webkit-box-pack: start;\n  -moz-box-pack: start;\n  -ms-box-pack: start;\n  box-pack: start; }\n\n.end {\n  -webkit-box-pack: end;\n  -moz-box-pack: end;\n  -ms-box-pack: end;\n  box-pack: end; }\n\n.center {\n  -webkit-box-pack: center;\n  -moz-box-pack: center;\n  -ms-box-pack: center;\n  box-pack: center; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/box_shadow.css",
    "content": ".no-box-shadow {\n  -moz-box-shadow: none;\n  -webkit-box-shadow: none;\n  box-shadow: none; }\n\n.box-shadow {\n  -moz-box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222;\n  -webkit-box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222;\n  box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222; }\n\n.single-box-shadow {\n  -moz-box-shadow: 0px 5px #333333;\n  -webkit-box-shadow: 0px 5px #333333;\n  box-shadow: 0px 5px #333333; }\n\n.multiple-box-shadows {\n  -moz-box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222;\n  -webkit-box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222;\n  box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222; }\n\n.legacy-single-box-shadow {\n  -moz-box-shadow: 0px 5px blue;\n  -webkit-box-shadow: 0px 5px blue;\n  box-shadow: 0px 5px blue; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/brightness.css",
    "content": ".black-is-0-percent {\n  brightness: 0%; }\n\n.white-is-100-percent {\n  brightness: 100%; }\n\n.green-is-58-point-7-percent {\n  brightness: 58.7%; }\n\n.blue-is-11-point-4-percent {\n  brightness: 11.4%; }\n\n.red-is-29-point-9-percent {\n  brightness: 29.9%; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/browser-support.css",
    "content": ".android {\n  versions: \"2.1\", \"2.2\", \"2.3\", \"3\", \"4\", \"4.1\", \"4.2-4.3\", \"4.4\", \"4.4.3\";\n  background-img-opts: -webkit;\n  background-img-opts-unprefixed-at: \"3\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"4.4\";\n  border-radius: -webkit;\n  border-radius-unprefixed-at: \"2.2\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"4\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"4.4\";\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"4.4\";\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"4.4\";\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"4\";\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n\n.android-chrome {\n  versions: \"36\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n\n.android-firefox {\n  versions: \"31\";\n  css-appearance: -moz;\n  css-hyphens: -moz;\n  css-placeholder: -moz;\n  css3-tabsize: -moz;\n  font-feature: -moz;\n  intrinsic-width: -moz;\n  multicolumn: -moz;\n  text-decoration: -moz;\n  text-size-adjust: -moz;\n  user-select-none: -moz; }\n\n.blackberry {\n  versions: \"7\", \"10\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"10\";\n  calc: -webkit;\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"10\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-repeating-gradients: -webkit;\n  css-transitions: -webkit;\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"10\";\n  flexbox: -webkit;\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n\n.chrome {\n  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\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"16\";\n  border-radius: -webkit;\n  border-radius-unprefixed-at: \"5\";\n  calc: -webkit;\n  calc-unprefixed-at: \"26\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"10\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"26\";\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-regions: -webkit;\n  css-regions-unprefixed-at: \"19\";\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"26\";\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"26\";\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"10\";\n  flexbox: -webkit;\n  flexbox-unprefixed-at: \"29\";\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms2d-unprefixed-at: \"36\";\n  transforms3d: -webkit;\n  transforms3d-unprefixed-at: \"36\";\n  user-select-none: -webkit; }\n\n.firefox {\n  versions: \"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\";\n  background-img-opts: -moz;\n  background-img-opts-unprefixed-at: \"4\";\n  border-image: -moz;\n  border-image-unprefixed-at: \"15\";\n  border-radius: -moz;\n  border-radius-unprefixed-at: \"4\";\n  calc: -moz;\n  calc-unprefixed-at: \"16\";\n  css-animation: -moz;\n  css-animation-unprefixed-at: \"16\";\n  css-appearance: -moz;\n  css-boxshadow: -moz;\n  css-boxshadow-unprefixed-at: \"4\";\n  css-gradients: -moz;\n  css-gradients-unprefixed-at: \"16\";\n  css-hyphens: -moz;\n  css-placeholder: -moz;\n  css-repeating-gradients: -moz;\n  css-repeating-gradients-unprefixed-at: \"16\";\n  css-resize: prefix-no-longer-needed;\n  css-resize-unprefixed-at: \"5\";\n  css-selection: -moz;\n  css-transitions: -moz;\n  css-transitions-unprefixed-at: \"16\";\n  css3-boxsizing: -moz;\n  css3-boxsizing-unprefixed-at: \"29\";\n  css3-tabsize: -moz;\n  font-feature: -moz;\n  font-feature-unprefixed-at: \"32\";\n  inline-block: prefix-no-longer-needed;\n  inline-block-unprefixed-at: \"3\";\n  intrinsic-width: -moz;\n  multicolumn: -moz;\n  text-decoration: -moz;\n  transforms2d: -moz;\n  transforms2d-unprefixed-at: \"16\";\n  transforms3d: -moz;\n  transforms3d-unprefixed-at: \"16\";\n  user-select-none: -moz; }\n\n.ie {\n  versions: \"5.5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\";\n  css-grid: -ms;\n  css-hyphens: -ms;\n  css-placeholder: -ms;\n  css-regions: -ms;\n  transforms2d: -ms;\n  transforms2d-unprefixed-at: \"10\";\n  user-select-none: -ms; }\n\n.ie-mobile {\n  versions: \"10\";\n  css-grid: -ms;\n  css-placeholder: -ms;\n  css-regions: -ms;\n  text-size-adjust: -ms;\n  user-select-none: -ms; }\n\n.ios-safari {\n  versions: \"3.2\", \"4.0-4.1\", \"4.2-4.3\", \"5.0-5.1\", \"6.0-6.1\", \"7.0-7.1\", \"8\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"6.0-6.1\";\n  border-radius: -webkit;\n  border-radius-unprefixed-at: \"4.0-4.1\";\n  calc: -webkit;\n  calc-unprefixed-at: \"7.0-7.1\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"5.0-5.1\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"7.0-7.1\";\n  css-hyphens: -webkit;\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-regions: -webkit;\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"7.0-7.1\";\n  css-shapes: prefix-no-longer-needed;\n  css-sticky: -webkit;\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"7.0-7.1\";\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"5.0-5.1\";\n  flexbox: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-size-adjust: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n\n.opera {\n  versions: \"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\";\n  background-img-opts: -webkit;\n  background-img-opts-unprefixed-at: \"10.5\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"15\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"12.1\";\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"12.1\";\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"12.1\";\n  css3-tabsize: prefix-no-longer-needed;\n  css3-tabsize-unprefixed-at: \"15\";\n  flexbox: -webkit;\n  flexbox-unprefixed-at: \"17\";\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  object-fit: prefix-no-longer-needed;\n  object-fit-unprefixed-at: \"15\";\n  text-overflow: prefix-no-longer-needed;\n  text-overflow-unprefixed-at: \"11\";\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms2d-unprefixed-at: \"23\";\n  transforms3d: -webkit;\n  transforms3d-unprefixed-at: \"23\";\n  user-select-none: -webkit; }\n\n.opera-mini {\n  versions: \"5.0-7.0\";\n  text-overflow: -o; }\n\n.opera-mobile {\n  versions: \"10\", \"11.5\", \"12\", \"12.1\", \"22\";\n  border-image: -o;\n  border-image-unprefixed-at: \"22\";\n  css-animation: prefix-no-longer-needed;\n  css-appearance: prefix-no-longer-needed;\n  css-canvas: prefix-no-longer-needed;\n  css-filters: prefix-no-longer-needed;\n  css-gradients: prefix-no-longer-needed;\n  css-gradients-unprefixed-at: \"12.1\";\n  css-masks: prefix-no-longer-needed;\n  css-placeholder: prefix-no-longer-needed;\n  css-reflections: prefix-no-longer-needed;\n  css-repeating-gradients: prefix-no-longer-needed;\n  css-repeating-gradients-unprefixed-at: \"12.1\";\n  css-transitions: -o;\n  css-transitions-unprefixed-at: \"12.1\";\n  css3-tabsize: -o;\n  css3-tabsize-unprefixed-at: \"22\";\n  font-feature: prefix-no-longer-needed;\n  intrinsic-width: prefix-no-longer-needed;\n  multicolumn: prefix-no-longer-needed;\n  object-fit: -o;\n  object-fit-unprefixed-at: \"22\";\n  text-overflow: -o;\n  text-overflow-unprefixed-at: \"12.1\";\n  text-stroke: prefix-no-longer-needed;\n  transforms2d: prefix-no-longer-needed;\n  transforms3d: prefix-no-longer-needed;\n  user-select-none: prefix-no-longer-needed; }\n\n.safari {\n  versions: \"3.1\", \"3.2\", \"4\", \"5\", \"5.1\", \"6\", \"6.1\", \"7\", \"8\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"6\";\n  border-radius: -webkit;\n  border-radius-unprefixed-at: \"5\";\n  calc: -webkit;\n  calc-unprefixed-at: \"6.1\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"5.1\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"6.1\";\n  css-hyphens: -webkit;\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-regions: -webkit;\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"6.1\";\n  css-shapes: prefix-no-longer-needed;\n  css-sticky: -webkit;\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"6.1\";\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"5.1\";\n  flexbox: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/color.css",
    "content": ".handles-null {\n  content: \"there should be no property below this one\"; }\n\n.contrasts-light {\n  background-color: #eeeeee;\n  color: black; }\n\n.contrasts-dark {\n  background-color: #222222;\n  color: white; }\n\n.contrasts-light-with-contrast-color-override {\n  background-color: #eeeeee;\n  color: red; }\n\n.contrasts-dark-with-contrast-color-override {\n  background-color: #222222;\n  color: yellow; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/columns.css",
    "content": ".columns {\n  -moz-columns: 20em 5;\n  -webkit-columns: 20em 5;\n  columns: 20em 5; }\n\n.column-count {\n  -moz-column-count: 5;\n  -webkit-column-count: 5;\n  column-count: 5; }\n\n.column-gap {\n  -moz-column-gap: 10px;\n  -webkit-column-gap: 10px;\n  column-gap: 10px; }\n\n.column-width {\n  -moz-column-width: 90px;\n  -webkit-column-width: 90px;\n  column-width: 90px; }\n\n.column-span {\n  -moz-column-span: all;\n  -webkit-column-span: all;\n  column-span: all; }\n\n.column-rule-width {\n  -moz-rule-width: 1px;\n  -webkit-rule-width: 1px;\n  rule-width: 1px; }\n\n.column-rule-style {\n  -moz-rule-style: dotted;\n  -webkit-rule-style: dotted;\n  rule-style: dotted; }\n\n.column-rule-color {\n  -moz-rule-color: blue;\n  -webkit-rule-color: blue;\n  rule-color: blue; }\n\n.column-rule {\n  -moz-column-rule: 1px solid blue;\n  -webkit-column-rule: 1px solid blue;\n  column-rule: 1px solid blue; }\n\n.column-rule-spaced {\n  -moz-column-rule: 1px solid blue;\n  -webkit-column-rule: 1px solid blue;\n  column-rule: 1px solid blue; }\n\n.column-break-before {\n  -moz-page-break-before: always;\n  -webkit-column-break-before: always;\n  break-before: always; }\n\n.column-break-after {\n  -moz-page-break-after: always;\n  -webkit-column-break-after: always;\n  break-after: always; }\n\n.column-break-inside {\n  -moz-page-break-inside: auto;\n  -webkit-column-break-inside: auto;\n  break-inside: auto; }\n\n.column-count {\n  -moz-column-count: 5;\n  -webkit-column-count: 5;\n  column-count: 5; }\n\n.column-gap {\n  -moz-column-gap: 10px;\n  -webkit-column-gap: 10px;\n  column-gap: 10px; }\n\n.column-width {\n  -moz-column-width: 90px;\n  -webkit-column-width: 90px;\n  column-width: 90px; }\n\n.column-rule-width {\n  -moz-rule-width: 1px;\n  -webkit-rule-width: 1px;\n  rule-width: 1px; }\n\n.column-rule-style {\n  -moz-rule-style: dotted;\n  -webkit-rule-style: dotted;\n  rule-style: dotted; }\n\n.column-rule-color {\n  -moz-rule-color: blue;\n  -webkit-rule-color: blue;\n  rule-color: blue; }\n\n.column-rule {\n  -moz-column-rule: 1px solid blue;\n  -webkit-column-rule: 1px solid blue;\n  column-rule: 1px solid blue; }\n\n.column-rule-spaced {\n  -moz-column-rule: 1px solid blue;\n  -webkit-column-rule: 1px solid blue;\n  column-rule: 1px solid blue; }\n\n.column-break-before {\n  -moz-page-break-before: always;\n  -webkit-column-break-before: always;\n  break-before: always; }\n\n.column-break-after {\n  -moz-page-break-after: always;\n  -webkit-column-break-after: always;\n  break-after: always; }\n\n.column-break-inside {\n  -moz-page-break-inside: auto;\n  -webkit-column-break-inside: auto;\n  break-inside: auto; }\n\n.column-break-before-shortcut {\n  -moz-page-break-before: always;\n  -webkit-column-break-before: always;\n  break-before: always; }\n\n.column-break-after-shortcut {\n  -moz-page-break-after: always;\n  -webkit-column-break-after: always;\n  break-after: always; }\n\n.column-break-inside-shortcut {\n  -moz-page-break-inside: auto;\n  -webkit-column-break-inside: auto;\n  break-inside: auto; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/filters.css",
    "content": ".blur {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: blur(5px);\n  filter: blur(5px); }\n\n.brightness {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: brightness(0.2);\n  filter: brightness(0.2); }\n\n.hue-rotate {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: hue-rotate(20deg);\n  filter: hue-rotate(20deg); }\n\n.contrast {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: contrast(150%);\n  filter: contrast(150%); }\n\n.grayscale {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: grayscale(150%);\n  filter: grayscale(150%); }\n\n.sepia {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: sepia(150%);\n  filter: sepia(150%); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/flexbox.css",
    "content": ".display {\n  display: -webkit-flex;\n  display: flex; }\n\n.flex-direction {\n  -webkit-flex-direction: row-reverse;\n  flex-direction: row-reverse; }\n\n.flex-wrap {\n  -webkit-flex-wrap: wrap-reverse;\n  flex-wrap: wrap-reverse; }\n\n.flex-flow {\n  -webkit-flex-flow: row-reverse wrap-reverse;\n  flex-flow: row-reverse wrap-reverse; }\n\n.order {\n  -webkit-order: 1;\n  order: 1; }\n\n.flex {\n  -webkit-flex: 1 0 auto;\n  flex: 1 0 auto; }\n\n.flex-grow {\n  -webkit-flex-grow: 1;\n  flex-grow: 1; }\n\n.flex-shrink {\n  -webkit-flex-shrink: 1;\n  flex-shrink: 1; }\n\n.flex-basis {\n  -webkit-flex-basis: auto;\n  flex-basis: auto; }\n\n.justify-content {\n  -webkit-justify-content: flex-start;\n  justify-content: flex-start; }\n\n.align-items {\n  -webkit-align-items: flex-start;\n  align-items: flex-start; }\n\n.align-self {\n  -webkit-align-self: flex-start;\n  align-self: flex-start; }\n\n.align-content {\n  -webkit-align-content: flex-start;\n  align-content: flex-start; }\n\n.flexbox {\n  display: -webkit-flex;\n  -webkit-flex-direction: row-reverse;\n  -webkit-flex-wrap: wrap-reverse;\n  -webkit-flex-flow: row-reverse wrap-reverse;\n  -webkit-order: 1;\n  -webkit-flex: 1 0 auto;\n  -webkit-flex-grow: 1;\n  -webkit-flex-shrink: 0;\n  -webkit-flex-basis: auto;\n  -webkit-justify-content: flex-start;\n  -webkit-align-items: flex-start;\n  -webkit-align-self: flex-start;\n  -webkit-align-content: flex-start;\n  display: flex;\n  flex-direction: row-reverse;\n  flex-wrap: wrap-reverse;\n  flex-flow: row-reverse wrap-reverse;\n  order: 1;\n  flex: 1 0 auto;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: auto;\n  justify-content: flex-start;\n  align-items: flex-start;\n  align-self: flex-start;\n  align-content: flex-start; }\n\n.flexbox-2 {\n  display: -ms-flexbox;\n  -ms-flex-flow: row-reverse;\n  -ms-flex-order: 1; }\n\n.flexbox-1 {\n  display: -moz-box;\n  -moz-box-orient: vertical;\n  -moz-box-ordinal-group: 1;\n  -moz-box-flex: 1;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-box-ordinal-group: 1;\n  -webkit-box-flex: 1; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/fonts.css",
    "content": "@font-face {\n  font-family: \"font1\";\n  src: url('/fonts/font1.eot?busted=true');\n  src: url('/fonts/font1.eot?&busted=true#iefix') format('embedded-opentype'), url('/fonts/font1.woff?busted=true') format('woff'); }\n@font-face {\n  font-family: \"Issue1491\";\n  src: url('/fonts/font1.eot?busted=true');\n  src: url('/fonts/font1.eot?&busted=true#iefix') format(\"embedded-opentype\"), url('/fonts/font1.woff?busted=true') format(\"woff\"); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/force-wrap.css",
    "content": "pre {\n  white-space: pre;\n  white-space: pre-wrap;\n  white-space: pre-line;\n  white-space: -pre-wrap;\n  white-space: -o-pre-wrap;\n  white-space: -moz-pre-wrap;\n  white-space: -hp-pre-wrap;\n  word-wrap: break-word; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/gradients.css",
    "content": ".bg-shortcut-simple-image {\n  background: white url(\"foo.png\"); }\n\n.bg-shortcut-linear-gradient {\n  background: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background: white -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa));\n  background: white -moz-linear-gradient(top left, #dddddd, #aaaaaa);\n  background: white -webkit-linear-gradient(top left, #dddddd, #aaaaaa);\n  background: white linear-gradient(to bottom right, #dddddd, #aaaaaa); }\n\n.bg-shortcut-radial-gradient {\n  background: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background: white -moz-radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background: white -webkit-radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background: white radial-gradient(center center, #dddddd, #aaaaaa 100px); }\n\n.bg-linear-gradient-angle-svg {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDBmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -moz-linear-gradient(135deg, #0000ff, #000000);\n  background-image: -webkit-linear-gradient(135deg, #0000ff, #000000);\n  background-image: linear-gradient(-45deg, #0000ff, #000000); }\n\n.bg-linear-gradient-angle2-svg {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDBmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #0000ff), color-stop(100%, #000000));\n  background-image: -moz-linear-gradient(top left, #0000ff, #000000);\n  background-image: -webkit-linear-gradient(top left, #0000ff, #000000);\n  background-image: linear-gradient(to bottom right, #0000ff, #000000); }\n\n.bg-all-gradient-types-with-simplification {\n  background: #ffcc00;\n  background: url('/images/4x6.png?busted=true'), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), #ffcc00;\n  background: url('/images/4x6.png?busted=true'), -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa)), radial-gradient(center center, #dddddd, #aaaaaa 100px), #ffcc00;\n  background: url('/images/4x6.png?busted=true'), -moz-linear-gradient(top left, #dddddd, #aaaaaa), -moz-radial-gradient(center center, #dddddd, #aaaaaa 100px), #ffcc00;\n  background: url('/images/4x6.png?busted=true'), -webkit-linear-gradient(top left, #dddddd, #aaaaaa), -webkit-radial-gradient(center center, #dddddd, #aaaaaa 100px), #ffcc00;\n  background: url('/images/4x6.png?busted=true'), linear-gradient(to bottom right, #dddddd, #aaaaaa), radial-gradient(center center, #dddddd, #aaaaaa 100px), #ffcc00; }\n\n.bg-simple-image {\n  background-image: url(\"foo.png\"); }\n\n.bg-linear-gradient {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(top left, #dddddd, #aaaaaa);\n  background-image: -webkit-linear-gradient(top left, #dddddd, #aaaaaa);\n  background-image: linear-gradient(to bottom right, #dddddd, #aaaaaa); }\n\n.bg-linear-gradient-pixel-stop-from-top {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiNkZGRkZGQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNhYWFhYWEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 40, color-stop(25%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(top, #dddddd 10px, #aaaaaa 40px);\n  background-image: -webkit-linear-gradient(top, #dddddd 10px, #aaaaaa 40px);\n  background-image: linear-gradient(to bottom, #dddddd 10px, #aaaaaa 40px); }\n\n.bg-linear-gradient-pixel-stop-from-left {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiNkZGRkZGQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNhYWFhYWEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 50%, 40 50%, color-stop(25%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(left, #dddddd 10px, #aaaaaa 40px);\n  background-image: -webkit-linear-gradient(left, #dddddd 10px, #aaaaaa 40px);\n  background-image: linear-gradient(to right, #dddddd 10px, #aaaaaa 40px); }\n\n.transparent-in-linear-gradient {\n  background-image: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNhYWFhYWEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: white -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, #aaaaaa));\n  background-image: white -moz-linear-gradient(top left, rgba(0, 0, 0, 0), #aaaaaa);\n  background-image: white -webkit-linear-gradient(top left, rgba(0, 0, 0, 0), #aaaaaa);\n  background-image: white linear-gradient(to bottom right, rgba(0, 0, 0, 0), #aaaaaa); }\n\n.currentColor-in-linear-gradient {\n  background-image: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9ImN1cnJlbnRDb2xvciIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: white -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, currentColor));\n  background-image: white -moz-linear-gradient(top left, rgba(0, 0, 0, 0), currentColor);\n  background-image: white -webkit-linear-gradient(top left, rgba(0, 0, 0, 0), currentColor);\n  background-image: white linear-gradient(to bottom right, rgba(0, 0, 0, 0), currentColor); }\n\n.rgba-in-linear-gradient {\n  background-image: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjgiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  background-size: 100%;\n  background-image: white -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, rgba(255, 255, 255, 0.8)), color-stop(100%, rgba(0, 0, 0, 0.1)));\n  background-image: white -moz-linear-gradient(top left, rgba(255, 255, 255, 0.8), rgba(0, 0, 0, 0.1));\n  background-image: white -webkit-linear-gradient(top left, rgba(255, 255, 255, 0.8), rgba(0, 0, 0, 0.1));\n  background-image: white linear-gradient(to bottom right, rgba(255, 255, 255, 0.8), rgba(0, 0, 0, 0.1)); }\n\n.bg-radial-gradient {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -moz-radial-gradient(center center, #dddddd, rgba(0, 0, 0, 0) 100px);\n  background-image: -webkit-radial-gradient(center center, #dddddd, rgba(0, 0, 0, 0) 100px);\n  background-image: radial-gradient(center center, #dddddd, rgba(0, 0, 0, 0) 100px); }\n\n.currentColor-in-radial-gradient {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iY3VycmVudENvbG9yIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -moz-radial-gradient(center center, currentColor, rgba(0, 0, 0, 0) 100px);\n  background-image: -webkit-radial-gradient(center center, currentColor, rgba(0, 0, 0, 0) 100px);\n  background-image: radial-gradient(center center, currentColor, rgba(0, 0, 0, 0) 100px); }\n\n.bg-linear-gradient-with-angle {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -moz-linear-gradient(135deg, #dddddd, #aaaaaa);\n  background-image: -webkit-linear-gradient(135deg, #dddddd, #aaaaaa);\n  background-image: linear-gradient(-45deg, #dddddd, #aaaaaa); }\n\n.bg-radial-gradient-with-angle-and-shape {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9ImVsbGlwc2UiIGN5PSJjb3ZlciIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -moz-radial-gradient(ellipse cover, #dddddd, #aaaaaa 100px);\n  background-image: -webkit-radial-gradient(ellipse cover, #dddddd, #aaaaaa 100px);\n  background-image: radial-gradient(ellipse cover, #dddddd, #aaaaaa 100px); }\n\n.bg-all-gradient-types {\n  background-image: url('/images/4x6.png?busted=true'), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: url('/images/4x6.png?busted=true'), -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa)), radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background-image: url('/images/4x6.png?busted=true'), -moz-linear-gradient(top left, #dddddd, #aaaaaa), -moz-radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background-image: url('/images/4x6.png?busted=true'), -webkit-linear-gradient(top left, #dddddd, #aaaaaa), -webkit-radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background-image: url('/images/4x6.png?busted=true'), linear-gradient(to bottom right, #dddddd, #aaaaaa), radial-gradient(center center, #dddddd, #aaaaaa 100px); }\n\n.border-image-gradient {\n  -moz-border-image: -moz-radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  -moz-border-image: radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  -o-border-image: radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  -webkit-border-image: -webkit-radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  -webkit-border-image: radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  border-image: -moz-radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  border-image: -webkit-radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  border-image: radial-gradient(#00ff00, #ff0000 100px) 100 stretch; }\n\n.direct-list-image-plain {\n  list-style-image: url('/images/4x6.png?busted=true'); }\n\n.shorthand-list-image-plain {\n  list-style: outside url('/images/4x6.png?busted=true'); }\n\n.direct-list-image-with-gradient {\n  list-style-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjMDBmZjAwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmYwMDAwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  list-style-image: -moz-radial-gradient(#00ff00, #ff0000 10px);\n  list-style-image: -webkit-radial-gradient(#00ff00, #ff0000 10px);\n  list-style-image: radial-gradient(#00ff00, #ff0000 10px); }\n\n.shorthand-list-image-with-gradient {\n  list-style: outside url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjMDBmZjAwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmYwMDAwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  list-style: outside -moz-radial-gradient(#00ff00, #ff0000 10px);\n  list-style: outside -webkit-radial-gradient(#00ff00, #ff0000 10px);\n  list-style: outside radial-gradient(#00ff00, #ff0000 10px); }\n\n.content-plain {\n  content: \"asdf\"; }\n\n.content-with-gradient {\n  content: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjMDBmZjAwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmYwMDAwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  content: -moz-radial-gradient(#00ff00, #ff0000 10px);\n  content: -webkit-radial-gradient(#00ff00, #ff0000 10px);\n  content: radial-gradient(#00ff00, #ff0000 10px); }\n\n.bg-linear-gradient-no-position {\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(#dddddd, #aaaaaa);\n  background-image: -webkit-linear-gradient(#dddddd, #aaaaaa);\n  background-image: linear-gradient(#dddddd, #aaaaaa); }\n\n.bg-radial-gradient-no-position {\n  background-image: -moz-radial-gradient(#dddddd, #aaaaaa 100px);\n  background-image: -webkit-radial-gradient(#dddddd, #aaaaaa 100px);\n  background-image: radial-gradient(#dddddd, #aaaaaa 100px); }\n\n.image-fallback {\n  background-image: image(-moz-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'), #cc0000);\n  background-image: -webkit-image(-webkit-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'), #cc0000);\n  background-image: image(radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'), #cc0000); }\n\n.cross-fade {\n  background-image: cross-fade(-moz-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'));\n  background-image: -webkit-cross-fade(-webkit-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'));\n  background-image: cross-fade(radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true')); }\n\n.unknown-function-wrapper {\n  background: foo(-moz-radial-gradient(#dddddd, #aaaaaa 100px));\n  background: foo(-webkit-radial-gradient(#dddddd, #aaaaaa 100px));\n  background: foo(radial-gradient(#dddddd, #aaaaaa 100px)); }\n\n.ie-horizontal-filter {\n  *zoom: 1;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#FFFFFFFF', endColorstr='#FF000000'); }\n\n.ie-vertical-filter {\n  *zoom: 1;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFFFFFF', endColorstr='#FF000000'); }\n\n.ie-alpha-filter {\n  *zoom: 1;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFFFFFF', endColorstr='#00FFFFFF'); }\n\n.linear-gradient-new {\n  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0000), color-stop(100%, #88aa44));\n  background: -moz-linear-gradient(top, #ff0000 0%, #88aa44 100%);\n  background: -webkit-linear-gradient(top, #ff0000 0%, #88aa44 100%);\n  background: linear-gradient(to bottom, #ff0000 0%, #88aa44 100%); }\n\n.linear-gradient-old {\n  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0000), color-stop(100%, #88aa44));\n  background: -moz-linear-gradient(top, #ff0000 0%, #88aa44 100%);\n  background: -webkit-linear-gradient(top, #ff0000 0%, #88aa44 100%);\n  background: linear-gradient(to bottom, #ff0000 0%, #88aa44 100%); }\n\n.linear-gradient-unknown-new {\n  background: -moz-linear-gradient(330deg, #ff0000 0%, #88aa44 100%);\n  background: -webkit-linear-gradient(330deg, #ff0000 0%, #88aa44 100%);\n  background: linear-gradient(120deg, #ff0000 0%, #88aa44 100%); }\n\n.linear-gradient-unknown-old {\n  background: -moz-linear-gradient(120deg, #ff0000 0%, #88aa44 100%);\n  background: -webkit-linear-gradient(120deg, #ff0000 0%, #88aa44 100%);\n  background: linear-gradient(330deg, #ff0000 0%, #88aa44 100%); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/grid_background.css",
    "content": ".baseline {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 1.5em;\n  -o-background-size: 100% 1.5em;\n  -webkit-background-size: 100% 1.5em;\n  background-size: 100% 1.5em;\n  background-position: left top; }\n\n.columns {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjMuMTI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzLjEyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQuMTY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcuMjkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcuMjkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOC4zMzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4LjMzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxMS40NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTEuNDU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTIuNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMi41JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxNS42MjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE1LjYyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxNi42NjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxNi42NjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTkuNzkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE5Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjIwLjgzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjIwLjgzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyMy45NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjMuOTU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI4LjEyNSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjguMTI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjI5LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjI5LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzMi4yOTE2NyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzIuMjkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMzMuMzMzMzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMzMuMzMzMzMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjM2LjQ1ODMzJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzNi40NTgzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIzNy41JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM3LjUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQwLjYyNSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAuNjI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQxLjY2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQxLjY2NjY3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0NC43OTE2NyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDQuNzkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDUuODMzMzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDUuODMzMzMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ4Ljk1ODMzJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0OC45NTgzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTMuMTI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1My4xMjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTQuMTY2NjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTQuMTY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjU3LjI5MTY3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1Ny4yOTE2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1OC4zMzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1OC4zMzMzMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjEuNDU4MzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjYxLjQ1ODMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjYyLjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjIuNSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjUuNjI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NS42MjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjYuNjY2NjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjYuNjY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjY5Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2OS43OTE2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3MC44MzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3MC44MzMzMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzMuOTU4MzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjczLjk1ODMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3OC4xMjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijc4LjEyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3OS4xNjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3OS4xNjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODIuMjkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgyLjI5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjMzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjMzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4Ni40NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODYuNDU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iODcuNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4Ny41JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5MC42MjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjkwLjYyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI5MS42NjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI5MS42NjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTQuNzkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijk0Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijk1LjgzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijk1LjgzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5OC45NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTguOTU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 50%, 960 50%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(0%, rgba(121, 121, 229, 0.25)), color-stop(3.125%, rgba(79, 79, 221, 0.25)), color-stop(3.125%, rgba(0, 0, 0, 0)), color-stop(4.16667%, rgba(0, 0, 0, 0)), color-stop(4.16667%, rgba(121, 121, 229, 0.25)), color-stop(7.29167%, rgba(79, 79, 221, 0.25)), color-stop(7.29167%, rgba(0, 0, 0, 0)), color-stop(8.33333%, rgba(0, 0, 0, 0)), color-stop(8.33333%, rgba(121, 121, 229, 0.25)), color-stop(11.45833%, rgba(79, 79, 221, 0.25)), color-stop(11.45833%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(121, 121, 229, 0.25)), color-stop(15.625%, rgba(79, 79, 221, 0.25)), color-stop(15.625%, rgba(0, 0, 0, 0)), color-stop(16.66667%, rgba(0, 0, 0, 0)), color-stop(16.66667%, rgba(121, 121, 229, 0.25)), color-stop(19.79167%, rgba(79, 79, 221, 0.25)), color-stop(19.79167%, rgba(0, 0, 0, 0)), color-stop(20.83333%, rgba(0, 0, 0, 0)), color-stop(20.83333%, rgba(121, 121, 229, 0.25)), color-stop(23.95833%, rgba(79, 79, 221, 0.25)), color-stop(23.95833%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(121, 121, 229, 0.25)), color-stop(28.125%, rgba(79, 79, 221, 0.25)), color-stop(28.125%, rgba(0, 0, 0, 0)), color-stop(29.16667%, rgba(0, 0, 0, 0)), color-stop(29.16667%, rgba(121, 121, 229, 0.25)), color-stop(32.29167%, rgba(79, 79, 221, 0.25)), color-stop(32.29167%, rgba(0, 0, 0, 0)), color-stop(33.33333%, rgba(0, 0, 0, 0)), color-stop(33.33333%, rgba(121, 121, 229, 0.25)), color-stop(36.45833%, rgba(79, 79, 221, 0.25)), color-stop(36.45833%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(121, 121, 229, 0.25)), color-stop(40.625%, rgba(79, 79, 221, 0.25)), color-stop(40.625%, rgba(0, 0, 0, 0)), color-stop(41.66667%, rgba(0, 0, 0, 0)), color-stop(41.66667%, rgba(121, 121, 229, 0.25)), color-stop(44.79167%, rgba(79, 79, 221, 0.25)), color-stop(44.79167%, rgba(0, 0, 0, 0)), color-stop(45.83333%, rgba(0, 0, 0, 0)), color-stop(45.83333%, rgba(121, 121, 229, 0.25)), color-stop(48.95833%, rgba(79, 79, 221, 0.25)), color-stop(48.95833%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(121, 121, 229, 0.25)), color-stop(53.125%, rgba(79, 79, 221, 0.25)), color-stop(53.125%, rgba(0, 0, 0, 0)), color-stop(54.16667%, rgba(0, 0, 0, 0)), color-stop(54.16667%, rgba(121, 121, 229, 0.25)), color-stop(57.29167%, rgba(79, 79, 221, 0.25)), color-stop(57.29167%, rgba(0, 0, 0, 0)), color-stop(58.33333%, rgba(0, 0, 0, 0)), color-stop(58.33333%, rgba(121, 121, 229, 0.25)), color-stop(61.45833%, rgba(79, 79, 221, 0.25)), color-stop(61.45833%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(121, 121, 229, 0.25)), color-stop(65.625%, rgba(79, 79, 221, 0.25)), color-stop(65.625%, rgba(0, 0, 0, 0)), color-stop(66.66667%, rgba(0, 0, 0, 0)), color-stop(66.66667%, rgba(121, 121, 229, 0.25)), color-stop(69.79167%, rgba(79, 79, 221, 0.25)), color-stop(69.79167%, rgba(0, 0, 0, 0)), color-stop(70.83333%, rgba(0, 0, 0, 0)), color-stop(70.83333%, rgba(121, 121, 229, 0.25)), color-stop(73.95833%, rgba(79, 79, 221, 0.25)), color-stop(73.95833%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(121, 121, 229, 0.25)), color-stop(78.125%, rgba(79, 79, 221, 0.25)), color-stop(78.125%, rgba(0, 0, 0, 0)), color-stop(79.16667%, rgba(0, 0, 0, 0)), color-stop(79.16667%, rgba(121, 121, 229, 0.25)), color-stop(82.29167%, rgba(79, 79, 221, 0.25)), color-stop(82.29167%, rgba(0, 0, 0, 0)), color-stop(83.33333%, rgba(0, 0, 0, 0)), color-stop(83.33333%, rgba(121, 121, 229, 0.25)), color-stop(86.45833%, rgba(79, 79, 221, 0.25)), color-stop(86.45833%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(121, 121, 229, 0.25)), color-stop(90.625%, rgba(79, 79, 221, 0.25)), color-stop(90.625%, rgba(0, 0, 0, 0)), color-stop(91.66667%, rgba(0, 0, 0, 0)), color-stop(91.66667%, rgba(121, 121, 229, 0.25)), color-stop(94.79167%, rgba(79, 79, 221, 0.25)), color-stop(94.79167%, rgba(0, 0, 0, 0)), color-stop(95.83333%, rgba(0, 0, 0, 0)), color-stop(95.83333%, rgba(121, 121, 229, 0.25)), color-stop(98.95833%, rgba(79, 79, 221, 0.25)), color-stop(98.95833%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-position: left top; }\n\n.combined {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjMuMTI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzLjEyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQuMTY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcuMjkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcuMjkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOC4zMzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4LjMzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxMS40NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTEuNDU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTIuNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMi41JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxNS42MjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE1LjYyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxNi42NjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxNi42NjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTkuNzkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE5Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjIwLjgzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjIwLjgzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyMy45NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjMuOTU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI4LjEyNSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjguMTI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjI5LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjI5LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzMi4yOTE2NyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzIuMjkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMzMuMzMzMzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMzMuMzMzMzMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjM2LjQ1ODMzJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzNi40NTgzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIzNy41JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM3LjUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQwLjYyNSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAuNjI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQxLjY2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQxLjY2NjY3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0NC43OTE2NyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDQuNzkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDUuODMzMzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDUuODMzMzMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ4Ljk1ODMzJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0OC45NTgzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTMuMTI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1My4xMjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTQuMTY2NjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTQuMTY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjU3LjI5MTY3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1Ny4yOTE2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1OC4zMzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1OC4zMzMzMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjEuNDU4MzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjYxLjQ1ODMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjYyLjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjIuNSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjUuNjI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NS42MjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjYuNjY2NjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjYuNjY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjY5Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2OS43OTE2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3MC44MzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3MC44MzMzMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzMuOTU4MzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjczLjk1ODMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3OC4xMjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijc4LjEyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3OS4xNjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3OS4xNjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODIuMjkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgyLjI5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjMzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjMzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4Ni40NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODYuNDU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iODcuNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4Ny41JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5MC42MjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjkwLjYyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI5MS42NjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI5MS42NjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTQuNzkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijk0Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijk1LjgzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijk1LjgzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5OC45NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTguOTU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 0% 50%, 960 50%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(0%, rgba(121, 121, 229, 0.25)), color-stop(3.125%, rgba(79, 79, 221, 0.25)), color-stop(3.125%, rgba(0, 0, 0, 0)), color-stop(4.16667%, rgba(0, 0, 0, 0)), color-stop(4.16667%, rgba(121, 121, 229, 0.25)), color-stop(7.29167%, rgba(79, 79, 221, 0.25)), color-stop(7.29167%, rgba(0, 0, 0, 0)), color-stop(8.33333%, rgba(0, 0, 0, 0)), color-stop(8.33333%, rgba(121, 121, 229, 0.25)), color-stop(11.45833%, rgba(79, 79, 221, 0.25)), color-stop(11.45833%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(121, 121, 229, 0.25)), color-stop(15.625%, rgba(79, 79, 221, 0.25)), color-stop(15.625%, rgba(0, 0, 0, 0)), color-stop(16.66667%, rgba(0, 0, 0, 0)), color-stop(16.66667%, rgba(121, 121, 229, 0.25)), color-stop(19.79167%, rgba(79, 79, 221, 0.25)), color-stop(19.79167%, rgba(0, 0, 0, 0)), color-stop(20.83333%, rgba(0, 0, 0, 0)), color-stop(20.83333%, rgba(121, 121, 229, 0.25)), color-stop(23.95833%, rgba(79, 79, 221, 0.25)), color-stop(23.95833%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(121, 121, 229, 0.25)), color-stop(28.125%, rgba(79, 79, 221, 0.25)), color-stop(28.125%, rgba(0, 0, 0, 0)), color-stop(29.16667%, rgba(0, 0, 0, 0)), color-stop(29.16667%, rgba(121, 121, 229, 0.25)), color-stop(32.29167%, rgba(79, 79, 221, 0.25)), color-stop(32.29167%, rgba(0, 0, 0, 0)), color-stop(33.33333%, rgba(0, 0, 0, 0)), color-stop(33.33333%, rgba(121, 121, 229, 0.25)), color-stop(36.45833%, rgba(79, 79, 221, 0.25)), color-stop(36.45833%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(121, 121, 229, 0.25)), color-stop(40.625%, rgba(79, 79, 221, 0.25)), color-stop(40.625%, rgba(0, 0, 0, 0)), color-stop(41.66667%, rgba(0, 0, 0, 0)), color-stop(41.66667%, rgba(121, 121, 229, 0.25)), color-stop(44.79167%, rgba(79, 79, 221, 0.25)), color-stop(44.79167%, rgba(0, 0, 0, 0)), color-stop(45.83333%, rgba(0, 0, 0, 0)), color-stop(45.83333%, rgba(121, 121, 229, 0.25)), color-stop(48.95833%, rgba(79, 79, 221, 0.25)), color-stop(48.95833%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(121, 121, 229, 0.25)), color-stop(53.125%, rgba(79, 79, 221, 0.25)), color-stop(53.125%, rgba(0, 0, 0, 0)), color-stop(54.16667%, rgba(0, 0, 0, 0)), color-stop(54.16667%, rgba(121, 121, 229, 0.25)), color-stop(57.29167%, rgba(79, 79, 221, 0.25)), color-stop(57.29167%, rgba(0, 0, 0, 0)), color-stop(58.33333%, rgba(0, 0, 0, 0)), color-stop(58.33333%, rgba(121, 121, 229, 0.25)), color-stop(61.45833%, rgba(79, 79, 221, 0.25)), color-stop(61.45833%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(121, 121, 229, 0.25)), color-stop(65.625%, rgba(79, 79, 221, 0.25)), color-stop(65.625%, rgba(0, 0, 0, 0)), color-stop(66.66667%, rgba(0, 0, 0, 0)), color-stop(66.66667%, rgba(121, 121, 229, 0.25)), color-stop(69.79167%, rgba(79, 79, 221, 0.25)), color-stop(69.79167%, rgba(0, 0, 0, 0)), color-stop(70.83333%, rgba(0, 0, 0, 0)), color-stop(70.83333%, rgba(121, 121, 229, 0.25)), color-stop(73.95833%, rgba(79, 79, 221, 0.25)), color-stop(73.95833%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(121, 121, 229, 0.25)), color-stop(78.125%, rgba(79, 79, 221, 0.25)), color-stop(78.125%, rgba(0, 0, 0, 0)), color-stop(79.16667%, rgba(0, 0, 0, 0)), color-stop(79.16667%, rgba(121, 121, 229, 0.25)), color-stop(82.29167%, rgba(79, 79, 221, 0.25)), color-stop(82.29167%, rgba(0, 0, 0, 0)), color-stop(83.33333%, rgba(0, 0, 0, 0)), color-stop(83.33333%, rgba(121, 121, 229, 0.25)), color-stop(86.45833%, rgba(79, 79, 221, 0.25)), color-stop(86.45833%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(121, 121, 229, 0.25)), color-stop(90.625%, rgba(79, 79, 221, 0.25)), color-stop(90.625%, rgba(0, 0, 0, 0)), color-stop(91.66667%, rgba(0, 0, 0, 0)), color-stop(91.66667%, rgba(121, 121, 229, 0.25)), color-stop(94.79167%, rgba(79, 79, 221, 0.25)), color-stop(94.79167%, rgba(0, 0, 0, 0)), color-stop(95.83333%, rgba(0, 0, 0, 0)), color-stop(95.83333%, rgba(121, 121, 229, 0.25)), color-stop(98.95833%, rgba(79, 79, 221, 0.25)), color-stop(98.95833%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -moz-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), linear-gradient(to right, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  -moz-background-size: 100% 1.5em, auto;\n  -o-background-size: 100% 1.5em, auto;\n  -webkit-background-size: 100% 1.5em, auto;\n  background-size: 100% 1.5em, auto;\n  background-position: left top; }\n\n.percent-baseline {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 1.5em;\n  -o-background-size: 100% 1.5em;\n  -webkit-background-size: 100% 1.5em;\n  background-size: 100% 1.5em;\n  background-position: left top; }\n\n.percent-columns {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTYlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE2JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjE3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjE3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyMiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjIlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI4JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyOCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzQlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjM0JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0MCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDElIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDElIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ2JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0NiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTIlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjUyJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1OCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTglIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjY0JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI2NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI2NSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzAlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjcxJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjcxJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3NiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzYlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNzclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNzclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgyJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4MiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4MyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4MyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODglIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijg4JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5NCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTQlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(11%, rgba(0, 0, 0, 0)), color-stop(11%, rgba(121, 121, 229, 0.25)), color-stop(16%, rgba(79, 79, 221, 0.25)), color-stop(16%, rgba(0, 0, 0, 0)), color-stop(17%, rgba(0, 0, 0, 0)), color-stop(17%, rgba(121, 121, 229, 0.25)), color-stop(22%, rgba(79, 79, 221, 0.25)), color-stop(22%, rgba(0, 0, 0, 0)), color-stop(23%, rgba(0, 0, 0, 0)), color-stop(23%, rgba(121, 121, 229, 0.25)), color-stop(28%, rgba(79, 79, 221, 0.25)), color-stop(28%, rgba(0, 0, 0, 0)), color-stop(29%, rgba(0, 0, 0, 0)), color-stop(29%, rgba(121, 121, 229, 0.25)), color-stop(34%, rgba(79, 79, 221, 0.25)), color-stop(34%, rgba(0, 0, 0, 0)), color-stop(35%, rgba(0, 0, 0, 0)), color-stop(35%, rgba(121, 121, 229, 0.25)), color-stop(40%, rgba(79, 79, 221, 0.25)), color-stop(40%, rgba(0, 0, 0, 0)), color-stop(41%, rgba(0, 0, 0, 0)), color-stop(41%, rgba(121, 121, 229, 0.25)), color-stop(46%, rgba(79, 79, 221, 0.25)), color-stop(46%, rgba(0, 0, 0, 0)), color-stop(47%, rgba(0, 0, 0, 0)), color-stop(47%, rgba(121, 121, 229, 0.25)), color-stop(52%, rgba(79, 79, 221, 0.25)), color-stop(52%, rgba(0, 0, 0, 0)), color-stop(53%, rgba(0, 0, 0, 0)), color-stop(53%, rgba(121, 121, 229, 0.25)), color-stop(58%, rgba(79, 79, 221, 0.25)), color-stop(58%, rgba(0, 0, 0, 0)), color-stop(59%, rgba(0, 0, 0, 0)), color-stop(59%, rgba(121, 121, 229, 0.25)), color-stop(64%, rgba(79, 79, 221, 0.25)), color-stop(64%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(121, 121, 229, 0.25)), color-stop(70%, rgba(79, 79, 221, 0.25)), color-stop(70%, rgba(0, 0, 0, 0)), color-stop(71%, rgba(0, 0, 0, 0)), color-stop(71%, rgba(121, 121, 229, 0.25)), color-stop(76%, rgba(79, 79, 221, 0.25)), color-stop(76%, rgba(0, 0, 0, 0)), color-stop(77%, rgba(0, 0, 0, 0)), color-stop(77%, rgba(121, 121, 229, 0.25)), color-stop(82%, rgba(79, 79, 221, 0.25)), color-stop(82%, rgba(0, 0, 0, 0)), color-stop(83%, rgba(0, 0, 0, 0)), color-stop(83%, rgba(121, 121, 229, 0.25)), color-stop(88%, rgba(79, 79, 221, 0.25)), color-stop(88%, rgba(0, 0, 0, 0)), color-stop(89%, rgba(0, 0, 0, 0)), color-stop(89%, rgba(121, 121, 229, 0.25)), color-stop(94%, rgba(79, 79, 221, 0.25)), color-stop(94%, rgba(0, 0, 0, 0)), color-stop(95%, rgba(0, 0, 0, 0)), color-stop(95%, rgba(121, 121, 229, 0.25)), color-stop(100%, rgba(79, 79, 221, 0.25)), color-stop(100%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-position: left top; }\n\n.percent-combined {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTYlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE2JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjE3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjE3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyMiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjIlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI4JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyOCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzQlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjM0JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0MCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDElIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDElIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ2JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0NiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTIlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjUyJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1OCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTglIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjY0JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI2NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI2NSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzAlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjcxJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjcxJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3NiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzYlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNzclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNzclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgyJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4MiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4MyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4MyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODglIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijg4JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5NCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTQlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(11%, rgba(0, 0, 0, 0)), color-stop(11%, rgba(121, 121, 229, 0.25)), color-stop(16%, rgba(79, 79, 221, 0.25)), color-stop(16%, rgba(0, 0, 0, 0)), color-stop(17%, rgba(0, 0, 0, 0)), color-stop(17%, rgba(121, 121, 229, 0.25)), color-stop(22%, rgba(79, 79, 221, 0.25)), color-stop(22%, rgba(0, 0, 0, 0)), color-stop(23%, rgba(0, 0, 0, 0)), color-stop(23%, rgba(121, 121, 229, 0.25)), color-stop(28%, rgba(79, 79, 221, 0.25)), color-stop(28%, rgba(0, 0, 0, 0)), color-stop(29%, rgba(0, 0, 0, 0)), color-stop(29%, rgba(121, 121, 229, 0.25)), color-stop(34%, rgba(79, 79, 221, 0.25)), color-stop(34%, rgba(0, 0, 0, 0)), color-stop(35%, rgba(0, 0, 0, 0)), color-stop(35%, rgba(121, 121, 229, 0.25)), color-stop(40%, rgba(79, 79, 221, 0.25)), color-stop(40%, rgba(0, 0, 0, 0)), color-stop(41%, rgba(0, 0, 0, 0)), color-stop(41%, rgba(121, 121, 229, 0.25)), color-stop(46%, rgba(79, 79, 221, 0.25)), color-stop(46%, rgba(0, 0, 0, 0)), color-stop(47%, rgba(0, 0, 0, 0)), color-stop(47%, rgba(121, 121, 229, 0.25)), color-stop(52%, rgba(79, 79, 221, 0.25)), color-stop(52%, rgba(0, 0, 0, 0)), color-stop(53%, rgba(0, 0, 0, 0)), color-stop(53%, rgba(121, 121, 229, 0.25)), color-stop(58%, rgba(79, 79, 221, 0.25)), color-stop(58%, rgba(0, 0, 0, 0)), color-stop(59%, rgba(0, 0, 0, 0)), color-stop(59%, rgba(121, 121, 229, 0.25)), color-stop(64%, rgba(79, 79, 221, 0.25)), color-stop(64%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(121, 121, 229, 0.25)), color-stop(70%, rgba(79, 79, 221, 0.25)), color-stop(70%, rgba(0, 0, 0, 0)), color-stop(71%, rgba(0, 0, 0, 0)), color-stop(71%, rgba(121, 121, 229, 0.25)), color-stop(76%, rgba(79, 79, 221, 0.25)), color-stop(76%, rgba(0, 0, 0, 0)), color-stop(77%, rgba(0, 0, 0, 0)), color-stop(77%, rgba(121, 121, 229, 0.25)), color-stop(82%, rgba(79, 79, 221, 0.25)), color-stop(82%, rgba(0, 0, 0, 0)), color-stop(83%, rgba(0, 0, 0, 0)), color-stop(83%, rgba(121, 121, 229, 0.25)), color-stop(88%, rgba(79, 79, 221, 0.25)), color-stop(88%, rgba(0, 0, 0, 0)), color-stop(89%, rgba(0, 0, 0, 0)), color-stop(89%, rgba(121, 121, 229, 0.25)), color-stop(94%, rgba(79, 79, 221, 0.25)), color-stop(94%, rgba(0, 0, 0, 0)), color-stop(95%, rgba(0, 0, 0, 0)), color-stop(95%, rgba(121, 121, 229, 0.25)), color-stop(100%, rgba(79, 79, 221, 0.25)), color-stop(100%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -moz-linear-gradient(left, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), linear-gradient(to right, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  -moz-background-size: 100% 1.5em, auto;\n  -o-background-size: 100% 1.5em, auto;\n  -webkit-background-size: 100% 1.5em, auto;\n  background-size: 100% 1.5em, auto;\n  background-position: left top; }\n\n.forced-fluid {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIyLjcwMjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMi43MDI3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4LjEwODExJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4LjEwODExJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwLjgxMDgxJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwLjgxMDgxJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxNi4yMTYyMiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTYuMjE2MjIlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTguOTE4OTIlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTguOTE4OTIlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI0LjMyNDMyJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyNC4zMjQzMiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyNy4wMjcwMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyNy4wMjcwMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzIuNDMyNDMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjMyLjQzMjQzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1LjEzNTE0JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1LjEzNTE0JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0MC41NDA1NCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAuNTQwNTQlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDMuMjQzMjQlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDMuMjQzMjQlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ4LjY0ODY1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0OC42NDg2NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MS4zNTEzNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MS4zNTEzNSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTYuNzU2NzYlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjU2Ljc1Njc2JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjU5LjQ1OTQ2JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjU5LjQ1OTQ2JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NC44NjQ4NiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjQuODY0ODYlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjcuNTY3NTclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjcuNTY3NTclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcyLjk3Mjk3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3Mi45NzI5NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3NS42NzU2OCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3NS42NzU2OCUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODEuMDgxMDglIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgxLjA4MTA4JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjc4Mzc4JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjc4Mzc4JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4OS4xODkxOSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODkuMTg5MTklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTEuODkxODklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTEuODkxODklIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijk3LjI5NzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijk3LjI5NzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(2.7027%, rgba(0, 0, 0, 0)), color-stop(2.7027%, rgba(121, 121, 229, 0.25)), color-stop(8.10811%, rgba(79, 79, 221, 0.25)), color-stop(8.10811%, rgba(0, 0, 0, 0)), color-stop(10.81081%, rgba(0, 0, 0, 0)), color-stop(10.81081%, rgba(121, 121, 229, 0.25)), color-stop(16.21622%, rgba(79, 79, 221, 0.25)), color-stop(16.21622%, rgba(0, 0, 0, 0)), color-stop(18.91892%, rgba(0, 0, 0, 0)), color-stop(18.91892%, rgba(121, 121, 229, 0.25)), color-stop(24.32432%, rgba(79, 79, 221, 0.25)), color-stop(24.32432%, rgba(0, 0, 0, 0)), color-stop(27.02703%, rgba(0, 0, 0, 0)), color-stop(27.02703%, rgba(121, 121, 229, 0.25)), color-stop(32.43243%, rgba(79, 79, 221, 0.25)), color-stop(32.43243%, rgba(0, 0, 0, 0)), color-stop(35.13514%, rgba(0, 0, 0, 0)), color-stop(35.13514%, rgba(121, 121, 229, 0.25)), color-stop(40.54054%, rgba(79, 79, 221, 0.25)), color-stop(40.54054%, rgba(0, 0, 0, 0)), color-stop(43.24324%, rgba(0, 0, 0, 0)), color-stop(43.24324%, rgba(121, 121, 229, 0.25)), color-stop(48.64865%, rgba(79, 79, 221, 0.25)), color-stop(48.64865%, rgba(0, 0, 0, 0)), color-stop(51.35135%, rgba(0, 0, 0, 0)), color-stop(51.35135%, rgba(121, 121, 229, 0.25)), color-stop(56.75676%, rgba(79, 79, 221, 0.25)), color-stop(56.75676%, rgba(0, 0, 0, 0)), color-stop(59.45946%, rgba(0, 0, 0, 0)), color-stop(59.45946%, rgba(121, 121, 229, 0.25)), color-stop(64.86486%, rgba(79, 79, 221, 0.25)), color-stop(64.86486%, rgba(0, 0, 0, 0)), color-stop(67.56757%, rgba(0, 0, 0, 0)), color-stop(67.56757%, rgba(121, 121, 229, 0.25)), color-stop(72.97297%, rgba(79, 79, 221, 0.25)), color-stop(72.97297%, rgba(0, 0, 0, 0)), color-stop(75.67568%, rgba(0, 0, 0, 0)), color-stop(75.67568%, rgba(121, 121, 229, 0.25)), color-stop(81.08108%, rgba(79, 79, 221, 0.25)), color-stop(81.08108%, rgba(0, 0, 0, 0)), color-stop(83.78378%, rgba(0, 0, 0, 0)), color-stop(83.78378%, rgba(121, 121, 229, 0.25)), color-stop(89.18919%, rgba(79, 79, 221, 0.25)), color-stop(89.18919%, rgba(0, 0, 0, 0)), color-stop(91.89189%, rgba(0, 0, 0, 0)), color-stop(91.89189%, rgba(121, 121, 229, 0.25)), color-stop(97.2973%, rgba(79, 79, 221, 0.25)), color-stop(97.2973%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0) 2.7027%, rgba(121, 121, 229, 0.25) 2.7027%, rgba(79, 79, 221, 0.25) 8.10811%, rgba(0, 0, 0, 0) 8.10811%, rgba(0, 0, 0, 0) 10.81081%, rgba(121, 121, 229, 0.25) 10.81081%, rgba(79, 79, 221, 0.25) 16.21622%, rgba(0, 0, 0, 0) 16.21622%, rgba(0, 0, 0, 0) 18.91892%, rgba(121, 121, 229, 0.25) 18.91892%, rgba(79, 79, 221, 0.25) 24.32432%, rgba(0, 0, 0, 0) 24.32432%, rgba(0, 0, 0, 0) 27.02703%, rgba(121, 121, 229, 0.25) 27.02703%, rgba(79, 79, 221, 0.25) 32.43243%, rgba(0, 0, 0, 0) 32.43243%, rgba(0, 0, 0, 0) 35.13514%, rgba(121, 121, 229, 0.25) 35.13514%, rgba(79, 79, 221, 0.25) 40.54054%, rgba(0, 0, 0, 0) 40.54054%, rgba(0, 0, 0, 0) 43.24324%, rgba(121, 121, 229, 0.25) 43.24324%, rgba(79, 79, 221, 0.25) 48.64865%, rgba(0, 0, 0, 0) 48.64865%, rgba(0, 0, 0, 0) 51.35135%, rgba(121, 121, 229, 0.25) 51.35135%, rgba(79, 79, 221, 0.25) 56.75676%, rgba(0, 0, 0, 0) 56.75676%, rgba(0, 0, 0, 0) 59.45946%, rgba(121, 121, 229, 0.25) 59.45946%, rgba(79, 79, 221, 0.25) 64.86486%, rgba(0, 0, 0, 0) 64.86486%, rgba(0, 0, 0, 0) 67.56757%, rgba(121, 121, 229, 0.25) 67.56757%, rgba(79, 79, 221, 0.25) 72.97297%, rgba(0, 0, 0, 0) 72.97297%, rgba(0, 0, 0, 0) 75.67568%, rgba(121, 121, 229, 0.25) 75.67568%, rgba(79, 79, 221, 0.25) 81.08108%, rgba(0, 0, 0, 0) 81.08108%, rgba(0, 0, 0, 0) 83.78378%, rgba(121, 121, 229, 0.25) 83.78378%, rgba(79, 79, 221, 0.25) 89.18919%, rgba(0, 0, 0, 0) 89.18919%, rgba(0, 0, 0, 0) 91.89189%, rgba(121, 121, 229, 0.25) 91.89189%, rgba(79, 79, 221, 0.25) 97.2973%, rgba(0, 0, 0, 0) 97.2973%, rgba(0, 0, 0, 0) 100%);\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 2.7027%, rgba(121, 121, 229, 0.25) 2.7027%, rgba(79, 79, 221, 0.25) 8.10811%, rgba(0, 0, 0, 0) 8.10811%, rgba(0, 0, 0, 0) 10.81081%, rgba(121, 121, 229, 0.25) 10.81081%, rgba(79, 79, 221, 0.25) 16.21622%, rgba(0, 0, 0, 0) 16.21622%, rgba(0, 0, 0, 0) 18.91892%, rgba(121, 121, 229, 0.25) 18.91892%, rgba(79, 79, 221, 0.25) 24.32432%, rgba(0, 0, 0, 0) 24.32432%, rgba(0, 0, 0, 0) 27.02703%, rgba(121, 121, 229, 0.25) 27.02703%, rgba(79, 79, 221, 0.25) 32.43243%, rgba(0, 0, 0, 0) 32.43243%, rgba(0, 0, 0, 0) 35.13514%, rgba(121, 121, 229, 0.25) 35.13514%, rgba(79, 79, 221, 0.25) 40.54054%, rgba(0, 0, 0, 0) 40.54054%, rgba(0, 0, 0, 0) 43.24324%, rgba(121, 121, 229, 0.25) 43.24324%, rgba(79, 79, 221, 0.25) 48.64865%, rgba(0, 0, 0, 0) 48.64865%, rgba(0, 0, 0, 0) 51.35135%, rgba(121, 121, 229, 0.25) 51.35135%, rgba(79, 79, 221, 0.25) 56.75676%, rgba(0, 0, 0, 0) 56.75676%, rgba(0, 0, 0, 0) 59.45946%, rgba(121, 121, 229, 0.25) 59.45946%, rgba(79, 79, 221, 0.25) 64.86486%, rgba(0, 0, 0, 0) 64.86486%, rgba(0, 0, 0, 0) 67.56757%, rgba(121, 121, 229, 0.25) 67.56757%, rgba(79, 79, 221, 0.25) 72.97297%, rgba(0, 0, 0, 0) 72.97297%, rgba(0, 0, 0, 0) 75.67568%, rgba(121, 121, 229, 0.25) 75.67568%, rgba(79, 79, 221, 0.25) 81.08108%, rgba(0, 0, 0, 0) 81.08108%, rgba(0, 0, 0, 0) 83.78378%, rgba(121, 121, 229, 0.25) 83.78378%, rgba(79, 79, 221, 0.25) 89.18919%, rgba(0, 0, 0, 0) 89.18919%, rgba(0, 0, 0, 0) 91.89189%, rgba(121, 121, 229, 0.25) 91.89189%, rgba(79, 79, 221, 0.25) 97.2973%, rgba(0, 0, 0, 0) 97.2973%, rgba(0, 0, 0, 0) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0) 2.7027%, rgba(121, 121, 229, 0.25) 2.7027%, rgba(79, 79, 221, 0.25) 8.10811%, rgba(0, 0, 0, 0) 8.10811%, rgba(0, 0, 0, 0) 10.81081%, rgba(121, 121, 229, 0.25) 10.81081%, rgba(79, 79, 221, 0.25) 16.21622%, rgba(0, 0, 0, 0) 16.21622%, rgba(0, 0, 0, 0) 18.91892%, rgba(121, 121, 229, 0.25) 18.91892%, rgba(79, 79, 221, 0.25) 24.32432%, rgba(0, 0, 0, 0) 24.32432%, rgba(0, 0, 0, 0) 27.02703%, rgba(121, 121, 229, 0.25) 27.02703%, rgba(79, 79, 221, 0.25) 32.43243%, rgba(0, 0, 0, 0) 32.43243%, rgba(0, 0, 0, 0) 35.13514%, rgba(121, 121, 229, 0.25) 35.13514%, rgba(79, 79, 221, 0.25) 40.54054%, rgba(0, 0, 0, 0) 40.54054%, rgba(0, 0, 0, 0) 43.24324%, rgba(121, 121, 229, 0.25) 43.24324%, rgba(79, 79, 221, 0.25) 48.64865%, rgba(0, 0, 0, 0) 48.64865%, rgba(0, 0, 0, 0) 51.35135%, rgba(121, 121, 229, 0.25) 51.35135%, rgba(79, 79, 221, 0.25) 56.75676%, rgba(0, 0, 0, 0) 56.75676%, rgba(0, 0, 0, 0) 59.45946%, rgba(121, 121, 229, 0.25) 59.45946%, rgba(79, 79, 221, 0.25) 64.86486%, rgba(0, 0, 0, 0) 64.86486%, rgba(0, 0, 0, 0) 67.56757%, rgba(121, 121, 229, 0.25) 67.56757%, rgba(79, 79, 221, 0.25) 72.97297%, rgba(0, 0, 0, 0) 72.97297%, rgba(0, 0, 0, 0) 75.67568%, rgba(121, 121, 229, 0.25) 75.67568%, rgba(79, 79, 221, 0.25) 81.08108%, rgba(0, 0, 0, 0) 81.08108%, rgba(0, 0, 0, 0) 83.78378%, rgba(121, 121, 229, 0.25) 83.78378%, rgba(79, 79, 221, 0.25) 89.18919%, rgba(0, 0, 0, 0) 89.18919%, rgba(0, 0, 0, 0) 91.89189%, rgba(121, 121, 229, 0.25) 91.89189%, rgba(79, 79, 221, 0.25) 97.2973%, rgba(0, 0, 0, 0) 97.2973%, rgba(0, 0, 0, 0) 100%);\n  background-position: left top; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/hyphenation.css",
    "content": ".word-break {\n  word-break: keep-all; }\n\n.hyphens {\n  -moz-hyphens: manual;\n  -ms-hyphens: manual;\n  -webkit-hyphens: manual;\n  hyphens: manual; }\n\n.hyphenate {\n  word-break: break-all;\n  word-break: break-word;\n  -moz-hyphens: auto;\n  -ms-hyphens: auto;\n  -webkit-hyphens: auto;\n  hyphens: auto; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/image_size.css",
    "content": ".png {\n  width: 100px;\n  height: 150px; }\n\n.jpg {\n  width: 100px;\n  height: 150px; }\n\n.jpeg {\n  width: 100px;\n  height: 150px; }\n\n.gif {\n  width: 100px;\n  height: 150px; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/images.css",
    "content": ".relative {\n  background-image: url('/images/4x6.png?busted=true'); }\n\n.root-relative {\n  background-image: url('/images/4x6.png?busted=true'); }\n\n.absolute {\n  background-image: url(http://example.com/images/4x6.png); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/layout.css",
    "content": "html, body {\n  height: 100%; }\n\n#layout {\n  clear: both;\n  min-height: 100%;\n  height: auto !important;\n  height: 100%;\n  margin-bottom: -72px; }\n  #layout #layout_footer {\n    height: 72px; }\n\n#footer {\n  clear: both;\n  position: relative;\n  height: 72px; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/legacy_clearfix.css",
    "content": ".clearfix {\n  overflow: hidden;\n  display: inline-block; }\n  .clearfix {\n    display: block; }\n\n.pie-clearfix {\n  display: inline-block; }\n  .pie-clearfix:after {\n    content: \"\\0020\";\n    display: block;\n    height: 0;\n    clear: both;\n    overflow: hidden;\n    visibility: hidden; }\n  .pie-clearfix {\n    display: block; }\n\n.simplified-pie-clearfix {\n  display: inline-block; }\n  .simplified-pie-clearfix:after {\n    content: \"\";\n    display: table;\n    clear: both; }\n  .simplified-pie-clearfix {\n    display: block; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/lists.css",
    "content": "ul.horizontal {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.horizontal li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    white-space: nowrap;\n    float: left;\n    padding-left: 4px;\n    padding-right: 4px; }\n    ul.horizontal li:first-child {\n      padding-left: 0; }\n    ul.horizontal li:last-child {\n      padding-right: 0; }\n    ul.horizontal li.last {\n      padding-right: 0; }\n\nul.wide-horizontal {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.wide-horizontal li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    white-space: nowrap;\n    float: left;\n    padding-left: 10px;\n    padding-right: 10px; }\n    ul.wide-horizontal li:first-child {\n      padding-left: 0; }\n    ul.wide-horizontal li:last-child {\n      padding-right: 0; }\n    ul.wide-horizontal li.last {\n      padding-right: 0; }\n\nul.right-horizontal {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.right-horizontal li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    white-space: nowrap;\n    float: right;\n    padding-left: 4px;\n    padding-right: 4px; }\n    ul.right-horizontal li:first-child {\n      padding-right: 0; }\n    ul.right-horizontal li:last-child {\n      padding-left: 0; }\n    ul.right-horizontal li.last {\n      padding-left: 0; }\n\nul.no-padding {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.no-padding li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    white-space: nowrap;\n    float: left; }\n\nul.inline-block {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.inline-block li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    display: inline-block;\n    vertical-align: middle;\n    *vertical-align: auto;\n    *zoom: 1;\n    *display: inline;\n    white-space: nowrap; }\n\nul.wide-inline-block {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.wide-inline-block li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    display: inline-block;\n    vertical-align: middle;\n    *vertical-align: auto;\n    *zoom: 1;\n    *display: inline;\n    white-space: nowrap;\n    padding-left: 10px;\n    padding-right: 10px; }\n\nul.inline {\n  list-style-type: none; }\n  ul.inline, ul.inline li {\n    margin: 0;\n    padding: 0;\n    display: inline; }\n\nul.comma {\n  list-style-type: none; }\n  ul.comma, ul.comma li {\n    margin: 0;\n    padding: 0;\n    display: inline; }\n  ul.comma li:after {\n    content: \", \"; }\n  ul.comma li:last-child:after {\n    content: \"\"; }\n  ul.comma li.last:after {\n    content: \"\"; }\n\nul.no-bullets {\n  list-style: none; }\n  ul.no-bullets li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0; }\n\nul.pretty {\n  margin-left: 0; }\n  ul.pretty li {\n    padding-left: 14px;\n    background: url('/images/4x6.png?busted=true') no-repeat 4px 7px;\n    list-style-type: none; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/opacity.css",
    "content": "div {\n  filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false);\n  opacity: 1; }\n\ndiv {\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20);\n  opacity: 0.2; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/print.css",
    "content": ".noprint, .no-print {\n  display: none; }\n\naddress.print-only, article.print-only, aside.print-only, blockquote.print-only, center.print-only, dir.print-only, div.print-only, dd.print-only, details.print-only, dl.print-only, dt.print-only, fieldset.print-only, figcaption.print-only, figure.print-only, form.print-only, footer.print-only, frameset.print-only, h1.print-only, h2.print-only, h3.print-only, h4.print-only, h5.print-only, h6.print-only, hr.print-only, header.print-only, hgroup.print-only, isindex.print-only, main.print-only, menu.print-only, nav.print-only, noframes.print-only, noscript.print-only, ol.print-only, p.print-only, pre.print-only, section.print-only, summary.print-only, ul.print-only {\n  display: block; }\n\na.print-only, abbr.print-only, acronym.print-only, audio.print-only, b.print-only, basefont.print-only, bdo.print-only, big.print-only, br.print-only, canvas.print-only, cite.print-only, code.print-only, command.print-only, datalist.print-only, dfn.print-only, em.print-only, embed.print-only, font.print-only, i.print-only, img.print-only, input.print-only, keygen.print-only, kbd.print-only, label.print-only, mark.print-only, meter.print-only, output.print-only, progress.print-only, q.print-only, rp.print-only, rt.print-only, ruby.print-only, s.print-only, samp.print-only, select.print-only, small.print-only, span.print-only, strike.print-only, strong.print-only, sub.print-only, sup.print-only, textarea.print-only, time.print-only, tt.print-only, u.print-only, var.print-only, video.print-only, wbr.print-only {\n  display: inline; }\n\n.print-only {\n  display: none; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/regions.css",
    "content": ".source {\n  -ms-flow-into: target;\n  -webkit-flow-into: target;\n  flow-into: target; }\n\n.new-container {\n  -ms-flow-from: target;\n  -webkit-flow-from: target;\n  flow-from: target; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/replacement.css",
    "content": ".basic {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('/images/4x6.png?busted=true');\n  background-repeat: no-repeat;\n  background-position: 50% 50%; }\n\n.with-dimensions {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('/images/4x6.png?busted=true');\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n  width: 6px;\n  height: 4px; }\n\n.with-dimensions-inline {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAIAAAAiZtkUAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAI0lEQVQIHWOwtLT8//9/eno6kISwGdD4QDkGZHkIG6QKTS8A/s4vHesO+KkAAAAASUVORK5CYII=');\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n  width: 6px;\n  height: 4px; }\n\n.with-position {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('/images/4x6.png?busted=true');\n  background-repeat: no-repeat;\n  background-position: 10px top; }\n\n.with-arbitrary-url {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url(http://google.com/logo.gif);\n  background-repeat: no-repeat;\n  background-position: 10px top; }\n\n.with-inline-url {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAIAAAAiZtkUAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAI0lEQVQIHWOwtLT8//9/eno6kISwGdD4QDkGZHkIG6QKTS8A/s4vHesO+KkAAAAASUVORK5CYII=');\n  background-repeat: no-repeat;\n  background-position: 10px top; }\n\n.with-image-url {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('/images/4x6.png?busted=true');\n  background-repeat: no-repeat;\n  background-position: 10px top; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/reset.css",
    "content": "html, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font: inherit;\n  font-size: 100%;\n  vertical-align: baseline; }\n\nhtml {\n  line-height: 1; }\n\nol, ul {\n  list-style: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ncaption, th, td {\n  text-align: left;\n  font-weight: normal;\n  vertical-align: middle; }\n\nq, blockquote {\n  quotes: none; }\n  q:before, q:after, blockquote:before, blockquote:after {\n    content: \"\";\n    content: none; }\n\na img {\n  border: none; }\n\narticle, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {\n  display: block; }\n\n.unregistered-only, .registered-only {\n  display: none; }\n\nbody.registered a.registered-only, body.registered abbr.registered-only, body.registered acronym.registered-only, body.registered audio.registered-only, body.registered b.registered-only, body.registered basefont.registered-only, body.registered bdo.registered-only, body.registered big.registered-only, body.registered br.registered-only, body.registered canvas.registered-only, body.registered cite.registered-only, body.registered code.registered-only, body.registered command.registered-only, body.registered datalist.registered-only, body.registered dfn.registered-only, body.registered em.registered-only, body.registered embed.registered-only, body.registered font.registered-only, body.registered i.registered-only, body.registered img.registered-only, body.registered input.registered-only, body.registered keygen.registered-only, body.registered kbd.registered-only, body.registered label.registered-only, body.registered mark.registered-only, body.registered meter.registered-only, body.registered output.registered-only, body.registered progress.registered-only, body.registered q.registered-only, body.registered rp.registered-only, body.registered rt.registered-only, body.registered ruby.registered-only, body.registered s.registered-only, body.registered samp.registered-only, body.registered select.registered-only, body.registered small.registered-only, body.registered span.registered-only, body.registered strike.registered-only, body.registered strong.registered-only, body.registered sub.registered-only, body.registered sup.registered-only, body.registered textarea.registered-only, body.registered time.registered-only, body.registered tt.registered-only, body.registered u.registered-only, body.registered var.registered-only, body.registered video.registered-only, body.registered wbr.registered-only {\n  display: inline; }\nbody.registered address.registered-only, body.registered article.registered-only, body.registered aside.registered-only, body.registered blockquote.registered-only, body.registered center.registered-only, body.registered dir.registered-only, body.registered div.registered-only, body.registered dd.registered-only, body.registered details.registered-only, body.registered dl.registered-only, body.registered dt.registered-only, body.registered fieldset.registered-only, body.registered figcaption.registered-only, body.registered figure.registered-only, body.registered form.registered-only, body.registered footer.registered-only, body.registered frameset.registered-only, body.registered h1.registered-only, body.registered h2.registered-only, body.registered h3.registered-only, body.registered h4.registered-only, body.registered h5.registered-only, body.registered h6.registered-only, body.registered hr.registered-only, body.registered header.registered-only, body.registered hgroup.registered-only, body.registered isindex.registered-only, body.registered main.registered-only, body.registered menu.registered-only, body.registered nav.registered-only, body.registered noframes.registered-only, body.registered noscript.registered-only, body.registered ol.registered-only, body.registered p.registered-only, body.registered pre.registered-only, body.registered section.registered-only, body.registered summary.registered-only, body.registered ul.registered-only {\n  display: block; }\n\nbody.unregistered a.unregistered-only, body.unregistered abbr.unregistered-only, body.unregistered acronym.unregistered-only, body.unregistered audio.unregistered-only, body.unregistered b.unregistered-only, body.unregistered basefont.unregistered-only, body.unregistered bdo.unregistered-only, body.unregistered big.unregistered-only, body.unregistered br.unregistered-only, body.unregistered canvas.unregistered-only, body.unregistered cite.unregistered-only, body.unregistered code.unregistered-only, body.unregistered command.unregistered-only, body.unregistered datalist.unregistered-only, body.unregistered dfn.unregistered-only, body.unregistered em.unregistered-only, body.unregistered embed.unregistered-only, body.unregistered font.unregistered-only, body.unregistered i.unregistered-only, body.unregistered img.unregistered-only, body.unregistered input.unregistered-only, body.unregistered keygen.unregistered-only, body.unregistered kbd.unregistered-only, body.unregistered label.unregistered-only, body.unregistered mark.unregistered-only, body.unregistered meter.unregistered-only, body.unregistered output.unregistered-only, body.unregistered progress.unregistered-only, body.unregistered q.unregistered-only, body.unregistered rp.unregistered-only, body.unregistered rt.unregistered-only, body.unregistered ruby.unregistered-only, body.unregistered s.unregistered-only, body.unregistered samp.unregistered-only, body.unregistered select.unregistered-only, body.unregistered small.unregistered-only, body.unregistered span.unregistered-only, body.unregistered strike.unregistered-only, body.unregistered strong.unregistered-only, body.unregistered sub.unregistered-only, body.unregistered sup.unregistered-only, body.unregistered textarea.unregistered-only, body.unregistered time.unregistered-only, body.unregistered tt.unregistered-only, body.unregistered u.unregistered-only, body.unregistered var.unregistered-only, body.unregistered video.unregistered-only, body.unregistered wbr.unregistered-only {\n  display: inline; }\nbody.unregistered address.unregistered-only, body.unregistered article.unregistered-only, body.unregistered aside.unregistered-only, body.unregistered blockquote.unregistered-only, body.unregistered center.unregistered-only, body.unregistered dir.unregistered-only, body.unregistered div.unregistered-only, body.unregistered dd.unregistered-only, body.unregistered details.unregistered-only, body.unregistered dl.unregistered-only, body.unregistered dt.unregistered-only, body.unregistered fieldset.unregistered-only, body.unregistered figcaption.unregistered-only, body.unregistered figure.unregistered-only, body.unregistered form.unregistered-only, body.unregistered footer.unregistered-only, body.unregistered frameset.unregistered-only, body.unregistered h1.unregistered-only, body.unregistered h2.unregistered-only, body.unregistered h3.unregistered-only, body.unregistered h4.unregistered-only, body.unregistered h5.unregistered-only, body.unregistered h6.unregistered-only, body.unregistered hr.unregistered-only, body.unregistered header.unregistered-only, body.unregistered hgroup.unregistered-only, body.unregistered isindex.unregistered-only, body.unregistered main.unregistered-only, body.unregistered menu.unregistered-only, body.unregistered nav.unregistered-only, body.unregistered noframes.unregistered-only, body.unregistered noscript.unregistered-only, body.unregistered ol.unregistered-only, body.unregistered p.unregistered-only, body.unregistered pre.unregistered-only, body.unregistered section.unregistered-only, body.unregistered summary.unregistered-only, body.unregistered ul.unregistered-only {\n  display: block; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/selection.css",
    "content": "*::-moz-selection {\n  background-color: #fe57a1;\n  color: #fff; }\n*::selection {\n  background-color: #fe57a1;\n  color: #fff; }\n\n.hot-pink::-moz-selection {\n  background-color: #fe57a1;\n  color: #fff; }\n.hot-pink::selection {\n  background-color: #fe57a1;\n  color: #fff; }\n\n.hot-pink-with-arguments::-moz-selection {\n  color: white;\n  background-color: #fe57a1; }\n.hot-pink-with-arguments::selection {\n  color: white;\n  background-color: #fe57a1; }\n\n.hot-pink-with-arguments-and-extra-stuff::-moz-selection {\n  color: white;\n  background-color: #fe57a1;\n  text-decoration: line-through; }\n.hot-pink-with-arguments-and-extra-stuff::selection {\n  color: white;\n  background-color: #fe57a1;\n  text-decoration: line-through; }\n\n.hot-pink-with-default-foreground::-moz-selection {\n  color: black;\n  background-color: #fe57a1; }\n.hot-pink-with-default-foreground::selection {\n  color: black;\n  background-color: #fe57a1; }\n\n.browser-support-is-considered::-moz-selection {\n  color: black;\n  background-color: #fe57a1;\n  prefix: -moz;\n  -moz-prefix: true;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n.browser-support-is-considered::selection {\n  color: black;\n  background-color: #fe57a1;\n  -moz-prefix: false;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/sprites_with_explicit_separator.css",
    "content": ".flag_states_sprite, .flag_states_foo {\n  background-image: url('/images/flag_states-sc42d7bf926.png');\n  background-repeat: no-repeat; }\n\n.flag_states_foo {\n  background-position: 0 0;\n  height: 11px;\n  width: 16px; }\n  .flag_states_foo:hover, .flag_states_foo.foo_hover {\n    background-position: 0 -33px; }\n  .flag_states_foo:target, .flag_states_foo.foo_target {\n    background-position: 0 -44px; }\n  .flag_states_foo:active, .flag_states_foo.foo_active {\n    background-position: 0 -11px; }\n  .flag_states_foo:focus, .flag_states_foo.foo_focus {\n    background-position: 0 -22px; }\n\n.sprite-file {\n  location: url('/images/flag_states/foo.png?busted=true'); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/stretching.css",
    "content": ".stretched-completely {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0; }\n\n.stretched-horizontally {\n  position: absolute;\n  left: 0;\n  right: 0; }\n\n.stretched-right {\n  position: absolute;\n  left: 0;\n  right: 50%; }\n\n.left-pane {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 50%; }\n\n.stretched-left {\n  position: absolute;\n  left: 50%;\n  right: 0; }\n\n.right-pane {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 50%;\n  right: 0; }\n\n.stretched-down {\n  position: absolute;\n  top: 0;\n  bottom: 50%; }\n\n.top-pane {\n  position: absolute;\n  top: 0;\n  bottom: 50%;\n  left: 0;\n  right: 0; }\n\n.stretched-up {\n  position: absolute;\n  top: 50%;\n  bottom: 0; }\n\n.bottom-pane {\n  position: absolute;\n  top: 50%;\n  bottom: 0;\n  left: 0;\n  right: 0; }\n\n.viewport {\n  position: absolute;\n  top: 10px;\n  bottom: 30px;\n  left: 40px;\n  right: 20px; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/support.css",
    "content": "/* ### Compass Support ---------- */\n/* - [function] set-arglist-default() with no arguments (1 Assertions, 1 Passed, 0 Failed) */\n/* - [function] set-arglist-default() with a \"default\" argument (1 Assertions, 1 Passed, 0 Failed) */\n/* - [function] set-arglist-default() with a \"default\" argument and another argument (1 Assertions, 1 Passed, 0 Failed) */\n/* - [function] set-arglist-default() with a \"default\" argument not first and another argument (1 Assertions, 1 Passed, 0 Failed) */\n/* - [function] support-legacy-browser() from threshold (2 Assertions, 2 Passed, 0 Failed) */\n/* - [function] support-legacy-browser() from minimums (2 Assertions, 2 Passed, 0 Failed) */\n/* - [function] browser-out-of-scope() with no scope (2 Assertions, 2 Passed, 0 Failed) */\n/* - prefix context tracking (9 Assertions, 9 Passed, 0 Failed) */\n/* - [function] browser-out-of-scope() with a scope (2 Assertions, 2 Passed, 0 Failed) */\n/* - [function] browser-out-of-scope() with version (3 Assertions, 3 Passed, 0 Failed) */\n/* - [mixin] with-prefix() (4 Assertions, 4 Passed, 0 Failed) */\n/* - [mixin] with-each-prefix() (1 Assertions, 1 Passed, 0 Failed) */\n/* - [mixin] with-each-prefix() respects $supported-browsers (1 Assertions, 1 Passed, 0 Failed) */\n/* - [mixin] with-each-prefix() respects $current-prefix (3 Assertions, 3 Passed, 0 Failed) */\n/* - [fuction] has-browser-subset() (5 Assertions, 5 Passed, 0 Failed) */\n/*\n*/\n/* 15 Tests: */\n/* - 15 Passed */\n/* - 0 Failed */\n/*\n*/\n/* Capability css-animation is prefixed with -moz because 0.57224% of users need it which is more than the threshold of 0.1%. */\n/* Creating new -moz context. */\n@-moz-keyframes foo {\n  0% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: ie 8 is incompatible with -moz. */\n    opacity: 0; }\n\n  100% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: ie 8 is incompatible with -moz. */\n    opacity: 1; } }\n/* Capability css-animation is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n/* Capability css-animation is not prefixed with -o because 0.02146% of users are affected which is less than the threshold of 0.1. */\n/* Capability css-animation is prefixed with -webkit because 57.87258% of users need it which is more than the threshold of 0.1%. */\n/* Creating new -webkit context. */\n@-webkit-keyframes foo {\n  0% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: ie 8 is incompatible with -webkit. */\n    opacity: 0; }\n\n  100% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: ie 8 is incompatible with -webkit. */\n    opacity: 1; } }\n@keyframes foo {\n  0% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: The current scope only works with ie 10 - 11. */\n    opacity: 0; }\n\n  100% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: The current scope only works with ie 10 - 11. */\n    opacity: 1; } }\n.foo {\n  /* Capability css-animation is prefixed with -moz because 0.57224% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -moz context. */\n  -moz-animation: foo 1s;\n  /* Capability css-animation is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-animation is not prefixed with -o because 0.02146% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-animation is prefixed with -webkit because 57.87258% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-animation: foo 1s;\n  animation: foo 1s; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/text_shadow.css",
    "content": ".default-single-text-shadow {\n  text-shadow: 0px 0px 1px #aaaaaa; }\n\n.none {\n  text-shadow: none; }\n\n.color-only {\n  text-shadow: 0px 0px 1px #cccccc; }\n\n.color-first-with-params {\n  text-shadow: 2px 2px 5px #cccccc;\n  text-shadow: 2px 2px 5px 2px #cccccc; }\n\n.color-last-with-params {\n  text-shadow: 2px 2px 5px #cccccc;\n  text-shadow: 2px 2px 5px 2px #cccccc; }\n\n.default-text-shadow {\n  text-shadow: 0px 0px 1px #aaaaaa; }\n\n.multiple-text-shadows-with-default {\n  text-shadow: 0px 0px 1px #aaaaaa, 2px 2px 5px #222222; }\n\n.multiple-text-shadows {\n  text-shadow: 4px 4px 10px #444444, 2px 2px 5px #222222; }\n\n.multiple-text-shadows-with-spread {\n  text-shadow: 4px 4px 10px #444444, 2px 2px 5px #222222;\n  text-shadow: 4px 4px 10px 1px #444444, 2px 2px 5px 3px #222222; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/transform.css",
    "content": ".apply-origin-2d {\n  -moz-transform-origin: 2px 5%;\n  -ms-transform-origin: 2px 5%;\n  -webkit-transform-origin: 2px 5%;\n  transform-origin: 2px 5%; }\n\n.apply-origin-3d {\n  -moz-transform-origin: 2px 5% 2in;\n  -webkit-transform-origin: 2px 5% 2in;\n  transform-origin: 2px 5% 2in; }\n\n.transform-origin-2d {\n  -moz-transform-origin: 100px 100px;\n  -ms-transform-origin: 100px 100px;\n  -webkit-transform-origin: 100px 100px;\n  transform-origin: 100px 100px; }\n\n.transform-origin-3d {\n  -moz-transform-origin: 100px 100px 100px;\n  -webkit-transform-origin: 100px 100px 100px;\n  transform-origin: 100px 100px 100px; }\n\n.transform-2d {\n  -moz-transform: rotateY(20deg);\n  -ms-transform: rotateY(20deg);\n  -webkit-transform: rotateY(20deg);\n  transform: rotateY(20deg); }\n\n.transform-3d {\n  -moz-transform: rotateZ(20deg);\n  -webkit-transform: rotateZ(20deg);\n  transform: rotateZ(20deg); }\n\n.perspective {\n  -moz-perspective: 500;\n  -webkit-perspective: 500;\n  perspective: 500; }\n\n.perspective-origin {\n  -moz-perspective-origin: 25% 25%;\n  -webkit-perspective-origin: 25% 25%;\n  perspective-origin: 25% 25%; }\n\n.transform-style {\n  -moz-transform-style: preserve-3d;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.backface-visibility {\n  -moz-backface-visibility: hidden;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.scale {\n  -moz-transform: scale(30px, 50px);\n  -ms-transform: scale(30px, 50px);\n  -webkit-transform: scale(30px, 50px);\n  transform: scale(30px, 50px); }\n\n.scale-3d {\n  -moz-transform: scale(30px, 50px);\n  -webkit-transform: scale(30px, 50px);\n  transform: scale(30px, 50px); }\n\n.scale-with-perspective {\n  -moz-transform: perspective(500) scale(30px, 50px);\n  -ms-transform: perspective(500) scale(30px, 50px);\n  -webkit-transform: perspective(500) scale(30px, 50px);\n  transform: perspective(500) scale(30px, 50px); }\n\n.scale-3d-with-perspective {\n  -moz-transform: perspective(500) scale(30px, 50px);\n  -webkit-transform: perspective(500) scale(30px, 50px);\n  transform: perspective(500) scale(30px, 50px); }\n\n.scale-x {\n  -moz-transform: scaleX(30px);\n  -ms-transform: scaleX(30px);\n  -webkit-transform: scaleX(30px);\n  transform: scaleX(30px); }\n\n.scale-x-3d {\n  -moz-transform: scaleX(30px);\n  -webkit-transform: scaleX(30px);\n  transform: scaleX(30px); }\n\n.scale-x-with-perspective {\n  -moz-transform: perspective(500) scaleX(30px);\n  -ms-transform: perspective(500) scaleX(30px);\n  -webkit-transform: perspective(500) scaleX(30px);\n  transform: perspective(500) scaleX(30px); }\n\n.scale-x-3d-with-perspective {\n  -moz-transform: perspective(500) scaleX(30px);\n  -webkit-transform: perspective(500) scaleX(30px);\n  transform: perspective(500) scaleX(30px); }\n\n.scale-y {\n  -moz-transform: scaleY(50px);\n  -ms-transform: scaleY(50px);\n  -webkit-transform: scaleY(50px);\n  transform: scaleY(50px); }\n\n.scale-y-3d {\n  -moz-transform: scaleY(50px);\n  -webkit-transform: scaleY(50px);\n  transform: scaleY(50px); }\n\n.scale-y-with-perspective {\n  -moz-transform: perspective(500) scaleY(50px);\n  -ms-transform: perspective(500) scaleY(50px);\n  -webkit-transform: perspective(500) scaleY(50px);\n  transform: perspective(500) scaleY(50px); }\n\n.scale-y-3d-with-perspective {\n  -moz-transform: perspective(500) scaleY(50px);\n  -webkit-transform: perspective(500) scaleY(50px);\n  transform: perspective(500) scaleY(50px); }\n\n.scale-z {\n  -moz-transform: scaleZ(50px);\n  -webkit-transform: scaleZ(50px);\n  transform: scaleZ(50px); }\n\n.scale-z-with-perspective {\n  -moz-transform: perspective(500) scaleZ(50px);\n  -webkit-transform: perspective(500) scaleZ(50px);\n  transform: perspective(500) scaleZ(50px); }\n\n.scale3d {\n  -moz-transform: scale3d(30px, 50px, 100px);\n  -webkit-transform: scale3d(30px, 50px, 100px);\n  transform: scale3d(30px, 50px, 100px); }\n\n.scaled3-with-perspective {\n  -moz-transform: perspective(500) scale3d(30px, 50px, 100px);\n  -webkit-transform: perspective(500) scale3d(30px, 50px, 100px);\n  transform: perspective(500) scale3d(30px, 50px, 100px); }\n\n.rotate {\n  -moz-transform: perspective(500) rotate(25deg);\n  -ms-transform: perspective(500) rotate(25deg);\n  -webkit-transform: perspective(500) rotate(25deg);\n  transform: perspective(500) rotate(25deg); }\n\n.rotate-with-perspective {\n  -moz-transform: perspective(500) rotate(25deg);\n  -ms-transform: perspective(500) rotate(25deg);\n  -webkit-transform: perspective(500) rotate(25deg);\n  transform: perspective(500) rotate(25deg); }\n\n.rotate-z {\n  -moz-transform: rotate(25deg);\n  -ms-transform: rotate(25deg);\n  -webkit-transform: rotate(25deg);\n  transform: rotate(25deg); }\n\n.rotate-z-with-perspective {\n  -moz-transform: perspective(500) rotate(25deg);\n  -ms-transform: perspective(500) rotate(25deg);\n  -webkit-transform: perspective(500) rotate(25deg);\n  transform: perspective(500) rotate(25deg); }\n\n.rotate-x {\n  -moz-transform: rotateX(25deg);\n  -webkit-transform: rotateX(25deg);\n  transform: rotateX(25deg); }\n\n.rotate-x-with-perspective {\n  -moz-transform: perspective(500) rotateX(25deg);\n  -webkit-transform: perspective(500) rotateX(25deg);\n  transform: perspective(500) rotateX(25deg); }\n\n.rotate-y {\n  -moz-transform: rotateY(25deg);\n  -webkit-transform: rotateY(25deg);\n  transform: rotateY(25deg); }\n\n.rotate-y-with-perspective {\n  -moz-transform: perspective(500) rotateY(25deg);\n  -webkit-transform: perspective(500) rotateY(25deg);\n  transform: perspective(500) rotateY(25deg); }\n\n.rotate-3d {\n  -moz-transform: rotate3d(5, 2, 1, 75deg);\n  -webkit-transform: rotate3d(5, 2, 1, 75deg);\n  transform: rotate3d(5, 2, 1, 75deg); }\n\n.rotate-3d-with-perspective {\n  -moz-transform: perspective(500) rotate3d(5, 2, 1, 75deg);\n  -webkit-transform: perspective(500) rotate3d(5, 2, 1, 75deg);\n  transform: perspective(500) rotate3d(5, 2, 1, 75deg); }\n\n.translate {\n  -moz-transform: translate(20px, 30%);\n  -ms-transform: translate(20px, 30%);\n  -webkit-transform: translate(20px, 30%);\n  transform: translate(20px, 30%); }\n\n.translate-with-perspective {\n  -moz-transform: perspective(500) translate(20px, 30%);\n  -ms-transform: perspective(500) translate(20px, 30%);\n  -webkit-transform: perspective(500) translate(20px, 30%);\n  transform: perspective(500) translate(20px, 30%); }\n\n.translate-3d {\n  -moz-transform: translate(20px, 30%);\n  -webkit-transform: translate(20px, 30%);\n  transform: translate(20px, 30%); }\n\n.translate-3d-with-perspective {\n  -moz-transform: perspective(500) translate(20px, 30%);\n  -webkit-transform: perspective(500) translate(20px, 30%);\n  transform: perspective(500) translate(20px, 30%); }\n\n.translate-x {\n  -moz-transform: translateX(30px);\n  -ms-transform: translateX(30px);\n  -webkit-transform: translateX(30px);\n  transform: translateX(30px); }\n\n.translate-x-3d {\n  -moz-transform: translateX(30px);\n  -webkit-transform: translateX(30px);\n  transform: translateX(30px); }\n\n.translate-x-with-perspective {\n  -moz-transform: perspective(500) translateX(30px);\n  -ms-transform: perspective(500) translateX(30px);\n  -webkit-transform: perspective(500) translateX(30px);\n  transform: perspective(500) translateX(30px); }\n\n.translate-x-3d-with-perspective {\n  -moz-transform: perspective(500) translateX(30px);\n  -webkit-transform: perspective(500) translateX(30px);\n  transform: perspective(500) translateX(30px); }\n\n.translate-y {\n  -moz-transform: translateY(30px);\n  -ms-transform: translateY(30px);\n  -webkit-transform: translateY(30px);\n  transform: translateY(30px); }\n\n.translate-y-3d {\n  -moz-transform: translateY(30px);\n  -webkit-transform: translateY(30px);\n  transform: translateY(30px); }\n\n.translate-y-with-perspective {\n  -moz-transform: perspective(500) translateY(30px);\n  -ms-transform: perspective(500) translateY(30px);\n  -webkit-transform: perspective(500) translateY(30px);\n  transform: perspective(500) translateY(30px); }\n\n.translate-y-3d-with-perspective {\n  -moz-transform: perspective(500) translateY(30px);\n  -webkit-transform: perspective(500) translateY(30px);\n  transform: perspective(500) translateY(30px); }\n\n.translate-z {\n  -moz-transform: translateZ(30px);\n  -webkit-transform: translateZ(30px);\n  transform: translateZ(30px); }\n\n.translate-z-with-perspective {\n  -moz-transform: perspective(500) translateZ(30px);\n  -webkit-transform: perspective(500) translateZ(30px);\n  transform: perspective(500) translateZ(30px); }\n\n.translate-3d {\n  -moz-transform: translate3d(30px, 50px, 75px);\n  -webkit-transform: translate3d(30px, 50px, 75px);\n  transform: translate3d(30px, 50px, 75px); }\n\n.translate-3d-with-perspective {\n  -moz-transform: perspective(500) translate3d(30px, 50px, 75px);\n  -webkit-transform: perspective(500) translate3d(30px, 50px, 75px);\n  transform: perspective(500) translate3d(30px, 50px, 75px); }\n\n.skew {\n  -moz-transform: skew(20deg, 50deg);\n  -ms-transform: skew(20deg, 50deg);\n  -webkit-transform: skew(20deg, 50deg);\n  transform: skew(20deg, 50deg); }\n\n.skew-3d {\n  -moz-transform: skew(20deg, 50deg);\n  -webkit-transform: skew(20deg, 50deg);\n  transform: skew(20deg, 50deg); }\n\n.skew-x {\n  -moz-transform: skewX(20deg);\n  -ms-transform: skewX(20deg);\n  -webkit-transform: skewX(20deg);\n  transform: skewX(20deg); }\n\n.skew-x-3d {\n  -moz-transform: skewX(20deg);\n  -webkit-transform: skewX(20deg);\n  transform: skewX(20deg); }\n\n.skew-y {\n  -moz-transform: skewY(20deg);\n  -ms-transform: skewY(20deg);\n  -webkit-transform: skewY(20deg);\n  transform: skewY(20deg); }\n\n.skew-y-3d {\n  -moz-transform: skewY(20deg);\n  -webkit-transform: skewY(20deg);\n  transform: skewY(20deg); }\n\n.create-transform-2d {\n  -moz-transform: perspective(500) scale(20px, 20px) rotateX(25deg) rotateY(25deg) rotate3d(false 50px) translateX(50px) translateZ(50deg) skew(50deg, 50%);\n  -ms-transform: perspective(500) scale(20px, 20px) rotateX(25deg) rotateY(25deg) rotate3d(false 50px) translateX(50px) translateZ(50deg) skew(50deg, 50%);\n  -webkit-transform: perspective(500) scale(20px, 20px) rotateX(25deg) rotateY(25deg) rotate3d(false 50px) translateX(50px) translateZ(50deg) skew(50deg, 50%);\n  transform: perspective(500) scale(20px, 20px) rotateX(25deg) rotateY(25deg) rotate3d(false 50px) translateX(50px) translateZ(50deg) skew(50deg, 50%);\n  -moz-transform-origin: 50%;\n  -ms-transform-origin: 50%;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%; }\n\n.create-transform-3d {\n  -moz-transform: perspective(500) scale3d(20px, 20px, 20px) rotateX(25deg) rotateY(25deg) rotateZ(25deg) rotate3d(false 50px) translate3d(50px, 50px, 50deg) skew(50deg, 50%);\n  -ms-transform: perspective(500) scale3d(20px, 20px, 20px) rotateX(25deg) rotateY(25deg) rotateZ(25deg) rotate3d(false 50px) translate3d(50px, 50px, 50deg) skew(50deg, 50%);\n  -webkit-transform: perspective(500) scale3d(20px, 20px, 20px) rotateX(25deg) rotateY(25deg) rotateZ(25deg) rotate3d(false 50px) translate3d(50px, 50px, 50deg) skew(50deg, 50%);\n  transform: perspective(500) scale3d(20px, 20px, 20px) rotateX(25deg) rotateY(25deg) rotateZ(25deg) rotate3d(false 50px) translate3d(50px, 50px, 50deg) skew(50deg, 50%);\n  -moz-transform-origin: 50% 50%;\n  -ms-transform-origin: 50% 50%;\n  -webkit-transform-origin: 50% 50%;\n  transform-origin: 50% 50%; }\n\n.simple-transform {\n  -moz-transform:  scale(25px, 25px) rotateZ(25deg) translate(10px, 10px) skew(30deg, 30deg);\n  -ms-transform:  scale(25px, 25px) rotateZ(25deg) translate(10px, 10px) skew(30deg, 30deg);\n  -webkit-transform:  scale(25px, 25px) rotateZ(25deg) translate(10px, 10px) skew(30deg, 30deg);\n  transform:  scale(25px, 25px) rotateZ(25deg) translate(10px, 10px) skew(30deg, 30deg);\n  -moz-transform-origin: 10% 10%;\n  -ms-transform-origin: 10% 10%;\n  -webkit-transform-origin: 10% 10%;\n  transform-origin: 10% 10%; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/transition.css",
    "content": ".single-transition-without-delay {\n  -moz-transition: all 0.6s ease-out;\n  -o-transition: all 0.6s ease-out;\n  -webkit-transition: all 0.6s ease-out;\n  transition: all 0.6s ease-out; }\n\n.single-transition-with-delay {\n  -moz-transition: all 0.6s ease-out 0.2s;\n  -o-transition: all 0.6s ease-out 0.2s;\n  -webkit-transition: all 0.6s ease-out;\n  -webkit-transition-delay: 0.2s;\n  transition: all 0.6s ease-out 0.2s; }\n\n.transition-duration-list {\n  -moz-transition-duration: 0.2s, 0.5s, 0.2s;\n  -o-transition-duration: 0.2s, 0.5s, 0.2s;\n  -webkit-transition-duration: 0.2s, 0.5s, 0.2s;\n  transition-duration: 0.2s, 0.5s, 0.2s; }\n\n.multiple-transition-durations {\n  -moz-transition-duration: 0.2s, 0.5s, 0.2s;\n  -o-transition-duration: 0.2s, 0.5s, 0.2s;\n  -webkit-transition-duration: 0.2s, 0.5s, 0.2s;\n  transition-duration: 0.2s, 0.5s, 0.2s; }\n\n.single-transform-transition-without-delay {\n  -moz-transition: -moz-transform 0.6s ease-out;\n  -o-transition: -o-transform 0.6s ease-out;\n  -webkit-transition: -webkit-transform 0.6s ease-out;\n  transition: transform 0.6s ease-out; }\n\n.single-transform-transition-with-delay {\n  -moz-transition: -moz-transform 0.6s ease-out 0.2s;\n  -o-transition: -o-transform 0.6s ease-out 0.2s;\n  -webkit-transition: -webkit-transform 0.6s ease-out;\n  -webkit-transition-delay: 0.2s;\n  transition: transform 0.6s ease-out 0.2s; }\n\n.transform-transition {\n  -moz-transition: -moz-transform 0.6s ease-out;\n  -o-transition: -o-transform 0.6s ease-out;\n  -webkit-transition: -webkit-transform 0.6s ease-out;\n  transition: transform 0.6s ease-out; }\n\n.multiple-transitions {\n  -moz-transition: -moz-transform 0.6s ease-out, opacity 0.2s ease-in;\n  -o-transition: -o-transform 0.6s ease-out, opacity 0.2s ease-in;\n  -webkit-transition: -webkit-transform 0.6s ease-out, opacity 0.2s ease-in;\n  transition: transform 0.6s ease-out, opacity 0.2s ease-in; }\n\n.transition-property {\n  -moz-transition-property: -moz-transform;\n  -o-transition-property: -o-transform;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform; }\n\n.transition-properties {\n  -moz-transition-property: -moz-transform, opacity, width, height, left, top;\n  -o-transition-property: -o-transform, opacity, width, height, left, top;\n  -webkit-transition-property: -webkit-transform, opacity, width, height, left, top;\n  transition-property: transform, opacity, width, height, left, top; }\n\n.multiple-transition-properties {\n  -moz-transition-property: opacity, -moz-transform, left;\n  -o-transition-property: opacity, -o-transform, left;\n  -webkit-transition-property: opacity, -webkit-transform, left;\n  transition-property: opacity, transform, left; }\n\n.default-transition {\n  -moz-transition: all 1s;\n  -o-transition: all 1s;\n  -webkit-transition: all 1s;\n  transition: all 1s; }\n\n.transition-timing {\n  -moz-transition-timing-function: ease-in;\n  -o-transition-timing-function: ease-in;\n  -webkit-transition-timing-function: ease-in;\n  transition-timing-function: ease-in; }\n\n.transition-timings {\n  -moz-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  -o-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  -webkit-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0); }\n\n.transition-timings-list {\n  -moz-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  -o-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  -webkit-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0); }\n\n.transition-delay {\n  -moz-transition-delay: 1s;\n  -o-transition-delay: 1s;\n  -webkit-transition-delay: 1s;\n  transition-delay: 1s; }\n\n.transition-delays {\n  -moz-transition-delay: 1s, 2s, 3s;\n  -o-transition-delay: 1s, 2s, 3s;\n  -webkit-transition-delay: 1s, 2s, 3s;\n  transition-delay: 1s, 2s, 3s; }\n\n.transition-delays-list {\n  -moz-transition-delay: 1s, 2s, 3s;\n  -o-transition-delay: 1s, 2s, 3s;\n  -webkit-transition-delay: 1s, 2s, 3s;\n  transition-delay: 1s, 2s, 3s; }\n\n.regression-912 {\n  -moz-transition: background-color 0.5s ease-in 0s, width 0.5s ease-out 0s, height 0.5s ease-in 0s, top 0.5s ease-out 0s;\n  -o-transition: background-color 0.5s ease-in 0s, width 0.5s ease-out 0s, height 0.5s ease-in 0s, top 0.5s ease-out 0s;\n  -webkit-transition: background-color 0.5s ease-in, width 0.5s ease-out, height 0.5s ease-in, top 0.5s ease-out;\n  -webkit-transition-delay: 0s, 0s, 0s, 0s;\n  transition: background-color 0.5s ease-in 0s, width 0.5s ease-out 0s, height 0.5s ease-in 0s, top 0.5s ease-out 0s; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/typography/links/hover-link.css",
    "content": "a {\n  text-decoration: none; }\n  a:hover, a:focus {\n    text-decoration: underline; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/units.css",
    "content": ".foo {\n  width: 600px;\n  height: 200px; }\n\n.foo .test {\n  /* 16px for margins should be 1em */\n  margin-top: 1em;\n  /* 16px for margins should be 2.66667% (relative to parent's width) */\n  margin-right: 2.66667%;\n  /* 1.35em for margins should be 3.6% (relative to parent's width,\n   * even for top and bottom margins) */\n  margin-bottom: 3.6%;\n  /* 16px for margins should be 2ex */\n  margin-left: 2ex; }\n\n.bar {\n  font-size: 18px;\n  width: 360px; }\n\n.bar .test {\n  /* 150% for line-height should be 27px */\n  line-height: 27px;\n  /* 1px should always be .0625rem for this page */\n  border-top: 0.0625rem;\n  /* 2em for this element should be 9.525mm (relative to own font-size, as inherited) */\n  margin-top: 9.525mm;\n  /* 2px for margins should be .55556% (relative to parent's width) */\n  margin-right: 0.55556%;\n  /* 1rem should always be 16px for this page, even when own font-size is 18px */\n  margin-bottom: 16px; }\n\n.rem {\n  background-size: 400px, 100% 32px;\n  background-size: 25rem, 100% 2rem; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/user-interface.css",
    "content": ".user-select {\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  -webkit-user-select: none;\n  user-select: none; }\n\n*:-moz-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n*::-moz-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n*:-ms-input-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n*::-webkit-input-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n\ninput:-moz-placeholder, textarea:-moz-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\ninput::-webkit-input-placeholder, textarea::-webkit-input-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n\n.sets-up-browser-support-for-content:-moz-placeholder {\n  prefix: -moz;\n  -moz-prefix: true;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n.sets-up-browser-support-for-content::-moz-placeholder {\n  prefix: -moz;\n  -moz-prefix: true;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n.sets-up-browser-support-for-content:-ms-input-placeholder {\n  prefix: -ms;\n  -moz-prefix: false;\n  -ms-prefix: true;\n  -webkit-prefix: false; }\n.sets-up-browser-support-for-content::-webkit-input-placeholder {\n  prefix: -webkit;\n  -moz-prefix: false;\n  -ms-prefix: false;\n  -webkit-prefix: true; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/utilities.css",
    "content": ".clearfix {\n  overflow: hidden;\n  *zoom: 1; }\n\n.pie-clearfix {\n  *zoom: 1; }\n  .pie-clearfix:after {\n    content: \"\\0020\";\n    display: block;\n    height: 0;\n    clear: both;\n    overflow: hidden;\n    visibility: hidden; }\n\n.simple-pie-clearfix {\n  *zoom: 1; }\n  .simple-pie-clearfix:after {\n    content: \"\";\n    display: table;\n    clear: both; }\n\np.light {\n  background-color: #f3aead;\n  color: black; }\n\np.dark {\n  background-color: #a22321;\n  color: white; }\n\np.light-with-args {\n  background-color: #f3aead;\n  color: blue; }\n\np.dark-with-args {\n  background-color: #a22321;\n  color: yellow; }\n\nth {\n  background-color: white; }\n  th.even, th:nth-child(2n) {\n    background-color: yellow; }\n\ntr.odd td, tr:nth-child(2n+1) td {\n  background-color: white; }\n  tr.odd td.even, tr.odd td:nth-child(2n), tr:nth-child(2n+1) td.even, tr:nth-child(2n+1) td:nth-child(2n) {\n    background-color: yellow; }\n\ntr.even td {\n  background-color: red; }\n  tr.even td.even, tr.even td:nth-child(2n) {\n    background-color: red; }\n\ntfoot th, tfoot td {\n  background-color: white; }\n  tfoot th.even, tfoot th:nth-child(2n), tfoot td.even, tfoot td:nth-child(2n) {\n    background-color: yellow; }\n\np.ellipsis {\n  white-space: nowrap;\n  overflow: hidden;\n  -ms-text-overflow: ellipsis;\n  -o-text-overflow: ellipsis;\n  text-overflow: ellipsis; }\n\np.ellipsis.moz {\n  white-space: nowrap;\n  overflow: hidden;\n  -ms-text-overflow: ellipsis;\n  -o-text-overflow: ellipsis;\n  text-overflow: ellipsis;\n  -moz-binding: url('/tmp/xml/ellipsis.xml#ellipsis'); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/vertical_rhythm.css",
    "content": "html {\n  font-size: 87.5%;\n  line-height: 1.14286em; }\n\n.small {\n  font-size: 0.85714em;\n  line-height: 1.33333em; }\n\n.padded {\n  margin-top: 1.14286em;\n  padding-top: 1.14286em;\n  padding-bottom: 1.14286em;\n  margin-bottom: 1.14286em; }\n\n.small-padded {\n  font-size: 0.85714em;\n  line-height: 1.33333em;\n  margin-top: 1.33333em;\n  padding-top: 1.33333em;\n  padding-bottom: 1.33333em;\n  margin-bottom: 1.33333em; }\n\n.borders {\n  border-top-width: 0.07143em;\n  border-top-style: solid;\n  padding-top: 1.07143em;\n  border-bottom-width: 0.07143em;\n  border-bottom-style: solid;\n  padding-bottom: 1.07143em; }\n\n.large-borders {\n  font-size: 1.71429em;\n  line-height: 2em;\n  border-top-width: 0.25em;\n  border-top-style: solid;\n  padding-top: 0.41667em;\n  border-bottom-width: 0.25em;\n  border-bottom-style: solid;\n  padding-bottom: 0.41667em; }\n\n.reset {\n  line-height: 1.14286em; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_ems.css",
    "content": "/* New test using em output */\nhtml {\n  font-size: 112.5%;\n  line-height: 1.4em; }\n\n.container {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 1.4em;\n  -o-background-size: 100% 1.4em;\n  -webkit-background-size: 100% 1.4em;\n  background-size: 100% 1.4em;\n  background-position: left top; }\n\np {\n  margin-top: 1.4em;\n  margin-bottom: 1.4em; }\n\nth,\ntd {\n  padding-top: 0.35em;\n  padding-bottom: 0.35em; }\n\n.caption {\n  font-size: 0.72222em;\n  line-height: 1.55077em; }\n\n.spaced-out {\n  line-height: 2.1em; }\n\nblockquote {\n  margin-top: 1.4em;\n  margin-bottom: 1.4em;\n  padding: 0 1.4em; }\n\n.fig-quote > blockquote {\n  margin-bottom: 0.7em; }\n.fig-quote .source {\n  font-size: 0.72222em;\n  line-height: 1.93846em;\n  margin-bottom: 0.96923em; }\n\n.panel {\n  font-size: 0.88889em;\n  line-height: 1.575em;\n  border-width: 0.0625em;\n  border-style: solid;\n  border-color: #aaaaaa;\n  padding: 1.5125em; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_px.css",
    "content": "/* New using px output */\nhtml {\n  font-size: 18px;\n  line-height: 25px; }\n\n.container {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 25px;\n  -o-background-size: 100% 25px;\n  -webkit-background-size: 100% 25px;\n  background-size: 100% 25px;\n  background-position: left top; }\n\np {\n  margin-top: 25px;\n  margin-bottom: 25px; }\n\nth,\ntd {\n  padding-top: 6px;\n  padding-bottom: 6px; }\n\n/* Incremental leading made easy! */\n.caption {\n  font-size: 15px;\n  line-height: 20px; }\n\n.spaced-out {\n  line-height: 37px; }\n\nblockquote {\n  margin-top: 25px;\n  margin-bottom: 25px;\n  padding: 0 25px; }\n\n.fig-quote > blockquote {\n  margin-bottom: 12px; }\n.fig-quote .source {\n  font-size: 15px;\n  line-height: 25px;\n  margin-bottom: 12px; }\n\n.panel {\n  border-width: 1px;\n  border-style: solid;\n  border-color: #aaaaaa;\n  padding: 24px; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_rems.css",
    "content": "/* New using rem output with pixel fallbacks */\nhtml {\n  font-size: 112.5%;\n  line-height: 1.4em; }\n\n.container {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 1.4rem;\n  -o-background-size: 100% 1.4rem;\n  -webkit-background-size: 100% 1.4rem;\n  background-size: 100% 1.4rem;\n  background-position: left top; }\n\np {\n  margin-top: 25px;\n  margin-top: 1.4rem;\n  margin-bottom: 25px;\n  margin-bottom: 1.4rem; }\n\nth,\ntd {\n  padding-top: 6px;\n  padding-top: 0.35rem;\n  padding-bottom: 6px;\n  padding-bottom: 0.35rem; }\n\n/* Incremental leading made easy! */\n.caption {\n  font-size: 15px;\n  font-size: 0.85rem;\n  line-height: 20px;\n  line-height: 1.12rem; }\n\n.spaced-out {\n  line-height: 38px;\n  line-height: 2.1rem; }\n\nblockquote {\n  margin-top: 25px;\n  margin-top: 1.4rem;\n  margin-bottom: 25px;\n  margin-bottom: 1.4rem;\n  padding: 0 1.4rem; }\n\n.fig-quote > blockquote {\n  margin-bottom: 13px;\n  margin-bottom: 0.7rem; }\n.fig-quote .source {\n  font-size: 15px;\n  font-size: 0.85rem;\n  line-height: 25px;\n  line-height: 1.4rem;\n  margin-bottom: 13px;\n  margin-bottom: 0.7rem; }\n\n.panel {\n  border-width: 1px;\n  border-width: 0.05556rem;\n  border-style: solid;\n  border-color: #aaaaaa;\n  padding: 24px;\n  padding: 1.34444rem; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/animation-with-legacy-ie.scss",
    "content": "@import \"compass/css3/animation\";\n@import \"compass/css3/opacity\";\n\n$browser-minimum-versions: (ie: \"6\");\n\n@include keyframes(test) {\n  0%, 100% {\n    @include opacity(1);\n  }\n  50% {\n    @include opacity(0);\n  }\n}\n\n.animation {\n  @include animation(test);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/animation.scss",
    "content": "@import \"compass/css3/animation\";\n\n@include keyframes(test) {\n  0%, 100% {\n    background-color: red; }\n  50% {\n    background-color: blue;\n  }\n}\n\n.animation {\n  @include animation(test);\n}"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/appearance.scss",
    "content": "@import \"compass/css3/appearance\";\n\n.searchfield {\n  @include appearance(searchfield);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/background-clip.scss",
    "content": "@import \"compass/css3/background-clip\";\n\n.background-clip { @include background-clip('border-box'); }\n\n.background-clip-multiple { @include background-clip('border-box', padding-box, content-box); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/background-origin.scss",
    "content": "@import \"compass/css3/background-origin\";\n\n.background-origin { @include background-origin('border-box'); }\n\n.background-origin-multiple { @include background-origin('border-box', padding-box, content-box); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/background-size.scss",
    "content": "@import \"compass/css3/background-size\";\n\n.background-size-default { @include background-size; }\n\n.background-size-single { @include background-size(50% 25%); }\n\n.background-size-multiple { @include background-size(4em 3em, $default-background-size, 50%); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/border_radius.scss",
    "content": "@import \"compass/css3/border-radius\";\n\n.simple   { @include border-radius(4px, 4px); }\n.compound { @include border-radius(2px 5px, 3px 6px); }\n.crazy    { @include border-radius(1px 3px 5px 7px, 2px 4px 6px 8px)}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/box-sizing.scss",
    "content": "@import \"compass/css3/box-sizing\";\n\n.div {\n  @include box-sizing();\n}\n.div {\n  @include box-sizing(content-box);\n}\n.div {\n  @include box-sizing(border-box);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/box.sass",
    "content": "@import compass/css3/box\n\n.hbox\n  +display-box\n  +box-orient\n  +box-align\n  \n  & > *\n    +box-flex\n\n.vbox\n  +display-box\n  +box-orient(vertical)\n  +box-align\n  \n  & > *\n    +box-flex\n\n.spacer\n  +box-flex(1)\n\n.reverse\n  +box-direction(reverse)\n\n.box-flex-0\n  +box-flex(0)\n\n.box-flex-1\n  +box-flex(1)\n\n.box-flex-2\n  +box-flex(2)\n\n.box-flex-group-0\n  +box-flex-group(0)\n\n.box-flex-group-1\n  +box-flex-group(1)\n\n.box-flex-group-2\n  +box-flex-group(2)\n\n.start\n  +box-pack(start)\n\n.end\n  +box-pack(end)\n\n.center\n  +box-pack(center)"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/box_shadow.scss",
    "content": "@import \"compass/css3/box-shadow\";\n\n.no-box-shadow { @include box-shadow(none); }\n.box-shadow { @include box-shadow(default, 2px 2px 5px #222222);}\n.single-box-shadow { @include single-box-shadow;}\n.multiple-box-shadows { @include box-shadow(default, 2px 2px 5px #222222);}\n.legacy-single-box-shadow { @include single-box-shadow(blue);}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/brightness.scss",
    "content": "@import \"compass/utilities/color/brightness\";\n\n.black-is-0-percent {\n  brightness: brightness(black); }\n.white-is-100-percent {\n  brightness: brightness(white); }\n.green-is-58-point-7-percent {\n  brightness: brightness(#00ff00); }\n.blue-is-11-point-4-percent {\n  brightness: brightness(#0000ff); }\n.red-is-29-point-9-percent {\n  brightness: brightness(#ff0000); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/browser-support.scss",
    "content": "@import \"compass/support\";\n@import \"compass/css3/flexbox\";\n\n@function unprefixed-at-version($browser, $capability) {\n  $options: if($capability == flexbox, $flexbox-capability-options, $default-capability-options);\n  @each $version in browser-versions($browser) {\n    @if not browser-requires-prefix($browser, $version, $capability, $options) {\n      @return $version;\n    }\n  }\n  @return null;\n}\n@each $browser in browsers() {\n  $prefix: browser-prefix($browser);\n  .#{$browser} {\n    $versions: browser-versions($browser);\n    versions: $versions;\n    @each $capability in browser-capabilities() {\n      $options: if($capability == flexbox, $flexbox-capability-options, $default-capability-options);\n      @if browser-requires-prefix($browser, nth($versions, 1), $capability, $options) {\n        @if prefix-usage($prefix, $capability, $options) > 0.1 {\n          #{$capability}: $prefix;\n        } @else {\n          #{$capability}: prefix-no-longer-needed;\n        }\n        #{$capability}-unprefixed-at: unprefixed-at-version($browser, $capability);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/color.scss",
    "content": "$contrasted-dark-default: black;\n$contrasted-light-default: white;\n\n@import \"compass/utilities/color\";\n\n.handles-null {\n  content: \"there should be no property below this one\";\n  color: contrast-color(null);\n}\n\n.contrasts-light {\n  @include contrasted(#eeeeee);\n}\n\n.contrasts-dark {\n  @include contrasted(#222222);\n}\n\n.contrasts-light-with-contrast-color-override {\n  @include contrasted(#eeeeee, $dark: red);\n}\n\n.contrasts-dark-with-contrast-color-override {\n  @include contrasted(#222222, $light: yellow);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/columns.scss",
    "content": "@import \"compass/css3/columns\";\n\n.columns            { @include columns(20em 5);               }\n.column-count       { @include column-count(5);               }\n.column-gap         { @include column-gap(10px);              }\n.column-width       { @include column-width(90px);            }\n.column-span        { @include column-span(all);              }\n.column-rule-width  { @include column-rule-width(1px);        }\n.column-rule-style  { @include column-rule-style(dotted);     }\n.column-rule-color  { @include column-rule-color(blue);       }\n.column-rule        { @include column-rule(1px, solid, blue); }\n.column-rule-spaced { @include column-rule(1px solid blue);   }\n.column-break-before{ @include column-break(before, always);}\n.column-break-after { @include column-break(after, always); }\n.column-break-inside{ @include column-break(inside);        }\n.column-count       \t\t\t{ @include column-count(5);               }\n.column-gap         \t\t\t{ @include column-gap(10px);              }\n.column-width       \t\t\t{ @include column-width(90px);            }\n.column-rule-width  \t\t\t{ @include column-rule-width(1px);        }\n.column-rule-style  \t\t\t{ @include column-rule-style(dotted);     }\n.column-rule-color  \t\t\t{ @include column-rule-color(blue);       }\n.column-rule        \t\t\t{ @include column-rule(1px, solid, blue); }\n.column-rule-spaced \t\t\t{ @include column-rule(1px solid blue);   }\n.column-break-before \t\t\t{ @include break-before(always);   }\n.column-break-after \t\t\t{ @include break-after(always);    }\n.column-break-inside \t\t\t{ @include break-inside();         }\n.column-break-before-shortcut \t{ @include column-break(before, always);}\n.column-break-after-shortcut \t{ @include column-break(after, always); }\n.column-break-inside-shortcut \t{ @include column-break(inside);        }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/filters.scss",
    "content": "$debug-browser-support: true;\n@import \"compass/css3/filter\";\n\n.blur {\n  @include filter(blur(5px));\n}\n.brightness {\n  @include filter(brightness(0.2));\n}\n// We can enable this test case when sass commit 38f3c4be8bc15c130c5b1cc5880c9131e1bcb08f is released.\n// .saturate {\n//   @include filter(saturate(50%));\n// }\n.hue-rotate {\n  @include filter(hue-rotate(20deg));\n}\n.contrast {\n  @include filter(contrast(150%));\n}\n.grayscale {\n  @include filter(grayscale(150%));\n}\n.sepia {\n  @include filter(sepia(150%));\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/flexbox.scss",
    "content": "@import \"compass/css3/flexbox\";\n\n.display {\n  @include display-flex;\n}\n\n.flex-direction {\n  @include flex-direction(row-reverse);\n}\n\n.flex-wrap {\n  @include flex-wrap(wrap-reverse);\n}\n\n.flex-flow {\n  @include flex-flow(row-reverse wrap-reverse);\n}\n\n.order {\n  @include order(1);\n}\n\n.flex {\n  @include flex(1 0 auto);\n}\n\n.flex-grow {\n  @include flex-grow(1);\n}\n\n.flex-shrink {\n  @include flex-shrink(1);\n}\n\n.flex-basis {\n  @include flex-basis(auto);\n}\n\n.justify-content {\n  @include justify-content(flex-start);\n}\n\n.align-items {\n  @include align-items(flex-start);\n}\n\n.align-self {\n  @include align-self(flex-start);\n}\n\n.align-content {\n  @include align-content(flex-start);\n}\n\n.flexbox {\n  @include flexbox((\n    display: flex,\n    flex-direction: row-reverse,\n    flex-wrap: wrap-reverse,\n    flex-flow: row-reverse wrap-reverse,\n    order: 1,\n    flex: 1 0 auto,\n    flex-grow: 1,\n    flex-shrink: 0,\n    flex-basis: auto,\n    justify-content: flex-start,\n    align-items: flex-start,\n    align-self: flex-start,\n    align-content: flex-start\n  ));\n}\n\n.flexbox-2 {\n  @include flexbox((\n    display: flexbox,\n    flex-flow: row-reverse,\n    flex-order: 1,\n  ), $version: 2);\n}\n\n.flexbox-1 {\n  @include flexbox((\n    display: box,\n    box-orient: vertical,\n    box-ordinal-group: 1,\n    box-flex: 1,\n  ), $version: 1);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/fonts.sass",
    "content": "@import compass/css3/font-face\n\n+font-face(\"font1\", font-files(\"font1.woff\", woff), \"font1.eot\")\n\n@font-face\n  font-family: 'Issue1491'\n  src: font-url('font1.eot')\n  src: font-url('font1.eot?#iefix') format('embedded-opentype'), font-url('font1.woff') format('woff')\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/force-wrap.scss",
    "content": "@import \"compass/typography/text\";\n\npre { @include force-wrap; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/gradients.sass",
    "content": "@import compass/css3/images\n\n$svg-gradient-shim-threshold: 0\n\n.bg-shortcut-simple-image\n  +background(white url('foo.png'))\n\n.bg-shortcut-linear-gradient\n  +background(white linear-gradient(top left, #ddd, #aaa))\n\n.bg-shortcut-radial-gradient\n  +background(white radial-gradient(center center, #ddd, #aaa 100px))\n\n.bg-linear-gradient-angle-svg\n  +background-image(linear-gradient(-45deg, blue, black))\n\n.bg-linear-gradient-angle2-svg\n  +background-image(linear-gradient(top left, blue, black))\n\n.bg-all-gradient-types-with-simplification\n  +background-with-css2-fallback(image-url(\"4x6.png\"), linear-gradient(top left, #ddd, #aaa), radial-gradient(center center, #ddd, #aaa 100px), #ffcc00)\n\n.bg-simple-image\n  +background-image(url('foo.png'))\n\n.bg-linear-gradient\n  +background-image(linear-gradient(top left, #ddd, #aaa))\n\n.bg-linear-gradient-pixel-stop-from-top\n  +background-image(linear-gradient(top, #ddd 10px, #aaa 40px))\n\n.bg-linear-gradient-pixel-stop-from-left\n  +background-image(linear-gradient(left, #ddd 10px, #aaa 40px))\n\n.transparent-in-linear-gradient\n  +background-image(white linear-gradient(top left, transparent, #aaa))\n\n.currentColor-in-linear-gradient\n  +background-image(white linear-gradient(top left, transparent, currentColor))\n\n.rgba-in-linear-gradient\n  +background-image(white linear-gradient(top left, rgba(255,255,255,0.8), rgba(0,0,0,0.1)))\n\n.bg-radial-gradient\n  +background-image(radial-gradient(center center, #ddd, transparent 100px))\n\n.currentColor-in-radial-gradient\n  +background-image(radial-gradient(center center, currentColor, transparent 100px))\n\n.bg-linear-gradient-with-angle\n  +background-image(linear-gradient(-45deg, #ddd, #aaa))\n\n.bg-radial-gradient-with-angle-and-shape\n  +background-image(radial-gradient(ellipse cover, #ddd, #aaa 100px))\n\n.bg-all-gradient-types\n  +background-image(image-url(\"4x6.png\"), linear-gradient(top left, #ddd, #aaa), radial-gradient(center center, #ddd, #aaa 100px))\n\n.border-image-gradient\n  +border-image(radial-gradient(#0f0,#f00 100px) 100 stretch)\n\n.direct-list-image-plain\n  +list-style-image(image-url(\"4x6.png\"))\n\n.shorthand-list-image-plain\n  +list-style(outside image-url(\"4x6.png\"))\n\n.direct-list-image-with-gradient\n  +list-style-image(radial-gradient(lime, red 10px))\n\n.shorthand-list-image-with-gradient\n  // Note: I haven't seen a browser render this correctly, but they should eventually.\n  +list-style(outside radial-gradient(lime, red 10px))\n\n.content-plain\n  +content(\"asdf\")\n\n.content-with-gradient\n  +content(radial-gradient(lime, red 10px))\n\n$svg-gradient-shim-threshold: 10\n\n.bg-linear-gradient-no-position\n  +background-image(linear-gradient(#ddd, #aaa))\n\n.bg-radial-gradient-no-position\n  +background-image(radial-gradient(#ddd, #aaa 100px))\n\n.image-fallback\n  +background-image(image(radial-gradient(#ddd, #aaa 100px), image-url(\"4x6.png\"), #cc0000))\n\n.cross-fade\n  +background-image(cross-fade(radial-gradient(#ddd, #aaa 100px), image-url(\"4x6.png\")))\n\n.unknown-function-wrapper\n  +background(foo(radial-gradient(#ddd, #aaa 100px)))\n\n.ie-horizontal-filter\n  +filter-gradient(white, black, horizontal)\n\n.ie-vertical-filter\n  +filter-gradient(white, black, vertical)\n\n.ie-alpha-filter\n  +filter-gradient(rgba(white, 1), rgba(white, 0))\n\n.linear-gradient-new\n  +background(linear-gradient(to bottom, #ff0000 0%, #88aa44 100%))\n\n$use-legacy-gradient-syntax: true\n \n.linear-gradient-old\n  +background(linear-gradient(top, #ff0000 0%, #88aa44 100%))\n \n// This setting is only important when we can't tell which syntax is being used.\n// * That is only ever true when the angle is specified in deg\n// * original webkit syntax does not support deg (see output)\n// * if $support-for-original-webkit-gradients and type-of($angle) == \"number\" : @WARN\n$use-legacy-gradient-syntax: false\n \n.linear-gradient-unknown-new\n  +background(linear-gradient(120deg, #ff0000 0%, #88aa44 100%))\n \n$use-legacy-gradient-syntax: true\n \n.linear-gradient-unknown-old\n  +background(linear-gradient(120deg, #ff0000 0%, #88aa44 100%))\n\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/grid_background.scss",
    "content": "@import \"compass/layout/grid-background\";\n\n.baseline {\n  @include baseline-grid-background;\n}\n\n.columns {\n  @include column-grid-background;\n}\n\n.combined {\n  @include grid-background;\n}\n\n$grid-background-total-columns: 15;\n$grid-background-offset: 11%;\n$grid-background-column-width: 5%;\n$grid-background-gutter-width: 1%;\n\n.percent-baseline {\n  @include baseline-grid-background;\n}\n\n.percent-columns {\n  @include column-grid-background;\n}\n\n.percent-combined {\n  @include grid-background;\n}\n\n.forced-fluid {\n  @include column-grid-background(12, 2em, 1em, 1em, $grid-background-column-color, $grid-background-gutter-color, true);\n}"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/hyphenation.scss",
    "content": "@import \"compass/css3/hyphenation\";\n\n.word-break {\n\t@include word-break(keep-all);\n}\n.hyphens {\n\t@include hyphens(manual);\n}\n.hyphenate {\n\t@include hyphenation;\n}"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/image_size.sass",
    "content": ".png\n  width: image_width(unquote(\"100x150.png\"))\n  height: image_height(unquote(\"100x150.png\"))\n\n.jpg\n  width: image_width(unquote(\"100x150.jpg\"))\n  height: image_height(unquote(\"100x150.jpg\"))\n\n.jpeg\n  width: image_width(unquote(\"100x150.jpeg\"))\n  height: image_height(unquote(\"100x150.jpeg\"))\n\n.gif\n  width: image_width(unquote(\"100x150.gif\"))\n  height: image_height(unquote(\"100x150.gif\"))\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/images.scss",
    "content": ".relative {\n  background-image: image-url(\"4x6.png\");\n}\n.root-relative {\n  background-image: image-url(\"/images/4x6.png\");\n}\n.absolute {\n  background-image: image-url(\"http://example.com/images/4x6.png\");\n}"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/layout.sass",
    "content": "@import compass/layout\n\n+sticky-footer(72px, unquote(\"#layout\"), unquote(\"#layout_footer\"), unquote(\"#footer\"))\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/legacy_clearfix.scss",
    "content": "$default-has-layout-approach: block;\n\n@import \"compass/utilities\";\n\n.clearfix {\n    @include clearfix;\n}\n\n.pie-clearfix {\n    @include legacy-pie-clearfix;\n}\n.simplified-pie-clearfix {\n    @include pie-clearfix;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/lists.scss",
    "content": "@import \"compass/typography/lists\";\n\nul.horizontal        { @include horizontal-list;             }\nul.wide-horizontal   { @include horizontal-list(10px);       }\nul.right-horizontal  { @include horizontal-list(4px, right); }\nul.no-padding        { @include horizontal-list(false);      }\nul.inline-block      { @include inline-block-list;           }\nul.wide-inline-block { @include inline-block-list(10px);     }\nul.inline            { @include inline-list;                 }\nul.comma             { @include delimited-list;              }\nul.no-bullets        { @include no-bullets;                  }\nul.pretty            { @include pretty-bullets(\"4x6.png\");   }"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/opacity.scss",
    "content": "@import \"compass/css3/opacity\";\n\ndiv {\n  @include opacity(1);\n}\n\ndiv {\n  @include opacity(.2);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/print.sass",
    "content": "@import compass/utilities/print\n\n+print-utilities\n\n+print-utilities(screen)\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/regions.scss",
    "content": "@import \"compass/css3/regions\";\n\n.source   { @include flow-into(target); }\n.new-container { @include flow-from(target); }"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/replacement.scss",
    "content": "@import \"compass/typography/text/replacement\";\n.basic {\n  @include replace-text(\"4x6.png\");\n}\n.with-dimensions {\n  @include replace-text-with-dimensions(\"4x6.png\");\n}\n.with-dimensions-inline {\n  @include replace-text-with-dimensions(\"4x6.png\", $inline: true);\n}\n.with-position {\n  @include replace-text(\"4x6.png\", 10px, top);\n}\n.with-arbitrary-url {\n  @include replace-text(url(http://google.com/logo.gif), 10px, top);\n}\n.with-inline-url {\n  @include replace-text(inline-image(\"4x6.png\"), 10px, top);\n}\n.with-image-url {\n  @include replace-text(image-url(\"4x6.png\"), 10px, top);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/reset.sass",
    "content": "@import compass/reset\n\n// Turn off the display for both of these classes\n.unregistered-only, .registered-only\n  display: none\n\n// Now turn only one of them back on depending on some other context.\nbody.registered\n  +reset-display(unquote(\".registered-only\"))\n\nbody.unregistered\n  +reset-display(unquote(\".unregistered-only\"))\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/selection.scss",
    "content": "$contrasted-dark-default: black;\n$contrasted-light-default: white;\n\n@import \"compass/css3/selection\";\n\n* {\n  @include selection {\n    background-color: #fe57a1;\n    color: #fff;\n  }\n}\n\n.hot-pink {\n  @include selection {\n    background-color: #fe57a1;\n    color: #fff;\n  }\n}\n\n.hot-pink-with-arguments {\n  @include selection(#fe57a1, white);\n}\n\n.hot-pink-with-arguments-and-extra-stuff {\n  @include selection(#fe57a1, white) {\n    text-decoration: line-through;\n  }\n}\n\n.hot-pink-with-default-foreground {\n  @include selection(#fe57a1);\n}\n\n.browser-support-is-considered {\n  @include selection(#fe57a1) {\n    prefix: $current-prefix;\n    -moz-prefix: $current-prefix == -moz;\n    -ms-prefix: $current-prefix == -ms;\n    -webkit-prefix: $current-prefix == -webkit;\n  }\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/sprites_with_explicit_separator.scss",
    "content": "$flag_states-sprite-dimensions: true;\n$flag_states-class-separator: \"_\";\n\n@import \"flag_states/*.png\";\n\n@include all-flag_states-sprites;\n\n.sprite-file {\n  location: image-url(sprite_file($flag-states-sprites, foo));\n}\n\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/stretching.sass",
    "content": "@import \"compass/layout/stretching\"\n\n.stretched-completely\n  +stretch\n\n.stretched-horizontally\n  +stretch-x\n\n.stretched-right\n  +stretch-x(0, 50%)\n\n.left-pane\n  +stretch(0, 50%, 0, 0)\n\n.stretched-left\n  +stretch-x(50%, 0)\n\n.right-pane\n  +stretch(0, 0, 0, 50%)\n\n.stretched-down\n  +stretch-y(0, 50%)\n\n.top-pane\n  +stretch(0, 0, 50%, 0)\n\n.stretched-up\n  +stretch-y(50%, 0)\n\n.bottom-pane\n  +stretch(50%, 0, 0, 0)\n\n.viewport\n  +stretch(10px, 20px, 30px, 40px)"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/support.scss",
    "content": "@import \"compass/css3/animation\";\n@import \"compass/css3/opacity\";\n@import \"true\";\n\n$some-default-value: some default value;\n@function has-default-arglist($arglist...) {\n  @return set-arglist-default($arglist, $some-default-value);\n}\n\n@mixin with-declared-support($browsers) {\n  $old-browsers: $supported-browsers;\n  $supported-browsers: $browsers !global;\n  @content;\n  $supported-browsers: $old-browsers !global;\n}\n\n@mixin with-declared-minimums($supported-browsers) {\n    $old-mins: $browser-minimum-versions;\n    $browser-minimum-versions: $supported-browsers !global;\n    @content;\n    $browser-minimum-versions: $old-mins !global;\n}\n\n@include test-module('Compass Support') {\n  @include test('[function] set-arglist-default() with no arguments') {\n    @include assert-true(\n               has-default-arglist() == $some-default-value,\n               'No arguments should get a default value.');\n  }\n  @include test('[function] set-arglist-default() with a \"default\" argument') {\n    @include assert-true(\n               nth(has-default-arglist(default), 1) == $some-default-value,\n               'an argument of \"default\" should get a default value.');\n  }\n  @include test('[function] set-arglist-default() with a \"default\" argument and another argument') {\n    @include assert-true(\n               has-default-arglist(default, some other value) == ($some-default-value, some other value),\n               'an argument of \"default\" should get a default value.');\n  }\n  @include test('[function] set-arglist-default() with a \"default\" argument not first and another argument') {\n    @include assert-true(\n               has-default-arglist(some other value, default) == (some other value, $some-default-value),\n               'an argument of \"default\" should get a default value.');\n  }\n\n  @include test('[function] support-legacy-browser() from threshold') {\n    @include assert-true(support-legacy-browser('ie', '6', $threshold: 0.00000001),\n                         \"should be supported because of user support threshold.\");\n    @include assert-false(support-legacy-browser('ie', '6', $threshold: 10.000),\n                          \"should not be supported because of support threshold.\");\n  }\n\n  @include test('[function] support-legacy-browser() from minimums') {\n    @include with-declared-minimums(('ie': '7')) {\n      @include assert-true(support-legacy-browser('ie', '7', $threshold: 10.00),\n      \"should be supported because of minimum version.\");\n      @include assert-false(support-legacy-browser('ie', '6', $threshold: 10.000),\n      \"should not be supported because of minimum version.\");\n    }\n  }\n\n  @include test('[function] browser-out-of-scope() with no scope') {\n    @include assert-true(not browser-out-of-scope('ie'), \"should be in scope.\");\n    @include assert-true(not browser-out-of-scope('chrome'), \"should be in scope.\");\n  }\n\n  @include test('prefix context tracking') {\n    $outer-prefix-invoked: false;\n    $inner-prefix-invoked: false;\n    $mismatched-prefix-invoked: false;\n    @include with-prefix(-webkit) {\n      $outer-prefix-invoked: true;\n      @include assert-equal(-webkit, $current-prefix, \"should be equal.\");\n      @include assert-equal(-webkit, $prefix-context, \"should be equal.\");\n      @include with-prefix(null) {\n        $inner-prefix-invoked: true;\n        @include assert-equal(null, $current-prefix, \"should be equal.\");\n        @include assert-equal(-webkit, $prefix-context, \"should be equal.\");\n      }\n      @include with-prefix(-ms) {\n        $mismatched-prefix-invoked: true;\n      }\n    }\n    @include assert-true($inner-prefix-invoked, \"should have been invoked\");\n    @include assert-true($outer-prefix-invoked, \"should have been invoked\");\n    @include assert-false($mismatched-prefix-invoked, \"should not have been invoked\");\n    @include assert-equal(null, $prefix-context, \"should be null\");\n    @include assert-equal(null, $current-prefix, \"should be null\");\n  }\n\n  @include test('[function] browser-out-of-scope() with a scope') {\n    @include with-prefix(browser-prefix('chrome')) {\n      @include assert-true(not browser-out-of-scope('chrome'), \"should be in scope.\");\n      @include assert-false(not browser-out-of-scope('ie'), \"should not be in scope.\");\n    }\n  }\n\n  @include test('[function] browser-out-of-scope() with version') {\n    @include with-browser-ranges((ie: '8' '8')) {\n      @include assert-false(not browser-out-of-scope('ie', '10'), \"should not be in scope.\");\n      @include assert-true(not browser-out-of-scope('ie', '8'), \"should be in scope.\");\n      @include assert-false(not browser-out-of-scope('ie', '7'), \"should not be in scope.\");\n    }\n  }\n\n  @include test('[mixin] with-prefix()') {\n    @include assert-true($current-prefix == null, \"should be null.\");\n    @include with-prefix(-webkit) {\n      @include assert-true($current-prefix == -webkit, \"should be set.\");\n      $called: false;\n      @include with-prefix(-webkit) {\n        $called: true;\n      }\n      @include assert-true($called, \"should be called.\");\n      $called: false;\n      @include with-prefix(-ms) {\n        $called: true;\n      }\n      @include assert-false($called, \"should not be called.\");\n    }\n  }\n\n  @include test('[mixin] with-each-prefix()') {\n    $prefixes: ();\n    @include with-each-prefix(css-regions, 0.0001) {\n      $prefixes: append($prefixes, $current-prefix);\n    }\n    @include assert-equal((-ms -webkit null), $prefixes, \"Not equal\");\n  }\n\n  @include test('[mixin] with-each-prefix() respects $supported-browsers') {\n    @include with-declared-support(\"ie\") {\n      $prefixes: ();\n      @include with-each-prefix(css-regions, 0.0001) {\n        $prefixes: append($prefixes, $current-prefix);\n      }\n      @include assert-equal((-ms null), $prefixes, \"Not equal\");\n    }\n  }\n\n  @include test('[mixin] with-each-prefix() respects $current-prefix') {\n    $contexts: ();\n    $prefixes: ();\n    @include with-prefix(-webkit) {\n      $prefixes: append($prefixes, $current-prefix);\n      $contexts: append($contexts, $prefix-context);\n      @include with-each-prefix(css-regions, 0.0001) {\n        $prefixes: append($prefixes, $current-prefix);\n        $contexts: append($contexts, $prefix-context);\n      }\n    }\n    @include assert-true(index($prefixes, null), \"Must have a null\");\n    @include assert-equal((-webkit -webkit null), $prefixes, \"Not equal\");\n    @include assert-equal((-webkit -webkit -webkit), $contexts, \"Not equal\");\n  }\n\n  @include test('[fuction] has-browser-subset()') {\n    @include assert-true(has-browser-subset((firefox: \"16\" \"25\"), (firefox: \"2\" \"25\")), \"Should detect version overlap\");\n    @include assert-true(not has-browser-subset((firefox: \"16\" \"25\"), (firefox: \"2\" \"15\")), \"Should not detect version overlap\");\n    @include assert-true(not has-browser-subset((firefox: \"2\" \"15\"), (firefox: \"16\" \"25\")), \"Should not detect version overlap\");\n    @include assert-true(has-browser-subset((firefox: \"16\" \"24\"), (firefox: \"2\" \"25\")), \"Should detect version overlap\");\n    @include assert-true(has-browser-subset((firefox: \"2\" \"25\"), (firefox: \"16\" \"24\")), \"Should detect version overlap\");\n  }\n}\n\n@include with-browser-support-debugging {\n  @include keyframes(foo) {\n    0% { @include opacity(0); }\n    100% { @include opacity(1); }\n  }\n  .foo {\n    @include animation(foo 1s);\n  }\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/text_shadow.scss",
    "content": "$default-text-shadow-color: #aaaaaa;\n@import \"compass/css3/text-shadow\";\n\n.default-single-text-shadow { @include single-text-shadow;}\n.none { @include single-text-shadow(none);}\n.color-only { @include single-text-shadow(#cccccc);}\n.color-first-with-params { @include single-text-shadow(#cccccc, 2px, 2px, 5px, 2px);}\n.color-last-with-params { @include single-text-shadow(2px, 2px, 5px, 2px, #cccccc);}\n.default-text-shadow { @include text-shadow;}\n.multiple-text-shadows-with-default { @include text-shadow(default, 2px 2px 5px #222222);}\n.multiple-text-shadows { @include text-shadow(4px 4px 10px #444444, 2px 2px 5px #222222);}\n.multiple-text-shadows-with-spread { @include text-shadow(4px 4px 10px 1px #444444, 2px 2px 5px 3px #222222);}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/transform.scss",
    "content": "@import \"compass/css3/transform\";\n\n.apply-origin-2d                  { @include apply-origin(2px 5%, false); }\n.apply-origin-3d                  { @include apply-origin(2px 5% 2in, true); }\n.transform-origin-2d              { @include transform-origin(100px, 100px); }\n.transform-origin-3d              { @include transform-origin(100px, 100px, 100px); }\n.transform-2d                     { @include transform2d(rotateY(20deg)); }\n.transform-3d                     { @include transform3d(rotateZ(20deg)); }\n.perspective                      { @include perspective(500); }\n.perspective-origin               { @include perspective-origin(25% 25%)}\n.transform-style                  { @include transform-style; }\n.backface-visibility              { @include backface-visibility;}\n.scale                            { @include scale(30px, 50px);}\n.scale-3d                         { @include scale(30px, 50px, false, true);}\n.scale-with-perspective           { @include scale(30px, 50px, 500);}\n.scale-3d-with-perspective        { @include scale(30px, 50px, 500, true);}\n.scale-x                          { @include scaleX(30px);}\n.scale-x-3d                       { @include scaleX(30px, false, true);}\n.scale-x-with-perspective         { @include scaleX(30px, 500);}\n.scale-x-3d-with-perspective      { @include scaleX(30px, 500, true);}\n.scale-y                          { @include scaleY(50px);}\n.scale-y-3d                       { @include scaleY(50px, false, true);}\n.scale-y-with-perspective         { @include scaleY(50px, 500);}\n.scale-y-3d-with-perspective      { @include scaleY(50px, 500, true);}\n.scale-z                          { @include scaleZ(50px);}\n.scale-z-with-perspective         { @include scaleZ(50px, 500);}\n.scale3d                          { @include scale3d(30px, 50px, 100px);}\n.scaled3-with-perspective         { @include scale3d(30px, 50px, 100px, 500);}\n.rotate                           { @include rotate(25deg, 500);}\n.rotate-with-perspective          { @include rotate(25deg, 500);}\n.rotate-z                         { @include rotateZ(25deg);}\n.rotate-z-with-perspective        { @include rotateZ(25deg, 500);}\n.rotate-x                         { @include rotateX(25deg);}\n.rotate-x-with-perspective        { @include rotateX(25deg, 500);}\n.rotate-y                         { @include rotateY(25deg);}\n.rotate-y-with-perspective        { @include rotateY(25deg, 500);}\n.rotate-3d                        { @include rotate3d(5, 2, 1, 75deg);}\n.rotate-3d-with-perspective       { @include rotate3d(5, 2, 1, 75deg, 500);}\n.translate                        { @include translate(20px, 30%);}\n.translate-with-perspective       { @include translate(20px, 30%, 500);}\n.translate-3d                     { @include translate(20px, 30%, false, true);}\n.translate-3d-with-perspective    { @include translate(20px, 30%, 500, true);}\n.translate-x                      { @include translateX(30px);}\n.translate-x-3d                   { @include translateX(30px, false, true);}\n.translate-x-with-perspective     { @include translateX(30px, 500);}\n.translate-x-3d-with-perspective  { @include translateX(30px, 500, true);}\n.translate-y                      { @include translateY(30px);}\n.translate-y-3d                   { @include translateY(30px, false, true);}\n.translate-y-with-perspective     { @include translateY(30px, 500);}\n.translate-y-3d-with-perspective  { @include translateY(30px, 500, true);}\n.translate-z                      { @include translateZ(30px);}\n.translate-z-with-perspective     { @include translateZ(30px, 500);}\n.translate-3d                     { @include translate3d(30px, 50px, 75px);}\n.translate-3d-with-perspective    { @include translate3d(30px, 50px, 75px, 500);}\n.skew                             { @include skew(20deg, 50deg);}\n.skew-3d                          { @include skew(20deg, 50deg, true);}\n.skew-x                           { @include skewX(20deg);}\n.skew-x-3d                        { @include skewX(20deg, true);}\n.skew-y                           { @include skewY(20deg);}\n.skew-y-3d                        { @include skewY(20deg, true);}\n.create-transform-2d              { @include create-transform(\n                                               500,\n                                               20px, 20px, false,\n                                               25deg, 25deg, false, false\n                                               50px, 50px, false,\n                                               50deg, 50deg,\n                                               50%, 50%, false\n                                              );\n                                  }\n.create-transform-3d              { @include create-transform(\n                                               500,\n                                               20px, 20px, 20px,\n                                               25deg, 25deg, 25deg, false\n                                               50px, 50px, 50px,\n                                               50deg, 50deg,\n                                               50%, 50%, 50%\n                                              );\n                                  }\n\n.simple-transform                 { @include simple-transform(\n                                               25px,\n                                               25deg,\n                                               10px, 10px,\n                                               30deg, 30deg,\n                                               10%, 10%\n                                             );\n                                  }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/transition.scss",
    "content": "@import \"compass/css3/transition\";\n\n.single-transition-without-delay  { @include single-transition(all, 0.6s, ease-out); }\n.single-transition-with-delay     { @include single-transition(all, 0.6s, ease-out, 0.2s); }\n.transition-duration-list { @include transition-duration((0.2s, 0.5s, 0.2s)); }\n.multiple-transition-durations { @include transition-duration(0.2s, 0.5s, 0.2s); }\n.single-transform-transition-without-delay  { @include single-transition(transform, 0.6s, ease-out); }\n.single-transform-transition-with-delay     { @include single-transition(transform, 0.6s, ease-out, 0.2s); }\n.transform-transition { @include transition(transform 0.6s ease-out) }\n.multiple-transitions { @include transition(transform 0.6s ease-out, opacity 0.2s ease-in) }\n.transition-property { @include transition-property(transform); }\n.transition-properties { @include transition-property(transform, opacity, width, height, left, top); }\n.multiple-transition-properties { @include transition-property((opacity, transform, left)); }\n.default-transition { @include transition(); }\n.transition-timing { @include transition-timing-function(ease-in); }\n.transition-timings { @include transition-timing-function(ease-in, cubic-bezier(1,0,1,0)); }\n.transition-timings-list { @include transition-timing-function((ease-in, cubic-bezier(1,0,1,0))); }\n.transition-delay { @include transition-delay(1s); }\n.transition-delays { @include transition-delay(1s, 2s, 3s); }\n.transition-delays-list { @include transition-delay((1s, 2s, 3s)); }\n.regression-912 { @include transition((background-color 0.5s ease-in 0s, width 0.5s ease-out 0s, height 0.5s ease-in 0s, top 0.5s ease-out 0s)); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/typography/links/hover-link.scss",
    "content": "@import \"compass/typography/links/hover-link\";\n\na { @include hover-link; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/units.scss",
    "content": "$base-font-size: 16px;\n\n@import \"compass/typography/units\";\n\n.foo {\n\twidth: 600px;\n\theight: 200px;\n}\n\n.foo .test {\n\t/* 16px for margins should be 1em */\n\tmargin-top: convert-length(16px, em);\n\n\t/* 16px for margins should be 2.66667% (relative to parent's width) */\n\tmargin-right: convert-length(16px, '%', $to-context: 600px);\n\n\t/* 1.35em for margins should be 3.6% (relative to parent's width,\n\t * even for top and bottom margins) */\n\tmargin-bottom: convert-length(1.35em, '%', $to-context: 600px);\n\n\t/* 16px for margins should be 2ex */\n\tmargin-left: convert-length(16px, ex);\n}\n\n.bar {\n\tfont-size: 18px;\n\twidth: 360px;\n}\n\n.bar .test {\n\t/* 150% for line-height should be 27px */\n\tline-height: convert-length(150%, px, 18px);\n\n\t/* 1px should always be .0625rem for this page */\n\tborder-top: convert-length(1px, rem);\n\n\t/* 2em for this element should be 9.525mm (relative to own font-size, as inherited) */\n\tmargin-top: convert-length(2em, mm, 18px);\n\n\t/* 2px for margins should be .55556% (relative to parent's width) */\n\tmargin-right: convert-length(2px, '%', $to-context: 360px);\n\n\t/* 1rem should always be 16px for this page, even when own font-size is 18px */\n\tmargin-bottom: convert-length(1rem, px);\n}\n\n.rem {\n\t$val: 25rem, 100% 32px;\n\t@include rem(background-size, $val, true);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/user-interface.scss",
    "content": "@import \"compass/css3/user-interface\";\n\n.user-select {\n  @include user-select(none);\n}\n\n* {\n  @include input-placeholder {\n    color: #bfbfbf;\n    font-style: italic;\n  }\n}\n\n#{elements-of-type(text-input)} {\n  @include input-placeholder {\n    color: #bfbfbf;\n    font-style: italic;\n  }\n}\n\n.sets-up-browser-support-for-content {\n  @include input-placeholder {\n    prefix: $current-prefix;\n    -moz-prefix: $current-prefix == -moz;\n    -ms-prefix: $current-prefix == -ms;\n    -webkit-prefix: $current-prefix == -webkit;\n  }\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/utilities.scss",
    "content": "$contrasted-dark-default: black;\n$contrasted-light-default: white;\n\n@import \"compass/utilities\";\n\n.clearfix {\n    @include clearfix;\n}\n\n.pie-clearfix {\n    @include legacy-pie-clearfix;\n}\n.simple-pie-clearfix {\n  @include pie-clearfix;\n}\n\np.light { @include contrasted(#f3aead); }\np.dark  { @include contrasted(#a22321); }\np.light-with-args { @include contrasted(#f3aead, blue, yellow); }\np.dark-with-args  { @include contrasted(#a22321, blue, yellow); }\n\n\n@include alternating-rows-and-columns(red, white, blue);\n\np.ellipsis {\n  @include ellipsis;\n}\n\np.ellipsis.moz {\n  $legacy-support-for-mozilla: true !global;\n  $use-mozilla-ellipsis-binding: true !global;\n  @include ellipsis;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/vertical_rhythm.scss",
    "content": "// Test all functions and mixins, at least indirectly.\n// functions:\n// * rhythm\n// * lines-for-font-size\n//\n// mixins:\n// * establish-baseline\n// * output-rhythm\n// * debug-vertical-alignment\n// * adjust-font-size-to\n// * adjust-leading-to\n// * leader\n// * margin-leader\n// * padding-leader\n// * trailer\n// * margin-trailer\n// * padding-trailer\n// * rhythm\n// * rhythm-margins\n// * rhythm-padding\n// * apply-side-rhythm-border\n// * leading-border\n// * trailing-border\n// * rhythm-borders\n// * horizontal-borders (h-borders)\n//\n// deprecated mixins:\n// * reset-baseline\n\n$base-font-size: 14px;\n$base-line-height: 16px;\n@import \"compass/typography/vertical_rhythm\";\n\n@include establish-baseline;\n\n.small {\n\t@include adjust-font-size-to(12px, 1);\n}\n\n.padded {\n\t@include rhythm(1, 1, 1, 1);\n}\n\n.small-padded {\n\t@include adjust-font-size-to(12px, 1);\n\t@include rhythm(1, 1, 1, 1, 12px);\n}\n\n.borders {\n\t@include h-borders(1px, 1);\n}\n\n.large-borders {\n\t@include adjust-font-size-to(24px, 3);\n\t@include h-borders(6px, 1, 24px);\n}\n\n.reset {\n\t@include reset-baseline;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/vertical_rhythm_with_ems.scss",
    "content": "/* New test using em output */\n$base-font-size: 18px;\n$base-line-height: $base-font-size * 1.4;\n$rhythm-unit: em;\n$default-rhythm-border-style: solid #aaaaaa;\n\n@import \"compass/typography/vertical_rhythm\";\n\n@include establish-baseline;\n\n.container {\n\t@include debug-vertical-alignment;\n}\n\np {\n\t@include margin-leader;\n\t@include margin-trailer;\n}\n\nth,\ntd {\n\t@include rhythm-padding(.25);\n}\n\n// Incremental leading made easy!\n.caption {\n\t@include adjust-font-size-to(13px, 4/5);\n}\n\n.spaced-out {\n\t@include adjust-leading-to(1.5);\n}\n\nblockquote {\n\t@include rhythm-margins;\n\tpadding: 0 rhythm();\n}\n\n.fig-quote {\n\t> blockquote {\n\t\t@include trailer(.5);\n\t}\n\t.source {\n\t\t@include adjust-font-size-to(13px, auto);\n\t\t@include trailer(.5, 13px);\n\t}\n}\n\n.panel {\n\t@include adjust-font-size-to(16px);\n\t@include rhythm-borders($font-size: 16px);\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/vertical_rhythm_with_px.scss",
    "content": "/* New using px output */\n$base-font-size: 18px;\n$base-line-height: $base-font-size * 1.4;\n$rhythm-unit: px;\n$default-rhythm-border-style: solid #aaaaaa;\n@import \"compass/typography/vertical_rhythm\";\n\n@include establish-baseline;\n\n.container {\n\t@include debug-vertical-alignment;\n}\n\np {\n\t@include margin-leader;\n\t@include margin-trailer;\n}\n\nth,\ntd {\n\t@include rhythm-padding(.25);\n}\n\n/* Incremental leading made easy! */\n.caption {\n\t@include adjust-font-size-to(.85rem, 4/5);\n}\n\n.spaced-out {\n\t@include adjust-leading-to(1.5);\n}\n\nblockquote {\n\t@include rhythm-margins;\n\tpadding: 0 rhythm();\n}\n\n.fig-quote {\n\t> blockquote {\n\t\t@include trailer(.5);\n\t}\n\t.source {\n\t\t@include adjust-font-size-to(.85rem, auto);\n\t\t@include trailer(.5);\n\t}\n}\n\n.panel {\n\t@include rhythm-borders;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/compass/sass/vertical_rhythm_with_rems.scss",
    "content": "/* New using rem output with pixel fallbacks */\n$base-font-size: 18px;\n$base-line-height: $base-font-size * 1.4;\n$rhythm-unit: rem;\n$default-rhythm-border-style: solid #aaaaaa;\n@import \"compass/typography/vertical_rhythm\";\n\n@include establish-baseline;\n\n.container {\n\t@include debug-vertical-alignment;\n}\n\np {\n\t@include margin-leader;\n\t@include margin-trailer;\n}\n\nth,\ntd {\n\t@include rhythm-padding(.25);\n}\n\n/* Incremental leading made easy! */\n.caption {\n\t@include adjust-font-size-to(.85rem, 4/5);\n}\n\n.spaced-out {\n\t@include adjust-leading-to(1.5);\n}\n\nblockquote {\n\t@include rhythm-margins;\n\tpadding: 0 rhythm();\n}\n\n.fig-quote {\n\t> blockquote {\n\t\t@include trailer(.5);\n\t}\n\t.source {\n\t\t@include adjust-font-size-to(.85rem, auto);\n\t\t@include trailer(.5);\n\t}\n}\n\n.panel {\n\t@include rhythm-borders;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/envtest/config.rb",
    "content": "# Require any additional compass plugins here.\nproject_type = :stand_alone\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"images\"\noutput_style = :nested\nline_comments = false\n\ndisable_warnings = true\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/envtest/css/env.css",
    "content": ".env {\n  env: <%= options[:environment] %>; }\n.time {\n  time: <%= Time.now.strftime(\"%F\") %>; }\n.date {\n  date: <%= Time.now.strftime(\"%F\") %>; }\n.filename {\n  file: env.scss; }\n.output {\n  output: env.css; }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/envtest/sass/env.scss",
    "content": ".env {\n  env: compass-env();  \n}\n\n.time {\n  time: current-time(\"%F\");\n}\n\n.date {\n  date: current-date(\"%F\");\n}\n\n.filename {\n  file: current-source-file();\n}\n\n.output {\n  output: current-output-file();\n}"
  },
  {
    "path": "cli/test/fixtures/stylesheets/error/config.rb",
    "content": "# Require any additional compass plugins here.\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"assets/images\"\njavascripts_dir = \"assets/javascripts\"\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\n# To enable relative paths to assets via compass helper functions. Uncomment:\noutput_style = :compact\nrelative_assets = true\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/error/sass/screen.sass",
    "content": "test\n  background: image_url(\"testing.png)\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/image_urls/config.rb",
    "content": "# Require any additional compass plugins here.\nproject_type = :stand_alone\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"images\"\noutput_style = :compact\n# To enable relative image paths using the images_url() function:\n# http_images_path = :relative\nhttp_images_path = \"/images\"\nline_comments = false\n\nasset_cache_buster do |path, file|\n  \"busted=true\"\nend\n\n\nasset_host do |path|\n  \"http://assets%d.example.com\" % (path.size % 4)\nend\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/image_urls/css/screen.css",
    "content": ".showgrid { background-image: url('http://assets0.example.com/images/grid.png?busted=true'); }\n\n.inlinegrid { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAUEAYAAACv1qP4AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAZ0lEQVRYw+3QwQ2AIBAFUTEUwI3+uzN7gDscsIgxEuO8An52J11X73OudfxMraXkzHfO3Y98nQEhA0IGhAwIGRAyIGRAyICQASEDQgaEDAgZEDIgZEDIgJABoZzSGK3tPuN9ERFP7Nw4fg+c5g8V1wAAAABJRU5ErkJggg=='); }\n\n.no-buster { background-image: url('http://assets0.example.com/images/grid.png'); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/image_urls/sass/screen.sass",
    "content": ".showgrid\n  background-image: image-url(unquote(\"grid.png\"))\n\n.inlinegrid\n  background-image: inline-image(unquote(\"grid.png\"))\n\n.no-buster\n  background-image: image-url(\"grid.png\", $only-path: false, $cache-buster: false)\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/relative/config.rb",
    "content": "# Require any additional compass plugins here.\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"assets/images\"\njavascripts_dir = \"assets/javascripts\"\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\n# To enable relative paths to assets via compass helper functions. Uncomment:\noutput_style = :compact\nrelative_assets = true\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/relative/css/ie.css",
    "content": "/* Welcome to Compass. Use this file to write IE specific override styles. Import this file using the following HTML or equivalent: <!--[if IE]> <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" /> <![endif]--> */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/relative/css/print.css",
    "content": "/* Welcome to Compass. Use this file to define print styles. Import this file using the following HTML or equivalent: <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" /> */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/relative/css/screen.css",
    "content": "test { background: url('../assets/images/testing.png?<%= File.mtime(File.join(Compass.configuration.project_path, 'assets', 'images', 'testing.png')).strftime(\"%s\") %>'); }\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/relative/sass/ie.sass",
    "content": "/* Welcome to Compass. Use this file to write IE specific override styles.\n   Import this file using the following HTML or equivalent:\n   <!--[if IE]>\n     <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" />\n   <![endif]-->\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/relative/sass/print.sass",
    "content": "/* Welcome to Compass. Use this file to define print styles.\n   Import this file using the following HTML or equivalent:\n   <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" />\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/relative/sass/screen.sass",
    "content": "test\n  background: image_url(unquote(\"testing.png\"))\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/sourcemaps/config.rb",
    "content": "# Require any additional compass plugins here.\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"assets/images\"\njavascripts_dir = \"assets/javascripts\"\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\n# To enable relative paths to assets via compass helper functions. Uncomment:\nrelative_assets = true\nsourcemap = true\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/sourcemaps/css/another_simple.css",
    "content": ".another-simple-class{color:blue}\n/*# sourceMappingURL=another_simple.css.map */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/sourcemaps/css/simple.css",
    "content": "div{color:red}\n/*# sourceMappingURL=simple.css.map */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/sourcemaps/css/with_libraries.css",
    "content": "*{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}\n/*# sourceMappingURL=with_libraries.css.map */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/sourcemaps/sass/another_simple.scss",
    "content": ".another-simple-class {\n  color: blue;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/sourcemaps/sass/simple.sass",
    "content": "div\n  color: red"
  },
  {
    "path": "cli/test/fixtures/stylesheets/sourcemaps/sass/with_libraries.scss",
    "content": "@import \"compass/css3/box-sizing\";\n\n* {\n  @include box-sizing;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/uses_only_stylesheets_ext/config.rb",
    "content": "# Require any additional compass plugins here.\nload '../../extensions/only_stylesheets/'\n\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\ncss_dir = \"stylesheets\"\nsass_dir = \"sass\"\nimages_dir = \"images\"\njavascripts_dir = \"javascripts\"\n\n# You can select your preferred output style here (can be overridden via the command line):\n# output_style = :expanded or :nested or :compact or :compressed\n\n# To enable relative paths to assets via compass helper functions. Uncomment:\n# relative_assets = true\n\n# To disable debugging comments that display the original location of your selectors. Uncomment:\n# line_comments = false\n\n\n# If you prefer the indented syntax, you might want to regenerate this\n# project again passing --syntax sass, or you can uncomment this:\n# preferred_syntax = :sass\n# and then run:\n# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/uses_only_stylesheets_ext/sass/ie.scss",
    "content": "/* Welcome to Compass. Use this file to write IE specific override styles.\n * Import this file using the following HTML or equivalent:\n * <!--[if IE]>\n *   <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" />\n * <![endif]--> */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/uses_only_stylesheets_ext/sass/print.scss",
    "content": "/* Welcome to Compass. Use this file to define print styles.\n * Import this file using the following HTML or equivalent:\n * <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" /> */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/uses_only_stylesheets_ext/sass/screen.scss",
    "content": "/* Welcome to Compass.\n * In this file you should write your main styles. (or centralize your imports)\n * Import this file using the following HTML or equivalent:\n * <link href=\"/stylesheets/screen.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" /> */\n\n@import \"compass/reset\";\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/uses_only_stylesheets_ext/stylesheets/ie.css",
    "content": "/* Welcome to Compass. Use this file to write IE specific override styles.\n * Import this file using the following HTML or equivalent:\n * <!--[if IE]>\n *   <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" />\n * <![endif]--> */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/uses_only_stylesheets_ext/stylesheets/print.css",
    "content": "/* Welcome to Compass. Use this file to define print styles.\n * Import this file using the following HTML or equivalent:\n * <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" /> */\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/uses_only_stylesheets_ext/stylesheets/screen.css",
    "content": "/* Welcome to Compass.\n * In this file you should write your main styles. (or centralize your imports)\n * Import this file using the following HTML or equivalent:\n * <link href=\"/stylesheets/screen.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" /> */\n/* line 17, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font-size: 100%;\n  font: inherit;\n  vertical-align: baseline;\n}\n\n/* line 20, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\nbody {\n  line-height: 1;\n}\n\n/* line 22, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\nol, ul {\n  list-style: none;\n}\n\n/* line 24, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n/* line 26, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\ncaption, th, td {\n  text-align: left;\n  font-weight: normal;\n  vertical-align: middle;\n}\n\n/* line 28, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\nq, blockquote {\n  quotes: none;\n}\n/* line 101, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\nq:before, q:after, blockquote:before, blockquote:after {\n  content: \"\";\n  content: none;\n}\n\n/* line 30, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\na img {\n  border: none;\n}\n\n/* line 114, ../../../../../../../.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/compass-0.12.alpha.0/frameworks/compass/stylesheets/compass/reset/_utilities.scss */\narticle, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {\n  display: block;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/valid/config.rb",
    "content": "# Require any additional compass plugins here.\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"assets/images\"\njavascripts_dir = \"assets/javascripts\"\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\n# To enable relative paths to assets via compass helper functions. Uncomment:\nrelative_assets = true\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/valid/sass/another_simple.scss",
    "content": ".another-simple-class {\n  color: blue;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/valid/sass/simple.sass",
    "content": "div\n  color: red"
  },
  {
    "path": "cli/test/fixtures/stylesheets/with_sass_globbing/config.rb",
    "content": "require 'sass-globbing'\nrequire 'compass/import-once/activate'\n# Require any additional compass plugins here.\n\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir = \"images\"\njavascripts_dir = \"javascripts\"\n\n# You can select your preferred output style here (can be overridden via the command line):\noutput_style = :expanded\n\n# To enable relative paths to assets via compass helper functions. Uncomment:\nrelative_assets = true\n\n# To disable debugging comments that display the original location of your selectors. Uncomment:\nline_comments = true\n\n\n# If you prefer the indented syntax, you might want to regenerate this\n# project again passing --syntax sass, or you can uncomment this:\n# preferred_syntax = :sass\n# and then run:\n# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/with_sass_globbing/css/screen.css",
    "content": "/* line 1, ../sass/partials/_1.scss */\n.one {\n  value: 1;\n}\n\n/* line 1, ../sass/partials/_2.scss */\n.two {\n  value: 2;\n}\n\n/* line 1, ../sass/partials/_3.scss */\n.three {\n  value: 3;\n}\n\n/* line 3, ../sass/screen.scss */\n.something {\n  awww: yeah;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/with_sass_globbing/sass/partials/_1.scss",
    "content": ".one {\n  value: 1;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/with_sass_globbing/sass/partials/_2.scss",
    "content": ".two {\n  value: 2;\n}\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/with_sass_globbing/sass/partials/_3.scss",
    "content": ".three {\n  value: 3;\n}\n\n"
  },
  {
    "path": "cli/test/fixtures/stylesheets/with_sass_globbing/sass/screen.scss",
    "content": "@import \"partials/*\";\n\n.something { awww: yeah; }\n"
  },
  {
    "path": "cli/test/helpers/command_line.rb",
    "content": "require 'timeout'\n\nmodule Compass::CommandLineHelper\n  def compass(*arguments)\n    options = arguments.last.is_a?(Hash) ? arguments.pop : {}\n    options[:wait] = 0.25\n    if block_given?\n      responder = Responder.new\n      yield responder\n      IO.popen(\"-\", \"r+\") do |io|\n        if io\n          #parent process\n          output = \"\"\n          eof_at = nil\n          while !eof_at || (Time.now - eof_at < options[:wait])\n            if io.eof?\n              eof_at ||= Time.now\n              sleep 0.1\n            else\n              eof_at = nil\n              timeout(1) do\n                partial_output = io.readpartial(1024)\n                # puts \"))))#{partial_output}(((((\"\n                output << partial_output\n              end\n              prompt = output.split(\"\\n\").last.strip\n              if response = responder.response_for(prompt)\n                io.puts response\n                io.flush\n              end\n            end\n          end\n          responder.assert_required_responses!\n          @last_result = decolorize(output)\n        else\n          #child process\n          execute *arguments\n        end\n      end\n    else\n      @last_error = capture_warning do\n        @last_result = decolorize(capture_output do\n          @last_exit_code = execute *arguments\n        end)\n      end\n    end\n  rescue Timeout::Error\n    fail \"Read from child process timed out\"\n  end\n\n  def decolorize(str)\n    str.gsub(/\\e\\[\\d+m/,'')\n  end\n\n  class Responder\n    Response = Struct.new(:prompt, :text, :required, :responded)\n    def initialize\n      @responses = []\n    end\n    def respond_to(prompt, options = {})\n      @responses << Response.new(prompt, options[:with], options[:required])\n    end\n    def response_for(prompt)\n      response = @responses.detect do |r|\n        case r.prompt\n        when Regexp\n          prompt =~ r.prompt\n        when String\n          r.prompt == prompt\n        end\n      end\n      if response\n        response.responded = true\n        response.text\n      end\n    end\n    def assert_required_responses!\n      @responses.each do |response|\n        if response.required && !response.responded\n          raise \"Prompt not encountered: \\\"#{response.prompt}\\\"\"\n        end\n      end\n    end\n  end\n\n  def assert_action_performed(action, path)\n    actions_found = []\n    @last_result.split(\"\\n\").each do |line|\n      line = line.split\n      return if line.first == action.to_s && line.last == path\n      actions_found << line.first if line.last == path\n    end\n    message = \"Action #{action.inspect} was not performed on: #{path}.\"\n    message += \"The following actions were performed: #{actions_found.map{|a|a.inspect}.join(\", \")}\" if actions_found.any?\n    # puts @last_result\n    fail message\n  end\n\n  def within_tmp_directory(dir = \"tmp\")\n    d = absolutize(dir)\n    FileUtils.mkdir_p(d)\n    Dir.chdir(d) do\n      yield\n    end\n  ensure\n    FileUtils.rm_rf(d)\n  end\n\n  def execute(*arguments)\n    exit_code = Compass::Exec::SubCommandUI.new(arguments).run!\n    # fail \"Command Failed with exit code: #{exit_code}\" unless exit_code == 0\n    exit_code\n  end\nend\n"
  },
  {
    "path": "cli/test/helpers/diff.rb",
    "content": "require 'diff/lcs'\nrequire 'diff/lcs/hunk'\nmodule Compass\n  module Diff\n    #stole this from rspec who stole this from the gem\n    def diff_as_string(data_old, data_new)\n      data_old = data_old.split(/\\n/).map! { |e| e.chomp }\n      data_new = data_new.split(/\\n/).map! { |e| e.chomp }\n      output = \"\"\n      diffs = ::Diff::LCS.diff(data_old, data_new)\n      return output if diffs.empty?\n      oldhunk = hunk = nil  \n      file_length_difference = 0\n      diffs.each do |piece|\n        begin\n          hunk = ::Diff::LCS::Hunk.new(\n            data_old, data_new, piece, context_lines, file_length_difference\n          )\n          file_length_difference = hunk.file_length_difference      \n          next unless oldhunk      \n          # Hunks may overlap, which is why we need to be careful when our\n          # diff includes lines of context. Otherwise, we might print\n          # redundant lines.\n          if (context_lines > 0) and hunk.overlaps?(oldhunk)\n            hunk.unshift(oldhunk)\n          else\n            output << oldhunk.diff(format)\n          end\n        ensure\n          oldhunk = hunk\n          output << \"\\n\"\n        end\n      end  \n      #Handle the last remaining hunk\n      output << oldhunk.diff(format) << \"\\n\"\n    end\n  \n    protected\n\n      def format\n        :unified\n      end\n\n      def context_lines\n        3\n      end\n  \n  end\nend"
  },
  {
    "path": "cli/test/helpers/io.rb",
    "content": "module Compass\n  module IoHelper\n    def capture_output\n      real_stdout, $stdout = $stdout, StringIO.new\n      yield\n      $stdout.string\n    ensure\n      $stdout = real_stdout\n    end\n\n    def capture_warning\n      real_stderr, $stderr = $stderr, StringIO.new\n      yield\n      $stderr.string\n    ensure\n      $stderr = real_stderr\n    end\n\n    def capture_pipe(io, options = {})\n      options[:wait] = 0.25\n      options[:timeout] = 1.0\n      output = \"\"\n      eof_at = nil\n      while !eof_at || (Time.now - eof_at < options[:wait])\n        if io.eof?\n          eof_at ||= Time.now\n          sleep 0.1\n        else\n          eof_at = nil\n          timeout(options[:timeout]) { output << io.readpartial(1024) }\n        end\n      end\n      output\n    end\n  end\nend\n"
  },
  {
    "path": "cli/test/helpers/rails.rb",
    "content": "module Compass\n  module RailsHelper\n    def generate_rails_app_directories(name)\n      Dir.mkdir name\n      Dir.mkdir File.join(name, \"config\")\n      Dir.mkdir File.join(name, \"config\", \"initializers\")\n      Dir.mkdir File.join(name, \"tmp\")\n    end\n\n    # Generate a rails application without polluting our current set of requires\n    # with the rails libraries. This will allow testing against multiple versions of rails\n    # by manipulating the load path.\n    def generate_rails_app(name, dir = nil)\n      if pid = fork\n        Process.wait(pid)\n        if $?.exitstatus == 2\n          raise LoadError, \"Couldn't load rails\"\n        elsif $?.exitstatus != 0\n          raise \"Failed to generate rails application.\"\n        end\n      else\n        begin\n          require 'action_pack/version'\n          if ActionPack::VERSION::MAJOR >= 3\n            require 'rails/generators'\n            require 'rails/generators/rails/app/app_generator'\n            require 'mocha'\n            dir ||= File.join(File.expand_path('../../', __FILE__))\n            args = [File.join(dir, name), '-q', '-f', '--skip-bundle', '--skip-gemfile']\n            \n            #stub this so you can generate more apps\n            Rails::Generators::AppGenerator.any_instance.stubs(:valid_const?).returns(true)\n            Rails::Generators::AppGenerator.start(args, {:destination_root => dir})\n            \n          else\n            require 'rails/version'\n            require 'rails_generator'\n            require 'rails_generator/scripts/generate'\n            Rails::Generator::Base.use_application_sources!\n            capture_output do\n              Rails::Generator::Base.logger = Rails::Generator::SimpleLogger.new $stdout\n              Rails::Generator::Scripts::Generate.new.run([name], :generator => 'app')\n            end\n          end\n        rescue LoadError\n          Kernel.exit!(2)\n        rescue => e\n          $stderr.puts e\n          Kernel.exit!(1)\n        end\n        Kernel.exit!(0)\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/test/helpers/test_case.rb",
    "content": "module Compass\n  module TestCaseHelper\n    def absolutize(path)\n      if Compass::Util.blank?(path)\n        File.expand_path('../../', __FILE__)\n      elsif path[0] == ?/\n        File.join(File.expand_path('../', __FILE__), path)\n      else\n        File.join(File.expand_path('../../', __FILE__), path)\n      end\n    end\n\n    # compile a Sass string in the context of a project in the current working directory.\n    def compile_for_project(contents, options = {})\n      Compass.add_project_configuration\n      options[:syntax] ||= :scss\n      Sass::Engine.new(contents, Compass.configuration.to_sass_engine_options.merge(options)).render\n    end\n\n    def assert_correct(before, after)\n      if before == after\n        assert(true)\n      else\n        assert false, diff_as_string(before.inspect, after.inspect)\n      end\n    end\n    \n    module ClassMethods\n\n      def let(method, &block)\n        define_method method, &block\n      end\n\n      def it(name, &block)\n        test(name, &block)\n      end\n\n      def test(name, &block)\n        define_method \"test_#{underscore(name)}\".to_sym, &block\n      end\n\n      def setup(&block)\n        define_method :setup do\n          yield\n        end\n      end\n\n      def after(&block)\n        define_method :teardown do\n          yield\n        end\n      end\n\n      private \n\n      def underscore(string)\n        string.gsub(' ', '_')\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "cli/test/integrations/compass_test.rb",
    "content": "require 'test_helper'\nrequire 'fileutils'\nrequire 'compass'\nrequire 'compass/logger'\nrequire 'sass/plugin'\n\nclass CompassTest < Test::Unit::TestCase\n\n  def setup\n    Compass.reset_configuration!\n  end\n\n  def teardown\n    Dir.glob(absolutize(\"fixtures/stylesheets/*\")).each do |dir|\n      project_name = File.basename(dir)\n      ::FileUtils.rm_rf tempfile_path(project_name)\n      ::FileUtils.rm_rf File.join(project_path(project_name), \".sass-cache\")\n    end\n  end\n\n  def test_on_stylesheet_saved_callback\n    saved = false\n    path = nil\n    config = nil\n    before_compile = Proc.new do |config|\n      config.on_stylesheet_saved {|filepath| path = filepath; saved = true }\n    end\n    within_project(:compass, before_compile)\n    assert saved, \"Stylesheet callback didn't get called\"\n    assert path.is_a?(String), \"Path is not a string. Got: #{path.class.name}\"\n  end\n\n  # no project with errors exists to test aginst - leep of FAITH!\n  # *chriseppstein flogs himself*\n  def test_on_stylesheet_error_callback\n      error = false\n      file = nil\n      before_compile = Proc.new do |config|\n        config.on_stylesheet_error {|filename, message| file = filename; error = true }\n      end\n      within_project(:error, before_compile) rescue nil\n      assert error, \"Project did not throw a compile error\"\n      assert file.is_a?(String), \"Filename was not a string\"\n    end\n\n  def test_empty_project\n    # With no sass files, we should have no css files.\n    within_project(:empty) do |proj|\n      return unless proj.css_path && File.exists?(proj.css_path)\n      Dir.new(proj.css_path).each do |f|\n        fail \"This file should not have been generated: #{f}\" unless f == \".\" || f == \"..\"\n      end\n    end\n  end\n\n  def test_compass\n    within_project('compass') do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'compass'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file, :ignore_charset => true\n      end\n    end\n  end\n\n  def test_sourcemaps\n    within_project('sourcemaps') do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'sourcemaps'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file, :ignore_charset => true\n      end\n    end\n  end\n\n  def test_env_in_development\n    within_project('envtest', lambda {|c| c.environment = :development }) do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'envtest'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file, :ignore_charset => true, :environment => \"development\"\n      end\n    end\n  end\n\n  def test_env_in_production\n    within_project('envtest', lambda {|c| c.environment = :production }) do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'envtest'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file, :ignore_charset => true, :environment => \"production\"\n      end\n    end\n  end\n\n  def test_busted_font_urls\n    within_project('busted_font_urls') do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'busted_font_urls'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file\n      end\n    end\n  end\n\n  def test_busted_image_urls\n    within_project('busted_image_urls') do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'busted_image_urls'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file\n      end\n    end\n  end\n\n  def test_with_sass_globbing\n    within_project('with_sass_globbing') do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'with_sass_globbing'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file\n      end\n    end\n  end\n\n  def test_image_urls\n    within_project('image_urls') do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'image_urls'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file\n      end\n    end\n  end\n\n  def test_relative\n    within_project('relative') do |proj|\n      each_css_file(proj.css_path) do |css_file|\n        assert_no_errors css_file, 'relative'\n      end\n      each_sass_file do |sass_file|\n        assert_renders_correctly sass_file\n      end\n    end\n  end\n\nprivate\n  def assert_no_errors(css_file, project_name)\n    file = css_file[(tempfile_path(project_name).size+1)..-1]\n    msg = \"Syntax Error found in #{file}. Results saved into #{save_path(project_name)}/#{file}\"\n    assert_equal 0, open(css_file).readlines.grep(/Sass::SyntaxError/).size, msg\n  end\n\n  def assert_renders_correctly(*arguments)\n    options = arguments.last.is_a?(Hash) ? arguments.pop : {}\n    for name in arguments\n      @output_file = actual_result_file = \"#{tempfile_path(@current_project)}/#{name}.css\"\n      expected_result_file = \"#{result_path(@current_project)}/#{name}.css\"\n      @filename = expected_result_file.gsub('css', 'scss')\n      actual_lines = File.read(actual_result_file)\n      actual_lines.gsub!(/^@charset[^;]+;/,'') if options[:ignore_charset]\n      actual_lines = actual_lines.split(\"\\n\").reject{|l| l=~/\\A\\Z/}\n      expected_lines = ERB.new(File.read(expected_result_file)).result(binding)\n      expected_lines.gsub!(/^@charset[^;]+;/,'') if options[:ignore_charset]\n      expected_lines = expected_lines.split(\"\\n\").reject{|l| l=~/\\A\\Z/}\n      expected_lines.zip(actual_lines).each_with_index do |pair, line|\n        if pair.first == pair.last\n          assert(true)\n        else\n          assert false, \"Error in #{result_path(@current_project)}/#{name}.css:#{line + 1}\\n\"+diff_as_string(pair.first.inspect, pair.last.inspect)\n        end\n      end\n      if expected_lines.size < actual_lines.size\n        assert(false, \"#{actual_lines.size - expected_lines.size} Trailing lines found in #{actual_result_file}: #{actual_lines[expected_lines.size..-1].join('\\n')}\")\n      end\n    end\n  end\n\n  def within_project(project_name, config_block = nil)\n    @current_project = project_name\n    Compass.add_configuration(configuration_file(project_name)) if File.exists?(configuration_file(project_name))\n    Compass.configuration.project_path = project_path(project_name)\n    Compass.configuration.environment = :production\n    Compass.configuration.sourcemap = false unless Compass.configuration.sourcemap_set?\n\n    if config_block\n      config_block.call(Compass.configuration)\n    end\n\n    if Compass.configuration.sass_path && File.exists?(Compass.configuration.sass_path)\n      compiler = Compass.sass_compiler\n      compiler.logger = Compass::NullLogger.new\n      compiler.clean!\n      compiler.compile!\n    end\n    yield Compass.configuration if block_given?\n  rescue\n    save_output(project_name)\n    raise\n  end\n\n  def each_css_file(dir, &block)\n    Dir.glob(\"#{dir}/**/*.css\").each(&block)\n  end\n\n  def each_sass_file(sass_dir = nil)\n    sass_dir ||= template_path(@current_project)\n    Dir.glob(\"#{sass_dir}/**/*.s[ac]ss\").each do |sass_file|\n      next if File.basename(sass_file).start_with?(\"_\")\n      yield sass_file[(sass_dir.length+1)..-6]\n    end\n  end\n\n  def save_output(dir)\n    FileUtils.rm_rf(save_path(dir))\n    FileUtils.cp_r(tempfile_path(dir), save_path(dir)) if File.exists?(tempfile_path(dir))\n  end\n\n  def project_path(project_name)\n    absolutize(\"fixtures/stylesheets/#{project_name}\")\n  end\n\n  def configuration_file(project_name)\n    File.join(project_path(project_name), \"config.rb\")\n  end\n\n  def tempfile_path(project_name)\n    File.join(project_path(project_name), \"tmp\")\n  end\n\n  def template_path(project_name)\n    File.join(project_path(project_name), \"sass\")\n  end\n\n  def result_path(project_name)\n    File.join(project_path(project_name), \"css\")\n  end\n\n  def save_path(project_name)\n    File.join(project_path(project_name), \"saved\")\n  end\n\n  def filename\n    @filename\n  end\n\n  def output_file\n    @output_file\n  end\n\nend\n"
  },
  {
    "path": "cli/test/integrations/sprites_test.rb",
    "content": "require 'test_helper'\nrequire 'fileutils'\nrequire 'compass'\nrequire 'compass/logger'\nrequire 'sass/plugin'\n\n\nclass SpritesTest < Test::Unit::TestCase\n  \n  def setup\n    Compass.reset_configuration!\n    @images_project_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'fixtures', 'sprites', 'public'))\n    @images_src_dir = 'images'\n    @images_src_path = File.join(@images_project_path, @images_src_dir)\n    @images_tmp_dir = 'images-tmp'\n    @images_tmp_path = File.join(@images_project_path, @images_tmp_dir)\n    @generated_images_tmp_dir = 'generated-images-tmp'\n    @generated_images_tmp_path = File.join(@images_project_path, @generated_images_tmp_dir)\n    ::FileUtils.cp_r @images_src_path, @images_tmp_path\n    ::FileUtils.mkdir_p @generated_images_tmp_path\n    file = StringIO.new(<<-CONFIG)\n      project_path = \"#{@images_project_path}\"\n      images_dir = \"#{@images_tmp_dir}\"\n    CONFIG\n    Compass.add_configuration(file, \"sprite_config\")\n    Compass.configure_sass_plugin!\n  end\n\n  def teardown\n    Compass.reset_configuration!\n    ::FileUtils.rm_r @images_tmp_path\n    ::FileUtils.rm_rf @generated_images_tmp_path\n  end\n\n\n  def map_location(file)\n    map_files(file).first\n  end\n  \n  def map_files(glob)\n    Dir.glob(File.join(@images_tmp_path, glob))\n  end\n\n  def image_size(file)\n    Compass::Core::SassExtensions::Functions::ImageSize::ImageProperties.new(map_location(file)).size\n  end\n\n  def image_md5(file)\n    md5 = Digest::MD5.new\n    md5.update IO.read(map_location(file))\n    md5.hexdigest\n  end\n\n  def render(scss)\n    options = Compass.sass_engine_options\n    options[:line_comments] = false\n    options[:style] = :expanded\n    options[:syntax] = :scss\n    options[:compass] ||= {}\n    options[:compass][:logger] ||= Compass::NullLogger.new\n    css = Sass::Engine.new(scss, options).render\n    # reformat to fit result of heredoc:\n    \"      #{css.gsub('@charset \"UTF-8\";', '').gsub(/\\n/, \"\\n      \").strip}\\n\"\n  end\n  \n  def clean(string)\n    string.gsub(\"\\n\", '').gsub(' ', '')\n  end\n  \n  it \"should generate sprite classes\" do\n    css = render <<-SCSS\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-sbbc18e2129.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -10px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 30]\n    assert_equal image_md5('squares-s*.png'), '7349a0f4e88ea80abddcf6ac2486abe3'\n  end\n\n  it \"should output and serve sprite files using the generated images directory\" do\n    Compass.reset_configuration!\n    file = StringIO.new(<<-CONFIG)\n      images_path = #{@images_tmp_path.inspect}\n      generated_images_path = #{@generated_images_tmp_path.inspect}\n      http_generated_images_path = \"/images/generated\"\n    CONFIG\n    Compass.add_configuration(file, \"sprite_config\")\n    Compass.configure_sass_plugin!\n    css = render <<-SCSS\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_not_nil Dir.glob(\"#{@generated_images_tmp_path}/squares-s*.png\").first\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images/generated/squares-sbbc18e2129.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -10px;\n      }\n    CSS\n  end\n\n  it \"should generate sprite classes with dimensions\" do\n    css = render <<-SCSS\n      $squares-sprite-dimensions: true;\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-sbbc18e2129.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n        height: 10px;\n        width: 10px;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -10px;\n        height: 20px;\n        width: 20px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 30]\n  end\n\n  it \"should provide sprite mixin\" do\n    css = render <<-SCSS\n      @import \"squares/*.png\";\n\n      .cubicle {\n        @include squares-sprite(\"ten-by-ten\");\n      }\n\n      .large-cube {\n        @include squares-sprite(\"twenty-by-twenty\", true);\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .cubicle, .large-cube {\n        background-image: url('/images-tmp/squares-sbbc18e2129.png');\n        background-repeat: no-repeat;\n      }\n      \n      .cubicle {\n        background-position: 0 0;\n      }\n      \n      .large-cube {\n        background-position: 0 -10px;\n        height: 20px;\n        width: 20px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 30]\n  end\n\n  # CUSTOMIZATIONS:\n\n  it \"should be possible to change the base class\" do\n    css = render <<-SCSS\n      $squares-sprite-base-class: \".circles\";\n      @import \"squares/*.png\";\n    SCSS\n    assert_correct <<-CSS, css\n      .circles {\n        background-image: url('/images-tmp/squares-sbbc18e2129.png');\n        background-repeat: no-repeat;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 30]\n  end\n\n  it \"should calculate the spacing between images but not before first image\" do\n    css = render <<-SCSS\n      $squares-ten-by-ten-spacing: 33px;\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-s563a5e0855.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -43px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 63]\n  end\n\n  it \"should calculate the spacing between images\" do\n    css = render <<-SCSS\n      $squares-twenty-by-twenty-spacing: 33px;\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-s4ea353fa6d.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -43px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 63]\n  end\n\n  it \"should calculate the maximum spacing between images\" do\n    css = render <<-SCSS\n      $squares-ten-by-ten-spacing: 44px;\n      $squares-twenty-by-twenty-spacing: 33px;\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-sf4771cb124.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -54px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 74]\n  end\n\n  it \"should calculate the maximum spacing between images in reversed order\" do\n    css = render <<-SCSS\n      $squares-ten-by-ten-spacing: 33px;\n      $squares-twenty-by-twenty-spacing: 44px;\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-sc82d6f3cf4.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -54px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 74]\n  end\n\n  it \"should calculate the default spacing between images\" do\n    css = render <<-SCSS\n      $squares-spacing: 22px;\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-s2f4aa65dcf.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -32px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 52]\n  end\n\n  it \"should use position adjustments in functions\" do\n    css = render <<-SCSS\n      $squares: sprite-map(\"squares/*.png\", $position: 100%);\n      .squares-sprite {\n        background-image: $squares;\n        background-repeat: no-repeat;\n      }\n\n      .adjusted-percentage {\n        background-position: sprite-position($squares, ten-by-ten, 100%);\n      }\n\n      .adjusted-px-1 {\n        background-position: sprite-position($squares, ten-by-ten, 4px);\n      }\n\n      .adjusted-px-2 {\n        background-position: sprite-position($squares, twenty-by-twenty, -3px, 2px);\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite {\n        background-image: url('/images-tmp/squares-sce5dc30797.png');\n        background-repeat: no-repeat;\n      }\n      \n      .adjusted-percentage {\n        background-position: 100% 0;\n      }\n      \n      .adjusted-px-1 {\n        background-position: -6px 0;\n      }\n      \n      .adjusted-px-2 {\n        background-position: -3px -8px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 30]\n    assert_equal image_md5('squares-s*.png'), '9cc7ce48cfaf304381c2d08adefd2fb6'\n  end\n\n  it \"should use position adjustments in mixins\" do\n    css = render <<-SCSS\n      $squares-position: 100%;\n      @import \"squares/*.png\";\n\n      .adjusted-percentage {\n        @include squares-sprite(\"ten-by-ten\", $offset-x: 100%);\n      }\n\n      .adjusted-px-1 {\n        @include squares-sprite(\"ten-by-ten\", $offset-x: 4px);\n      }\n\n      .adjusted-px-2 {\n        @include squares-sprite(\"twenty-by-twenty\", $offset-x: -3px, $offset-y: 2px);\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .adjusted-percentage, .adjusted-px-1, .adjusted-px-2 {\n        background-image: url('/images-tmp/squares-sce5dc30797.png');\n        background-repeat: no-repeat;\n      }\n      \n      .adjusted-percentage {\n        background-position: 100% 0;\n      }\n      \n      .adjusted-px-1 {\n        background-position: -6px 0;\n      }\n      \n      .adjusted-px-2 {\n        background-position: -3px -8px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 30]\n    assert_equal image_md5('squares-s*.png'), '9cc7ce48cfaf304381c2d08adefd2fb6'\n  end\n\n  it \"should repeat the image\" do\n    css = render <<-SCSS\n      $squares-repeat: repeat-x;\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-s65c43cd573.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: 0 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: 0 -10px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [20, 30]\n    assert_equal image_md5('squares-s*.png'), 'a77a2fd43f04d791722b706aa7c9f1c1'\n  end\n\n  it \"should allow the position of a sprite to be specified in absolute pixels\" do\n    css = render <<-SCSS\n      $squares-ten-by-ten-position: 10px;\n      $squares-twenty-by-twenty-position: 10px;\n      @import \"squares/*.png\";\n      @include all-squares-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {\n        background-image: url('/images-tmp/squares-sb9d9a8ca6a.png');\n        background-repeat: no-repeat;\n      }\n      \n      .squares-ten-by-ten {\n        background-position: -10px 0;\n      }\n      \n      .squares-twenty-by-twenty {\n        background-position: -10px -10px;\n      }\n    CSS\n    assert_equal image_size('squares-s*.png'), [30, 30]\n    assert_equal image_md5('squares-s*.png'), '9856ced9e8211b6b28ff782019a0d905'\n  end\n\n  it \"should provide a nice errors for lemonade's old users\" do\n    assert_raise(Sass::SyntaxError) do\n      render <<-SCSS\n        .squares {\n          background-image: sprite-url(\"squares/*.png\");\n          background-repeat: no-repeat;\n        }\n      SCSS\n    end\n    \n    assert_raise(Sass::SyntaxError) do\n      css = render <<-SCSS\n        @import \"squares/*.png\";\n\n        .squares {\n          background-image: sprite-position(\"squares/twenty-by-twenty.png\");\n          background-repeat: no-repeat;\n        }\n      SCSS\n    end\n  end\n\n  it \"should work even if @import is missing\" do\n    css = render <<-SCSS\n      .squares {\n        background-image: sprite(sprite-map(\"squares/*.png\"), twenty-by-twenty);\n        background-repeat: no-repeat;\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .squares {\n        background-image: url('/images-tmp/squares-sd817b59156.png') 0 -10px;\n        background-repeat: no-repeat;\n      }\n    CSS\n  end\n\n  it \"should import sprites with numeric filenames via #738\" do\n    css = render <<-SCSS\n      @import \"numeric/*.png\";\n      @include all-numeric-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .numeric-sprite, .numeric-200 {\n        background-image: url('/images-tmp/numeric-saa92d65a89.png');\n        background-repeat: no-repeat;\n      }\n      \n      .numeric-200 {\n        background-position: 0 0;\n      }\n    CSS\n  end\n \n  it \"should use percentage positions when use_percentages is true\" do\n    css = render <<-SCSS\n      @import \"squares/*.png\";\n      $squares-use-percentages: true;\n      .foo {\n        @include squares-sprite-position(\"twenty-by-twenty\");\n      }\n      .bar {\n        @include squares-sprite-position(\"ten-by-ten\");\n        @include squares-sprite-dimensions(\"ten-by-ten\");\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite {\n        background-image: url('/images-tmp/squares-sbbc18e2129.png');\n        background-repeat: no-repeat;\n      }\n      \n      .foo {\n        background-position: 0 100%;\n      }\n      \n      .bar {\n        background-position: 0 0;\n        height: 10px;\n        width: 10px;\n      }\n    CSS\n  end\n  \n  it \"should use correct percentages when use_percentages is with horizontal layout\" do\n    css = render <<-SCSS\n      $squares-layout: horizontal;\n      @import \"squares/*.png\";\n      $squares-use-percentages: true;\n      .foo {\n        @include squares-sprite-position(\"twenty-by-twenty\");\n      }\n      .bar {\n        @include squares-sprite-position(\"ten-by-ten\");\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .squares-sprite {\n        background-image: url('/images-tmp/squares-s4bd95c5c56.png');\n        background-repeat: no-repeat;\n      }\n      \n      .foo {\n        background-position: 100% 0;\n      }\n      \n      .bar {\n        background-position: 0 0;\n      }\n    CSS\n  end\n\n  it \"should use correct percentages when use_percentages is true with smart layout\" do\n    css = render <<-SCSS\n      $image_row-layout: smart;\n      @import \"image_row/*.png\";\n      $image_row-use-percentages: true;\n      .foo {\n        @include image_row-sprite-position(\"medium\");\n      }\n      .bar {\n        @include image_row-sprite-position(\"large_square\");\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .image_row-sprite {\n        background-image: url('/images-tmp/image_row-sc5082a6b9f.png');\n        background-repeat: no-repeat;\n      }\n      \n      .foo {\n        background-position: 0 50%;\n      }\n      \n      .bar {\n        background-position: 33.33333% 100%;\n      }\n    CSS\n  end\n\n  it \"should use correct percentages when use_percentages is true\" do\n    css = render <<-SCSS\n      $image_row-use-percentages: true;\n      $image_row-sort-by : '!width';\n      @import \"image_row/*.png\";\n      @include all-image_row-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .image_row-sprite, .image_row-large, .image_row-large_square, .image_row-medium, .image_row-small, .image_row-tall {\n        background-image: url('/images-tmp/image_row-sdf383d45a3.png');\n        background-repeat: no-repeat;\n      }\n      \n      .image_row-large {\n        background-position: 0 0;\n      }\n      \n      .image_row-large_square {\n        background-position: 0 40%;\n      }\n      \n      .image_row-medium {\n        background-position: 0 16.66667%;\n      }\n      \n      .image_row-small {\n        background-position: 0 100%;\n      }\n      \n      .image_row-tall {\n        background-position: 0 80%;\n      }\n    CSS\n  end\n  \n  it \"should calculate corret sprite demsions when givin spacing via issue#253\" do\n    css = render <<-SCSS\n      $squares-spacing: 10px;\n      @import \"squares/*.png\";\n      .foo {\n        @include sprite-background-position($squares-sprites, \"twenty-by-twenty\");\n      }\n      .bar {\n        @include sprite-background-position($squares-sprites, \"ten-by-ten\");\n      }\n    SCSS\n    assert_equal image_size('squares-s*.png'), [20, 40]\n    assert_correct <<-CSS, css\n      .squares-sprite {\n        background-image: url('/images-tmp/squares-s555875d730.png');\n        background-repeat: no-repeat;\n      }\n      \n      .foo {\n        background-position: 0 -20px;\n      }\n      \n      .bar {\n        background-position: 0 0;\n      }\n    CSS\n  end\n\n  it \"should render correct sprite with css selectors via issue#248\" do\n    css = render <<-SCSS\n      @import \"selectors/*.png\";\n      @include all-selectors-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .selectors-sprite, .selectors-ten-by-ten {\n        background-image: url('/images-tmp/selectors-s7e84acb3d2.png');\n        background-repeat: no-repeat;\n      }\n      \n      .selectors-ten-by-ten {\n        background-position: 0 0;\n      }\n      .selectors-ten-by-ten:hover, .selectors-ten-by-ten.ten-by-ten-hover {\n        background-position: 0 -20px;\n      }\n      .selectors-ten-by-ten:target, .selectors-ten-by-ten.ten-by-ten-target {\n        background-position: 0 -30px;\n      }\n      .selectors-ten-by-ten:active, .selectors-ten-by-ten.ten-by-ten-active {\n        background-position: 0 -10px;\n      }\n    CSS\n  end\n  \n  it \"should honor offsets when rendering selectors via issue#449\" do\n    css = render <<-SCSS\n      @import \"selectors/*.png\";\n      @include all-selectors-sprites($offset-x: 20px, $offset-y: 20px);\n    SCSS\n    assert_correct <<-CSS, css\n      .selectors-sprite, .selectors-ten-by-ten {\n        background-image: url('/images-tmp/selectors-s7e84acb3d2.png');\n        background-repeat: no-repeat;\n      }\n      \n      .selectors-ten-by-ten {\n        background-position: 20px 20px;\n      }\n      .selectors-ten-by-ten:hover, .selectors-ten-by-ten.ten-by-ten-hover {\n        background-position: 20px 0;\n      }\n      .selectors-ten-by-ten:target, .selectors-ten-by-ten.ten-by-ten-target {\n        background-position: 20px -10px;\n      }\n      .selectors-ten-by-ten:active, .selectors-ten-by-ten.ten-by-ten-active {\n        background-position: 20px 10px;\n      }\n    CSS\n  end\n\n  it \"should render correct sprite with css selectors via magic mixin\" do\n    css = render <<-SCSS\n      @import \"selectors/*.png\";\n      a {\n        @include selectors-sprite(ten-by-ten)\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .selectors-sprite, a {\n        background-image: url('/images-tmp/selectors-s7e84acb3d2.png');\n        background-repeat: no-repeat;\n      }\n      \n      a {\n        background-position: 0 0;\n      }\n      a:hover, a.ten-by-ten-hover {\n        background-position: 0 -20px;\n      }\n      a:target, a.ten-by-ten-target {\n        background-position: 0 -30px;\n      }\n      a:active, a.ten-by-ten-active {\n        background-position: 0 -10px;\n      }\n    CSS\n  end\n\n  \n  it \"should not render corret sprite with css selectors via magic mixin\" do\n    css = render <<-SCSS\n      @import \"selectors/*.png\";\n      a {\n        $disable-magic-sprite-selectors:true !global;\n        @include selectors-sprite(ten-by-ten)\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .selectors-sprite, a {\n        background-image: url('/images-tmp/selectors-s7e84acb3d2.png');\n        background-repeat: no-repeat;\n      }\n      \n      a {\n        background-position: 0 0;\n      }\n    CSS\n  end\n\n  it \"should render corret sprite with css selectors via magic mixin with the correct offsets\" do\n    css = render <<-SCSS\n      @import \"selectors/*.png\";\n      a {\n        @include selectors-sprite(ten-by-ten, false, 5, -5)\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .selectors-sprite, a {\n        background-image: url('/images-tmp/selectors-s7e84acb3d2.png');\n        background-repeat: no-repeat;\n      }\n      \n      a {\n        background-position: 5px -5px;\n      }\n      a:hover, a.ten-by-ten-hover {\n        background-position: 5px -25px;\n      }\n      a:target, a.ten-by-ten-target {\n        background-position: 5px -35px;\n      }\n      a:active, a.ten-by-ten-active {\n        background-position: 5px -15px;\n      }\n    CSS\n  end\n  \n  it \"should not raise error on filenames that are invalid classnames if the selector generation is not used\" do\n    css = render <<-SCSS\n      $prefix-sort-by : 'width';\n      @import \"prefix/*.png\";\n      a {\n        @include prefix-sprite(\"20-by-20\");\n      }\n    SCSS\n    assert_correct <<-CSS, css\n      .prefix-sprite, a {\n        background-image: url('/images-tmp/prefix-s949dea513d.png');\n        background-repeat: no-repeat;\n      }\n      \n      a {\n        background-position: 0 -10px;\n      }\n    CSS\n  end\n\n  it \"should generate sprite with bad repeat-x dimensions\" do\n    css = render <<-SCSS\n      $ko-starbg26x27-repeat: repeat-x;\n      @import \"ko/*.png\";\n      @include all-ko-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .ko-sprite, .ko-default_background, .ko-starbg26x27 {\n        background-image: url('/images-tmp/ko-sd46dfbab4f.png');\n        background-repeat: no-repeat;\n      }\n      \n      .ko-default_background {\n        background-position: 0 0;\n      }\n      \n      .ko-starbg26x27 {\n        background-position: 0 -128px;\n      }\n    CSS\n  end\n  \n  it \"should generate a sprite and remove the old file\" do\n    FileUtils.touch File.join(@images_tmp_path, \"selectors-scc8834Fdd.png\")\n    assert_equal 1, map_files('selectors-s*.png').size\n    css = render <<-SCSS\n      @import \"selectors/*.png\";\n      a {\n        $disable-magic-sprite-selectors:true !global;\n        @include selectors-sprite(ten-by-ten)\n      }\n    SCSS\n    assert_equal 1, map_files('selectors-s*.png').size, \"File was not removed\"\n  end\n  \n  it \"should generate a sprite and NOT remove the old file\" do\n    FileUtils.touch File.join(@images_tmp_path, \"selectors-scc8834Ftest.png\")\n    assert_equal 1, map_files('selectors-s*.png').size\n    css = render <<-SCSS\n      $selectors-clean-up: false;\n      @import \"selectors/*.png\";\n      a {\n        $disable-magic-sprite-selectors:true !global;\n        @include selectors-sprite(ten-by-ten)\n      }\n    SCSS\n    assert_equal 2, map_files('selectors-s*.png').size, \"File was removed\"\n  end\n  \n  it \"should generate a sprite if the sprite is a bool\" do\n    css = render <<-SCSS\n      @import \"bool/*.png\";\n      a {\n        @include bool-sprite(false);\n      }\n      a {\n        @include bool-sprite(true);\n      }\n    SCSS\n    assert !css.empty?\n  end\n  \n  \n  it \"should generate a sprite if the sprite is a colorname\" do\n    css = render <<-SCSS\n      @import \"colors/*.png\";\n      a {\n        @include colors-sprite(blue);\n      }\n    SCSS\n    assert !css.empty?\n  end\n  \n  it \"should generate a sprite from nested folders\" do\n    css = render <<-SCSS\n      @import \"nested/**/*.png\";\n      @include all-nested-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .nested-sprite, .nested-ten-by-ten {\n        background-image: url('/images-tmp/nested-s7b93e0b6bf.png');\n        background-repeat: no-repeat;\n      }\n      \n      .nested-ten-by-ten {\n        background-position: 0 0;\n      }\n    CSS\n  end\n    \n  it \"should create horizontal sprite\" do\n    css = render <<-SCSS\n      $squares-layout:horizontal;\n      @import \"squares/*.png\";\n      .foo {\n        @include sprite-background-position($squares-sprites, \"twenty-by-twenty\");\n      }\n      .bar {\n        @include sprite-background-position($squares-sprites, \"ten-by-ten\");\n      }\n    SCSS\n    assert_equal [30, 20], image_size('squares-s*.png')\n    other_css = <<-CSS\n      .squares-sprite {\n        background-image: url('/images-tmp/squares-s4bd95c5c56.png');\n        background-repeat: no-repeat;\n      }\n\n      .foo {\n        background-position: -10px 0;\n      }\n\n      .bar {\n        background-position: 0 0;\n      }\n    CSS\n    assert_correct clean(other_css), clean(css)\n  end\n\n  it \"should allow use of demension functions\" do\n    css = render <<-SCSS\n      @import \"squares/*.png\";\n      $h: squares-sprite-height(twenty-by-twenty);\n      $w: squares-sprite-width(twenty-by-twenty);\n      .div {\n        height:$h + 1px;\n        width:$w + 2px;\n      }\n    SCSS\n    other_css = <<-CSS\n      .squares-sprite {\n        background-image: url('/images-tmp/squares-sbbc18e2129.png');\n        background-repeat: no-repeat;\n      }\n      .div {\n        height:21px;\n        width:22px;\n      }\n    CSS\n    assert_correct clean(other_css), clean(css)\n  end\n\n  it \"should replace text with images and dimensions using sprites\" do\n     css = render <<-SCSS\n     @import \"compass/utilities/sprites/sprite-img\";\n     @import \"colors/*.png\";\n     .blue { \n       @include sprite-replace-text($colors-sprites, blue); \n     }\n     .yellow {\n       @include sprite-replace-text-with-dimensions($colors-sprites, yellow);\n     }\n     SCSS\n     other_css = <<-CSS\n      .colors-sprite {\n        background-image:url('/images-tmp/colors-s58671cb5bb.png');\n        background-repeat: no-repeat;\n      }\n      .blue { \n        text-indent:-119988px;\n        overflow:hidden;\n        text-align:left;\n        text-transform: capitalize;\n        background-position:0 0;\n        background-image:url('/images-tmp/colors-s58671cb5bb.png');\n        background-repeat:no-repeat;\n      }\n      \n      .yellow { \n        text-indent:-119988px;\n        overflow:hidden;\n        text-align:left;\n        text-transform: capitalize;\n        background-position:0 -10px;\n        height:10px;\n        width:10px;\n        background-image:url('/images-tmp/colors-s58671cb5bb.png');\n        background-repeat:no-repeat;\n        }\n     CSS\n     assert_correct clean(other_css), clean(css)\n   end\n   \n   it \"should inline the sprite file\" do\n    Compass.reset_configuration!\n    file = StringIO.new(<<-CONFIG)\n      images_path = #{@images_tmp_path.inspect}\n      generated_images_path = #{@generated_images_tmp_path.inspect}\n    CONFIG\n    Compass.add_configuration(file, \"sprite_config\")\n    Compass.configure_sass_plugin!\n    css = render <<-SCSS\n      $colors-inline:true;\n      @import \"colors/*.png\";\n      @include all-colors-sprites;\n     SCSS\n    other_css = <<-CSS\n      .colors-sprite, .colors-blue, .colors-yellow {\n        background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAUCAAAAACRhfOKAAAAHElEQVR42mM5wQADLP8JMRlIUIvE/IdgctLTNgCHDhEQVD4ceAAAAABJRU5ErkJggg==');\n      }\n      .colors-blue { \n        background-position:0 0;\n      }\n      .colors-yellow {\n        background-position:0 -10px;\n      }\n    CSS\n    assert_correct clean(other_css), clean(css)\n   end\n\n  it \"should have a sprite_name function that returns the names of the sprites in a sass list\" do\n    css = render <<-SCSS\n      @import \"colors/*.png\";\n      @each $color in sprite_names($colors-sprites) {\n        .\\#{$color} {\n          width:0px;\n        }\n      }\n    SCSS\n    other_css = <<-CSS\n      .colors-sprite {\n        background-image: url('/images-tmp/colors-s58671cb5bb.png');\n        background-repeat: no-repeat;\n      }\n      .blue { \n        width:0px;\n      }\n      .yellow {\n        width:0px;\n      }\n    CSS\n    assert_correct clean(other_css), clean(css)\n\n  end\n\n  it \"should respect global spacing\" do\n    css = render <<-SCSS\n      $colors-spacing:5px;\n      @import \"colors/*.png\";\n      @include all-colors-sprites;\n    SCSS\n    other_css = <<-CSS\n      .colors-sprite, .colors-blue, .colors-yellow {\n        background-image: url('/images-tmp/colors-s747dec274e.png');\n        background-repeat: no-repeat;\n      }\n      .colors-blue { \n        background-position:0 0;\n      }\n      .colors-yellow {\n        background-position:0 -15px;\n      }\n    CSS\n    assert_correct clean(other_css), clean(css)\n  end\n\n  it \"should return width and height of the map\" do\n    css = render <<-SCSS\n      @import \"colors/*.png\";\n      .height { height : sprite_height($colors-sprites); }\n      .width { width : sprite_width($colors-sprites); }\n    SCSS\n    other_css = <<-CSS\n      .colors-sprite {\n        background-image: url('/images-tmp/colors-s58671cb5bb.png');\n        background-repeat: no-repeat;\n      }\n      .height {\n        height : 20px;\n      }\n      .width {\n        width : 10px;\n      }\n    CSS\n    assert_correct clean(other_css), clean(css)\n  end\n\n    it \"should return width and height of a sprite\" do\n    css = render <<-SCSS\n      @import \"colors/*.png\";\n      .height { height : sprite_height($colors-sprites, blue); }\n      .width { width : sprite_width($colors-sprites, blue); }\n    SCSS\n    other_css = <<-CSS\n      .colors-sprite {\n        background-image: url('/images-tmp/colors-s58671cb5bb.png');\n        background-repeat: no-repeat;\n      }\n      .height {\n        height : 10px;\n      }\n      .width {\n        width : 10px;\n      }\n    CSS\n    assert_correct clean(other_css), clean(css)\n  end\n\n  it \"should render correct sprite with focus selector\" do\n    css = render <<-SCSS\n      @import \"focus/*.png\";\n      @include all-focus-sprites;\n    SCSS\n    assert_correct <<-CSS, css\n      .focus-sprite, .focus-ten-by-ten {\n        background-image: url('/images-tmp/focus-sb5d1467be1.png');\n        background-repeat: no-repeat;\n      }\n      \n      .focus-ten-by-ten {\n        background-position: 0 0;\n      }\n      .focus-ten-by-ten:hover, .focus-ten-by-ten.ten-by-ten-hover {\n        background-position: 0 -30px;\n      }\n      .focus-ten-by-ten:target, .focus-ten-by-ten.ten-by-ten-target {\n        background-position: 0 -40px;\n      }\n      .focus-ten-by-ten:active, .focus-ten-by-ten.ten-by-ten-active {\n        background-position: 0 -10px;\n      }\n      .focus-ten-by-ten:focus, .focus-ten-by-ten.ten-by-ten-focus {\n        background-position: 0 -20px;\n      }\n    CSS\n  end\n\nend\n"
  },
  {
    "path": "cli/test/test_helper.rb",
    "content": "lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))\n$:.unshift(lib_dir) unless $:.include?(lib_dir)\ntest_dir = File.dirname(__FILE__)\n$:.unshift(test_dir) unless $:.include?(test_dir)\n\nrequire 'compass'\nrequire 'test/unit'\nrequire 'true'\n\n\nclass String\n  def name\n    to_s\n  end\nend\n\n%w(command_line diff io rails test_case).each do |helper|\n  require \"helpers/#{helper}\"\nend\n\n\nclass Test::Unit::TestCase\n  include Compass::Diff\n  include Compass::TestCaseHelper\n  include Compass::IoHelper\n  extend Compass::TestCaseHelper::ClassMethods\n  \n  def fixture_path\n    File.join(File.expand_path('../', __FILE__), 'fixtures')\n  end\n\nend \n\nmodule SpriteHelper\n  URI = \"selectors/*.png\"\n  \n  def init_sprite_helper\n    @images_proj_path = File.join(File.expand_path('../', __FILE__), 'fixtures', 'sprites', 'public')\n    @images_src_dir = 'images'\n    @images_src_path = File.join(@images_proj_path, @images_src_dir)\n    @images_tmp_dir = 'images-tmp'\n    @images_tmp_path = File.join(@images_proj_path, @images_tmp_dir)\n  end\n  \n  def sprite_map_test(options, uri = URI)\n    importer = Compass::SpriteImporter.new\n    path, name = Compass::SpriteImporter.path_and_name(uri)\n    sprite_names = Compass::SpriteImporter.sprite_names(uri)\n    sass_engine = Compass::SpriteImporter.sass_engine(uri, name, importer, options)\n    map = Compass::SassExtensions::Sprites::SpriteMap.new(sprite_names.map{|n| uri.gsub('*', n)}, path, name, sass_engine, options)\n    map.options = {:compass => {:logger => Compass::NullLogger.new}}\n    map\n  end\n  \n  def create_sprite_temp\n     init_sprite_helper\n    ::FileUtils.cp_r @images_src_path, @images_tmp_path\n  end\n\n  def clean_up_sprites\n    init_sprite_helper\n    ::FileUtils.rm_r @images_tmp_path   \n  rescue Errno::ENOENT\n    #pass\n  end\n  \nend\n"
  },
  {
    "path": "cli/test/units/actions_test.rb",
    "content": "require 'test_helper'\nrequire 'compass'\n\nclass ActionsTest < Test::Unit::TestCase\n  class BaseActionExtender\n    include Compass::Actions\n    def options\n      @@options ||= {}\n    end\n    def working_path\n      \"/tmp\"\n    end\n  end\n  \n  # When log4r is included, it sometimes breaks the Actions\n  test \"test_quiet_option\" do\n    b = BaseActionExtender.new\n    b.logger = \"\"\n    b.options[:quiet] = true\n\n    # logger shouldn't be called... if it is, this will error\n    b.directory(\"/tmp/#{(rand * 1000000).to_i}\")\n  end\nend"
  },
  {
    "path": "cli/test/units/caniuse_test.rb",
    "content": "require 'test_helper'\nrequire 'compass'\n\nclass CanIUseTest < Test::Unit::TestCase\n\n  def caniuse\n    Compass::Core::CanIUse.instance\n  end\n\n  DEFAULT_CAPABILITY_OPTIONS = [{:full_support => true}, {:partial_support => true}]\n\n  def test_unknown_browsers\n    assert_equal \"unknown\", Compass::Core::CanIUse::PUBLIC_BROWSER_NAMES[\"unknown\"]\n    assert_equal \"unknown\", Compass::Core::CanIUse::CAN_I_USE_NAMES[\"unknown\"]\n  end\n\n  def test_browser_names\n    assert_equal Compass::Core::CanIUse::PUBLIC_BROWSER_NAMES.values.sort, caniuse.browsers\n  end\n\n  def test_prefixes\n    assert_equal %w(-moz -ms -o -webkit), caniuse.prefixes\n    assert_equal %w(-moz -webkit), caniuse.prefixes(%w(chrome firefox safari))\n  end\n\n  def test_prefix\n    assert_equal \"-webkit\", caniuse.prefix(\"chrome\")\n    assert_equal \"-webkit\", caniuse.prefix(\"safari\")\n    assert_equal \"-ms\", caniuse.prefix(\"ie\")\n    assert_equal \"-webkit\", caniuse.prefix(\"opera\")\n    assert_equal \"-o\", caniuse.prefix(\"opera\", \"12.1\")\n  end\n\n  def test_browsers_with_prefix\n    assert_equal %w(android android-chrome blackberry chrome ios-safari opera opera-mobile safari),\n      caniuse.browsers_with_prefix(\"-webkit\").sort\n    assert_equal %w(android-firefox firefox),\n      caniuse.browsers_with_prefix(\"-moz\").sort\n  end\n\n  def test_capabilities\n    # This is meant to break if a capability goes away or arrives\n    # So that we can think about what that means for compass\n\n    assert_equal [\n      \"background-img-opts\",\n      \"border-image\",\n      \"border-radius\",\n      \"calc\",\n      \"css-animation\",\n      \"css-appearance\",\n      \"css-backgroundblendmode\",\n      \"css-boxshadow\",\n      \"css-canvas\",\n      \"css-counters\",\n      \"css-featurequeries\",\n      \"css-filters\",\n      \"css-fixed\",\n      \"css-gencontent\",\n      \"css-gradients\",\n      \"css-grid\",\n      \"css-hyphens\",\n      \"css-image-orientation\",\n      \"css-masks\",\n      \"css-mediaqueries\",\n      \"css-mixblendmode\",\n      \"css-opacity\",\n      \"css-placeholder\",\n      \"css-reflections\",\n      \"css-regions\",\n      \"css-repeating-gradients\",\n      \"css-resize\",\n      \"css-sel2\",\n      \"css-sel3\",\n      \"css-selection\",\n      \"css-shapes\",\n      \"css-sticky\",\n      \"css-table\",\n      \"css-textshadow\",\n      \"css-transitions\",\n      \"css-variables\",\n      \"css3-boxsizing\",\n      \"css3-colors\",\n      \"css3-cursors\",\n      \"css3-tabsize\",\n      \"flexbox\",\n      \"font-feature\",\n      \"fontface\",\n      \"getcomputedstyle\",\n      \"inline-block\",\n      \"intrinsic-width\",\n      \"kerning-pairs-ligatures\",\n      \"minmaxwh\",\n      \"multibackgrounds\",\n      \"multicolumn\",\n      \"object-fit\",\n      \"outline\",\n      \"pointer-events\",\n      \"rem\",\n      \"style-scoped\",\n      \"svg-css\",\n      \"text-decoration\",\n      \"text-overflow\",\n      \"text-size-adjust\",\n      \"text-stroke\",\n      \"transforms2d\",\n      \"transforms3d\",\n      \"ttf\",\n      \"user-select-none\",\n      \"viewport-units\",\n      \"word-break\",\n      \"wordwrap\"],\n    caniuse.capabilities\n  end\n\n  def test_usage\n    total = 0\n    caniuse.browsers.each do |browser|\n      caniuse.versions(browser).each do |version|\n        usage = caniuse.usage(browser, version)\n        if usage.nil?\n          puts \"nil usage for #{browser} at version #{version}\"\n          next\n        end\n        total += usage\n      end\n    end\n    # all browsers add up to about 94%. that's... unfortunate.\n    assert total > 90 && total < 100\n  end\n\n  def test_prefixed_usage\n    assert 0 < caniuse.prefixed_usage(\"-webkit\", \"border-radius\", DEFAULT_CAPABILITY_OPTIONS)\n    assert_equal 0, caniuse.prefixed_usage(\"-webkit\", \"outline\", DEFAULT_CAPABILITY_OPTIONS)\n    assert_raises ArgumentError do\n      caniuse.prefixed_usage(\"-webkit\", \"unknown\", DEFAULT_CAPABILITY_OPTIONS)\n    end\n  end\n\n  def test_requires_prefix\n    assert_raises ArgumentError do\n      caniuse.requires_prefix(\"chrome\", \"3\", \"border-radius\", DEFAULT_CAPABILITY_OPTIONS)\n    end\n    assert_equal \"-webkit\", caniuse.requires_prefix(\"chrome\", \"4\", \"border-radius\", DEFAULT_CAPABILITY_OPTIONS)\n    assert_equal nil, caniuse.requires_prefix(\"chrome\", \"5\", \"border-radius\", DEFAULT_CAPABILITY_OPTIONS)\n    assert_equal nil, caniuse.requires_prefix(\"chrome\", \"30\", \"border-radius\", DEFAULT_CAPABILITY_OPTIONS)\n    assert_equal \"-webkit\", caniuse.requires_prefix(\"opera\", \"16\", \"css-filters\", DEFAULT_CAPABILITY_OPTIONS)\n  end\n\n  def test_browser_ranges_only_prefixed\n    mins = caniuse.browser_ranges(\"border-radius\", \"-webkit\", false)\n    expected = {\n      \"android\"=>[\"2.1\", \"2.1\"],\n      \"chrome\"=>[\"4\", \"4\"],\n      \"ios-safari\"=>[\"3.2\", \"3.2\"],\n      \"safari\"=>[\"3.1\", \"4\"]\n    }\n    assert_equal(expected, mins)\n  end\n\n  def test_ranges_are_empty_when_prefix_doesnt_exit\n    mins = caniuse.browser_ranges(\"css-filters\", \"-o\")\n    expected = {}\n    assert_equal(expected, mins)\n  end\n\n  def test_browser_ranges_including_unprefixed\n    mins = caniuse.browser_ranges(\"border-radius\", \"-webkit\")\n    expected = {\n      \"android\"=>[\"2.1\", \"4.4.3\"],\n      \"chrome\"=>[\"4\", \"39\"],\n      \"ios-safari\"=>[\"3.2\", \"8\"],\n      \"safari\"=>[\"3.1\", \"8\"]\n    }\n    assert_equal(expected, mins)\n  end\n\n  def test_capability_matches\n    assert caniuse.capability_matches(\n      caniuse.browser_support(\"chrome\", \"10\", \"flexbox\"),\n      [{:full_support => true}, {:partial_support => true, :spec_versions => [1]}])\n    assert !caniuse.capability_matches(\n      caniuse.browser_support(\"chrome\", \"10\", \"flexbox\"),\n      [{:full_support => true}, {:partial_support => true, :spec_versions => [3]}])\n  end\n\n  def test_omitted_usage\n    assert_equal 0, caniuse.omitted_usage(\"chrome\", \"4\")\n    assert_equal caniuse.usage(\"chrome\", \"4\"), caniuse.omitted_usage(\"chrome\", \"5\")\n    assert_equal caniuse.usage(\"chrome\", \"4\"), caniuse.omitted_usage(\"chrome\", \"4\", \"4\")\n    assert_equal caniuse.usage(\"chrome\", \"4\") + caniuse.usage(\"chrome\", \"5\"),\n                 caniuse.omitted_usage(\"chrome\", \"4\", \"5\")\n  end\nend\n"
  },
  {
    "path": "cli/test/units/command_line_test.rb",
    "content": "require 'test_helper'\nrequire 'fileutils'\nrequire 'compass'\nrequire 'compass/exec'\nrequire 'timeout'\n\nclass CommandLineTest < Test::Unit::TestCase\n  include Compass::TestCaseHelper\n  include Compass::CommandLineHelper\n  include Compass::IoHelper\n\n  def teardown\n    Compass.reset_configuration!\n  end\n\n  def test_print_version\n    compass(\"-vq\")\n    assert_match(/\\d+\\.\\d+\\.(\\d+|((alpha|beta|rc)\\.\\d+\\.[0-9a-f]+))?/, @last_result)\n  end\n\n  def test_basic_install\n    within_tmp_directory do\n      compass(*%w(create --boring basic))\n      assert File.exists?(\"basic/sass/screen.scss\")\n      assert_action_performed :directory, \"basic/\"\n      assert_action_performed    :create, \"basic/sass/screen.scss\"\n    end\n  end\n\n  Compass::Frameworks::ALL.each do |framework|\n    next if framework.name == \"true\"\n    next if framework.name == \"testing\"\n    next if framework.name =~ /^_/\n    define_method \"test_#{framework.name}_installation\" do\n      within_tmp_directory do\n        compass(*%W(create --boring --using #{framework.name} #{framework.name}_project))\n        assert File.exists?(\"#{framework.name}_project/sass/screen.scss\"), \"sass/screen.scss is missing. Found: #{Dir.glob(\"#{framework.name}_project/**/*\").join(\", \")}\"\n        assert File.exists?(\"#{framework.name}_project/stylesheets/screen.css\")\n        assert_action_performed :directory, \"#{framework.name}_project/\"\n        assert_action_performed    :create, \"#{framework.name}_project/sass/screen.scss\"\n        assert_action_performed    :write, \"#{framework.name}_project/stylesheets/screen.css\"\n      end\n    end\n  end\n\n  def test_basic_update\n    within_tmp_directory do\n      compass \"create\", \"--boring\", \"basic\"\n      Dir.chdir \"basic\" do\n        # basic update with timestamp caching\n        compass \"compile\", \"--boring\"\n        # assert_action_performed :unchanged, \"sass/screen.scss\"\n        # basic update with force option set\n        compass \"compile\", \"--force\", \"--boring\"\n        assert_action_performed :write, \"stylesheets/screen.css\"\n      end\n    end\n  end\n\nend\n"
  },
  {
    "path": "cli/test/units/compass_util_test.rb",
    "content": "require 'test_helper'\n\nclass CompassUtilTest < Test::Unit::TestCase\n  def test_warn\n    $stderr, old_err = StringIO.new, $stderr\n    Compass::Util.compass_warn(\"this is a warning\")\n    assert_match(/this is a warning/, $stderr.string)\n  ensure\n    $stderr = old_err\n  end\nend\n"
  },
  {
    "path": "cli/test/units/compiler_test.rb",
    "content": "require 'test_helper'\nrequire 'fileutils'\n\nclass CompilerTest < Test::Unit::TestCase\n  \n  it \"should strip css from file name and reappend\" do\n    config = Compass::Configuration::Data.new(\"test\",\n                                              :project_path => Dir.pwd,\n                                              :sass_dir => \"foo\",\n                                              :css_dir => \"bar\")\n    config.extend(Compass::Configuration::Defaults)\n    compiler = Compass.sass_compiler({}, config)\n    assert_equal 'screen', compiler.stylesheet_name(File.join(Dir.pwd, 'foo', 'screen.css.scss'))\n  end\n\nend\n"
  },
  {
    "path": "cli/test/units/configuration_test.rb",
    "content": "require 'test_helper'\nrequire 'compass'\nrequire 'stringio'\n\nclass ConfigurationTest < Test::Unit::TestCase\n\n  setup do\n    Compass.reset_configuration!\n    @original_wd = Dir.pwd\n    FileUtils.rm_rf \"test_tmp\"\n    FileUtils.mkdir_p \"test_tmp/images\"\n    FileUtils.mkdir_p \"test_tmp/fonts\"\n    Dir.chdir \"test_tmp\"\n  end\n  \n  after do\n    Compass.reset_configuration!\n    Dir.chdir @original_wd\n    FileUtils.rm_rf \"test_tmp\"\n  end\n\n  def test_parse_and_serialize\n    contents = StringIO.new(<<-CONFIG)\n      require 'compass'\n      require 'compass/import-once/activate'\n      # Require any additional compass plugins here.\n\n      project_type = :stand_alone\n      \n      http_path = \"/\"\n      css_dir = \"css\"\n      sass_dir = \"sass\"\n      images_dir = \"img\"\n      javascripts_dir = \"js\"\n      \n      output_style = :nested\n      \n      # To enable relative paths to assets via compass helper functions. Uncomment:\n      # relative_assets = true\n      \n      # To disable debugging comments that display the original location of your selectors. Uncomment:\n      # line_comments = false\n      \n      \n      # If you prefer the indented syntax, you might want to regenerate this\n      # project again passing --syntax sass, or you can uncomment this:\n      # preferred_syntax = :sass\n      # and then run:\n      # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass\n    CONFIG\n\n    Compass.add_configuration(contents, \"test_parse\")\n\n    assert_equal 'sass', Compass.configuration.sass_dir\n    assert_equal 'css', Compass.configuration.css_dir\n    assert_equal 'img', Compass.configuration.images_dir\n    assert_equal 'js', Compass.configuration.javascripts_dir\n\n    expected_lines = contents.string.split(\"\\n\").map{|l|l.strip}\n    actual_lines = Compass.configuration.serialize.split(\"\\n\").map{|l|l.strip}\n    assert_correct expected_lines, actual_lines\n  end\n\n  def test_custom_watch\n    contents = StringIO.new(<<-CONFIG)\n      watch 'img/**/*' do\n        puts 'foobar'\n      end\n    CONFIG\n    Compass.add_configuration(contents, 'test_watch_config')\n    watch = Compass.configuration.watches.first\n    assert_equal 'img/**/*', watch.glob\n    assert watch.is_a?(Compass::Configuration::Watch)\n  end\n\n  def test_serialization_warns_with_asset_host_set\n    contents = StringIO.new(<<-CONFIG)\n      asset_host do |path|\n        \"http://example.com\"\n      end\n    CONFIG\n\n    Compass.add_configuration(contents, \"test_serialization_warns_with_asset_host_set\")\n\n    warning = capture_warning do\n      Compass.configuration.serialize\n    end\n    assert_equal \"WARNING: asset_host is code and cannot be written to a file. You'll need to copy it yourself.\\n\", warning\n  end\n\n  class TestData < Compass::Configuration::FileData\n    def initialize\n      super(:test)\n    end\n    inherited_array :stuff, :clobbers => true\n    inherited_array :accumulated\n  end\n\n  def test_accumulated_array_does_not_clobber\n    data1 = TestData.new\n    data1.accumulated = [:a]\n    data2 = TestData.new\n    data2.accumulated = [:b]\n    data2.inherit_from!(data1)\n    assert_equal [:b, :a], data2.accumulated.to_a\n  end\n\n  def test_inherited_array_can_clobber\n    data1 = TestData.new\n    data1.stuff = [:a]\n    data2 = TestData.new\n    data2.stuff = [:b]\n    data2.inherit_from!(data1)\n    assert_equal [:b], data2.stuff.to_a\n  end\n\n  def test_inherited_array_can_append\n    data1 = TestData.new\n    data1.stuff = [:a]\n    data2 = TestData.new\n    data2.stuff << :b\n    data2.inherit_from!(data1)\n    assert_equal [:b, :a], data2.stuff.to_a\n  end\n\n  def test_inherited_array_can_append_2\n    data1 = TestData.new\n    data1.stuff = [:a]\n    data2 = TestData.new\n    data2.stuff << :b\n    data2.inherit_from!(data1)\n    data3 = TestData.new\n    data3.stuff << :c\n    data3.inherit_from!(data2)\n    assert_equal [:c, :b, :a], data3.stuff.to_a\n  end\n\n  def test_inherited_array_can_remove\n    data1 = TestData.new\n    data1.stuff = [:a]\n    data2 = TestData.new\n    data2.stuff >> :a\n    data2.inherit_from!(data1)\n    assert_equal [], data2.stuff.to_a\n  end\n\n  def test_inherited_array_combined_augmentations\n    data1 = TestData.new\n    data1.stuff = [:a]\n    data2 = TestData.new\n    data2.stuff >> :a\n    data2.stuff << :b\n    data2.inherit_from!(data1)\n    assert_equal [:b], data2.stuff.to_a\n  end\n\n  def test_inherited_array_long_methods\n    data1 = TestData.new\n    data1.stuff = [:a]\n    data2 = TestData.new\n    data2.remove_from_stuff(:a)\n    data2.add_to_stuff(:b)\n    data2.inherit_from!(data1)\n    assert_equal [:b], data2.stuff.to_a\n  end\n\n  def test_inherited_array_augmentations_can_be_clobbered\n    data1 = TestData.new\n    data1.stuff = [:a]\n    data2 = TestData.new\n    data2.stuff >> :a\n    data2.stuff << :b\n    data2.stuff = [:c]\n    data2.inherit_from!(data1)\n    assert_equal [:c], data2.stuff.to_a\n  end\n\n  def test_inherited_array_augmentations_after_clobbering\n    data1 = TestData.new\n    data1.stuff = [:a]\n    data2 = TestData.new\n    data2.stuff >> :a\n    data2.stuff << :b\n    data2.stuff = [:c, :d]\n    data2.stuff << :e\n    data2.stuff >> :c\n    data2.inherit_from!(data1)\n    assert_equal [:d, :e], data2.stuff.to_a\n  end\n\n  def test_serialization_warns_with_asset_cache_buster_set\n    contents = StringIO.new(<<-CONFIG)\n      asset_cache_buster do |path|\n        \"http://example.com\"\n      end\n    CONFIG\n\n    Compass.add_configuration(contents, \"test_serialization_warns_with_asset_cache_buster_set\")\n\n    assert_kind_of Proc, Compass.configuration.asset_cache_buster_without_default\n    assert_equal \"http://example.com\", Compass.configuration.asset_cache_buster_without_default.call(\"whatever\")\n    warning = capture_warning do\n      Compass.configuration.serialize\n    end\n    assert_equal \"WARNING: asset_cache_buster is code and cannot be written to a file. You'll need to copy it yourself.\\n\", warning\n  end\n\n  def test_cache_buster_file_not_passed_when_the_file_does_not_exist\n    config = Compass::Configuration::Data.new(\"test_cache_buster_file_not_passed_when_the_file_does_not_exist\")\n    the_file = nil\n    was_called = nil\n    config.asset_cache_buster do |path, file|\n      was_called = true\n      the_file = file\n      \"busted=true\"\n    end\n\n    Compass.add_configuration(config)\n\n\n    sass = Sass::Engine.new(<<-SCSS, Compass.configuration.to_sass_engine_options.merge(:syntax => :scss))\n      .foo { background: image-url(\"asdf.gif\") }\n    SCSS\n    sass.render\n    assert was_called\n    assert_nil the_file\n  end\n\n  def test_cache_buster_file_is_closed\n    config = Compass::Configuration::Data.new(\"test_cache_buster_file_is_closed\")\n    the_file = nil\n    was_called = nil\n    FileUtils.touch \"images/asdf.gif\"\n    config.asset_cache_buster do |path, file|\n      was_called = true\n      the_file = file\n      \"busted=true\"\n    end\n\n    Compass.add_configuration(config)\n\n    sass = Sass::Engine.new(<<-SCSS, Compass.configuration.to_sass_engine_options.merge(:syntax => :scss))\n      .foo { background: image-url(\"asdf.gif\") }\n    SCSS\n    sass.render\n    assert was_called\n    assert_kind_of File, the_file\n    assert the_file.closed?\n  end\n\n  def test_cache_buster_handles_id_refs_for_images\n    config = Compass::Configuration::Data.new(\"test_cache_buster_file_is_closed\")\n    the_file = nil\n    was_called = nil\n    FileUtils.touch \"images/asdf.svg\"\n    config.asset_cache_buster do |path, file|\n      was_called = true\n      the_file = file\n      \"busted=true\"\n    end\n\n    Compass.add_configuration(config)\n\n    sass = Sass::Engine.new(<<-SCSS, Compass.configuration.to_sass_engine_options.merge(:syntax => :scss))\n      .foo { background: image-url(\"asdf.svg#image-1\") }\n    SCSS\n    result = sass.render\n    assert was_called\n    assert_kind_of File, the_file\n    assert the_file.closed?\n     assert_equal <<CSS, result\n/* line 1 */\n.foo {\n  background: url('/images/asdf.svg?busted=true#image-1');\n}\nCSS\n  end\n\n  def test_default_cache_buster_handles_id_refs_for_images\n    FileUtils.touch \"images/asdf.svg\"\n    sass = Sass::Engine.new(<<-SCSS, Compass.configuration.to_sass_engine_options.merge(:syntax => :scss))\n      .foo { background: image-url(\"asdf.svg#image-1\") }\n    SCSS\n    result = sass.render\n     assert_equal <<CSS, result\n/* line 1 */\n.foo {\n  background: url('/images/asdf.svg?#{File.mtime(\"images/asdf.svg\").to_i}#image-1');\n}\nCSS\n  end\n\n  def test_cache_buster_handles_id_refs_for_fonts\n    config = Compass::Configuration::Data.new(\"test_cache_buster_file_is_closed\")\n    the_file = nil\n    was_called = nil\n    FileUtils.touch \"fonts/asdf.ttf\"\n    config.asset_cache_buster do |path, file|\n      was_called = true\n      the_file = file\n      \"busted=true\"\n    end\n\n    Compass.add_configuration(config)\n\n    sass = Sass::Engine.new(<<-SCSS, Compass.configuration.to_sass_engine_options.merge(:syntax => :scss))\n      .foo { background: font-url(\"asdf.ttf#iefix\") }\n    SCSS\n    result = sass.render\n    assert was_called\n    assert_kind_of File, the_file\n    assert the_file.closed?\n     assert_equal <<CSS, result\n/* line 1 */\n.foo {\n  background: url('/fonts/asdf.ttf?busted=true#iefix');\n}\nCSS\n  end\n\n\n  def test_inherited_arrays_augmentations_serialize\n    inherited = TestData.new\n    inherited.stuff << :a\n    d = TestData.new\n    d.stuff << :b\n    d.stuff >> :c\n    assert_equal <<CONFIG, d.serialize_property(:stuff, d.stuff)\nstuff << :b\nstuff >> :c\nCONFIG\n  end\n  def test_inherited_arrays_clobbering_with_augmentations_serialize\n    inherited = TestData.new\n    inherited.stuff << :a\n    d = TestData.new\n    d.stuff << :b\n    d.stuff = [:c, :d]\n    d.stuff << :e\n    assert_equal <<CONFIG, d.serialize_property(:stuff, d.stuff)\nstuff = [:c, :d, :e]\nCONFIG\n  end\n  def test_additional_import_paths\n    contents = StringIO.new(<<-CONFIG)\n      http_path = \"/\"\n      project_path = \"/home/chris/my_compass_project\"\n      css_dir = \"css\"\n      additional_import_paths = [\"../foo\"]\n      add_import_path \"/path/to/my/framework\"\n    CONFIG\n\n    Compass.add_configuration(contents, \"test_additional_import_paths\")\n\n    engine_opts = Compass.configuration.to_sass_engine_options\n\n    load_paths = load_paths_as_strings(engine_opts[:load_paths])\n\n    plugin_opts = Compass.configuration.to_sass_plugin_options\n\n    assert load_paths.include?(\"/home/chris/foo\"), \"Expected to find /home/chris/foo in #{load_paths.inspect}\"\n    assert load_paths.include?(\"/path/to/my/framework\"), load_paths.inspect\n\n    expected_serialization = <<EXPECTED\nrequire 'compass/import-once/activate'\n# Require any additional compass plugins here.\nproject_path = \"/home/chris/my_compass_project\"\n\nhttp_path = \"/\"\ncss_dir = \"css\"\n\n# You can select your preferred output style here (can be overridden via the command line):\n# output_style = :expanded or :nested or :compact or :compressed\n\n# To enable relative paths to assets via compass helper functions. Uncomment:\n# relative_assets = true\n\n# To disable debugging comments that display the original location of your selectors. Uncomment:\n# line_comments = false\n\n\n# If you prefer the indented syntax, you might want to regenerate this\n# project again passing --syntax sass, or you can uncomment this:\n# preferred_syntax = :sass\n# and then run:\n# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass\nadditional_import_paths = [\"../foo\", \"/path/to/my/framework\"]\nEXPECTED\n    assert_equal \"/\", Compass.configuration.http_path\n    assert_correct expected_serialization, Compass.configuration.serialize\n  end\n\n  def test_additional_import_paths_can_be_importers\n    contents = StringIO.new(<<-CONFIG)\n      http_path = \"/\"\n      project_path = \"/home/chris/my_compass_project\"\n      css_dir = \"css\"\n      preferred_syntax = :scss\n      additional_import_paths = [\"../foo\"]\n      add_import_path Sass::Importers::Filesystem.new(\"/tmp/foo\")\n    CONFIG\n\n    Compass.add_configuration(contents, \"test_additional_import_paths\")\n\n    assert Compass.configuration.sass_load_paths.find{|p| p.is_a?(Sass::Importers::Filesystem) && p.root == \"/tmp/foo\"}\n    assert Compass.configuration.to_sass_plugin_options[:load_paths].find{|p| p.is_a?(Sass::Importers::Filesystem) && p.root == \"/tmp/foo\"}\n  end\n\n  def test_config_with_pathname\n    contents = StringIO.new(<<-CONFIG)\n      http_path = \"/\"\n      project_path = Pathname.new(\"/home/chris/my_compass_project\")\n      css_dir = \"css\"\n      additional_import_paths = [\"../foo\"]\n      add_import_path \"/path/to/my/framework\"\n    CONFIG\n\n    Compass.add_configuration(contents, \"test_additional_import_paths\")\n\n    load_paths = load_paths_as_strings(Compass.configuration.to_sass_engine_options[:load_paths])\n\n    assert load_paths.include?(\"/home/chris/foo\"), \"Expected to find /home/chris/foo in #{load_paths.inspect}\"\n    assert load_paths.include?(\"/path/to/my/framework\"), load_paths.inspect\n\n    expected_serialization = <<EXPECTED\nrequire 'compass/import-once/activate'\n# Require any additional compass plugins here.\nproject_path = \"/home/chris/my_compass_project\"\n\nhttp_path = \"/\"\ncss_dir = \"css\"\n\n# You can select your preferred output style here (can be overridden via the command line):\n# output_style = :expanded or :nested or :compact or :compressed\n\n# To enable relative paths to assets via compass helper functions. Uncomment:\n# relative_assets = true\n\n# To disable debugging comments that display the original location of your selectors. Uncomment:\n# line_comments = false\n\n\n# If you prefer the indented syntax, you might want to regenerate this\n# project again passing --syntax sass, or you can uncomment this:\n# preferred_syntax = :sass\n# and then run:\n# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass\nadditional_import_paths = [\"../foo\", \"/path/to/my/framework\"]\nEXPECTED\n    assert_equal \"/\", Compass.configuration.http_path\n    assert_correct expected_serialization.split(\"\\n\"), Compass.configuration.serialize.split(\"\\n\")\n  end\n\n    def test_sass_options\n      contents = StringIO.new(<<-CONFIG)\n        sass_options = {:foo => 'bar'}\n      CONFIG\n\n      Compass.add_configuration(contents, \"test_sass_options\")\n\n      assert_equal 'bar', Compass.configuration.to_sass_engine_options[:foo]\n      assert_equal 'bar', Compass.configuration.to_sass_plugin_options[:foo]\n\n      expected_serialization = <<EXPECTED\nrequire 'compass/import-once/activate'\n# Require any additional compass plugins here.\n\n# Set this to the root of your project when deployed:\nhttp_path = \\\"/\\\"\n\n# You can select your preferred output style here (can be overridden via the command line):\n# output_style = :expanded or :nested or :compact or :compressed\n\n# To enable relative paths to assets via compass helper functions. Uncomment:\n# relative_assets = true\\nsass_options = {:foo=>\\\"bar\\\"}\n\n# To disable debugging comments that display the original location of your selectors. Uncomment:\n# line_comments = false\n\n\n# If you prefer the indented syntax, you might want to regenerate this\n# project again passing --syntax sass, or you can uncomment this:\n# preferred_syntax = :sass\n# and then run:\n# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass\nEXPECTED\n\n      assert_correct(expected_serialization, Compass.configuration.serialize)\n    end\n\n    def test_sprite_load_path_clobbers\n      contents = StringIO.new(<<-CONFIG)\n        sprite_load_path = [\"/Users/chris/Projects/my_compass_project/images/sprites\"]\n      CONFIG\n\n      Compass.add_configuration(contents, \"test_sass_options\")\n\n      assert_equal [\"/Users/chris/Projects/my_compass_project/images/sprites\"], Compass.configuration.sprite_load_path.to_a\n\n      expected_serialization = <<EXPECTED\nrequire 'compass/import-once/activate'\n# Require any additional compass plugins here.\n\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\n\n# You can select your preferred output style here (can be overridden via the command line):\n# output_style = :expanded or :nested or :compact or :compressed\n\n# To enable relative paths to assets via compass helper functions. Uncomment:\n# relative_assets = true\n\n# To disable debugging comments that display the original location of your selectors. Uncomment:\n# line_comments = false\n\n\n# If you prefer the indented syntax, you might want to regenerate this\n# project again passing --syntax sass, or you can uncomment this:\n# preferred_syntax = :sass\n# and then run:\n# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass\nsprite_load_path = [\"/Users/chris/Projects/my_compass_project/images/sprites\"]\nEXPECTED\n\n      assert_correct(expected_serialization, Compass.configuration.serialize)\n    end\n\n  def test_strip_trailing_directory_separators\n    contents = StringIO.new(<<-CONFIG)\n      css_dir = \"css/\"\n      sass_dir = \"sass/\"\n      images_dir = \"images/\"\n      javascripts_dir = \"js/\"\n      fonts_dir = \"fonts/\"\n      extensions_dir = \"extensions/\"\n      css_path = \"css/\"\n      sass_path = \"sass/\"\n      images_path = \"images/\"\n      javascripts_path = \"js/\"\n      fonts_path = \"fonts/\"\n      extensions_path = \"extensions/\"\n    CONFIG\n\n    Compass.add_configuration(contents, \"test_strip_trailing_directory_separators\")\n\n    assert_equal \"css\", Compass.configuration.css_dir\n    assert_equal \"sass\", Compass.configuration.sass_dir\n    assert_equal \"images\", Compass.configuration.images_dir\n    assert_equal \"js\", Compass.configuration.javascripts_dir\n    assert_equal \"fonts\", Compass.configuration.fonts_dir\n    assert_equal \"extensions\", Compass.configuration.extensions_dir\n  end\n\n  def test_custom_configuration_properties\n    # Add a configuration property to compass.\n    Compass::Configuration.add_configuration_property(:foobar, \"this is a foobar\") do\n      if environment == :production\n        \"foo\"\n      else\n        \"bar\"\n      end\n    end\n\n    contents = StringIO.new(<<-CONFIG)\n      foobar = \"baz\"\n    CONFIG\n\n    Compass.add_configuration(contents, \"test_strip_trailing_directory_separators\")\n\n    assert_equal \"baz\", Compass.configuration.foobar\n    expected_serialization = <<EXPECTED\nrequire 'compass/import-once/activate'\n# Require any additional compass plugins here.\n\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\n\n# You can select your preferred output style here (can be overridden via the command line):\n# output_style = :expanded or :nested or :compact or :compressed\n\n# To enable relative paths to assets via compass helper functions. Uncomment:\n# relative_assets = true\n\n# To disable debugging comments that display the original location of your selectors. Uncomment:\n# line_comments = false\n\n\n# If you prefer the indented syntax, you might want to regenerate this\n# project again passing --syntax sass, or you can uncomment this:\n# preferred_syntax = :sass\n# and then run:\n# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass\n\n# this is a foobar\nfoobar = \"baz\"\nEXPECTED\n    assert_correct(expected_serialization, Compass.configuration.serialize)\n    Compass.reset_configuration!\n    Compass.configuration.environment = :production\n    assert_equal \"foo\", Compass.configuration.foobar\n    Compass.configuration.environment = :development\n    assert_equal \"bar\", Compass.configuration.foobar\n  ensure\n    Compass::Configuration.remove_configuration_property :foobar\n  end\n\n  def load_paths_as_strings(load_paths)\n    load_paths.map do |path|\n      case path\n      when Sass::Importers::Filesystem\n        path.root\n      when String, Pathname\n        path.to_s\n      end\n    end.compact\n  end\n  \nend\n"
  },
  {
    "path": "cli/test/units/regressions_test.rb",
    "content": "require 'test_helper'\nrequire 'compass'\nrequire 'compass/exec'\nrequire 'stringio'\n\nclass RegressionsTest < Test::Unit::TestCase\n  include SpriteHelper\n  include Compass::CommandLineHelper\n\n  def setup\n    create_sprite_temp\n    Compass.reset_configuration!\n  end\n  \n  def teardown\n    clean_up_sprites\n    Compass.reset_configuration!\n  end\n\n  def test_issue911_sprites_with_globbing_and_line_comments\n    within_tmp_directory do\n      compass \"create --bare issue911\"\n      FileUtils.mkdir_p \"issue911/images/sprites/a\"\n      FileUtils.mkdir_p \"issue911/images/sprites/b\"\n      FileUtils.cp File.join(@images_tmp_path, 'nested/squares/ten-by-ten.png'), \"issue911/images/sprites/a/foo.png\"\n      FileUtils.cp File.join(@images_tmp_path, 'nested/squares/ten-by-ten.png'), \"issue911/images/sprites/a/bar.png\"\n      Dir.chdir \"issue911\" do\n        result = compile_for_project(<<-SCSS)\n          @import \"sprites/**/*.png\";\n        SCSS\n        Sass::Engine.new(result, :syntax => :scss).render # raises an error if we generated invalid css\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "cli/test/units/sass_extensions_test.rb",
    "content": "require 'test_helper'\n\nclass SassExtensionsTest < Test::Unit::TestCase\n  def test_simple\n    assert_equal \"a b\", evaluate(%Q{nest(\"a\", \"b\")})\n  end\n  def test_left_side_expansion\n    assert_equal \"a c, b c\", evaluate(%Q{nest(\"a, b\", \"c\")})\n  end\n  def test_right_side_expansion\n    assert_equal \"a b, a c\", evaluate(%Q{nest(\"a\", \"b, c\")})\n  end\n  def test_both_sides_expansion\n    assert_equal \"a c, a d, b c, b d\", evaluate(%Q{nest(\"a, b\", \"c, d\")})\n  end\n  def test_three_selectors_expansion\n    assert_equal \"a b, a c, a d\", evaluate(%Q{nest(\"a\", \"b, c, d\")})\n  end\n  def test_third_argument_expansion\n    assert_equal \"a b e, a b f, a c e, a c f, a d e, a d f\", evaluate(%Q{nest(\"a\", \"b, c, d\", \"e, f\")})\n  end\n\n  def test_enumerate\n    assert_equal \".grid-1, .grid-2, .grid-3\", evaluate(%Q{enumerate(\".grid\", 1, 3, \"-\")})\n  end\n\n  def test_append_selector\n    assert_equal \"div.bar\", evaluate(%Q{append_selector(\"div\", \".bar\")})\n    assert_equal \".foo1.bar1, .foo1.bar2, .foo2.bar1, .foo2.bar2\", evaluate(%Q{append_selector(\".foo1, .foo2\", \".bar1, .bar2\")})\n  end\n\n  def test_headers\n    assert_equal \"h1, h2, h3, h4, h5, h6\", evaluate(\"headers()\")\n    assert_equal \"h1, h2, h3, h4, h5, h6\", evaluate(\"headers(all)\")\n    assert_equal \"h1, h2, h3, h4\", evaluate(\"headers(4)\")\n    assert_equal \"h2, h3\", evaluate(\"headers(2,3)\")\n    assert_equal \"h4, h5, h6\", evaluate(\"headers(4,6)\")\n  end\n\n  def test_scale_lightness\n    assert_equal \"75%\", evaluate(\"lightness(scale-lightness(hsl(50deg, 50%, 50%), 50%))\")\n    assert_equal \"25%\", evaluate(\"lightness(scale-lightness(hsl(50deg, 50%, 50%), -50%))\")\n  end\n\n  def test_adjust_lightness\n    assert_equal \"75%\", evaluate(\"lightness(adjust-lightness(hsl(50deg, 50%, 50%), 25%))\")\n    assert_equal \"25%\", evaluate(\"lightness(adjust-lightness(hsl(50deg, 50%, 50%), -25%))\")\n    assert_equal \"100%\", evaluate(\"lightness(adjust-lightness(hsl(50deg, 50%, 50%), 500%))\")\n    assert_equal \"0%\", evaluate(\"lightness(adjust-lightness(hsl(50deg, 50%, 50%), -500%))\")\n  end\n\n  def test_scale_saturation\n    assert_equal \"75%\", evaluate(\"saturation(scale-saturation(hsl(50deg, 50%, 50%), 50%))\")\n    assert_equal \"25%\", evaluate(\"saturation(scale-saturation(hsl(50deg, 50%, 50%), -50%))\")\n  end\n\n  def test_adjust_saturation\n    assert_equal \"75%\", evaluate(\"saturation(adjust-saturation(hsl(50deg, 50%, 50%), 25%))\")\n    assert_equal \"25%\", evaluate(\"saturation(adjust-saturation(hsl(50deg, 50%, 50%), -25%))\")\n  end\n\n  def test_shade\n    assert_equal evaluate(\"mix(black, #ff0, 25%)\"), evaluate(\"shade(#ff0, 25%)\")\n    assert_equal evaluate(\"mix(black, #ff0, 0%)\"), evaluate(\"shade(#ff0, 0%)\")\n  end\n\n  def test_tint\n    assert_equal evaluate(\"mix(white, #ff0, 75%)\"), evaluate(\"tint(#ff0, 75%)\")\n    assert_equal evaluate(\"mix(white, #ff0, 100%)\"), evaluate(\"tint(#ff0, 100%)\")\n  end\n\n  def test_if_function\n    assert_equal \"no\", evaluate(\"if(false, yes, no)\")\n    assert_equal \"yes\", evaluate(\"if(true, yes, no)\")\n  end\n\n  def test_math_functions\n    assert_equal \"0.84147\", evaluate(\"sin(1)\")\n    assert_equal \"0.84147px\", evaluate(\"sin(1px)\")\n    assert_equal \"0.5236\", evaluate(\"asin(0.5)\")\n    assert_equal \"0.5236\", evaluate(\"asin(100px/200px)\")\n    assert_equal \"0.0\", evaluate(\"sin(pi())\")\n    assert_equal \"1\",   evaluate(\"sin(pi() / 2)\")\n    assert_equal \"0.0\",   evaluate(\"sin(180deg)\")\n    assert_equal \"-1\",  evaluate(\"sin(3* pi() / 2)\")\n    assert_equal \"-1\", evaluate(\"cos(pi())\")\n    assert_equal \"1\", evaluate(\"cos(360deg)\")\n    assert_equal \"1.0472\", evaluate(\"acos(0.5)\")\n    assert_equal \"1.0472\", evaluate(\"acos(100px/200px)\")\n    assert_equal \"-0.17605\", evaluate(\"sin(270)\")\n    assert_equal \"1\", evaluate(\"cos(2*pi())\")\n    assert_equal \"0.0\",   evaluate(\"cos(pi() / 2)\")\n    assert_equal \"0.0\",  evaluate(\"cos(3* pi() / 2)\")\n    assert_equal \"0.0\",  evaluate(\"tan(pi())\")\n    assert_equal \"0.46365\",  evaluate(\"atan(0.5)\")\n    assert_equal \"0.0\", evaluate(\"tan(360deg)\")\n    assert_equal \"0.95892\", evaluate(\"sin(360)\")\n    assert evaluate(\"tan(pi()/2 - 0.0001)\").to_f > 1000, evaluate(\"tan(pi()/2 - 0.0001)\")\n    assert evaluate(\"tan(pi()/2 + 0.0001)\").to_f < -1000, evaluate(\"tan(pi()/2 - 0.0001)\")\n    assert_equal \"0.69315px\", evaluate(\"logarithm(2px)\")\n    assert_equal \"0\", evaluate(\"logarithm(1)\")\n    assert_equal \"1\", evaluate(\"logarithm(e())\")\n    assert_equal \"1\", evaluate(\"logarithm($number: e())\")\n    assert_equal \"1\", evaluate(\"logarithm(10, $base: 10)\")\n    assert_equal \"5px\", evaluate(\"sqrt(25px)\")\n    assert_equal \"5px\", evaluate(\"sqrt($number: 25px)\")\n    assert_equal \"5px\", evaluate(\"square-root(25px)\")\n    assert_equal \"5px\", evaluate(\"square-root($number: 25px)\")\n    assert_equal \"25px\", evaluate(\"pow(5px, 2)\")\n    assert_equal \"25px\", evaluate(\"pow($number: 5px, $exponent: 2)\")\n    assert_equal \"79.43236px\", evaluate(\"pow(5px, e())\")\n    assert((0..2).include?(evaluate(\"random(2)\").to_i))\n    random_warning = capture_warning do\n      assert((4..16).include?(evaluate(\"random(4, 16)\").to_i))\n    end\n    assert_equal <<WARNING.strip, random_warning.strip\nWARNING: The $start value for random(4, 16) is not supported by Sass and is now\n  deprecated in Compass and will be removed in a future release.\n  Use `4 + random(12)` instead.\nWARNING\n  end\n\n  def test_blank\n    assert_equal \"false\", evaluate(\"blank(true)\")\n    assert_equal \"true\", evaluate(\"blank(false)\")\n    assert_equal \"true\", evaluate(\"blank('')\")\n    assert_equal \"true\", evaluate(\"blank(' ')\")\n    assert_equal \"true\", evaluate(\"blank(-compass-space-list(' '))\")\n  end\n\n  def test_css2_fallback\n    assert_equal \"css3\", evaluate(\"css2-fallback(css3, css2)\")\n    assert_equal \"css2\", evaluate(\"-css2(css2-fallback(css3, css2))\")\n    assert_equal \"true\", evaluate(\"prefixed(-css2, css2-fallback(css3, css2))\")\n  end\n\n  def test_font_files\n    assert_equal '', evaluate('font_files()')\n    assert_equal \"url(/font/name.woff) format('woff'), url(/font/name.woff2) format('woff2'), url(/fonts/name.ttf) format('truetype'), url(/fonts/name.svg#fontpath) format('svg')\", evaluate(\"font-files('/font/name.woff', woff, '/font/name.woff2', woff2, '/fonts/name.ttf', truetype, '/fonts/name.svg#fontpath', svg)\")\n\n    assert_equal \"url(/font/with/right_ext.woff) format('woff')\", evaluate(\"font_files('/font/with/right_ext.woff')\")\n    assert_equal \"url(/font/with/wrong_ext.woff) format('svg')\", evaluate(\"font_files('/font/with/wrong_ext.woff', 'svg')\")\n    assert_equal \"url(/font/with/no_ext) format('opentype')\", evaluate(\"font_files('/font/with/no_ext', 'otf')\")\n    assert_equal \"url(/font/with/weird.ext) format('truetype')\", evaluate(\"font_files('/font/with/weird.ext', 'ttf')\")\n\n    # unquoted path strings used to break because of a regex test\n    assert_equal \"url(/font/with/right_ext.woff) format('woff')\", evaluate(\"font_files(unquote('/font/with/right_ext.woff'))\")\n\n    assert_equal \"url(/font/with/right_ext.woff) format('woff'), url(/font/with/right_ext_also.otf) format('opentype')\", evaluate(\"font_files('/font/with/right_ext.woff', '/font/with/right_ext_also.otf')\")\n    assert_equal \"url(/font/with/wrong_ext.woff) format('truetype'), url(/font/with/right_ext.otf) format('opentype')\", evaluate(\"font_files('/font/with/wrong_ext.woff', 'ttf', '/font/with/right_ext.otf')\")\n\n    assert_nothing_raised Sass::SyntaxError do\n      evaluate(\"font-files('/font/name.woff')\")\n    end\n\n    assert_nothing_raised Sass::SyntaxError do\n      evaluate(\"font-files('/font/name.svg#fontId')\")\n    end\n\n    assert_nothing_raised Sass::SyntaxError do\n      evaluate(\"font-files('/font/name.eot?#iefix')\")\n    end\n\n    assert_nothing_raised Sass::SyntaxError do\n      evaluate(\"font-files('/font/name.svg?mightbedynamic=something%20+escaped#fontId')\")\n    end\n\n    assert_raises Sass::SyntaxError do\n      evaluate(\"font-files('/font/name.ext')\")\n    end\n\n    assert_raises Sass::SyntaxError do\n      evaluate(\"font-files('/font/name.ext', 'nonsense')\")\n    end\n  end\n\n  %w(stylesheet_url font_url image_url generated_image_url).each do |helper|\n    class_eval %Q{\n      def test_#{helper}_helper_defers_to_existing_helper\n        c = Class.new do\n          def #{helper}(*args)\n            :original\n          end\n        end\n        c.send(:include, Compass::Core::SassExtensions::Functions::Urls)\n        assert_equal :original, c.new.#{helper}(\"logo.png\")\n      end\n    }\n  end\n\n  def test_inline_font_files\n    Compass.configuration.fonts_path = File.expand_path \"../fixtures/fonts\", File.dirname(__FILE__)\n    base64_string = File.read(File.join(Compass.configuration.fonts_path, \"bgrove.base64.txt\")).chomp\n    assert_equal \"url('data:font/truetype;base64,#{base64_string}') format('truetype')\", evaluate(\"inline_font_files('bgrove.ttf', truetype)\")\n\n    # without specifying the format\n    assert_equal \"url('data:font/truetype;base64,#{base64_string}') format('truetype')\", evaluate(\"inline_font_files('bgrove.ttf')\")\n  end\n\n  def test_font_formats\n    assert_equal \"woff, truetype, svg, embedded-opentype\", evaluate(\"font-formats('/font/name.woff', woff, '/fonts/name.ttf', '/fonts/name.svg#fontpath', unquote('/fonts/name.eot'))\")\n  end\n\n  def test_linear_gradient_with_calc\n    assert_equal \"-webkit-linear-gradient(left, #ffffff calc(100% - 50px), rgba(0, 0, 0, 0) calc(100% - 50px))\",\n        evaluate(\"-webkit(-linear-gradient(to right, white calc(100% - 50px), transparent calc(100% - 50px)))\")\n  end\n\n  def test_image_size_should_respond_to_to_path\n    object = mock()\n    object.expects(:to_path).returns('foo.jpg')\n    object.expects(:respond_to?).with(:to_path).returns(true)\n\n    Compass::Core::SassExtensions::Functions::ImageSize::ImageProperties.new(object)\n  end\n\n  def test_reject\n    assert_equal \"b d\", evaluate(\"reject(a b c d, a, c)\")\n    assert_equal \"a b c d\", evaluate(\"reject(a b c d, e)\")\n  end\n\nprotected\n  def evaluate(value)\n    result = Sass::Script::Parser.parse(value, 0, 0).perform(Sass::Environment.new)\n    begin\n      result.to_s\n    rescue Sass::SyntaxError => e\n      raise e unless e.message =~ /isn't a valid CSS value/\n      result.inspect\n    end\n  end\nend\n"
  },
  {
    "path": "cli/test/units/sass_extenstions/gradients_test.rb",
    "content": "class GradientTestClass\n  extend Compass::Core::SassExtensions::Functions::Constants\n  extend Compass::Core::SassExtensions::Functions::GradientSupport::Functions\n  def self.options\n    {}\n  end\nend\n\nrequire 'test_helper'\nrequire 'compass'\n\nclass GradientsTest < Test::Unit::TestCase\n  include Sass::Script::Value::Helpers\n\n  def klass\n    GradientTestClass\n  end\n\n  test \"should return correct angle\" do\n    assert_equal number(330, 'deg'), klass.convert_angle_from_offical(number(120, 'deg'))\n  end\n\n  test \"Should convert old to new\" do\n    [:top => ['to', 'bottom'], :bottom => ['to', 'top'], :left => ['to', 'right'], :right => ['to', 'left']].each do |test_value|\n      assert_equal list(identifier(test_value.keys.first.to_s), :space), klass.convert_angle_from_offical(\n        list(identifier(test_value.values[0].first), identifier(test_value.values[0].last), :space))\n    end\n  end\n\nend\n"
  },
  {
    "path": "cli/test/units/sprites/engine_test.rb",
    "content": "require 'test_helper'\n\nclass EngineTest < Test::Unit::TestCase\n  include SpriteHelper\n  def setup\n    create_sprite_temp\n    sprite_filename = 'squares/ten-by-ten.png'\n    @images = [\n       Compass::SassExtensions::Sprites::Image.new(nil, File.join(sprite_filename), {}) \n      ]\n    @engine = Compass::SassExtensions::Sprites::Engine.new(100, 100, @images)\n  end\n\n  def taredown\n    clean_up_sprites\n  end\n  \n  \n  test \"should have width of 100\" do\n    assert_equal 100, @engine.width\n  end\n  \n  test \"should have height of 100\" do\n    assert_equal 100, @engine.height\n  end\n  \n  test \"should have correct images\" do\n    assert_equal @images, @engine.images\n  end\n  \n  test \"raises Compass::Error when calling save\" do\n    begin \n      @engine.save('foo')\n      assert false, '#save did not raise an exception'\n    rescue Compass::Error\n      assert true\n    end\n  end\n  \n  test \"raises Compass::Error when calling construct_sprite\" do\n    begin \n      @engine.construct_sprite\n      assert false, '#construct_sprite did not raise an exception'\n    rescue Compass::Error\n      assert true\n    end\n  end\nend"
  },
  {
    "path": "cli/test/units/sprites/image_row_test.rb",
    "content": "require 'test_helper'\n\nclass ImageRowTest < Test::Unit::TestCase\n  include SpriteHelper\n  def setup\n    clean_up_sprites\n    create_sprite_temp\n    file = StringIO.new(\"images_path = #{@images_src_path.inspect}\\n\")\n    Compass.add_configuration(file, \"sprite_config\")\n    @filenames = %w(large.png large_square.png medium.png tall.png small.png)\n    @image_files = Dir[\"#{@images_src_path}/image_row/*.png\"].sort\n    @images = @image_files.map do |img|\n      img.gsub!(\"#{@images_src_path}/\", '')\n      Compass::SassExtensions::Sprites::Image.new(nil, img, {})\n    end\n    image_row(1000)\n  end\n  \n  def teardown\n    clean_up_sprites\n  end\n  \n  def image_row(max)\n    @image_row = Compass::SassExtensions::Sprites::ImageRow.new(max)\n  end\n  \n  def populate_row\n    @images.each do |image|\n      assert @image_row.add(image)\n    end\n  end\n  \n  it \"should return false if image will not fit in row\" do\n    image_row(100)\n    img = Compass::SassExtensions::Sprites::Image.new(nil, File.join('image_row', 'large.png'), {})\n    assert !@image_row.add(img)\n  end\n  \n  it \"should have 5 images\" do\n    populate_row\n    assert_equal 5, @image_row.images.size\n  end\n  \n  it \"should return max image width\" do\n    populate_row\n    assert_equal 400, @image_row.width\n  end\n  \n  it \"should return max image height\" do\n    populate_row\n    assert_equal 40, @image_row.height\n  end\n  \n  it \"should have an efficiency rating\" do\n    populate_row\n    assert_equal 1 - (580.0 / 1000.0), @image_row.efficiency\n  end\nend"
  },
  {
    "path": "cli/test/units/sprites/image_test.rb",
    "content": "require 'test_helper'\nrequire 'mocha'\nrequire 'ostruct'\n\nclass SpritesImageTest < Test::Unit::TestCase\n  include SpriteHelper\n\n  def setup\n    create_sprite_temp\n  end\n\n  def teardown\n    clean_up_sprites\n  end\n\n  SPRITE_FILENAME =  'selectors/ten-by-ten.png'\n  \n  def sprite_path \n    File.join(@images_tmp_path, SPRITE_FILENAME)\n  end\n  \n  def sprite_name\n    File.basename(SPRITE_FILENAME, '.png')\n  end\n  \n  def digest\n    Digest::MD5.file(sprite_path).hexdigest\n  end\n  \n  def test_map(options ={})\n    options = {'cleanup' => Sass::Script::Bool.new(true), 'layout' => Sass::Script::String.new('vertical')}.merge(options)\n    map = sprite_map_test(options)\n  end\n  \n  def test_image(options ={})\n    test_map(options).images.first\n  end\n\n  test 'initialize' do\n    image = test_image\n    assert_equal sprite_name, image.name\n    assert_equal sprite_path, image.file\n    assert_equal SPRITE_FILENAME, image.relative_file\n    assert_equal 10, image.width\n    assert_equal 10, image.height\n    assert_equal digest, image.digest\n    assert_equal 0, image.top\n    assert_equal 0, image.left\n  end\n\n  test 'hover' do\n    assert_equal 'ten-by-ten_hover', test_image.hover.name\n  end\n\n  test 'hover should find image by _ or - in file name' do\n    map = test_map(:seperator => '-')\n    map.images.each_index do |i|\n      if map.images[i].name == 'ten-by-ten_hover'\n        map.images[i].stubs(:name).returns('ten-by-ten-hover')\n      end\n    end\n    test_image = map.images.first\n\n    assert_equal 'ten-by-ten-hover', test_image.hover.name\n  end\n\n  test 'no parent' do\n    assert_nil test_image.parent\n  end\n  \n  test 'image type is \"global\" should raise exception' do\n    assert_raise ::Compass::SpriteException do\n      image = test_image \"selectors_ten_by_ten_repeat\" => Sass::Script::String.new('global')\n      image.repeat\n    end\n  end\n  \n  test 'image type is \"no-repeat\"' do\n    img = test_image\n    assert_equal 'no-repeat', img.repeat\n    assert img.no_repeat?\n  end\n\n  test 'image repeat-x' do\n    img = test_image \"selectors_ten_by_ten_repeat\" => Sass::Script::String.new('repeat-x')\n    assert img.repeat_x?\n  end\n\n  test 'image repeat-y' do\n    img = test_image \"selectors_ten_by_ten_repeat\" => Sass::Script::String.new('repeat-y')\n    assert img.repeat_y?\n  end\n\n  test 'image position' do\n    image = test_image \"selectors_ten_by_ten_position\" => Sass::Script::Number.new(100, [\"px\"])\n    assert_equal 100, image.position.value\n  end\n\n  test 'image spacing' do\n    @spacing = 10\n    image = test_image \"spacing\" => Sass::Script::Number.new(100, [\"px\"])\n    assert_equal 100, image.spacing\n  end\n  \n  test 'offset' do\n    image = test_image \"selectors_ten_by_ten_position\" => Sass::Script::Number.new(100, [\"px\"])\n    assert_equal 100, image.offset\n  end\n\n  test 'neither, uses 0' do\n    img = test_image\n    img.position.stubs(:unitless?).returns(false)\n    assert_equal 0, img.offset\n  end\n\nend\n"
  },
  {
    "path": "cli/test/units/sprites/images_test.rb",
    "content": "require 'test_helper'\nrequire 'compass/sass_extensions/sprites/images'\n\nclass ImagesTest < Test::Unit::TestCase\n\n  def setup\n    @images = Compass::SassExtensions::Sprites::Images.new\n    @images << OpenStruct.new(:foo => 1, :name => 'bob', :size => 1200, :width => 10)\n    @images << OpenStruct.new(:foo => 2, :name => 'bob', :size => 300, :width => 100)\n    @images << OpenStruct.new(:foo => 3, :name => 'aob', :size => 120, :width => 50)\n    @images << OpenStruct.new(:foo => 4, :name => 'zbob', :size => 600, :width => 55)\n  end\n\n\n  test \"sort by size\" do\n    @images.sort_by! :size\n    assert_equal [3, 2, 4, 1], @images.map(&:foo)\n  end\n\n  test \"sort by !size\" do\n    @images.sort_by! '!size'\n    assert_equal [3, 2, 4, 1].reverse, @images.map(&:foo)\n  end\n\n  test \"sort by name\" do\n    @images.sort_by! :name\n    assert_equal [3, 2, 1, 4], @images.map(&:foo)\n  end\n\n  test \"sort by !name\" do\n    @images.sort_by! '!name'\n    assert_equal [3, 2, 1, 4].reverse, @images.map(&:foo)\n  end\n\n  test \"sort by width\" do\n    @images.sort_by! :width\n    assert_equal [1, 3, 4, 2], @images.map(&:foo)\n  end\n\n    test \"sort by !width\" do\n    @images.sort_by! '!width'\n    assert_equal [1, 3, 4, 2].reverse, @images.map(&:foo)\n  end\n\nend\n  "
  },
  {
    "path": "cli/test/units/sprites/importer_test.rb",
    "content": "require 'test_helper'\n\nclass ImporterTest < Test::Unit::TestCase\n  include SpriteHelper\n  \n  def setup\n    create_sprite_temp\n    file = StringIO.new(\"images_path = #{@images_src_path.inspect}\\n\")\n    Compass.add_configuration(file, \"sprite_config\")\n    @importer = Compass::SpriteImporter.new\n  end\n\n  def teardown\n    Compass.reset_configuration!\n  end\n  \n  def options\n    {:foo => 'bar'}\n  end\n  \n  test \"should use search path to find sprites\" do\n    Compass.reset_configuration!\n    uri = 'foo/*.png'\n    other_folder = File.join(@images_tmp_path, '../other-temp')\n    FileUtils.mkdir_p other_folder\n    FileUtils.mkdir_p File.join(other_folder, 'foo')\n    %w(my bar).each do |file|\n      FileUtils.touch(File.join(other_folder, \"foo/#{file}.png\"))\n    end\n    config = Compass::Configuration::Data.new('config')\n    config.images_path = @images_tmp_path\n    config.sprite_load_path = [@images_tmp_path, other_folder]\n    Compass.add_configuration(config, \"sprite_config\")\n    importer = Compass::SpriteImporter.new\n    assert_equal 2, Compass.configuration.sprite_load_path.compact.size\n    assert Compass.configuration.sprite_load_path.include?(other_folder)\n    assert_equal [\"bar\", \"my\"], Compass::SpriteImporter.sprite_names(uri)\n    \n    FileUtils.rm_rf other_folder\n  end\n  \n  test \"name should return the sprite name\" do\n    assert_equal 'selectors', Compass::SpriteImporter.sprite_name(URI)\n  end\n  \n  test \"path should return the sprite path\" do\n    assert_equal 'selectors',  Compass::SpriteImporter.path(URI)\n  end\n  \n  test \"should return all the sprite names\" do\n    assert_equal [\"ten-by-ten\", \"ten-by-ten_active\", \"ten-by-ten_hover\", \"ten-by-ten_target\"], Compass::SpriteImporter.sprite_names(URI)\n  end\n  \n  test \"should have correct mtime\" do\n    thirtydays = Time.now.to_i + (60*60*24*30)\n    file = Dir[File.join(@images_src_path, URI)].sort.first\n    File.utime(thirtydays, thirtydays, file)\n    assert_equal thirtydays, File.mtime(file).to_i\n    assert_equal thirtydays, @importer.mtime(URI, {}).to_i\n  end\n  \n  test \"should return sass engine on find\" do\n    assert @importer.find(URI, {}).is_a?(Sass::Engine)\n  end\n  \n  test \"sass options should contain options\" do\n    opts = Compass::SpriteImporter.sass_options('foo', @importer, options)\n    assert_equal 'bar', opts[:foo]\n  end\n  \n  test \"verify that the sass_engine passes the correct filename\" do\n    importer = Compass::SpriteImporter.new\n    engine = Compass::SpriteImporter.sass_engine(URI, 'foo', importer, options)\n    assert_equal engine.options[:filename], URI\n  end\n  \n  test \"should fail given bad sprite extensions\" do\n    @images_src_path = File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'sprites', 'public', 'images')\n    file = StringIO.new(\"images_path = #{@images_src_path.inspect}\\n\")\n    Compass.add_configuration(file, \"sprite_config\")\n    importer = Compass::SpriteImporter.new\n    uri = \"bad_extensions/*.jpg\"\n    begin\n      Compass::SpriteImporter.sass_engine(uri, Compass::SpriteImporter.sprite_name(uri), importer, {})\n      assert false, \"An invalid sprite file made it past validation.\"\n    rescue Compass::Error => e\n      assert e.message.include?(\"invalid sprite path\")\n    end\n  end\n  \nend"
  },
  {
    "path": "cli/test/units/sprites/layout_test.rb",
    "content": "require 'test_helper'\n\nclass LayoutTest < Test::Unit::TestCase\n  include SpriteHelper\n\n  def setup\n    Hash.send(:include, Compass::SassExtensions::Functions::Sprites::VariableReader)\n    clean_up_sprites\n    create_sprite_temp\n    file = StringIO.new(\"images_path = #{@images_tmp_path.inspect}\\n\")\n    Compass.add_configuration(file, \"sprite_config\")\n    Compass.configure_sass_plugin!\n    @options = {'cleanup' => Sass::Script::Bool.new(true), 'layout' => Sass::Script::String.new('vertical')}\n  end\n\n  def teardown\n    clean_up_sprites\n  end\n    \n  # HELPERS\n  \n  def vertical\n    opts = @options.merge(\"layout\" => Sass::Script::String.new('vertical'))\n\n    sprite_map_test(opts)\n  end\n\n  def smart\n    options = @options.merge(\"layout\" => Sass::Script::String.new('smart'))\n    importer = Compass::SpriteImporter.new\n    uri = \"image_row/*.png\"\n    path, name = Compass::SpriteImporter.path_and_name(uri)\n    sprite_names = Compass::SpriteImporter.sprite_names(uri)\n    sass_engine = Compass::SpriteImporter.sass_engine(uri, name, importer, options)\n    map = Compass::SassExtensions::Sprites::SpriteMap.new(sprite_names.map {|n| \"image_row/#{n}.png\"}, path, name, sass_engine, options)\n    map.options = {:compass => {:logger => Compass::NullLogger.new}}\n\n    map\n  end\n\n  def diagonal\n    opts = @options.merge(\"layout\" => Sass::Script::String.new('diagonal'))\n\n    sprite_map_test(opts)\n  end\n\n  def horizontal(options= {}, uri=URI)\n    opts = @options.merge(\"layout\" => Sass::Script::String.new('horizontal'))\n    opts.merge!(options)\n\n    sprite_map_test(opts, uri)\n  end\n\n  # REPEAT_X\n\n  test 'repeat-x layout single image' do\n    opts = {\"repeat_x_three_repeat\" => Sass::Script::String.new('repeat-x'), 'sort_by' => Sass::Script::String.new('width')}\n    map = sprite_map_test(@options.merge(opts), 'repeat_x/*.png')\n    assert_equal 6, map.width\n    assert_equal [0, 1, 3, 6, 10, 3, 3], map.images.map(&:top)\n    assert_equal [0, 0, 0, 0, 0, 0, 3], map.images.map(&:left)\n  end\n\n  test 'repeat-x layout multi image' do\n    opts = {\"repeat_x_three_repeat\" => Sass::Script::String.new('repeat-x'), \"repeat_x_four_repeat\" => Sass::Script::String.new('repeat-x')}\n    map = sprite_map_test(@options.merge(opts), 'repeat_x/*.png')\n    assert_equal 12, map.width\n  end\n\n  test \"repeat-y layout single image\" do\n    opts = {\"layout\" => Sass::Script::String.new('horizontal'), \"squares_ten_by_ten_repeat\" => Sass::Script::String.new('repeat-y')}\n    map = sprite_map_test(@options.merge(opts), 'squares/*.png')\n    assert_equal 30, map.width\n    assert_equal 20, map.height\n    assert_equal 3, map.images.size\n    assert_equal [[0,0], [0,10], [10,0]], map.images.map { |img| [img.top, img.left] }\n    assert map.horizontal?\n  end\n\n  test \"repeat-y layout multi image\" do\n    opts = {\"layout\" => Sass::Script::String.new('horizontal'), \"repeat_x_three_repeat\" => Sass::Script::String.new('repeat-y'), \"repeat_x_four_repeat\" => Sass::Script::String.new('repeat-y')}\n    map = sprite_map_test(@options.merge(opts), 'repeat_x/*.png')\n    assert_equal [[0, 0], [0, 5], [0, 9], [0, 10], [0, 13], [4, 5], [8, 5], [3, 10], [6, 10], [9, 10]], map.images.map { |img| [img.top, img.left] }\n  end\n\n  # VERTICAL LAYOUT\n\n  it \"should have a vertical layout\" do\n    vert = vertical\n    assert_equal [0, 10, 20, 30], vert.images.map(&:top)\n    assert_equal [0, 0, 0, 0], vert.images.map(&:left)\n    assert vert.vertical?\n  end\n  \n  it \"should have a vertical layout with spacing\" do\n    vert = sprite_map_test(@options.merge({\"spacing\" => Sass::Script::Number.new(10, ['px'])}))\n    assert_equal [0, 20, 40, 60], vert.images.map(&:top)\n  end\n  \n  it \"should layout vertical with position\" do\n    vert = sprite_map_test(\"selectors_ten_by_ten_active_position\" => Sass::Script::Number.new(10, ['px']))\n    assert_equal [0, 10, 0, 0], vert.images.map(&:left)\n  end\n\n  it \"should generate vertical sprites in decending order\" do\n    sizes = vertical.images.map{|image| File.size(image.file) }\n    assert_equal sizes.min, File.size(vertical.images.first.file)\n    assert_equal sizes.max, File.size(vertical.images.last.file)\n  end\n\n  # SMART LAYOUT\n  \n  it \"should have a smart layout\" do\n    base = smart\n    base.generate\n    assert base.smart?\n    assert_equal 400, base.width\n    assert_equal 60, base.height\n    assert_equal [[0, 0], [20, 120], [20, 0], [20, 100], [20, 160]], base.images.map {|i| [i.top, i.left]}\n    assert File.exists?(base.filename)\n    FileUtils.rm base.filename\n  end\n\n  # DIAGONAL LAYOUT\n  \n  it \"should generate a diagonal sprite\" do\n    base = diagonal\n    base.generate\n    assert base.diagonal?\n    assert_equal 40, base.width\n    assert_equal 40, base.height\n    assert_equal [[30, 0], [20, 10], [10, 20], [0, 30]], base.images.map {|i| [i.top, i.left]}\n    assert File.exists?(base.filename)\n    FileUtils.rm base.filename\n  end\n\n  # HORIZONTAL LAYOUT\n  \n  it \"should have a horizontal layout\" do\n    base = horizontal\n    assert base.horizontal?\n    assert_equal 10, base.height\n    assert_equal 40, base.width\n  end\n  \n  it \"should layout images horizontaly\" do\n    base = horizontal\n    assert_equal [0, 10, 20, 30], base.images.map(&:left)\n    assert_equal [0, 0, 0, 0],  base.images.map(&:top)\n  end\n  \n  it \"should layout horizontaly with spacing\" do\n    base = horizontal(\"spacing\" => Sass::Script::Number.new(10, ['px']))\n    assert_equal [0, 20, 40, 60], base.images.map(&:left)\n    assert_equal [0, 0, 0, 0], base.images.map(&:top)\n    assert_equal 80, base.width\n  end\n\n  it \"should layout horizontaly with spacing and and position\" do\n    base = horizontal({\"spacing\" => Sass::Script::Number.new(10, ['px']), \"position\" => Sass::Script::Number.new(50, ['%'])}, 'squares/*.png')\n    assert_equal [0, 20], base.images.map(&:left)\n    assert_equal [5, 0], base.images.map(&:top)\n    assert_equal 50, base.width\n  end\n  \n  it \"should layout horizontaly with position\" do\n    base = horizontal(\"selectors_ten_by_ten_active_position\" => Sass::Script::Number.new(10, ['px']))\n    assert_equal [0, 10, 0, 0], base.images.map(&:top)\n    assert_equal 40, base.width\n    assert_equal 20, base.height\n  end\n  \n  it \"should generate a horrizontal sprite\" do\n    base = horizontal\n    base.generate\n    assert File.exists?(base.filename)\n    FileUtils.rm base.filename\n  end\n    \nend"
  },
  {
    "path": "cli/test/units/sprites/row_fitter_test.rb",
    "content": "require 'test_helper'\nrequire 'compass/sass_extensions/sprites/row_fitter'\n\nclass RowFitterTest < Test::Unit::TestCase\n  include SpriteHelper\n  def setup\n    file = StringIO.new(\"images_path = #{@images_src_path.inspect}\\n\")\n    Compass.add_configuration(file, \"sprite_config\")\n  end\n\n  def row_fitter(images = nil)\n    @row_fitter ||= Compass::SassExtensions::Sprites::RowFitter.new(images)\n  end\n\n  def teardown\n    @row_fitter = nil\n  end\n\n  def create_images(dims)\n    dims.collect { |width, height| \n      image = Compass::SassExtensions::Sprites::Image.new('blah', 'blah', {})\n      image.stubs(:width => width, :height => height)\n      image\n    }\n  end\n\n  def basic_dims\n    [\n      [ 100, 10 ],\n      [ 80, 10 ],\n      [ 50, 10 ],\n      [ 35, 10 ],\n      [ 20, 10 ]\n    ]\n  end\n\n  it 'should use the fast placement algorithm' do\n    images = create_images(basic_dims)\n\n    row_fitter(images)\n    assert_equal 100, row_fitter.width\n\n    row_fitter.fit!(:fast)\n\n    assert_equal 4, row_fitter.rows.length\n\n    assert_equal [ images[0] ], row_fitter[0].images\n    assert_equal [ images[1] ], row_fitter[1].images\n    assert_equal [ images[2], images[3] ], row_fitter[2].images\n    assert_equal [ images[4] ], row_fitter[3].images\n  end\n\n  it 'should use the scan placement algorithm' do\n    images = create_images(basic_dims)\n\n    row_fitter(images)\n\n    row_fitter.fit!(:scan)\n\n    assert_equal 3, row_fitter.rows.length\n\n    assert_equal [ images[0] ], row_fitter[0].images\n    assert_equal [ images[1], images[4] ], row_fitter[1].images\n    assert_equal [ images[2], images[3] ], row_fitter[2].images\n  end\nend"
  },
  {
    "path": "cli/test/units/sprites/sprite_command_test.rb",
    "content": "require 'test_helper'\nrequire 'compass/exec'\nclass SpriteCommandTest < Test::Unit::TestCase\n  include Compass::TestCaseHelper\n  include Compass::CommandLineHelper\n  include Compass::IoHelper\n  \n  attr_reader :test_dir\n  include SpriteHelper\n  def setup\n    @before_dir = ::Dir.pwd\n    create_temp_cli_dir\n    create_sprite_temp\n    @config_file = File.join(@test_dir, 'config.rb')\n    File.open(@config_file, 'w') do |f|\n      f << config_data\n    end\n  end\n  \n  def config_data\n    return <<-CONFIG\n      images_path = \"#{@images_tmp_path}\"\n    CONFIG\n  end\n\n  def create_temp_cli_dir\n    directory = File.join(File.expand_path('../', __FILE__), 'test')\n    ::FileUtils.mkdir_p directory\n     @test_dir = directory\n  end\n\n  def run_compass_with_options(options)\n    output = 'foo'\n    ::Dir.chdir @test_dir\n    compass *options\n  end\n\n  def options_to_cli(options)\n    options.map.flatten!\n  end\n\n  def teardown\n    ::Dir.chdir @before_dir\n    clean_up_sprites\n    if File.exists?(@test_dir)\n      ::FileUtils.rm_r @test_dir\n    end\n  end\n\n  it \"should create sprite file\" do\n    assert_equal 0, run_compass_with_options(['sprite', \"-f\", 'stylesheet.scss', \"squares/*.png\"]).to_i\n    assert File.exists?(File.join(test_dir, 'stylesheet.scss'))\n  end\n\nend"
  },
  {
    "path": "cli/test/units/sprites/sprite_map_test.rb",
    "content": "require 'test_helper'\n\nclass SpriteMapTest < Test::Unit::TestCase\n  include SpriteHelper\n  \n  def setup\n    Hash.send(:include, Compass::SassExtensions::Functions::Sprites::VariableReader)\n    create_sprite_temp\n    file = StringIO.new(<<-CONFIG)\n      project_path = \"#{@images_proj_path}\"\n      images_dir = \"#{@images_tmp_dir}\"\n    CONFIG\n    Compass.add_configuration(file, \"sprite_config\")\n    Compass.configure_sass_plugin!\n    @options = {'cleanup' => Sass::Script::Bool.new(true), 'layout' => Sass::Script::String.new('vertical')}\n    @base = sprite_map_test(@options)\n  end\n\n  def teardown\n    clean_up_sprites\n    @base = nil\n  end\n  \n  it \"should have the correct size\" do\n    assert_equal [10,40], @base.size\n  end\n  \n  it \"should have the sprite names\" do\n    assert_equal Compass::SpriteImporter.sprite_names(URI), @base.sprite_names\n  end\n  \n  it 'should have image filenames' do\n    assert_equal Dir[\"#{@images_tmp_path}/selectors/*.png\"].sort, @base.image_filenames\n  end\n  \n  it 'should need generation' do\n    assert @base.generation_required?\n  end\n  \n  test 'uniqueness_hash' do\n    assert_equal '4c703bbc05', @base.uniqueness_hash\n  end\n  \n  it 'should be outdated' do\n    assert @base.outdated?\n  end\n\n  it 'should have correct filename' do\n    assert_equal File.join(@images_tmp_path, \"#{@base.path}-s#{@base.uniqueness_hash}.png\"), @base.filename\n  end\n  \n  it \"should return the 'ten-by-ten' image\" do\n    assert_equal 'ten-by-ten', @base.image_for('ten-by-ten').name\n    assert @base.image_for('ten-by-ten').is_a?(Compass::SassExtensions::Sprites::Image)\n  end\n  \n  %w(target hover active).each do |selector|\n    it \"should have a #{selector}\" do\n      assert @base.send(:\"has_#{selector}?\", 'ten-by-ten')\n    end\n    \n    it \"should return #{selector} image class\" do\n      assert_equal \"ten-by-ten_#{selector}\", @base.image_for('ten-by-ten').send(:\"#{selector}\").name\n    end\n    \n    it \"should find file with '-' #{selector}\" do\n      map = sprite_map_test(:seperator => '-')\n      map.images.each_index do |i|\n        if map.images[i].name != 'ten-by-ten'\n          name = map.images[i].name.gsub(/_/, '-')\n          map.images[i].stubs(:name).returns(name)\n        end\n      end\n      assert_equal \"ten-by-ten-#{selector}\", map.image_for('ten-by-ten').send(:\"#{selector}\").name\n    end\n\n  end\n\n  it \"should generate sprite\" do\n    @base.generate\n    assert File.exists?(@base.filename)\n    assert !@base.generation_required?\n    assert !@base.outdated?\n  end\n  \n  it \"should remove old sprite when generating new\" do\n    @base.generate\n    file = @base.filename\n    assert File.exists?(file), \"Original file does not exist\"\n    file_to_remove = File.join(@images_tmp_path, 'selectors', 'ten-by-ten.png')\n    FileUtils.rm file_to_remove\n    assert !File.exists?(file_to_remove), \"Failed to remove sprite file\"\n    @base = sprite_map_test(@options)\n    @base.generate\n    assert !File.exists?(file), \"Sprite file did not get removed\"\n  end\n  \n  test \"should get correct relative_name\" do\n    Compass.reset_configuration!\n    uri = 'foo/*.png'\n    other_folder = File.join(@images_tmp_path, '../other-temp')\n    FileUtils.mkdir_p other_folder\n    FileUtils.mkdir_p File.join(other_folder, 'foo')\n    %w(my bar).each do |file|\n      FileUtils.touch(File.join(other_folder, \"foo/#{file}.png\"))\n    end\n    config = Compass::Configuration::Data.new('config')\n    config.images_path = @images_tmp_path\n    config.sprite_load_path = [@images_tmp_path, other_folder]\n    Compass.add_configuration(config, \"sprite_config\")\n    assert_equal 'foo/my.png', Compass::SassExtensions::Sprites::SpriteMap.relative_name(File.join(other_folder, 'foo/my.png'))\n    FileUtils.rm_rf other_folder\n  end\n  \n  test \"should get correct relative_name for directories with similar names\" do\n    Compass.reset_configuration!\n    uri = 'foo/*.png'\n    other_folder = File.join(@images_tmp_path, '../other-temp')\n    other_folder2 = File.join(@images_tmp_path, '../other-temp2')\n\n    FileUtils.mkdir_p other_folder\n    FileUtils.mkdir_p other_folder2\n    \n    FileUtils.mkdir_p File.join(other_folder2, 'foo')\n    %w(my bar).each do |file|\n      FileUtils.touch(File.join(other_folder2, \"foo/#{file}.png\"))\n    end\n    \n    config = Compass::Configuration::Data.new('config')\n    config.images_path = @images_tmp_path\n    config.sprite_load_path = [@images_tmp_path, other_folder, other_folder2]\n    Compass.add_configuration(config, \"sprite_config\")\n\n    assert_equal 'foo/my.png', Compass::SassExtensions::Sprites::SpriteMap.relative_name(File.join(other_folder2, 'foo/my.png'))\n    FileUtils.rm_rf other_folder\n    FileUtils.rm_rf other_folder2\n  end\n  \n  test \"should create map for nested\" do\n    base = Compass::SassExtensions::Sprites::SpriteMap.from_uri OpenStruct.new(:value => 'nested/squares/*.png'), @base.instance_variable_get(:@evaluation_context), @options\n    assert_equal 'squares', base.name\n    assert_equal 'nested/squares', base.path\n  end\n  \n  test \"should have correct position on ten-by-ten\" do\n    percent = Sass::Script::Number.new(50, ['%'])\n    base = sprite_map_test(@options.merge('selectors_ten_by_ten_position' => percent))\n    assert_equal percent, base.image_for('ten-by-ten').position\n  end\n\n  test 'gets name for sprite in search path' do\n    Compass.reset_configuration!\n    uri = 'foo/*.png'\n    other_folder = File.join(@images_tmp_path, '../other-temp')\n    FileUtils.mkdir_p other_folder\n    FileUtils.mkdir_p File.join(other_folder, 'foo')\n    %w(my bar).each do |file|\n      FileUtils.touch(File.join(other_folder, \"foo/#{file}.png\"))\n    end\n    config = Compass::Configuration::Data.new('config')\n    config.images_path = @images_tmp_path\n    config.sprite_load_path = [@images_tmp_path, other_folder]\n    Compass.add_configuration(config, \"sprite_config\")\n    image = Compass::SassExtensions::Sprites::Image.new(@base, \"foo/my.png\", {})\n    assert_equal File.join(other_folder, 'foo/my.png'), image.file\n    assert_equal 0, image.size\n  end\n  \nend\n"
  },
  {
    "path": "compass-style.org/.compass/config.rb",
    "content": "# Require any additional compass plugins here.\nrequire 'susy'\nrequire 'css-slideshow'\n# Set this to the root of your project when deployed:\nhttp_path = \"/\"\nproject_path = File.expand_path(File.join(File.dirname(__FILE__), '..'))\ncss_dir = \"output/stylesheets\"\nsass_dir = \"content/stylesheets\"\nimages_dir = \"assets/images\"\njavascripts_dir = \"assets/javascripts\"\nfonts_dir = \"assets/fonts\"\nhttp_javascripts_dir = \"javascripts\"\nhttp_stylesheets_dir = \"stylesheets\"\nhttp_images_dir = \"images\"\nhttp_fonts_dir = \"fonts\"\n# To enable relative paths to assets via compass helper functions. Uncomment:\n# relative_assets = true\n"
  },
  {
    "path": "compass-style.org/.gitignore",
    "content": "bin\nvendor\noutput\nvendor/ruby\ncrash.log\ntmp\n.bundle\nsync\n.rvmrc\n"
  },
  {
    "path": "compass-style.org/.livereload",
    "content": "# Lines starting with pound sign (#) are ignored.\n\n# additional extensions to monitor\n#config.exts << 'haml'\n\n# exclude files with NAMES matching this mask\n#config.exclusions << '~*'\n# exclude files with PATHS matching this mask (if the mask contains a slash)\n#config.exclusions << '/excluded_dir/*'\n# exclude files with PATHS matching this REGEXP\n#config.exclusions << /somedir.*(ab){2,4}.(css|js)$/\n\n# reload the whole page when .js changes\n#config.apply_js_live = false\n# reload the whole page when .css changes\n#config.apply_css_live = false\n\n# wait 100ms for more changes before reloading a page\n#config.grace_period = 0.1\n"
  },
  {
    "path": "compass-style.org/Gemfile",
    "content": "source 'https://rubygems.org'\ngem 'nanoc', '~> 3.4.2'\ngem 'i18n'\ngem 'adsf'\ngem 'rb-inotify'\ngem 'thin'\ngem 'foreman'\ngem 'rdiscount'\ngem 'thor'\ngem 'rack'\ngem 'fssm'\ngem 'mime-types'\ngem 'nokogiri'\ngem 'coderay'\ngem 'haml'\ngem 'rake'\ngem 'activesupport', '~> 3.0.10', :require => 'active_support/inflector'\ngem 'sass', \"~> 3.3.0\"\ngem 'compass', :path => \"..\"\ngem 'susy'\ngem 'css-slideshow', \"0.2.0\"\ngem 'json'\ngem 'css_parser', \"1.0.1\"\ngem 'rb-fsevent'\ngem 'builder'\n"
  },
  {
    "path": "compass-style.org/Procfile",
    "content": "watch: bundle exec nanoc watch\nview: bundle exec nanoc view -H thin\n"
  },
  {
    "path": "compass-style.org/README.markdown",
    "content": "# Compass documentation\n\n* [About](#about)\n* [Documentation setup](#documentation-setup)\n* [Documentation project structure](#documentation-project-structure)\n* [HOW-TOs](#how-tos)\n\nIf you want to work on a specific part of the docs, please let everyone know via the [Compass-devs google group](http://groups.google.com/group/compass-devs/browse_thread/thread/41dc723721a194f8).\n\n---\n\n## About\n\nThis is the documentation for Compass. Much of the documentation is read from the\nSass source files to keep the docs in-line with current state of the code as much as\npossible.\n\nIf you're reading this, you might be thinking about helping to improve the Compass documentation by editing existing documentation or by adding new documentation.\n\nThere are two main kinds of documentation:\n\n* Tutorials → Describe **how** to use Compass.\n* Reference → Details about **what** Compass has.\n\nIt's possible and encouraged for related tutorials and reference documentation to\nlink to each other.\n\n## Documentation setup\n\nSo you want to help documenting Compass?\n\nSetting up the documentation for Compass is not super-easy, but it's pretty doable.\n\nThe Compass docs live in the source code of Compass. Not directly in the Sass files though: the documentation is a combination of inline comments and source code read directly from the Sass files, and hand-maintained documentation and examples. We use [nanoc](http://nanoc.stoneship.org/) to generate a static website, combined with some Ruby to read the Compass source.\n\nThe reasons for this setup are simple:\n\n* to keep the documentation current, we need to read from the source code\n* to read from the source code, we need to be in the source code\n\nIf you encounter any problems, there's usually some people around to help at #compass on freenode IRC.\n\n### Prerequisites:\n\n* a Github account, setup to be able to clone repos (see [GitHub Help](http://help.github.com/))\n* [Git](http://git-scm.com/downloads) installed on your computer\n* a basic knowledge of Git ([Pro Git](http://git-scm.com/book) is an excellent free guide)\n\nMake sure that you have RubyGems v1.3.6 or greater:\n\n```sh\n$ gem -v\n```\n\nIf that doesn't work, RubyGems is probably out of date, try:\n\n```sh\n$ (sudo) gem update --system\n```\n\nYou will need the [Bundler](http://gembundler.com/) gem, so if you don't have it:\n\n```sh\n$ (sudo) gem install bundler\n```\n\nA list of the gems on your system can be accessed via `gem list`. Run `gem list bundler` to see if you have bundler installed.\n\n### 1. Get your own copy of Compass (fork)\n\nMake your own fork of Compass on Github by clicking the \"Fork\" button on [http://github.com/chriseppstein/compass](http://github.com/chriseppstein/compass), then go to your fork of Compass on GitHub. Your compass fork will be available at `http://github.com/<your-username>/compass` .\n\n### 2. Directory setup\n\n`git clone` your fork of the Compass repository:\n\n```sh\n$ git clone git@github.com:<your-username>/compass.git\n```\n\n### 3. Bundler\n\nIf you haven't yet done so, install bundler:\n\n```sh\n$ (sudo) gem install bundler\n```\n\nBundle the gems for this application:\n\n```sh\n$ cd compass-style.org\n$ bundle install\n```\n\n### 3/4. Binstubs\n\nIf your bundler is still stuck with generating binstubs (an approach we\nused before), check if there's a `.bundler` directory in\n`compass-style.org`. If there is, delete it and try again. If you don't\nknow what we're talking about, then everything is fine, continue... :)\n\n### 4. Compile the docs\n\nFirst, make sure you're in the `compass-style.org` directory. To watch the folder for changes and to preview the site in your browser, run:\n\n```sh\n$ foreman start\n```\n\nThen go to [http://localhost:3000](http://localhost:3000) to view the site.\n\nWe use [foreman](https://github.com/ddollar/foreman) to combine two nanoc commands using a `Procfile`, which you'll find in `compass-style.org`. If you take a look a it, you'll see two processes, `watch` and `view`:\n\n```sh\nwatch: bundle exec nanoc watch\nview: bundle exec nanoc view -H thin\n```\n\n`nanoc watch` watches for changes and `nanoc view -H thin` previews the site using thin (rather than WEBrick, which it would use by default). We suggest you install [Growl](http://growl.info/) or [rb-inotify](https://github.com/nex3/rb-inotify) so you can receive notifications when the site is done compiling.\n\nYour basic workflow might look like this:\n\n1. run `foreman start`\n1. open [http://localhost:3000](http://localhost:3000)\n1. make changes in the project files (and save them)\n1. wait for the notification that the compilation is complete\n1. refresh the browser to see the changes\n1. go to 3.\n\nIf you refresh the browser before the compilation is complete, nothing bad will happen, you just won't see the change until the compilation finishes (and you refresh again). That's because the site is compiling asynchronously.\n\nAuto-compiling on file change might not be your thing. In that case, keep this process running in a separate terminal window:\n\n```sh\n$ bundle exec nanoc view -H thin\n```\n\nand run:\n\n```sh\n$ bundle exec nanoc (compile)\n```\n\nevery time you want to compile the site and see the changes.\n\nIf this doesn't work for you, you could try nanoc's `aco` (or `autocompile`) command:\n\n```sh\n$ bundle exec nanoc aco -H thin\n```\n\nIt compiles and previews the site in the browser (also at [http://localhost:3000](http://localhost:3000)), then recompiles it on each request. The difference from the previous approach is that the site is recompiled each time a page is requested, not when a file is changed. This approach is usually more sluggish because it's synchronous.\n\nFor convenience, all these commands are written as rake tasks:\n\n```sh\n$ rake watch    # bundle execn nanoc watch\n$ rake view     # bundle exec nanoc view -H thin\n$ rake compile  # bundle exec nanoc (compile)\n$ rake aco      # bundle exec nanoc aco -H thin\n```\n\nif you choose not to use the Procfile approach.\n\nIt is recommended that you read the 5 minute [tutorial](http://nanoc.stoneship.org/tutorial/) on nanoc.\n\n### 5. Commit your changes to your fork\n\nWhen you're happy with the changes you made and you're ready to submit them, use `git add` to stage the changes, then commit them with:\n\n```sh\n$ git commit\n```\n\nWhen you're ready to push your changes to your Compass fork on GitHub, run:\n\n```sh\n$ git push -u origin <branch>\n```\n\ndepending on which branch you want to push. Your changes are now reflected on your github repo. Go to Github and click the \"Pull Request\" button on top of your repo to notify Chris of changes. He will verify them and merge them into the master.\n\n#### How to pull in new changes\n\nAdd the original Compass repository to your Git remotes:\n\n```sh\n$ git remote add chris git://github.com/chriseppstein/compass.git\n```\n\nThen get the new changes with fetch:\n\n```sh\n$ git fetch chris\n```\n\nAnd merge them with your local docs branch:\n\n```sh\n$ git merge chris\n```\n\n## Documentation project structure\n\n<table>\n  <tbody>\n    <tr>\n      <td><strong>.compass/config.rb</strong></td>\n      <td>Compass configuration of the project.</td>\n    </tr>\n    <tr>\n      <td><strong>content/</strong></td>\n      <td>Content of the project.</td>\n    </tr>\n    <tr>\n      <td><strong>content/reference/</strong></td>\n      <td>Reference documentation.</td>\n    </tr>\n    <tr>\n      <td><strong>content/examples/</strong></td>\n      <td>Examples.</td>\n    </tr>\n    <tr>\n      <td><strong>content/help/tutorials/</strong></td>\n      <td>Tutorial documentation.</td>\n    </tr>\n    <tr>\n      <td><strong>content/stylesheets/</strong></td>\n      <td>Sass stylesheets for the project.</td>\n    </tr>\n    <tr>\n      <td><strong>assets/css/</strong></td>\n      <td>Third-party, plain old CSS files.</td>\n    </tr>\n    <tr>\n      <td><strong>assets/images/</strong></td>\n      <td>Images.</td>\n    </tr>\n    <tr>\n      <td><strong>assets/javascripts/</strong></td>\n      <td>JavaScript files.</td>\n    </tr>\n    <tr>\n      <td><strong>layouts/</strong></td>\n      <td>Layouts for the project.</td>\n    </tr>\n    <tr>\n      <td><strong>layouts/partials/</strong></td>\n      <td>Partials for the project.</td>\n    </tr>\n    <tr>\n      <td><strong>lib/</strong></td>\n      <td>Ruby code – helper code and Sass source inspection is done here.</td>\n    </tr>\n  </tbody>\n</table>\n\n## HOW-TOs\n\n### How to Add an Asset\n\nIf you are adding an asset (e.g. image, CSS, JavaScript) place the file(s) in the appropriate directories under the `assets` directory.\n\n### How to Add a New Example\n\n(Again, make sure you're in the `compass-style.org` directory.)\n\nWe're using [Thor](https://github.com/wycats/thor) to generate examples and references. The command for generating examples is `generate:example`, you can see command's description and available options by running:\n\n```sh\n$ thor help generate:example\n```\n\nwhich produces:\n\n```sh\nUsage:\n  thor generate:example path/to/module\n\nOptions:\n  -t, [--title=TITLE]              # Title of the example.\n  -d, [--description=DESCRIPTION]  # Description of the example, which is shown below the link.\n  -m, [--mixin=MIXIN]              # Name of the specific mixin in the module if the example isn't about the whole module.\n\nGenerates a new example.\n```\n\nAll of these are optional and have reasonable defaults, you can use them when understand what exactly they are setting. They are all simple metadata values, so you can change them later on.\n\n**Note**: When generating examples or references, Thor is searching for the appropriate\nmodule stylesheet. If it doesn't find one, it raises an error and doesn't\ngenerate anything. So before generating anything make sure the stylesheet exists and is\nunder `../frameworks/compass/stylesheets/compass/path/to/module` (relative to the `compass-style.org` directory). If the path confuses you, just take a few minutes to study how other modules are organized and you'll quickly get the hang of it.\n\nLet's do an example:\n\n```sh\n$ thor generate:example typography/lists/inline-block-list\n```\n\nwhich produces the following output:\n\n```\nGenerating /examples/compass/typography/lists/inline-block-list/\nDIRECTORY content/examples/compass/typography/lists/inline-block-list/\n   CREATE content/examples/compass/typography/lists/inline-block-list.haml\n   CREATE content/examples/compass/typography/lists/inline-block-list/markup.haml\n   CREATE content/examples/compass/typography/lists/inline-block-list/stylesheet.scss\n```\n\nThe command generated three files:\n\n1. `inline-block-list.haml` → The main container, it contains example metadata\n   and description.\n1. `markup.haml` → The markup for the example, it will be shown as HTML and as Haml and it's styled with `stylesheet.scss`.\n1. `stylesheet.scss` → The style for the example, it will be shown as SCSS, Sass\n   and as CSS. This is the main file as it is demonstrating the module.\n\n`markup.haml` and `stylesheet.scss` are pretty self-explanatory, but we might want take a look at `inline-block-list.haml`.\n\n```\n---\ntitle: Inline Block List\ndescription: How to use Inline Block List\nframework: compass\nstylesheet: compass/typography/lists/_inline-block-list.scss\nexample: true\n---\n- render \"partials/example\" do\n  %p Lorem ipsum dolor sit amet.\n```\n\nThe stuff between `---` is called YAML front matter, it's describes example's metadata which is used to associate the example to the reference documentation.\n\nIf your example covers only a specific mixin, not the whole module, you can add\n`mixin: <your-mixin>` to the metadata. This will display the example link right below\nthat mixin in the reference (otherwise, it will appear near the top, below the module\ndescription).\n\nAfter adding the example and adjusting the metadata, go to the reference page in your browser and you can verify that a link to the example has appeared.\n\n### How to Add New Reference Documentation\n\nExisting modules already have reference files, so you'll most likely be adding\nreference files to new modules.\n\nSo we got a great idea for an awesome module, and after a lot of thinking we decided to name it `super-awesome-module`. The first step to adding a new module is creating the stylesheet. Let's say this will be a Compass CSS3 module, so we'll create a new file as `../frameworks/compass/stylesheets/compass/css3/_super-awesome-module.scss` (relative to the `compass-style.org` directory). Keep in mind that the comments inside those stylesheets are parsed with Markdown and output into the reference.\n\nThe easiest way to find out how you should write your stylesheet is to take a look at some existing modules. This module won't be very useful, but you'll get the point:\n\n```scss\n@import \"shared\";\n\n// Super awesomeness variable.\n$default-super-awesomeness : true !default;\n\n// Super awesome mixin.\n@mixin super-awesome {\n  @if $default-super-awesomeness {\n    $a: 5;\n  }\n}\n```\n\nNow that we have a stylesheet, we can generate the reference for it using the\n`generate:reference` command. We can first see what it does by running:\n\n```sh\n$ thor help generate:reference\n```\n\nwhich produces:\n\n```sh\nUsage:\n  thor generate:reference path/to/module\n\nOptions:\n  -t, [--title=TITLE]          # Title of the reference.\n\nGenerate a reference page for the given module.\n```\n\nNow we can create a reference file for our new module:\n\n```sh\n$ thor generate:reference css3/super-awesome-module\n```\n\nWhich produces the following output:\n\n```\nGenerating /reference/compass/css3/super-awesome-module/\nDIRECTORY content/reference/compass/css3/super-awesome-module/\n   CREATE content/reference/compass/css3/super-awesome-module.haml\n```\n\nIf we open `super-awesome-module.haml`, we can see our reference template:\n\n```\n---\ntitle: Compass Super Awesome Module\ncrumb: Super Awesome Module\nframework: compass\nstylesheet: compass/css3/_super-awesome-module.scss\nlayout: core\nclassnames:\n  - reference\n  - core\n---\n- render \"reference\" do\n  %p Lorem ipsum dolor sit amet.\n```\n\nIf `title` and `crumb` are the way you want them to be, your metadata should be good to go. Check the reference in your browser (it should be listed as a module in CSS3), if the style appears broken, take a look at the metadata of sibling stylesheets and adjust yours accordingly. If everything looks fine you can start writing the module's description below.\n\nUnlike what you might have guessed, the reference file only holds the main\ndescription of the module. Descriptions of specific variables, functions and\nmixins should be written as comments in the stylesheet file.\n\nHappy documenting!\n"
  },
  {
    "path": "compass-style.org/Rakefile",
    "content": "require \"bundler\"\nBundler.setup\n\nrequire \"rake\"\n\ndesc \"Watch the site for changes.\"\ntask :watch do\n  sh \"nanoc watch\"\nend\n\ndesc \"Compile the site.\"\ntask :compile do\n  sh \"nanoc compile\"\nend\n\ndesc \"View the site in a browser.\"\ntask :view do\n  sh \"nanoc view -H thin\"\nend\n\ndesc \"View the site in a browser with live updating (sluggish).\"\ntask :aco do\n  sh \"nanoc aco -H thin\"\nend\n"
  },
  {
    "path": "compass-style.org/Rules",
    "content": "#!/usr/bin/env ruby\n\nrequire 'sass'\nrequire 'compass'\n\nCompass.add_configuration \"#{File.dirname(__FILE__)}/.compass/config.rb\"\n\nSITE_ROOT = \"\"\n\ncompile '/assets/*/' do\n  nil\nend\n\n['markup', 'stylesheet', 'background'].each do |ex_file|\n  compile \"/examples/*/#{ex_file}/\" do\n    snapshot :raw\n    nil\n  end\nend\n\ncompile '/' do\n  filter :haml, :ugly => true\n  layout item[:layout] ? item[:layout] : \"main\"\nend\n\ncompile '/search-data/' do\n  filter :erb\nend\n\ncompile '/examples/*/' do\n  filter :haml, :ugly => true\n  filter :highlight\n  layout item[:layout] ? item[:layout] : \"example\"\nend\n\nsass_options = Compass.sass_engine_options\n\n(0..5).each do |i|\n  compile(\"/stylesheets/#{'*/' * i}_*/\") {nil}\nend\n\ncompile '/stylesheets/*' do\n  filter :sass, sass_options.merge(:syntax => item[:extension].to_sym)\nend\n\ncompile '/reference/*/' do\n  filter :haml, :ugly => true\n  filter :highlight\n  layout item[:layout] ? item[:layout] : \"main\"\nend\n\ncompile '/posts/*/' do\n  filter :erb\n  filter :rdiscount if item[:extension] == \"markdown\"\n  layout 'post'\nend\n\ncompile \"/blog/atom/\" do\n  filter :haml, :attr_wrapper => '\"'\nend\n\ncompile 'sitemap' do\n  filter :erb\nend\n\ncompile '*' do\n  if item[:extension] == \"markdown\"\n    filter :erb\n    filter :rdiscount\n  elsif item[:extension] == \"haml\"\n    filter :haml, :ugly => true\n  end\n  layout item[:layout] ? item[:layout] : \"main\"\nend\n\nroute 'sitemap' do\n  item.identifier.chop + '.xml'\nend\n\nroute \"/blog/atom/\" do\n  \"/blog/atom.xml\"\nend\n\nroute '/search-data/' do\n  \"#{SITE_ROOT}/javascripts\"+item.identifier[0..-2]+\".js\"\nend\n\n(0..5).each do |i|\n  route(\"/stylesheets/#{'*/' * i}_*/\") {nil}\nend\n\nroute '/assets/htaccess/' do\n  \"#{SITE_ROOT}/.htaccess\"\nend\n\nroute '/assets/css/*/' do\n  \"#{SITE_ROOT}/stylesheets\"+item.identifier.chop[11..-1]\nend\n\nroute '/assets/images/*/' do\n  SITE_ROOT+item.identifier.chop[7..-1]\nend\n\nroute '/assets/javascripts/*/' do\n  SITE_ROOT+item.identifier.chop[7..-1]\nend\n\nroute '/assets/fonts/*/' do\n  SITE_ROOT+item.identifier.chop[7..-1]\nend\n\nroute '/stylesheets/*/' do\n  # don't generate a directory like we do for HTML files\n  SITE_ROOT+item.identifier.chop + '.css'\nend\n\nroute '/posts/*/' do\n  if item[:draft]\n    puts \"Skipping Draft post: #{item.identifier}\"\n    nil\n  elsif item.identifier =~ %r{^/posts/(\\d{4})-(\\d{2})-(\\d{2})-(.*)/$}\n    \"/blog/#{$1}/#{$2}/#{$3}/#{$4}/index.html\"\n  else\n    puts \"WARNING: malformed post name: #{item.identifier}\"\n    nil\n  end\nend\n\n%w(markup stylesheet background).each do |ex_file|\n  route \"/examples/*/#{ex_file}/\" do\n    nil\n  end\nend\n\nroute '*' do\n  SITE_ROOT+item.identifier + 'index.html'\nend\n\nlayout '*', :haml, :ugly => true\n"
  },
  {
    "path": "compass-style.org/assets/htaccess",
    "content": "RedirectMatch 301 /docs/$ /reference/compass/\nRedirectMatch 301 /docs/tutorials/(.*) /help/tutorials/$1\nRedirectMatch 301 /docs/(.*) /$1\nRedirectMatch 301 /reference/$ /reference/compass/\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/fixups.js",
    "content": "$(function(){\n  $('span.color').each(function(i,e){\n   e = $(e);\n   e.after('<span class=\"swatch\" style=\"background-color:'+e.text()+';\"></span>');\n  });\n  $('span.arg[data-default-value]').each(function(i,e){\n    e = $(e);\n    e.attr(\"title\", \"Defaults to: \" + e.attr(\"data-default-value\"))\n  });\n});\n\n/*;(function()\n{\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\tfunction Brush(){};\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sass', 'scss', 'css', 'html'];\n\n\tSyntaxHighlighter.brushes.Sass = Brush;\n\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();*/\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/install.js",
    "content": "function showInstallCommand() {\n    var cmd = $(\"#existence\").val();\n    var commands = [];\n    var notes = [];\n    var project_name = \"&lt;myproject>\";\n    var can_be_bare = true;\n    var in_working_dir = false;\n    var use_bundler = false;\n    if ($(\"#app-type\").val() != \"rails\") {\n      commands.push(\"$ gem install compass\");\n    }\n    if (cmd == \"init\") {\n        commands.push(\"$ cd \" + project_name);\n        in_working_dir = true\n        project_name = \".\";\n        $(\".creating\").hide();\n    } else {\n        $(\".creating\").show();\n        if ($(\"#project_name\").val() != \"\")\n          project_name = $(\"#project_name\").val();\n    }\n    if ($(\"#app-type\").val() == \"rails\") {\n        notes.push(\"<p class='note warning'>Rails 2.3 and 3.0 users require additional installation steps. For full rails installation and upgrade instructions please refer to the compass-rails <a href='https://github.com/Compass/compass-rails/blob/master/README.md'>README</a>.</p>\");\n        use_bundler = true;\n    }\n    if ($(\"#app-type\").val() == \"rails\") {\n        if (cmd == \"create\") {\n            commands.push(\"$ rails new \" + project_name);\n            commands.push(\"$ cd \" + project_name);\n            in_working_dir = true\n            project_name = \".\";\n        }\n        commands.push(\"> Edit Gemfile and add this:\");\n        commands.push(\"   group :assets do\");\n        commands.push(\"     gem 'compass-rails'\");\n        commands.push(\"     # Add any compass extensions here\");\n        commands.push(\"   end\");\n        commands.push(\"$ bundle\");\n        cmd = \"init rails\";\n        can_be_bare = false;\n    } else if ($(\"#app-type\").val() == \"other\") {\n        if (cmd == \"init\") {\n            cmd = \"create\";\n        }\n    } else if ($(\"#app-type\").val() == \"stand-alone\") {\n        if (cmd == \"init\") {\n            cmd = \"install\";\n            can_be_bare = false;\n        }\n    }\n    var framework = $(\"#framework\").val();\n    var create_command;\n    if (cmd == \"install\") {\n        create_command = \"$ compass install \" + framework;\n    } else {\n        create_command = \"$ compass \" + cmd;\n    }\n    if (!in_working_dir) {\n      create_command = create_command + \" \" + project_name;\n    }\n    if (framework != \"compass\" && framework != \"bare\" && cmd != \"install\") {\n        create_command = create_command + \" --using \" + framework;\n    } else if (framework == \"bare\") {\n        if (can_be_bare) {\n            create_command = create_command + \" --bare\";\n        } else {\n            notes.push(\"<p class='note warning'>You cannot create a bare project in this configuration. Feel free to remove any stylesheets that you don't want.</p>\");\n        }\n    }\n    if ($(\"#syntax\").val() == \"sass\") {\n        create_command = create_command + \" --syntax sass\";\n    }\n    if ($(\"#options\").val() == \"customized\") {\n        $(\"#directories\").show();\n        if ($(\"#sassdir\").val() != \"\")\n          create_command += \" --sass-dir \\\"\" + $(\"#sassdir\").val() + \"\\\"\";\n        if ($(\"#cssdir\").val() != \"\")\n          create_command += \" --css-dir \\\"\" +  $(\"#cssdir\").val() + \"\\\"\";\n        if ($(\"#jsdir\").val() != \"\")\n          create_command += \" --javascripts-dir \\\"\" + $(\"#jsdir\").val() + \"\\\"\";\n        if ($(\"#imagesdir\").val() != \"\")\n          create_command += \" --images-dir \\\"\" + $(\"#imagesdir\").val() + \"\\\"\";\n    } else {\n      $(\"#directories\").hide();\n    }\n    if (use_bundler) {\n      create_command = \"$ bundle exec \" + create_command.replace(/\\$ /,'');\n    }\n    commands.push(create_command);\n    var instructions = \"<pre><code>\" + commands.join(\"\\n\") + \"</code></pre>\";\n    if (instructions.match(/&lt;/)) {\n        notes.push(\"<p class='note'>Note: Values indicated by &lt;&gt; are placeholders. Change them to suit your needs.</em>\");\n    }\n    $(\"#steps\").html(instructions + notes.join(\"\"));\n}\n\nfunction attachMadlibBehaviors() {\n    $(\"#app-type\").change(function(event) {\n        var val = $(event.target).val();\n        if (val == \"other\") {\n            $(\"#options\").val(\"customized\");\n            $(\".madlib\").addClass(\"customizable\");\n        } else if (val == \"rails\") {\n            $(\"#options\").val(\"default\");\n            $(\".madlib\").removeClass(\"customizable\");\n        } else {\n            $(\".madlib\").addClass(\"customizable\");\n        }\n    });\n    $(\"#existence, #app-type, #framework, #syntax, #options\").change(showInstallCommand);\n    $(\".madlib input\").keyup(function(){setTimeout(showInstallCommand, 0.1)});\n}\n\nfunction setupMadlib() {\n    attachMadlibBehaviors();\n    showInstallCommand();\n}\n\n$(setupMadlib);\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/jquery.cookie.js",
    "content": "/**\n * Cookie plugin\n *\n * Copyright (c) 2006 Klaus Hartl (stilbuero.de)\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n */\n\n/**\n * Create a cookie with the given name and value and other optional parameters.\n *\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Set the value of a cookie.\n * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });\n * @desc Create a cookie with all available options.\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Create a session cookie.\n * @example $.cookie('the_cookie', null);\n * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain\n *       used when the cookie was set.\n *\n * @param String name The name of the cookie.\n * @param String value The value of the cookie.\n * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.\n * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.\n *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.\n *                             If set to null or omitted, the cookie will be a session cookie and will not be retained\n *                             when the the browser exits.\n * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).\n * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).\n * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will\n *                        require a secure protocol (like HTTPS).\n * @type undefined\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\n\n/**\n * Get the value of a cookie with the given name.\n *\n * @example $.cookie('the_cookie');\n * @desc Get the value of a cookie.\n *\n * @param String name The name of the cookie.\n * @return The value of the cookie.\n * @type String\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\njQuery.cookie = function(name, value, options) {\n    if (typeof value != 'undefined') { // name and value given, set cookie\n        options = options || {};\n        if (value === null) {\n            value = '';\n            options.expires = -1;\n        }\n        var expires = '';\n        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {\n            var date;\n            if (typeof options.expires == 'number') {\n                date = new Date();\n                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));\n            } else {\n                date = options.expires;\n            }\n            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE\n        }\n        // CAUTION: Needed to parenthesize options.path and options.domain\n        // in the following expressions, otherwise they evaluate to undefined\n        // in the packed version for some reason...\n        var path = options.path ? '; path=' + (options.path) : '';\n        var domain = options.domain ? '; domain=' + (options.domain) : '';\n        var secure = options.secure ? '; secure' : '';\n        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');\n    } else { // only name given, get cookie\n        var cookieValue = null;\n        if (document.cookie && document.cookie != '') {\n            var cookies = document.cookie.split(';');\n            for (var i = 0; i < cookies.length; i++) {\n                var cookie = jQuery.trim(cookies[i]);\n                // Does this cookie string begin with the name we want?\n                if (cookie.substring(0, name.length + 1) == (name + '=')) {\n                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\n                    break;\n                }\n            }\n        }\n        return cookieValue;\n    }\n};"
  },
  {
    "path": "compass-style.org/assets/javascripts/jquery.url.packed.js",
    "content": "jQuery.url=function(){var segments={};var parsed={};var options={url:window.location,strictMode:false,key:[\"source\",\"protocol\",\"authority\",\"userInfo\",\"user\",\"password\",\"host\",\"port\",\"relative\",\"path\",\"directory\",\"file\",\"query\",\"anchor\"],q:{name:\"queryKey\",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*):?([^:@]*))?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/}};var parseUri=function(){str=decodeURI(options.url);var m=options.parser[options.strictMode?\"strict\":\"loose\"].exec(str);var uri={};var i=14;while(i--){uri[options.key[i]]=m[i]||\"\"}uri[options.q.name]={};uri[options.key[12]].replace(options.q.parser,function($0,$1,$2){if($1){uri[options.q.name][$1]=$2}});return uri};var key=function(key){if(!parsed.length){setUp()}if(key==\"base\"){if(parsed.port!==null&&parsed.port!==\"\"){return parsed.protocol+\"://\"+parsed.host+\":\"+parsed.port+\"/\"}else{return parsed.protocol+\"://\"+parsed.host+\"/\"}}return(parsed[key]===\"\")?null:parsed[key]};var param=function(item){if(!parsed.length){setUp()}return(parsed.queryKey[item]===null)?null:parsed.queryKey[item]};var setUp=function(){parsed=parseUri();getSegments()};var getSegments=function(){var p=parsed.path;segments=[];segments=parsed.path.length==1?{}:(p.charAt(p.length-1)==\"/\"?p.substring(1,p.length-1):path=p.substring(1)).split(\"/\")};return{setMode:function(mode){strictMode=mode==\"strict\"?true:false;return this},setUrl:function(newUri){options.url=newUri===undefined?window.location:newUri;setUp();return this},segment:function(pos){if(!parsed.length){setUp()}if(pos===undefined){return segments.length}return(segments[pos]===\"\"||segments[pos]===undefined)?null:segments[pos]},attr:key,param:param}}();"
  },
  {
    "path": "compass-style.org/assets/javascripts/placeholder.js",
    "content": "(function($) {\n\n\t$.fn.replaceholder = function(options) {\n\n\t\tvar $placeholder;\n\n\t\t(this.length > 0) ? $this = $(this) : $this = $('input[placeholder]');\n\t\treturn $this.each(function() {\n\n\t\t\tsettings = jQuery.extend(options);\n\n\t\t\tvar $placeholder = $(this);\n\n\t\t\tif ($placeholder.length > 0) {\n\n\t\t\t\tvar attrPh = $placeholder.attr('placeholder');\n\n\t\t\t\t$placeholder.attr('value', attrPh);\n\t\t\t\t$placeholder.bind('focus', function() {\n\n\t\t\t\t\tvar $this = $(this);\n\n\t\t\t\t\tif($this.val() === attrPh)\n\t\t\t\t\t\t$this.val('').removeClass('placeholder');\n\n\t\t\t\t}).bind('blur', function() {\n\n\t\t\t\t\tvar $this = $(this);\n\n\t\t\t\t\tif($this.val() === '')\n\t\t\t\t\t\t$this.val(attrPh).addClass('placeholder');\n\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t});\n\n\t};\n\n})(jQuery);\n\njQuery(function($){\n  $(document).ready(function(){\n    if (!Modernizr.input.placeholder) { $(\"input[placeholder], textarea[placeholder]\").replaceholder() }\n  })\n})\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/shAutoloader.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\neval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c])}}return p}('(2(){1 h=5;h.I=2(){2 n(c,a){4(1 d=0;d<c.9;d++)i[c[d]]=a}2 o(c){1 a=r.H(\"J\"),d=3;a.K=c;a.M=\"L/t\";a.G=\"t\";a.u=a.v=2(){6(!d&&(!8.7||8.7==\"F\"||8.7==\"z\")){d=q;e[c]=q;a:{4(1 p y e)6(e[p]==3)B a;j&&5.C(k)}a.u=a.v=x;a.D.O(a)}};r.N.R(a)}1 f=Q,l=h.P(),i={},e={},j=3,k=x,b;5.T=2(c){k=c;j=q};4(b=0;b<f.9;b++){1 m=f[b].w?f[b]:f[b].S(/\\\\s+/),g=m.w();n(m,g)}4(b=0;b<l.9;b++)6(g=i[l[b].E.A]){e[g]=3;o(g)}}})();',56,56,'|var|function|false|for|SyntaxHighlighter|if|readyState|this|length|||||||||||||||||true|document||javascript|onload|onreadystatechange|pop|null|in|complete|brush|break|highlight|parentNode|params|loaded|language|createElement|autoloader|script|src|text|type|body|removeChild|findElements|arguments|appendChild|split|all'.split('|'),0,{}))\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/shBrushCss.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n;(function()\n{\n\t// CommonJS\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// html colors\n\t\t\t{ regex: /(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,\t\t\t\tcss: 'value' },\t\t// sizes\n\t\t\t{ regex: /!important/g,\t\t\t\t\t\t\t\t\t\tcss: 'color3' },\t// !important\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t// fonts\n\t\t\t];\n\n\t\tthis.forHtmlScript({ \n\t\t\tleft: /(&lt;|<)\\s*style.*?(&gt;|>)/gi, \n\t\t\tright: /(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi \n\t\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['css'];\n\n\tSyntaxHighlighter.brushes.CSS = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/shBrushPlain.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n *\n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n;(function()\n{\n\t// CommonJS\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\n\tfunction Brush()\n\t{\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['text', 'plain', 'haml'];\n\n\tSyntaxHighlighter.brushes.Plain = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/shBrushSass.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n *\n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n;(function()\n{\n\t// CommonJS\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index zoom';\n\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\n\t\tvar statements\t\t= '!important !default';\n\t\tvar preprocessors\t= 'import extend debug warn if for while mixin include';\n\n\t\tvar r = SyntaxHighlighter.regexLib;\n\n\t  var getKeywordsPrependedBy = function(keywords, by)\n    {\n      str = keywords\n        .replace(/^\\s+|\\s+$/g, '')\n        .replace(/\\s+/g, '|' + by + '\\\\b')\n        .replace(/^/, by + '\\\\b')\n        ;\n\n      return '(?:' + str + ')\\\\b';\n    }\n\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineCComments,\t\t                                \t\t\t\t\tcss: 'comments' },\t    // multiline comments\n\t\t\t{ regex: r.singleLineCComments,\t\t                                \t\t\t\t\tcss: 'comments' },\t    // singleline comments\n\t\t\t{ regex: r.doubleQuotedString,\t\t                                \t\t\t\t\tcss: 'string' },\t      // double quoted strings\n\t\t\t{ regex: r.singleQuotedString,\t\t                                \t\t\t\t\tcss: 'string' },\t      // single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t                                \t\t\t\t\tcss: 'value' },\t\t      // html colors\n\t\t\t{ regex: /\\b(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)\\b/g,                     \t\t\tcss: 'value' },\t\t      // sizes\n\t\t\t{ regex: /(\\$|!)\\w+/g,\t\t\t\t\t\t\t\t\t\t\t                                css: 'variable' },      // variables\n\t\t\t{ regex: new RegExp(this.getKeywords(statements), 'g'),\t\t                  css: 'color3' },\t      // statements\n\t\t\t{ regex: new RegExp(getKeywordsPrependedBy(preprocessors, '@'), 'g'),\t      css: 'preprocessor' },\t// preprocessors\n      { regex: new RegExp('(^|\\\\n)\\\\s*=.*', 'g'),\t                                css: 'functions' },   \t// short mixin declarations\n\t\t\t{ regex: new RegExp('(^|\\\\n)\\\\s*\\\\+.*', 'g'),                              \tcss: 'functions' },   \t// short mixin call\n\t\t\t{ regex: new RegExp('&amp;', 'g'),\t                                        css: 'keyword' },     \t// &\n\t\t\t{ regex: new RegExp('#(\\\\w|-|_)+', 'g'),\t                                  css: 'color2' },        // ids\n\t\t\t{ regex: new RegExp('(\\\\.(\\\\w|-|_)+)', 'g'),                                css: 'color4' },        // classes\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t                      css: 'keyword' },   \t\t// keywords\n\t\t\t{ regex: new RegExp(getKeywordsPrependedBy(keywords, ':'), 'g'),\t          css: 'keyword' },   \t\t// :keyword value\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\t                      css: 'value' },\t      \t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\t                    css: 'color1' }\t      \t// fonts\n\t\t\t];\n\t};\n\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sass', 'scss'];\n\n\tSyntaxHighlighter.brushes.Sass = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/shBrushScss.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n;(function()\n{\n\t// CommonJS\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsSCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesSCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// html colors\n\t\t\t{ regex: /(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,\t\t\t\tcss: 'value' },\t\t// sizes\n\t\t\t{ regex: /!important/g,\t\t\t\t\t\t\t\t\t\tcss: 'color3' },\t// !important\n\t\t\t{ regex: new RegExp(getKeywordsSCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(getValuesSCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t// fonts\n\t\t\t];\n\n\t\tthis.forHtmlScript({ \n\t\t\tleft: /(&lt;|<)\\s*style.*?(&gt;|>)/gi, \n\t\t\tright: /(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi \n\t\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['scss'];\n\n\tSyntaxHighlighter.brushes.SCSS = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/shBrushXml.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n;(function()\n{\n\t// CommonJS\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\n\tfunction Brush()\n\t{\n\t\tfunction process(match, regexInfo)\n\t\t{\n\t\t\tvar constructor = SyntaxHighlighter.Match,\n\t\t\t\tcode = match[0],\n\t\t\t\ttag = new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)', 'xg').exec(code),\n\t\t\t\tresult = []\n\t\t\t\t;\n\t\t\n\t\t\tif (match.attributes != null) \n\t\t\t{\n\t\t\t\tvar attributes,\n\t\t\t\t\tregex = new XRegExp('(?<name> [\\\\w:\\\\-\\\\.]+)' +\n\t\t\t\t\t\t\t\t\t\t'\\\\s*=\\\\s*' +\n\t\t\t\t\t\t\t\t\t\t'(?<value> \".*?\"|\\'.*?\\'|\\\\w+)',\n\t\t\t\t\t\t\t\t\t\t'xg');\n\n\t\t\t\twhile ((attributes = regex.exec(code)) != null) \n\t\t\t\t{\n\t\t\t\t\tresult.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));\n\t\t\t\t\tresult.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tag != null)\n\t\t\t\tresult.push(\n\t\t\t\t\tnew constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')\n\t\t\t\t);\n\n\t\t\treturn result;\n\t\t}\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: new XRegExp('(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)', 'gm'),\t\t\tcss: 'color2' },\t// <![ ... [ ... ]]>\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t// <!-- ... -->\n\t\t\t{ regex: new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)', 'sg'), func: process }\n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['xml', 'xhtml', 'xslt', 'html'];\n\n\tSyntaxHighlighter.brushes.Xml = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/shCore.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n *\n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\neval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c])}}return p}('K M;I(M)1S 2U(\"2a\\'t 4k M 4K 2g 3l 4G 4H\");(6(){6 r(f,e){I(!M.1R(f))1S 3m(\"3s 15 4R\");K a=f.1w;f=M(f.1m,t(f)+(e||\"\"));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?\"g\":\"\")+(f.4s?\"i\":\"\")+(f.4p?\"m\":\"\")+(f.4v?\"x\":\"\")+(f.3n?\"y\":\"\")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a<f.L;a++)I(f[a]===e)H a;H-1}M=6(f,e){K a=[],b=M.1B,c=0,d,h;I(M.1R(f)){I(e!==1d)1S 3m(\"2a\\'t 5r 5I 5F 5B 5C 15 5E 5p\");H r(f)}I(v)1S 2U(\"2a\\'t W 3l M 59 5m 5g 5x 5i\");e=e||\"\";O(d={2N:11,19:[],2K:6(g){H e.1i(g)>-1},3d:6(g){e+=g}};c<f.L;)I(h=B(f,c,b,d)){a.U(h.3k);c+=h.1C[0].L||1}Y I(h=n.X.W(z[b],f.1a(c))){a.U(h[0]);c+=h[0].L}Y{h=f.3a(c);I(h===\"[\")b=M.2I;Y I(h===\"]\")b=M.1B;a.U(h);c++}a=15(a.1K(\"\"),n.Q.W(e,w,\"\"));a.1w={1m:f,19:d.2N?d.19:N};H a};M.3v=\"1.5.0\";M.2I=1;M.1B=2;K C=/\\\\$(?:(\\\\d\\\\d?|[$&`\\'])|{([$\\\\w]+)})/g,w=/[^5h]+|([\\\\s\\\\S])(?=[\\\\s\\\\S]*\\\\1)/g,A=/^(?:[?*+]|{\\\\d+(?:,\\\\d*)?})\\\\??/,v=11,u=[],n={X:15.Z.X,1A:15.Z.1A,1C:1r.Z.1C,Q:1r.Z.Q,1e:1r.Z.1e},x=n.X.W(/()??/,\"\")[1]===1d,D=6(){K f=/^/g;n.1A.W(f,\"\");H!f.12}(),y=6(){K f=/x/g;n.Q.W(\"x\",f,\"\");H!f.12}(),E=15.Z.3n!==1d,z={};z[M.2I]=/^(?:\\\\\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\\\29-26-f]{2}|u[\\\\29-26-f]{4}|c[A-3o-z]|[\\\\s\\\\S]))/;z[M.1B]=/^(?:\\\\\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\\\d*|x[\\\\29-26-f]{2}|u[\\\\29-26-f]{4}|c[A-3o-z]|[\\\\s\\\\S])|\\\\(\\\\?[:=!]|[?*+]\\\\?|{\\\\d+(?:,\\\\d*)?}\\\\??)/;M.1h=6(f,e,a,b){u.U({2q:r(f,\"g\"+(E?\"y\":\"\")),2b:e,3r:a||M.1B,2p:b||N})};M.2n=6(f,e){K a=f+\"/\"+(e||\"\");H M.2n[a]||(M.2n[a]=M(f,e))};M.3c=6(f){H r(f,\"g\")};M.5l=6(f){H f.Q(/[-[\\\\]{}()*+?.,\\\\\\\\^$|#\\\\s]/g,\"\\\\\\\\$&\")};M.5e=6(f,e,a,b){e=r(e,\"g\"+(b&&E?\"y\":\"\"));e.12=a=a||0;f=e.X(f);H b?f&&f.P===a?f:N:f};M.3q=6(){M.1h=6(){1S 2U(\"2a\\'t 55 1h 54 3q\")}};M.1R=6(f){H 53.Z.1q.W(f)===\"[2m 15]\"};M.3p=6(f,e,a,b){O(K c=r(e,\"g\"),d=-1,h;h=c.X(f);){a.W(b,h,++d,f,c);c.12===h.P&&c.12++}I(e.1J)e.12=0};M.57=6(f,e){H 6 a(b,c){K d=e[c].1I?e[c]:{1I:e[c]},h=r(d.1I,\"g\"),g=[],i;O(i=0;i<b.L;i++)M.3p(b[i],h,6(k){g.U(d.3j?k[d.3j]||\"\":k[0])});H c===e.L-1||!g.L?g:a(g,c+1)}([f],0)};15.Z.1p=6(f,e){H J.X(e[0])};15.Z.W=6(f,e){H J.X(e)};15.Z.X=6(f){K e=n.X.1p(J,14),a;I(e){I(!x&&e.L>1&&p(e,\"\")>-1){a=15(J.1m,n.Q.W(t(J),\"g\",\"\"));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;b<e.L;b++)I(a=J.1w.19[b-1])e[a]=e[b];!D&&J.1J&&!e[0].L&&J.12>e.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()===\"3f\"&&e.1i(\"${\")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+=\"\";I(1j e===\"6\")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;d<b.L;d++)I(b[d])14[0][b[d]]=14[d+1]}I(a&&f.1J)f.12=14[14.L-2]+14[0].L;H e.1p(N,14)});Y{c=J+\"\";c=n.Q.W(c,f,6(){K d=14;H n.Q.W(e,C,6(h,g,i){I(g)5b(g){24\"$\":H\"$\";24\"&\":H d[0];24\"`\":H d[d.L-1].1a(0,d[d.L-2]);24\"\\'\":H d[d.L-1].1a(d[d.L-2]+d[0].L);5a:i=\"\";g=+g;I(!g)H h;O(;g>d.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||\"\":\"$\")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+\"\",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P<a.L&&3b.Z.U.1p(b,d.1a(1));h=d[0].L;c=f.12;I(b.L>=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,\"\")||h)b.U(\"\")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\\\(\\\\?#[^)]*\\\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?\"\":\"(?:)\"});M.1h(/\\\\((?!\\\\?)/,6(){J.19.U(N);H\"(\"});M.1h(/\\\\(\\\\?<([$\\\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H\"(\"});M.1h(/\\\\\\\\k<([\\\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?\"\\\\\\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?\"\":\"(?:)\"):f[0]});M.1h(/\\\\[\\\\^?]/,6(f){H f[0]===\"[]\"?\"\\\\\\\\b\\\\\\\\B\":\"[\\\\\\\\s\\\\\\\\S]\"});M.1h(/^\\\\(\\\\?([5A]+)\\\\)/,6(f){J.3d(f[1]);H\"\"});M.1h(/(?:\\\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?\"\":\"(?:)\"},M.1B,6(){H J.2K(\"x\")});M.1h(/\\\\./,6(){H\"[\\\\\\\\s\\\\\\\\S]\"},M.1B,6(){H J.2K(\"s\")})})();1j 2e!=\"1d\"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=\" \"+b)}6 t(a){H a.1i(\"3e\")==0?a:\"3e\"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={\"#\":\"1c\",\".\":\"1l\"}[b.1o(0,1)]||\"3h\",g,i;g=h!=\"3h\"?b.1o(1):b.5u();I((a[h]||\"\").1i(g)!=-1)H a;O(a=0;d&&a<d.L&&i==N;a++)i=p(d[a],b,c);H i}6 C(a,b){K c={},d;O(d 2g a)c[d]=a[d];O(d 2g b)c[d]=b[d];H c}6 w(a,b,c,d){6 h(g){g=g||1P.5y;I(!g.1F){g.1F=g.52;g.3N=6(){J.5w=11}}c.W(d||1P,g)}a.3g?a.3g(\"4U\"+b,h):a.4y(b,h,11)}6 A(a,b){K c=e.1Y.2j,d=N;I(c==N){c={};O(K h 2g e.1U){K g=e.1U[h];d=g.4x;I(d!=N){g.1V=h.4w();O(g=0;g<d.L;g++)c[d[g]]=h}}e.1Y.2j=c}d=e.1U[c[a]];d==N&&b!=11&&1P.1X(e.13.1x.1X+(e.13.1x.3E+a));H d}6 v(a,b){O(K c=a.1e(\"\\\\n\"),d=0;d<c.L;d++)c[d]=b(c[d],d);H c.1K(\"\\\\n\")}6 u(a,b){I(a==N||a.L==0||a==\"\\\\n\")H a;a=a.Q(/</g,\"&1y;\");a=a.Q(/ {2,}/g,6(c){O(K d=\"\",h=0;h<c.L-1;h++)d+=e.13.1W;H d+\" \"});I(b!=N)a=v(a,6(c){I(c.L==0)H\"\";K d=\"\";c=c.Q(/^(&2s;| )+/,6(h){d=h;H\"\"});I(c.L==0)H d;H d+\\'<17 1g=\"\\'+b+\\'\">\\'+c+\"</17>\"});H a}6 n(a,b){a.1e(\"\\\\n\");O(K c=\"\",d=0;d<50;d++)c+=\"                    \";H a=v(a,6(h){I(h.1i(\"\\\\t\")==-1)H h;O(K g=0;(g=h.1i(\"\\\\t\"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\\\s+|\\\\s+$/g,\"\")}6 D(a,b){I(a.P<b.P)H-1;Y I(a.P>b.P)H 1;Y I(a.L<b.L)H-1;Y I(a.L>b.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i==\"3f\")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d=\"\",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\\'<a 2h=\"\\'+c+\\'\">\\'+c+\"</a>\"+d})}6 z(){O(K a=1E.36(\"1k\"),b=[],c=0;c<a.L;c++)a[c].3s==\"20\"&&b.U(a[c]);H b}6 f(a){a=a.1F;K b=p(a,\".20\",R);a=p(a,\".3O\",R);K c=1E.4i(\"3t\");I(!(!a||!b||p(a,\"3t\"))){B(b.1c);r(b,\"1m\");O(K d=a.3G,h=[],g=0;g<d.L;g++)h.U(d[g].4z||d[g].4A);h=h.1K(\"\\\\r\");c.39(1E.4D(h));a.39(c);c.2C();c.4C();w(c,\"4u\",6(){c.2G.4E(c);b.1l=b.1l.Q(\"1m\",\"\")})}}I(1j 3F!=\"1d\"&&1j M==\"1d\")M=3F(\"M\").M;K e={2v:{\"1g-27\":\"\",\"2i-1s\":1,\"2z-1s-2t\":11,1M:N,1t:N,\"42-45\":R,\"43-22\":4,1u:R,16:R,\"3V-17\":R,2l:11,\"41-40\":R,2k:11,\"1z-1k\":11},13:{1W:\"&2s;\",2M:R,46:11,44:11,34:\"4n\",1x:{21:\"4o 1m\",2P:\"?\",1X:\"1v\\\\n\\\\n\",3E:\"4r\\'t 4t 1D O: \",4g:\"4m 4B\\'t 51 O 1z-1k 4F: \",37:\\'<!4T 1z 4S \"-//4V//3H 4W 1.0 4Z//4Y\" \"1Z://2y.3L.3K/4X/3I/3H/3I-4P.4J\"><1z 4I=\"1Z://2y.3L.3K/4L/5L\"><3J><4N 1Z-4M=\"5G-5M\" 6K=\"2O/1z; 6J=6I-8\" /><1t>6L 1v</1t></3J><3B 1L=\"25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;\"><T 1L=\"2O-3D:3C;3w-32:1.6z;\"><T 1L=\"25-22:6A-6E;\">1v</T><T 1L=\"25-22:.6C;3w-6B:6R;\"><T>3v 3.0.76 (72 73 3x)</T><T><a 2h=\"1Z://3u.2w/1v\" 1F=\"38\" 1L=\"2f:#3y\">1Z://3u.2w/1v</a></T><T>70 17 6U 71.</T><T>6T 6X-3x 6Y 6D.</T></T><T>6t 61 60 J 1k, 5Z <a 2h=\"6u://2y.62.2w/63-66/65?64=5X-5W&5P=5O\" 1L=\"2f:#3y\">5R</a> 5V <2R/>5U 5T 5S!</T></T></3B></1z>\\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\//2c,6m:/\\\\/\\\\/.*$/2c,6l:/#.*$/2c,6k:/\"([^\\\\\\\\\"\\\\n]|\\\\\\\\.)*\"/g,6o:/\\'([^\\\\\\\\\\'\\\\n]|\\\\\\\\.)*\\'/g,6p:1f M(\\'\"([^\\\\\\\\\\\\\\\\\"]|\\\\\\\\\\\\\\\\.)*\"\\',\"3z\"),6s:1f M(\"\\'([^\\\\\\\\\\\\\\\\\\']|\\\\\\\\\\\\\\\\.)*\\'\",\"3z\"),6q:/(&1y;|<)!--[\\\\s\\\\S]*?--(&1G;|>)/2c,3M:/\\\\w+:\\\\/\\\\/[\\\\w-.\\\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\\\?=?/g,1b:/\\\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\\\/\\\\s*1k\\\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\\'<T 1g=\"16\">\\',d=e.16.2x,h=d.2X,g=0;g<h.L;g++)c+=(d[h[g]].1H||b)(a,h[g]);c+=\"</T>\";H c},2o:6(a,b,c){H\\'<2W><a 2h=\"#\" 1g=\"6e 6h\\'+b+\" \"+b+\\'\">\\'+c+\"</a></2W>\"},2b:6(a){K b=a.1F,c=b.1l||\"\";b=B(p(b,\".20\",R).1c);K d=6(h){H(h=15(h+\"6f(\\\\\\\\w+)\").X(c))?h[1]:N}(\"6g\");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:[\"21\",\"2P\"],21:{1H:6(a){I(a.V(\"2l\")!=R)H\"\";K b=a.V(\"1t\");H e.16.2o(a,\"21\",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q(\"47\",\"\")}},2P:{2B:6(){K a=\"68=0\";a+=\", 18=\"+(31.30-33)/2+\", 32=\"+(31.2Z-2Y)/2+\", 30=33, 2Z=2Y\";a=a.Q(/^,/,\"\");a=1P.6Z(\"\",\"38\",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h<c.L;h++)d.U(c[h]);c=d}c=c;d=[];I(e.13.2M)c=c.1O(z());I(c.L===0)H d;O(h=0;h<c.L;h++){O(K g=c[h],i=a,k=c[h].1l,j=3W 0,l={},m=1f M(\"^\\\\\\\\[(?<2V>(.*?))\\\\\\\\]$\"),s=1f M(\"(?<27>[\\\\\\\\w-]+)\\\\\\\\s*:\\\\\\\\s*(?<1T>[\\\\\\\\w-%#]+|\\\\\\\\[.*?\\\\\\\\]|\\\\\".*?\\\\\"|\\'.*?\\')\\\\\\\\s*;?\",\"g\");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\\'\"]|[\\'\"]$/g,\"\");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\\\s*,\\\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g<c.L;g++){b=c[g];K i=b.1F,k=b.1n,j=k.1D,l;I(j!=N){I(k[\"1z-1k\"]==\"R\"||e.2v[\"1z-1k\"]==R){d=1f e.4l(j);j=\"4O\"}Y I(d=A(j))d=1f d;Y 6H;l=i.3X;I(h.2M){l=l;K m=x(l),s=11;I(m.1i(\"<![6G[\")==0){m=m.4h(9);s=R}K o=m.L;I(m.1i(\"]]\\\\>\")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||\"\")!=\"\")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||\"\")!=\"\")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,\"4k\",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;m<j.L;m++)j[m].P+=l}K c=A(a),d,h=1f e.1U.5Y,g=J,i=\"2F 1H 2Q\".1e(\" \");I(c!=N){d=1f c;O(K k=0;k<i.L;k++)(6(){K j=i[k];g[j]=6(){H h[j].1p(h,14)}})();d.28==N?1P.1X(e.13.1x.1X+(e.13.1x.4g+a)):h.2J.U({1I:d.28.17,2D:6(j){O(K l=j.17,m=[],s=d.2J,o=j.P+j.18.L,F=d.28,q,G=0;G<s.L;G++){q=y(l,s[G]);b(q,o);m=m.1O(q)}I(F.18!=N&&j.18!=N){q=y(j.18,F.18);b(q,j.P);m=m.1O(q)}I(F.1b!=N&&j.1b!=N){q=y(j.1b,F.1b);b(q,j.P+j[0].5Q(j.1b));m=m.1O(q)}O(j=0;j<m.L;j++)m[j].1V=c.1V;H m}})}};e.4j=6(){};e.4j.Z={V:6(a,b){K c=J.1n[a];c=c==N?b:c;K d={\"R\":R,\"11\":11}[c];H d==N?c:d},3Y:6(a){H 1E.4i(a)},4c:6(a,b){K c=[];I(a!=N)O(K d=0;d<a.L;d++)I(1j a[d]==\"2m\")c=c.1O(y(b,a[d]));H J.4e(c.6b(D))},4e:6(a){O(K b=0;b<a.L;b++)I(a[b]!==N)O(K c=a[b],d=c.P+c.L,h=b+1;h<a.L&&a[b]!==N;h++){K g=a[h];I(g!==N)I(g.P>d)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P<d)a[h]=N}H a},4d:6(a){K b=[],c=2u(J.V(\"2i-1s\"));v(a,6(d,h){b.U(h+c)});H b},3U:6(a){K b=J.V(\"1M\",[]);I(1j b!=\"2m\"&&b.U==N)b=[b];a:{a=a.1q();K c=3W 0;O(c=c=1Q.6c(c||0,0);c<b.L;c++)I(b[c]==a){b=c;1N a}b=-1}H b!=-1},2r:6(a,b,c){a=[\"1s\",\"6i\"+b,\"P\"+a,\"6r\"+(b%2==0?1:2).1q()];J.3U(b)&&a.U(\"67\");b==0&&a.U(\"1N\");H\\'<T 1g=\"\\'+a.1K(\" \")+\\'\">\\'+c+\"</T>\"},3Q:6(a,b){K c=\"\",d=a.1e(\"\\\\n\").L,h=2u(J.V(\"2i-1s\")),g=J.V(\"2z-1s-2t\");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i<d;i++){K k=b?b[i]:h+i,j;I(k==0)j=e.13.1W;Y{j=g;O(K l=k.1q();l.L<j;)l=\"0\"+l;j=l}a=j;c+=J.2r(i,k,a)}H c},49:6(a,b){a=x(a);K c=a.1e(\"\\\\n\");J.V(\"2z-1s-2t\");K d=2u(J.V(\"2i-1s\"));a=\"\";O(K h=J.V(\"1D\"),g=0;g<c.L;g++){K i=c[g],k=/^(&2s;|\\\\s)+/.X(i),j=N,l=b?b[g]:d+g;I(k!=N){j=k[0].1q();i=i.1o(j.L);j=j.Q(\" \",e.13.1W)}i=x(i);I(i.L==0)i=e.13.1W;a+=J.2r(g,l,(j!=N?\\'<17 1g=\"\\'+h+\\' 5N\">\\'+j+\"</17>\":\"\")+i)}H a},4f:6(a){H a?\"<4a>\"+a+\"</4a>\":\"\"},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+\" \":\"\"}O(K d=0,h=\"\",g=J.V(\"1D\",\"\"),i=0;i<b.L;i++){K k=b[i],j;I(!(k===N||k.L===0)){j=c(k);h+=u(a.1o(d,k.P-d),j+\"48\")+u(k.1T,j+k.23);d=k.P+k.L+(k.75||0)}}h+=u(a.1o(d),c()+\"48\");H h},1H:6(a){K b=\"\",c=[\"20\"],d;I(J.V(\"2k\")==R)J.1n.16=J.1n.1u=11;1l=\"20\";J.V(\"2l\")==R&&c.U(\"47\");I((1u=J.V(\"1u\"))==11)c.U(\"6S\");c.U(J.V(\"1g-27\"));c.U(J.V(\"1D\"));a=a.Q(/^[ ]*[\\\\n]+|[\\\\n]*[ ]*$/g,\"\").Q(/\\\\r/g,\" \");b=J.V(\"43-22\");I(J.V(\"42-45\")==R)a=n(a,b);Y{O(K h=\"\",g=0;g<b;g++)h+=\" \";a=a.Q(/\\\\t/g,h)}a=a;a:{b=a=a;h=/<2R\\\\s*\\\\/?>|&1y;2R\\\\s*\\\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,\"\\\\n\");I(e.13.44==R)b=b.Q(h,\"\");b=b.1e(\"\\\\n\");h=/^\\\\s*/;g=4Q;O(K i=0;i<b.L&&g>0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i<b.L;i++)b[i]=b[i].1o(g);a=b.1K(\"\\\\n\")}I(1u)d=J.4d(a);b=J.4c(J.2J,a);b=J.4b(a,b);b=J.49(b,d);I(J.V(\"41-40\"))b=E(b);1j 2H!=\"1d\"&&2H.3S&&2H.3S.1C(/5s/)&&c.U(\"5t\");H b=\\'<T 1c=\"\\'+t(J.1c)+\\'\" 1g=\"\\'+c.1K(\" \")+\\'\">\\'+(J.V(\"16\")?e.16.1H(J):\"\")+\\'<3Z 5z=\"0\" 5H=\"0\" 5J=\"0\">\\'+J.4f(J.V(\"1t\"))+\"<3T><3P>\"+(1u?\\'<2d 1g=\"1u\">\\'+J.3Q(a)+\"</2d>\":\"\")+\\'<2d 1g=\"17\"><T 1g=\"3O\">\\'+b+\"</T></2d></3P></3T></3Z></T>\"},2F:6(a){I(a===N)a=\"\";J.17=a;K b=J.3Y(\"T\");b.3X=J.1H(a);J.V(\"16\")&&w(p(b,\".16\"),\"5c\",e.16.2b);J.V(\"3V-17\")&&w(p(b,\".17\"),\"56\",f);H b},2Q:6(a){J.1c=\"\"+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V(\"2k\")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\\\s+|\\\\s+$/g,\"\").Q(/\\\\s+/g,\"|\");H\"\\\\\\\\b(?:\"+a+\")\\\\\\\\b\"},5f:6(a){J.28={18:{1I:a.18,23:\"1k\"},1b:{1I:a.1b,23:\"1k\"},17:1f M(\"(?<18>\"+a.18.1m+\")(?<17>.*?)(?<1b>\"+a.1b.1m+\")\",\"5o\")}}};H e}();1j 2e!=\"1d\"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{}))\n\n"
  },
  {
    "path": "compass-style.org/assets/javascripts/site.js",
    "content": "function changeTheme(theme, setCookie) {\n  el = $('html');\n\n  if (!theme) theme = el.hasClass('dark') ? 'light': 'dark';\n  else if (el.hasClass(theme)) return;\n\n  el.removeClass('light');\n  el.removeClass('dark');\n  el.addClass(theme);\n  setThemePreference(theme);\n}\n\nfunction changeSyntax(style, setCookie){\n  el = $('html');\n  el.removeClass('scss'); el.removeClass('sass');\n  el.addClass(style);\n  setStyleSyntaxPreference(style);\n}\n\nfunction changeExampleStyleSyntax(style, setCookie){\n  el = $('html');\n  el.removeClass('scss'); el.removeClass('sass'); el.removeClass('css');\n  el.addClass(style);\n  setExampleStyleSyntaxPreference(style);\n}\n\nfunction changeExampleMarkupSyntax(markup){\n  el = $('html');\n  el.removeClass('haml'); el.removeClass('html');\n  el.addClass(markup);\n  setExampleMarkupSyntaxPreference(markup);\n}\n\nfunction setThemePreference(theme) {\n  $.cookie(\"compass-theme\", null);\n  $.cookie(\"compass-theme\", theme, {\n    expires: 60 * 60 * 24 * 365 * 10,\n    path: '/'\n  });\n}\n\nfunction getThemePreference(defaultTheme) {\n  theme = $.cookie(\"compass-theme\");\n  if (theme) {\n    changeTheme(theme, false);\n  } else {\n    changeTheme(defaultTheme, true);\n  }\n}\n\nfunction setStyleSyntaxPreference (mainSyntax) {\n  $.cookie(\"compass-syntax\", null);\n  $.cookie(\"compass-syntax\", mainSyntax, { expires: 60 * 60 * 24 * 365 * 10, path: '/' });\n}\n\nfunction setExampleStyleSyntaxPreference (exampleStyle) {\n  $.cookie(\"compass-example-style\", null);\n  $.cookie(\"compass-example-style\", exampleStyle, { expires: 60 * 60 * 24 * 365 * 10, path: '/' });\n}\n\nfunction setExampleMarkupSyntaxPreference (exampleMarkup) {\n  $.cookie(\"compass-example-markup\", null);\n  $.cookie(\"compass-example-markup\", exampleMarkup, { expires: 60 * 60 * 24 * 365 * 10, path: '/' });\n}\n\nfunction getSyntaxPreference(defaultSyntax, defaultMarkup) {\n  mainSyntaxCookie = $.cookie(\"compass-syntax\");\n  mainSyntax = (mainSyntaxCookie) ? mainSyntaxCookie : defaultSyntax;\n  changeSyntax(mainSyntax);\n\n  // add example styling preferences\n  if ($('body').hasClass('demo')){\n    markupCookie = $.cookie(\"compass-example-markup\");\n    styleCookie = $.cookie(\"compass-example-style\");\n\n    markup = (markupCookie) ? markupCookie : defaultMarkup;\n    style = (styleCookie) ? styleCookie : defaultSyntax;\n\n    changeExampleStyleSyntax(style)\n    changeExampleMarkupSyntax(markup);\n  }\n}\n\n\ngetThemePreference('dark');\n\n$('document').ready(function(){\n  getSyntaxPreference('scss', 'html');\n\n  $('#page').click(function(event){\n    var target = $(event.target);\n\n    // Set Main Syntax Preference\n    if (target.parent().is('#syntax_pref')) {\n      changeSyntax(target.attr(\"rel\"), true);\n      event.preventDefault();\n\n    // Set Demo page syntax preferences\n    } else if (target.parent().is('.syntax_pref')) {\n      event.preventDefault();\n      if (target.parent().parent().is('#markup')) {\n        changeExampleMarkupSyntax(target.attr(\"rel\"), true);\n      } else {\n        changeExampleStyleSyntax(target.attr(\"rel\"), true);\n      }\n\n    // Set Theme preference\n    } else if (target.is('#theme_pref') || target.parent().is('#theme_pref')) {\n      changeTheme();\n      event.preventDefault();\n\n    // View source for mixins & functions\n    } else if (target.attr(\"rel\") == \"view source\") {\n      $(target.attr(\"href\")).toggle();\n      event.preventDefault();\n    }\n  });\n});\n"
  },
  {
    "path": "compass-style.org/authors.yml",
    "content": "chris:\n  fullname: Chris Eppstein\n  byline_link: http://chriseppstein.github.com/\nbrandon:\n  fullname: Brandon Mathis\neric:\n  fullname: Eric M. Suzanne\n  byline_link: http://ericsuzanne.com/\nnico:\n  fullname: Nico Hagenburger\nscott:\n  fullname: Scott Davis\n"
  },
  {
    "path": "compass-style.org/config.yaml",
    "content": "base_url: http://compass-style.org\n\ntext_extensions: [ 'css', 'erb', 'haml', 'htm', 'html', 'js', 'less', 'markdown', 'md', 'php', 'rb', 'sass', 'scss', 'txt', 'xml' ]\n\noutput_dir: output\n\ndata_sources:\n  -\n    type: filesystem_unified\n    items_root: /\n    layouts_root: /\n  -\n    type: filesystem_assets\n    items_root: /assets\n    layouts_root: /assets\n\nwatcher:\n  dirs_to_watch: ['content', 'layouts', 'lib', 'assets']\n  files_to_watch: ['config.yaml', 'Rules']\n\n  notify_on_compilation_success: true\n  notify_on_compilation_failure: true\n"
  },
  {
    "path": "compass-style.org/content/.livereload",
    "content": "# Lines starting with pound sign (#) are ignored.\n\n# additional extensions to monitor\n#config.exts << 'haml'\n\n# exclude files with NAMES matching this mask\n#config.exclusions << '~*'\n# exclude files with PATHS matching this mask (if the mask contains a slash)\n#config.exclusions << '/excluded_dir/*'\n# exclude files with PATHS matching this REGEXP\n#config.exclusions << /somedir.*(ab){2,4}.(css|js)$/\n\n# reload the whole page when .js changes\n#config.apply_js_live = false\n# reload the whole page when .css changes\n#config.apply_css_live = false\n\n# wait 100ms for more changes before reloading a page\n#config.grace_period = 0.1\n"
  },
  {
    "path": "compass-style.org/content/CHANGELOG.markdown",
    "content": "---\ntitle: Compass History\ncrumb: CHANGELOG\nbody_id: changelog\nlayout: default\n---\nCOMPASS CHANGELOG\n=================\n\nUpgrading compass is pretty easy.\nDon't let all these details [scare you...](http://compass-style.org/help/tutorials/upgrading/im-scared/)\n\nThe Documentation for the [latest stable release](http://compass-style.org/docs/):\n\nThe Documentation for the [latest preview release](http://beta.compass-style.org/)\n\nEvery release contains updated caniuse data unless otherwise noted.\n\n1.0.2 (UNRELEASED)\n------------------\n\n* Handle change in Sass 3.4.2 that requires importer paths to exist.\n\n1.0.1 (08/19/2014)\n------------------\n\n* Add support for `woff2` font format.\n* Handle gradient functions when not using the compass mixins.\n\n1.0.0 (08/15/2014)\n------------------\n\n* `md5sum($file)` - new helper to compute the md5sum of a file. Can be\n  used to create sass-based asset-cache-buster implementations.\n* Fixed a bug in compass watch that caused the watcher to abort when a\n  syntax error occured.\n* Fix the broken `compass stats` command.\n* Brought back support for the original webkit gradient syntax.\n\n1.0.0.rc.1 (08/04/2014)\n-----------------------\n\n* Non-partials found in additional import paths specified in compass config are no longer compiled\n  to a subdirectory. (Issue #1737)\n* Add vendor prefixes for repeating gradients. (Issue #401)\n* The configuration adapters for compass configuration to Sass engine\n  options were moved to compass-core. (Issue #1739)\n* Handle sprite images with uppercase characters. (Issue #1740)\n* Sprite changes are not logged in quiet mode. (Issue #862)\n* Fix import-once issue with sprites. (Issue #1720)\n* Miscellaneous bug fixes.\n\n1.0.0.rc.0 (08/01/2014)\n-----------------------\n\n* The compass watcher and compiler are now built upon the Sass watcher\n  and compiler, reducing the overal complexity and amount of code that's\n  needed to be maintained.\n* The `--dry-run` option is no longer supported for any compass commands.\n* Sass 3.4 is now supported.\n* Numerous bug fixes to gradients. All current syntax is fully supported\n  and shimmed with older spec versions/vendor variants/svg when possible.\n\n1.0.0.alpha.21 (07/16/2013)\n---------------------------\n* Handle the brightness() CSS syntax, which had been broken when compass\n  defined a function by the same name.\n* Fixed incompatibilities between sass-globbing and import-once.\n*  [Numerous bug fixes](https://github.com/Compass/compass/compare/core-1.0.0.alpha.20...core-1.0.0.alpha.21)\n\n1.0.0.alpha.20 (06/27/2013)\n---------------------------\n\n*  [Numerous bug fixes](https://github.com/Compass/compass/compare/core-1.0.0.alpha.19...core-1.0.0.alpha.20)\n\n1.0.0.alpha.19 (03/12/2103)\n---------------------------\n\n* The `rem()` mixin can now handle comma-separated and nested lists\n  for the `$values` argument, e.g. `rem(background-size, (2rem, 100% 24px, auto))`.\n\n1.0.0.alpha.17 (12/20/2013)\n---------------------------\n\n* A variable `$compass-extensions` is available after importing\n  `compass/support` that is a map of extensions to their version.\n* Fixed bugs in the `browser-out-of-scope` function.\n* Update to the latest caniuse.com data.\n* Url methods will now correctly handle urls with query strings in them.\n* There are now ruby callbacks for when sourcemap files are saved.\n* calc() expressions are now handled in gradients.\n* Fix a bug in `compass --time` when writing sourcemaps.\n* Sourcemap filenames now match the convention used in Sass\n  (`<name>.css.map`) because chrome seems to require this.\n* Compass frameworks can tell compass their version using the `:version`\n  option when registering themselves via `Compass::Frameworks.register`.\n  When loading an extension from rubygems, compass will automatically\n  detect the gem version in use.\n\n\n1.0.0.alpha.16 (12/05/2013)\n---------------------------\n\n* Compass now depends the `compass-import-once` gem that implements an\n  import once behavior for the `@import` directive in Sass. This makes\n  `@import` behave how most people expect it to work. New projects will\n  automatically be set up to use this gem. Existing projects need to add\n  `require 'compass/import-once/activate'` to their configuration. More\n  details about the import once gem are available in the\n  [README](https://github.com/chriseppstein/compass/blob/master/import-once/README.md)\n* Compass now supports Sass sourcemaps. Pass the `--sourcemap` option to\n  the compile or watch commands or set `sourcemap = true` in your\n  compass configuration.\n\n0.13.alpha.8 (10/21/2013)\n-------------------------\n\n### Deprecations & Breaking changes\n\n* **Breaking Change**: The CSS3PIE module has been removed.\n* The experimental and legacy support configuration variables have been\n  removed. Vendor prefixing is now configured according to minimum\nbrowser versions and browser usage statistic thresholds. [More\ndetails](/help/documentation/tuning-vendor-prefixes/).\n* The old box module has been deprecated. Please use the new flexbox module.\n* The transform-legacy module which was deprecated in 0.12 has been removed.\n* The blueprint framework has been removed from compass. The\n  docs are now at [compass-blueprint.org](http://compass-blueprint.org)\n  and the code is maintained as [its own\n  project](https://github.com/Compass/compass-blueprint) by [Stephen\n  Way](https://github.com/stephenway). Full details can be [found on the\n  blog](/blog/2012/05/20/removing-blueprint/).\n* *alpha users only:* The input-placeholder mixin API has changed. It no longer accepts an argument.\n* *alpha users only:* The selection mixin API has changed. It no longer accepts a selector as an argument.\n* *alpha users only:* The flexbox module was completely rewritten.\n  [Documentation](/reference/compass/css3/flexbox/)\n\n### Changes\n\n* [CORE] Updated listen version\n* [HELPERS] The `elements-of-type($type)` helper now accepts a type of `text-input`.\n* [HELPERS] The `current-date()` and `current-time()` functions now have\n  reasonable default formats.\n* [HELPERS] The `current-source-file()` helper now returns the top-level sass\n  file that is being compiled instead of the file you're currently in\n  and the path is relative to your Sass directory unless you specify it\n  should be an absolute path.\n* [HELPERS] The `current-output-file()` helper now returns a path\n  relative to the css output directory unless you specify that it should\n  return an absolute path.\n* [SPRITES] added :focus support for magic selectors\n* [SPRITES] You can now set `$default-sprite-separator` or `$<map>-class-separator` to an\n  underscore if you prefer underscored class names to dashes.\n* [SPRITES] magic sprite selector file names can now use '-' or '_'\n* A new function `brightness($color)` is available when you import\n  \"compass/utilities/color/brightness\".\n  [Documentation](/reference/compass/utilities/color/brightness/).\n* The `contrast-color` function and `contrasted` mixin no longer need a\n  `$threshold` argument. Instead, the decision for which color to pick\n  is based on the brightness delta of the original color.\n\n0.13.alpha.4 (4/3/2013)\n-------------------------\n* [CORE] fixed edge case for people running `compass compile watch .`\n* [CORE] Updated compiler failure message to be more inline with what is actually failing.\n* [CSS3] New Flexbox Mixins\n\n0.13.alpha.3 (3/29/2013)\n-------------------------\n* [RUBY] Updated for ruby 2.0\n* [CORE] Removed png grid generator in favor of the css3 grid mixin.\n* [CSS3] All browser-support functions and mixins use same `-moz, -webkit, -ms, -o, -khtml, official` order.\n* [SPRITES] Removed old sprite_image function.\n* [CORE] Fixed issue with custom watchers in config file not working.\n* [CSS3] Support for new linear gradient format.\n\n0.13.alpha.2 (02/07/2012)\n-------------------------\n\n* [CORE] Removed old watcher (FSSM) and replaced with Listen.\n* [CORE] Fix damaged images when creating projects on windows.\n* [CORE] Bug fix for CSS gradient parsing.\n* [CORE] Fixed an issue where directory globbing didn't work correctly on windows.\n* [CSS3] Update selection mixin for flexibility and consistency.\n* [CSS3] Fix a bug in gradients that used the currentColor keyword\n* [CSS3] Removed the -ms prefix support from keyframe animation, the spec was approved before MS released IE10.\n* [CSS3] Improve flexibility of input-placeholder mixin so it can be used at the root of the stylesheet or with an argument for use with a selector.\n* [CSS3] Improve browser-support handling, make it easier to update quickly.\n* [CSS3] Use Sass listargs wherever multiple values are accepted.\n* [CSS3] Deprecate `column-break-[before | after | inside]` mixins, in favor of the official `break-[before | after | inside]` syntax.\n* [DOCUMENTATION] Change `log` to `logarithm` in the docs.\n* [SPRITES] Added `sprite-width` and `sprite-height` helper functions.\n* [SPRITES] Use the right directory for cleanup when `generated_images_dir` is set\n* [SPRITES] A new sass var for sprites has been created for sorting `$<name>-sort-by`\n* [Vertical Rhythm Module] Fix the Webkit establish-baseline issue by setting line-height on html in ems for all relative rhythm-units.\n* [Vertical Rhythm Module] Remove unnecessary type-checking for Sass lists.\n* [Vertical Rhythm Module] Switch to using Sass's built-in (absolute) unit conversions when possible.\n* [Vertical Rhythm Module] Added rem output with pixel fallbacks and other improvements to vertical rhythm partial.\n* [Math] Added random function for generating random numbers.\n\n0.13.alpha.0 (05/06/2012)\n-------------------------\n\n* Allow numeric sprite names when not using sprite selector generation capability.\n* Add new mixin for styling [input\n  placeholders](/reference/compass/css3/user_interface/#mixin-input-placeholder).\n* Add [css animations module](/reference/compass/css3/animation/).\n* When `$relative-font-sizing` is true, vertical-rhythm font sizes are declared in relative units throughout the document, including `establish-baseline`. This ensures that user defaults set in the browser are respected.\n\n0.12.2 (06/24/2012)\n-------------------\n\n* [Vertical Rhythm Module] Removed the `$ie-font-ratio` constant in\n  favor of a more clear `$browser-default-font-size` constant.\n* [Vertical Rhythm Module] The `establish-baseline` mixin now styles the\n  `<html>` element instead of the `<body>` element. This makes the\n  vertical rhythm module work better with `rem` based measurements.\n* [CSS3] Added 3D transform support for Mozillia, IE, and Opera.\n* [CSS3] Added `-ms` support for css3 columns.\n* [CSS3] Add support for the columns shorthand property.\n* [CSS3] Added `-ms` and `-webkit` support for CSS Regions. [Docs](/reference/compass/css3/regions/)\n* [CSS3] Added mixins for column-break properties to the columns module.\n* [CSS3] Added a css3/hyphenation module for the `word-break` and `hyphens` properties.\n* [CSS3] Made the API more consistent across the different mixins in the transitions module.\n* [CSS3] The text-shadow mixin now supports the spread parameter and it is used to progressively enhance browsers that support it.\n* [CSS3] Add a mixin for the unofficial `filter` property. [Docs](/reference/compass/css3/regions/)\n* [CSS3] Removed the `-ms` prefix for gradients and transforms.\n  Microsoft took so long to release them, that the spec was approved first.\n* [CLI] Added a `-I` option for adding sass import paths via the CLI during compilation and project set up.\n* [Configuration] For better ruby and rails integration, the `add_import_path` command now accepts\n  [Sass::Importer](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#custom_importers) objects\n  and [Ruby Pathname](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/pathname/rdoc/Pathname.html) objects.\n* Reverted the [hide-text](/reference/compass/typography/text/replacement/#mixin-hide-text) mixin to the `-9999` method. If you prefer the [Kellum method](http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/) then you need to set `$hide-text-direction` to `right` in your stylesheets.\n* `$legacy-support-for-mozilla` can be set to `false` to disable output\n  for Firefox 3.6 or earlier.\n* Cleaned up the inline-block mixin to have less output and make the vertical-alignment of that mixin configurable or even turned off. [Details](https://github.com/chriseppstein/compass/commit/84e9a684b9697d728a37abb14cb0aae2c4d2a790)\n* Output of SVG and original webkit gradients is now omitted when using\n  the degree-based linear gradient syntax.\n* Added a `--fonts-dir` configuration flag for the compass command line.\n* Added `tint()` and `shade()` color helper functions, for better ligthening/darkening of colors.\n\n0.12.1 (03/14/2012)\n-------------------\n\n* Fixed a bug in font-files mime-type detection.\n* Code cleanup and better documentation for the vertical-rhythm module.\n* Add support for installing compass on Macs using a [one-click installer](https://github.com/chriseppstein/compass/downloads).\n\n0.12.rc.2 (03/11/2012)\n----------------------\n\n### Stylesheet Changes\n\n* Improved [hide-text mixin](/reference/compass/typography/text/replacement/#mixin-hide-text) for better performance and accessibility.\n* Added [squish-text mixin](/reference/compass/typography/text/replacement/#mixin-squish-text) to hide text on inline elements.\n* Compass css3 transitions module now correctly handled transitioning of\n  prefixed properties.\n\n### Misc Changes\n* Fix the mime-type of embedded `woff` font files. Add support for Embedded OpenType fonts.\n* New math functions are now available: `e()`, `logarithm($number[, $base = e()])`, `square-root($number)`\n  and `pow($number, $exponent)`\n\n\n0.12.rc.1 (02/02/2012)\n----------------------\n\nGive warnings for users who upgrade without knowing about the compass-rails gem.\n\n0.12.rc.0 (01/31/2012)\n----------------------\n\n### Stylesheet Changes\n\n* Removed -ms prefix from box-sizing\n* Added sprite_names sass function\n* Added -ms prefix to transitions\n\n### Command Line\n\n* Added support for `--debug-info` and `--no-debug-info` to the compass compile command\n\n### Rails Integration\n\nRails projects must now use the [`compass-rails`](https://github.com/compass/compass-rails)\ngem to integrate with compass. Please read the [README](https://github.com/Compass/compass-rails/blob/master/README.md) for upgrade instructions. More information in this [blog post](/blog/2012/01/29/compass-and-rails-integration/).\n\n0.12.alpha.3 (12/23/2011)\n-------------------------\n\n* The `$round-to-nearest-half-line` config variable was added. When\n  true, the vertical rhythm module will round line heights to the\n  nearest half-line to avoid awkwardly large gaps between lines of text.\n  Defaults to false.\n* Added `reset-baseline` to the vertical rhythm module so you can force the baseline to reset.\n* Merges in the stable changes between 0.11.5 and 0.11.6.\n\n0.12.alpha.2 (11/28/2011)\n-------------------------\n\n* Bug fixes for Rails 2.x applications.\n\n0.12.alpha.1 (11/14/2011)\n-------------------------\n\n* font-files helper: Stop requiring font type when the type can be guessed from URL\n* inline-font-files: actually works now\n* Upgrade CSS3 Pie to 1.0beta5\n* log sprite generation and removal to the console\n* Added a new helper function `compass-env()` that returns the current compass environment (development, production)\n* Added the ability to inline a sprite image by setting `$<map>-inline:true` before you call `@import`\n* Removed `-khtml` prefixes by default you can still enable them by setting `$experimental-support-for-khtml:true;`\n* Improved rails 3.1 integration\n* `true` and `false` are now valid sprite names\n* Removed deprecated forms of the box-shadow, text-shadow, and transform\n  mixins.\n\n0.12.alpha.0 (8/30/2011)\n------------------------\n* Support for the rails 3.1 asset pipeline\n* Added support for diagonal, horizontal, and smart sprite layout\n* Fixed a bug with spacing in horizontal layout\n* Changed the descriptions of the sin, cos, and tan to be more descriptive\n* Fixed trig functions via issue #498\n* Fixed the default `http_path` in rails\n* Sprites can now have a `sprite_load_path` that is an array of directories that\n  contain source images for sprites handy for using sprites in extensions or gems\n* Added a new set of configuration properties for generated images.\n  `generated_images_dir`, `generated_images_path`, `http_generated_images_dir`,\n  and `http_generated_images_path` can now be set to control where generated\n  images are written and how they are served. Added a corresponding\n  `generated-image-url()` helper function. These should rarely be needed and\n  will default to your corresponding image directories and paths.\n\n0.11.8 (02/26/2012)\n-------------------\n\n* Fix a bug in gradients that used the transparent keyword\n* Add filesize to the `compass stats` output.\n\n0.11.7 (01/05/2012)\n-------------------\n\n* Update to font-face mixin to make it work on IE8.\n\n0.11.6 (12/23/2011)\n-------------------\n\n* Added `user-select` mixin to control the selection model and granularity of an element.\n  It accepts one argument (`$select`) from the following options:\n  `none` | `text` | `toggle` | `element` | `elements` | `all` | `inherit`.\n* The border-image property now takes a keyword called `fill` to\n  indicate that the image should also fill the element. If you pass the\n  `fill` keyword to the `border-image` mixin it will only be output in the\n  standard (non-prefixed) versions of the property.\n* Don't use the deprecated callback method `on_updating_stylesheet` in Sass if\n  the new version is available.\n\n0.11.5 (07/10/2011)\n-------------------\n\n* Updated the list of elements returned by the `elements-of-type()` helper.\n  It now understands `html5-block` and `html5-inline` and other types now\n  return html5 elements in them by default.\n* Fix warning logic in vertical-rhythms module.\n* Fix typo in the css3/transition module.\n\n0.11.4 (07/03/2011)\n-------------------\n\n* Vertical rhythm now supports absolute units like pixels.\n  Set `$relative-font-sizing` to `false` to enable.\n* Vertical rhythm now has a minimum padding that defaults to 2px.\n  This makes some edge cases look better.\n* New mixin `force-wrap` prevents URLs and long lines of text from breaking layouts.\n* Fix absolute path detection on windows.\n* Fix the mime type returned for inline svg images.\n* Allow multiple transitions in the CSS3 `transition` mixin.\n* The Blueprint `:focus` styles no longer clobbers cascade-based overrides unnecessarily.\n* The Blueprint grid-background vertical rhythm is now based off of $blueprint-font-size,\n  rather than a static value of 20px\n\n0.11.3 (06/11/2011)\n-------------------\n\n**Note:** Due to some internal changes to compass you may have issue with your sass cache. Run `compass clean` to clear your cache.\n\n* The `pie-clearfix` mixin has been updated. If you have to\n  support Firefox < 3.5, please update your stylesheets\n  to use `legacy-pie-clearfix` instead.\n* Added a new command: `compass clean` which removes any generated\n  css files and clears the sass cache.\n* Enable IE 10 support for flexible box with the -ms prefix.\n* A small change to how generated sprites are named for better\n  rails 3.1 compatibility.\n* Fixes for the compass --quiet mode.\n* It is now possible to generate cache buster urls that manipulate\n  the path of the image instead of the query string. This makes\n  images work better with proxies, but will require some web server\n  configuration. [Docs](/help/tutorials/configuration-reference/#asset-cache-buster)\n* Numerous small bug fixes to sprites.\n* Sprite Engines are now classes see [Docs](/help/tutorials/extending) for more information\n* Sprite classes have bee re-factored into modules for readability\n* Sprites will no longer cause `undefined method 'find' for #<Compass::SpriteMap>` when adding or removing sprite files\n\n0.11.2 (06/10/2011)\n-------------------\n* Sprites will now by default remove any old versions of the sprite. A new configuration\n  variable has been created to override this.\n* Nested sprites are now supported using globs `@import 'nested/**/*.png';`.\n* Fixed a bug that was causing sprite variable options to not get passed to the image classes.\n* Sass Colors will no longer cause an error if you use them as sprite names.\n* Added support for -ms gradients in background-image and background properties\n* Give a better error if Sass::Script::Functions.declare does not exist.\n\n0.11.1 (04/25/2011)\n-------------------\n\n* This release fixed some Gem dependency issues with Sass.\n\n0.11.0 (04/24/2011)\n-------------------\n\n### !important\n\n#### Breaking Changes & Deprecations:\n\n* Deprecated imports and APIs from v0.10 have been removed. If you are upgrading\n  from v0.8, please upgrade to v0.10 before installing v0.11.\n* Changed defaults for the box-shadow and text-shadow mixins.\n  Previously the horizontal and vertical offset were both 1, which\n  expected a top left light source. They are now set to 0 which assumes\n  a direct light source, a more generic default.\n* The linear-gradient and radial-gradient mixins have been deprecated.\n  Instead use the background-image mixin and pass it a gradient function.\n  The deprecation warning will print out the correct call for you to use.\n* Passing an argument to the `blueprint-scaffolding` mixin is not necessary\n  and has been deprecated.\n* Some blueprint color defaults now use color functions instead of color arithmetic.\n  This may result in different output for those who have color customizations.\n* The deprecated & unused arguments to the `font-face` mixin have been removed.\n* Lemonade has been merged into compass. If you've been using Lemonade, you need to\n  upgrade your sprites to use the new [Compass Sprites](/help/tutorials/spriting/).\n\n#### Dependencies\n\n* Compass now depends on Sass 3.1 which is a new stand-alone gem that has been separated\n  from Haml. **If you have Haml installed, you must upgrade it to 3.1 as well.**\n* Compass now depends on ChunkyPNG, a pure-ruby library for generating PNG files.\n* The FSSM library that used to be vendored is now upgraded and a normal gem dependency.\n  If you don't know what this means, then you don't need to care :)\n\n### New Sass Features\n\nSass 3.1 brings a ton of great new features that Compass now uses and you can too!\n\n* Proper List Support. Space and Comma separated lists used to cause values to become strings when passing them to mixins. Now the values in lists are preserved as their original types.\n* Sass-based Functions. Define your own value functions and use them anywhere.\n* Keyword Style Argument passing to Functions and Mixins. It can be hard to understand what\n  the values being passed to a mixin or function are for, use keyword style arguments to\n  make it easier to understand what's going on.\n* `@media` bubbling. Use a media declaration anywhere and it will be bubbled to the top level\n  for you.\n\nFor more information about the new Sass features, see the [Sass CHANGELOG](http://sass-lang.com/docs/yardoc/file.SASS_CHANGELOG.html).\n\n### Blueprint\n\n* Updated from blueprint 0.9 to blueprint 1.0\n  * Added .info and .alert classes to forms.css [CMM]\n  * Fixed numerous bugs in forms, including the fieldset padding bug in IE6-8 [CMM]\n  * Fixed specificity problems in typography.css and grid.css [CMM]\n  * See Lighthouse for more bug fixes\n  * Full [blueprint changelog][blueprint_10_change]\n  * If for some reason you'd like to stay on the older version of blueprint you can run\n    the following command in your project before you upgrade (or after temporarily downgrading):\n    `compass unpack blueprint`\n* [Blueprint] Blueprint no longer adds `!important` to the widths of `input`, `textarea`,\n  and `select` form fields, so compass no longer defaults to using `!important` in those cases.\n  If you were relying on this behavior, you may need to adjust your stylesheets accordingly.\n* [Blueprint] Added a new sass function called span($n) to the grid module which replaces\n  the now **deprecated span mixin**. If you are using this mixin, please replace it with:\n  `width: span($n)`.\n\n### Spriting Support\n\n* Compass now has a world-class spriting system after merging with [Lemonade][lemonade].\n  See the [spriting tutorial](/help/tutorials/spriting/) for more information.\n* The [old sprite module](/reference/compass/utilities/sprites/sprite_img/) is still available\n  for working with hand-generated sprite maps.\n* The Sprite internals are abstracted allowing for different engines. By default\n  compass uses ChunkyPNG which only supports PNG files, so some users might prefer\n  ImageMagic which is available via a [plugin](#XXXLINKME).\n* [Magic Selectors](/help/tutorials/spriting/#magic-selectors) make it simple to define\n  sprites that work with user interaction pseudo classes like `:hover`, `:active`, etc.\n\n### CSS3 Module v2.0\n\nOur CSS3 module makes writing CSS3 today almost as easy as it will be when all\nthe browsers officially support the new features. The second version of the\ncompass CSS module brings the API up to date with developments over the past\n6 to 9 months of browser changes and more closely matching the most recent CSS\nspecifications. [Upgrade guide](/help/tutorials/upgrading/antares/). Summary of changes.\n\n* Support for multiple [box shadows](/reference/compass/css3/box_shadow/)\n  and multiple [text shadows](/reference/compass/css3/text-shadow/)\n* Support for [2d and 3d transforms](/reference/compass/css3/transform/)\n* Opt-in [SVG support](/reference/compass/support/#const-experimental-support-for-svg)\n  for gradients in opera and IE9. Set `$experimental-support-for-svg : true` in your\n  stylesheet to enable it.\n* To generate a simple linear gradient in IE6 & 7, you can now use\n  the [filter-gradient mixin](/reference/compass/css3/images/#mixin-filter-gradient).\n* New [images module](/reference/compass/css3/images/) makes gradients simple for\n  all properties that support them using the CSS3 standard syntax.\n* Compass now has opt-in support for the CSS3 PIE library. [Docs](/reference/compass/css3/pie/).\n* Added optional support for IE8 with `$legacy-support-for-ie8` which defaults to true.\n* Updated the `opacity` and `filter-gradient` mixins to make IE's hacky DirectX filters\n  optional based on Compass's legacy support settings.\n* A new CSS3 mixin for [appearance](/reference/compass/css3/appearance/) was added.\n* The font-face mixin has been updated again with the [syntax recommendations\n  from font-spring](http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\n  The API has not changed.\n* Added support for the new webkit gradient syntax that matches the css3 specification.\n  Support for older webkit browsers remains enabled at this time.\n  To disable it, set `$support-for-original-webkit-gradients` to false.\n\n### Helper Functions\n\n* `linear-gradient()` & `radial-gradient()` helpers now intercept standard css\n  functions and parse them into Sass Literals. These work with new vendor helpers\n  (`-moz()`, `-webkit`, `-o`, `-ie`, and `-svg` (yes, we know svg is not a vendor))\n  to return specific representations of the linear & radial gradients. The\n  `prefixed()` function will check a value to see if it has a certain\n  vendor-specific representation.\n* New color helpers: `adjust-lightness`, `adjust-saturation`, `scale-lightness`,\n  and `scale-saturation` make it easier to construct apis that manipulate these\n  color attributes.\n* The `elements-of-type()` helper now returns html5 elements when the display is `block`\n  and also will return only html5 elements for `elements-of-type(html5)`\n* Compass now provides several helper functions related to trigonometry.\n  There's no practical use, but it's hoped that users will find fun things to\n  do with these for technology demonstrations:\n  * `sin($number)` - Takes the sine of the number.\n  * `cos($number)` - Takes the cosine of the number.\n  * `tan($number)` - Takes the tangent of the number.\n  * `pi()` - Returns the value of π.\n  If you provide a number with units of `deg` then it will return a unitless number\n  after converting to radians. Otherwise, it assumes the number is a radian length\n  measure and passes the units along to the result.\n* `ie-hex-str($color)` returns a #AARRGGBB formatted color suitable for\n  passing to IE filters.\n* Compass has added a number of new helper functions that begin with\n  `-compass`, helpers that begin with `-compass` should be considered \"private\"\n  and are not to be used.\n* A third argument is now available on the `image-url()` helper. When `true` or\n  `false`, it will enable/disable the cache buster for a single image url. Or when\n  a string, will be the cache buster value that is used.\n\n### Configuration Files\n\n* Added a new configuration property to disable sass warnings: `disable_warnings`\n* New infrastructure for supporting experimental css3 functions that are prefixed but have\n  the same syntax across all browsers. It is now possible to configure which browsers\n  support which experimental functions outside of the compass release cycle.\n  For details, see the [cross browser helpers](/reference/compass/helpers/cross-browser/).\n* The options passed to the CLI can now be inspected within the compass configuration file.\n  The CLI options will still override the values set within the config file, but they might\n  inform other values. For instance `compass compile -e production` will have the environment\n  parameter preset to `:production` so that you can set other values in the project accordingly.\n* Added the ability to piggy back on compass's watcher within your configuration file.\n  See the [configuration reference](/help/tutorials/configuration-reference/) for details.\n* You can now register callbacks for compilation events so that you can take\n  custom actions when they occur. For instance, you might want to notify\n  Growl when a stylesheet compilation error occurs.\n\n### New Compass Typography Module\n\n* Some text-based mixins have been moved from utilities to the new\n  typography module. The old imports are deprecated now.\n  Affected modules: `utilities/links`, `utilities/lists`, and `utilities/text` and\n  their sub-modules.\n* There is a new typography module:\n  [Vertical Rhythm](/reference/compass/typography/vertical_rhythm/).\n  This makes it easier to align the typography of your page to a common rhythm.\n\n### Compass Layout Module\n\n* New layout mixins for absolute positioning: stretch, stretch-x, stretch-y\n* There is a new mixin for creating\n  [pure-css grid backgrounds](/reference/compass/layout/grid_background/)\n  for verifying grid alignment for both fixed and fluid grids.\n\n### Compass Utilities\n\n* A new mixin `reset-float` is available in the [float module](/reference/compass/utilities/general/float/#mixin-reset-float) that makes it easier to reset the floats introduced from that module.\n* A new module has been added to create readable text against an arbitrary background color based on the lightness of the background: [compass/utilities/color/contrast](/reference/compass/utilities/color/contrast/).\n* The comma-delimited-list has been renamed to delimited-list and\n  generalized to accept a delimiter which defaults to a comma.\n  The old function continues to exist, but is deprecated.\n\n### Command Line\n\n* Add a `--time` option to the compile and watch commands. This will print out\n  the time spent compiling each sass file and a total at the end.\n\n### Rails\n\n* In rails 3, there's no need for an initializer. Instead we use a\n  Railtie. If you have one, please remove it.\n* We now default to app/stylesheets for sass files and public/stylesheets for\n  css files -- though they can still be changed after installation or on the\n  command line during project initialization.\n* Compass is now a gem plugin in a rails environment.\n* In a rails3 environment the compass configuration can now be\n  changed without restarting the rails server process.\n\n### Extensions\n\n* Compass now allows ERB processing of non all non-binary filetypes during\n  extension installs.\n* Extensions that are installed into `~/.compass/extensions` will be automatically\n  available to all your compass projects.\n* Created an official API to add configuration options to compass.\n  [More information](/help/tutorials/extending/).\n\n### Miscellaneous\n\n* We have a new website design from [Brandon Mathis][brandon]\n* Compass now officially supports the following ruby interpreters:\n  jruby, ruby 1.8.7, ruby 1.9.2, ree, and rubinius.\n\n0.10.7 (UNRELEASED)\n-------------------\n* [Command Line] compass config -p <property> -- will now print out the configuration value\n  for that property for the current project\n* [CSS3] Bug fix: In webkit, when the last gradient color stop was a percent less than 100%,\n  the intermediate values were being scaled to that value.\n* [Command Line] You can now pass --no-line-comments to the Compass command line to disable\n  line comments.\n* [Configuration] Make the compass configuration file more self documenting by adding comments\n  for `preferred_syntax`, `output_style`, and `line_comments`.\n* Work around IE compatibility issues with the :last-child selector.\n  [Commit](http://github.com/jdsiegel/compass/commit/c1fb764dba9c54cc5d02f2f7de213fb21ac6ca09).\n* [Command Line] Only the action is colorized in command line output now.\n* [Command Line] Compass Validator has been upgraded and fine-tuned. It is now using the\n  \"css3\" profile to validate and provides a more consistent UI with other compass commands.\n  To upgrade: `gem install compass-validator`\n* [CSS3] The box-shadow `$spread` value now defaults to using the browser default instead of 0.\n  Set $default-box-shadow-spread to 0 if you prefer the older behavior. Since the browser is supposed\n  to default to 0, you should see no change except less CSS output.\n* [CSS3] The output order of the `box-shadow` mixin now matches the W3C specification.\n  The color and inset values used to be swapped.\n\n0.10.6 (10/11/2010)\n-------------------\n\n* HTML5 reset includes box-model reset for newer browsers.\n* Fix encoding issue for ruby 1.9 users of the font-face mixin.\n* Make it easier to disable the asset cache buster: `asset_cache_buster :none`\n* Can now set `$padding` to `false` to make the `horizontal-list` mixin skip the\n  padding properties.\n* It is now possible to disable support for legacy IE browsers.\n  See [the docs](/reference/compass/support/) for more information.\n\n0.10.5 (08/29/2010)\n-------------------\n\n* The [HTML5 Reset mixin][html5-reset] now resets the following new elements:\n  `canvas`, `details`, `figcaption`, `hgroup`, `menu`, `summary`\n* A new Utility mixin has been added: [inline-block-list][inline-block-list].\n* Compass projects can now (as was always intended) use paths outside of the project directory\n  for css, images, fonts, etc by configuring those locations using `xxx_path` instead of\n  `xxx_dir`. For instance: `css_path = \"/var/www/docroot/css\"`. It is recommended\n  to set the corresponding `http_xxx_path` when you do this, for instance:\n  `http_stylesheets_path = \"/css\"`. On the command line, all absolute urls are\n  treated as paths instead of relative directories so\n  `--css-dir /var/www/docroot/css` will set `css_path`. Should both a directory\n  and a path be specified, the path will override the corresponding directory.\n* A new command is available that will unpack an extension from the system location into\n  your extensions folder. Run `compass help unpack` for more information.\n\n0.10.4 (8/08/2010)\n------------------\n\n* [Rails] Fixed a bug introduced in 0.10.3 that caused rails applications using the old configuration file (config/compass.config) to break.\n* [Extensions] Make it easier to create manifest files by allowing template files to be discovered. See the Manifest Declarations section of [extensions tutorial](http://compass-style.org/help/tutorials/extensions/) for details.\n* [Rails] Don't install configuration files when installing extensions.\n* [Compass Core] All url helpers now accept a second argument that when true will cause only the path to be emitted. This allows the url helpers to be used with IE filters.\n\n0.10.3 (8/1/2010)\n-----------------\n\n### !important\n\nAll rails users should run the following command:\n\n    compass init rails --prepare\n\nThis will update your compass initializer file.\n\n### Compass Core\n\n* Add missing clearfix import to horizontal-list.\n* Emit less css for inline lists with the same result.\n* New helper `opposite-position($position)` returns the opposite value of a position. [Documentation](http://compass-style.org/reference/compass/helpers/constants/)\n* Allow horizontal lists to be floated to the right.\n* Bugfix for inline-font-files helper.\n* `+font-face` mixin no longer uses `$postscript` name or `$style` type variables, in favor of the Paul Irish [smiley bulletproof technique](http://paulirish.com/2009/bulletproof-font-face-implementation-syntax/). Older declarations will still work, but will not apply the variables and will display a deprecation warning.\n* `+box-shadow` now supports `$spread` length and `$inset` declarations.\n* The gradient mixins output official w3c declarations along with the `-webkit` and `-moz` prefixed versions. The official code is based on the w3c spec and is nearly ideantical to the mozilla version, although it is currently not supported by any browser.\n* `+opacity` no longer uses any prefixed variations, as IE uses `filter` and\n  all other modern browsers support the official spec or nothing at all.\n* Support for specifying horizontal and vertical radii for the shorthand border-radius property.\n* The `has-layout` mixin now uses pixels instead of ems to work around an opera bug.\n\n### Blueprint\n* Two colors used in typography can now be customized.\n* Support for inputs of type email.\n\n### Extensions\n* Extensions can now create empty directories with the `directory` directive. [Docs](http://compass-style.org/help/tutorials/extensions/).\n* It's now easier to load extensions from a configuration file using the `load` and `discover` directives.\n\n### Rails\n\nAs stated above, all rails users should run the following command:\n\n    compass init rails . --prepare\n\nThis will fix a bug in the rails initializer that caused compass extensions to not be recognized when placed into the `vendor/plugins/compass_extensions` directory. It will also make sure that future bugs in the boot process won't require an end-user action to fix.\n\n\n### Contributors:\n\n* [Milo Winningham](http://github.com/quadule)\n* [jonathanpberger](http://github.com/jonathanpberger)\n* [Stephan Kaag](http://github.com/stephankaag)\n\n0.10.2 (May 31, 2010)\n---------------------\n\nThis is a bug fix release. [Details on Github.](http://github.com/chriseppstein/compass/compare/v0.10.1...v0.10.2)\n\n0.10.1 (May 15, 2010)\n---------------------\n\n* Fixed a regression in the Blueprint module, the blueprint reset\n  was no longer automatically applying the reset styles. This behavior\n  is restored in this release. If you `@import blueprint/reset` and\n  then apply the reset mixin yourself, you should remove the mixin\n  call or change your import to `blueprint/reset/utilities`.\n* Added a subcommand for emitting sass imports for the sass CLI.\n* Added a subcommand for listing the available frameworks.\n* Fixed a number of bugs related to Sass & Rails integration\n* Fixed some documentation issues in the command line and on the website.\n\n0.10.0 (May 10, 2010)\n---------------------\n\n### Gem Location\n\nThe compass gem is now (and has been for some time) hosted on [rubygems.org](http://rubygems.org). If you have an old version\ninstalled from github, please remove it:\n\n    sudo gem uninstall chriseppstein-compass\n\n### Sass 3:\n\n* Compass now depends on Sass 3 -- Please be prepared to upgrade.\n  Things won't break but you'll have a lot of deprecation warnings.\n  Upgrading is pretty easy thanks to the `sass-convert` tool. See the\n  [Sass Changelog](http://sass-lang.com/yardoc/file.SASS_CHANGELOG.html)\n  for more information.\n* All compass stylesheets are now written in the SCSS syntax,\n  if you import compass framework stylesheets with an explicit\n  `.sass` extension, then you'll receive deprecation warnings\n  directing you to update your stylesheets.\n* A new command line switch `--syntax` (or `-x`) has been added\n  to commands that install stylesheets into your project that\n  allows you to select the syntax to use (scss or sass)\n* A new configuration option `preferred_syntax` now exists\n  and defaults to `:scss`. Please update your project's configuration\n  file with `preferred_syntax = :sass` if you prefer to use the\n  indentation-based syntax.\n* You may silence deprecation warnings by adding\n  `sass_options = {:quiet => true}` to your configuration.\n\n### Command-Line:\n\n* The compass command-line tool has been re-written to allow be easier to\n  use and be more flexible. The old command line is still supported at\n  this time. \"compass help\" will get you started on using the new\n  command line syntax.\n* Allow specification of a height for the grid image\n* For the truly hardcore compass users, you may now create a\n  compass project using \"compass create my_project --bare\"\n  and you'll have a completely bare project created for you with no\n  sass files provided for you.\n* Get stats on your compass project with \"compass stats\". You'll\n  need to install the \"css_parser\" ruby gem to get stats on your\n  css files.\n* Command line switch (--boring) to turn off colorized output.\n* Color any output from the `Sass::Engine` red during compilation.\n* If you only want to compile certain files, you can now\n  specify them when invoking compass compile. E.g. `compass compile src/foo.sass`\n\n### Configuration:\n\n* The entire configuration infrastructure has been re-written to make it\n  easier to support the various sources of configuration data (project type,\n  config file, command line, and hard coded defaults)\n* Whether to generate relative links to assets is now controlled by a\n  separate boolean configuration flag called `relative_assets` in the\n  configuration file and `--relative-assets` on the command line.\n  Setting `http_images_path` to `:relative` is deprecated.\n* You may now configure the http locations for your project by simply setting\n  `http_path` for the top level path of the project. You\n  may also set `http_images_dir`, `http_stylesheets_dir`, and\n  `http_javascripts_dir` relative to the `http_path` instead of\n  setting the absolute `http_XXX_path` counterparts.\n* You may now configure the fonts directory for your project (fonts_dir).\n  By default, for standalone projects, it is the \"fonts\" subdirectory of\n\tyour css directory. Rails projects will default to \"public/fonts\".\n* The sass cache location can now be set in the compass config\n  file using the `cache_dir` property and the cache can be disabled by setting\n  `cache = false`.\n* In your configuration file, setting `http_images_path` to `:relative` is\n  deprecated in favor of setting `relative_assets` to `true`\n\n### Rails:\n\n**IMPORTANT:** Existing rails projects _must_ change their compass initializer file to:\n\n    require 'compass'\n    rails_root = (defined?(Rails) ? Rails.root : RAILS_ROOT).to_s\n    Compass.add_project_configuration(File.join(rails_root, \"config\", \"compass.rb\"))\n    Compass.configure_sass_plugin!\n    Compass.handle_configuration_change!\n\n* The rails template has been updated to use the latest haml and compass versions.\n* Compass now supports Rails 3, but asset_host and cache_buster integration is disabled.\n* When configuring Sass during initialization,\n  Compass now passes the template locations as an array of tuples\n  instead of as a hash. This preserves ordering in all versions\n  of ruby and ensures that the deprecated imports do not take precedence.\n\n### Compass Core:\n\n* A new helper function `stylesheet-url(path)` can now be used to refer\n  to assets that are relative to the css directory.\n* Compass sprite mixins are now more flexible and feature rich.\n* Fixed the `append-selector` function to allow comma-delimited selectors\n  for both arguments instead of just the first\n* There is no longer any outline on unstyled links in the :active and :focused states.\n* New CSS3 Compatibility Mixins. You can import them all with `@import compass/css3.sass`\n  Read the [documentation][http://compass-style.org/reference/compass/css3/].\n* The import for `+inline-block` has moved from \"compass/utilities/general/inline_block\"\n  to \"compass/css3/inline-block\".\n* The import for `+opacity` has moved from \"compass/utilities/general/opacity\"\n  to \"compass/css3/opacity\"\n* Note: If you are using the `+opacity` or `+inline-block` mixins,\n  you may need to update your imports.\n* `+min-height`, `+min-width`, and `+bang-hack` mixins in the\n  compass/utilities/general/min.sass module. (Credit: [Adam Stacoviak][adamstac])\n* Split out `+hide-text` as its own mixin. (Credit: [Andrew Vit][avit])\n* Support :first-child and :last-child pseudo selectors for +horizontal-list. (Credit: Cody Robbins)\n* Added new helper functions: `image_width(\"path/to/image.png\")` & `image_height(\"path/to/image.png\")` that return the size in pixels. (Credit: Deepak Jois & Richard Aday)\n* The `pretty-bullets` mixin will now infer the image dimensions by\n  reading the image file if the image dimensions are not provided.\n* In addition to installing the `binding.xml`, the configuration constant\n  `$use-mozilla-ellipsis-binding` must now be set to `true`\n  to support any version of mozilla less than 3.6 in the `+ellipsis` mixin.\n\n### Blueprint:\n\n* The useless blueprint \"modules\" folder will be removed. Please update your\n  blueprint imports by removing the modules folder. Deprecation warnings will be\n  emitted if you use the old imports.\n* Blueprint mixins that used to accept a \"body selector\" argument, are now\n  deprecated, instead you should pass `true` to them and mix them into\n  the selector of your choice.\n* Make the primary blueprint mixins easier to use by allowing them to be\n  nested when passing true as the first argument.\n  The old approach of passing a selector as the first argument is now deprecated\n  in favor of a simple flag to indicate nesting or not.\n* Take margins into account in liquid grid. (Credit: Christoffer Eliesen)\n\n### YUI:\n\n* YUI was upgraded to 2.7.0\n* Yahoo has deprecated the YUI CSS framework, as such YUI has been extracted to a plugin.\n  If you use it, please [install it](http://github.com/chriseppstein/yui-compass-plugin).\n\n### Extensions:\n\n* Extensions can now be installed locally by unpacking them into a project's\n  \"extensions\" directory. Rails projects use \"vendor/plugins/compass/extenstions\".\n* Extensions can deliver html to projects if they like. The html can be in\n  haml and will be transformed to html and can contain inline, compass-enabled\n\tsass.\n* All files can be processed using ERB before being copied into the user's\n  project.\n* Compass extensions can now add support for other application frameworks.\n  These extensions can help compass understand the project structure of that\n  framework as well as provide runtime integration for ruby-based apps.\n  Contact me if you plan to do this -- the first couple times may be a little\n  rough.\n* Compass extensions can now add new command line commands. Contact me if you\n  plan to do this -- the first couple times may be a little rough.\n* Extensions can now provide help documentation just after a project is\n  created and on demand when the user uses the command line help system.\n  This can be done via the manifest file or by adding a USAGE.markdown file\n  at the top level of the framework template.\n\n### Miscellaneous:\n\n* Lot of new docs can be found at: [http://compass-style.org/](http://compass-style.org/).\n* The compass configuration object is no longer a singleton, this makes it\n  possible for other ruby software to manage multiple compass projects at a\n  time.\n* Compass no longer requires rubygems in order to work, this is a ruby\n  best-practice.\n* The command line tool is now tested using the cucumber testing framework.\n* Removed support for the rip package manager.\n* Removed the dependency on RMagic for grid image generation.\n  (Credit: [Richard Wöber][der-rich])\n* The `unobtrusive-logo` mixin is deprecated and will be removed.\n  If you use this, please move the source to your project.\n\n0.8.17 (September 24, 2009)\n---------------------------\n\n* The enumerate function now accepts an optional fourth parameter that specifies the separator to be used.\n  Enables fixing a bug in the Compass 960 Plugin.\n\n0.8.16 (September 12, 2009)\n---------------------------\n\n* Fixed a bug in compass that assumed compass extensions would provide stylesheets.\n\n0.8.15 (September 5, 2009)\n--------------------------\n\n* Upgrade the FSSM library to 0.0.6 to fix bugs on windows.\n\n\n0.8.14 (September 2, 2009)\n--------------------------\n\n* Upgrade the FSSM library to 0.0.4 to fix bugs and enable FS Events on Mac OS.\n\n0.8.13 (August 30, 2009)\n------------------------\n\n* [Blueprint] Mixins have been added for these as +prepend-top and +append-bottom and grid classes will be generated by +blueprint-grid.\n* [Command Line] The watch mode has been re-implemented to use the FSSM library by Travis Tilley. OSX users will\n  now have support for filesystem monitoring. Fixes an infinite looping bug that occured with syntax users.\n\n0.8.12 (August 22, 2009)\n------------------------\n\nBug Fix Release:\n\n* [Compass Core] Bug fix to sprites: fixed width and height assignments for x and y position variables\n* Ruby 1.9.1 fix: binding for parse_string\n* [Rails] Don't suggest creating a stylesheet link to partials.\n\n\n0.8.10 (August 16, 2009)\n------------------------\nBug Fix Release:\n\n* Write files in binary mode to avoid data corruption when installing images on windows.\n  Fixes [Issue #39](http://github.com/chriseppstein/compass/issues/#issue/39)\n\n0.8.9 (August 9, 2009)\n----------------------\nBug Fix Release:\n\n* [Blueprint] The default screen.sass generated invalid selectors due to improper nesting. A better fix is coming in the next release.\n\n0.8.8 (July 21, 2009)\n---------------------\n\nBug Fix Release:\n\n* [Compass Core] Fixed a bug in alternating_rows_and_columns. Improper nesting caused some styles to be improperly rendered.\n  [Commit](http://github.com/chriseppstein/compass/commit/e277ed2cd3fded0b98ddaa87fc4d3b9d37cb7354)\n* [YUI] Fixed a bug in yui grids where the .first div wouldn't get the right styles in some rare cases due to incorrect nesting.\n  [Commit](http://github.com/chriseppstein/compass/commit/4bfcef4f376ee6e5d5a2b47419d2f21ef4c6eff8)\n\n\n0.8.7 (July 09, 2009)\n---------------------\n\nBug Fix Release:\n\n* Load haml-edge only if it's all new and shiny. Closes GH-26.\n  [Commit](http://github.com/chriseppstein/compass/commit/59a6067b3a67a79bfd9a5ce325fc1be4bb6c9e78)\n* [Blueprint] Added more descriptive comments to the Blueprint IE template.\n  [Commit](http://github.com/chriseppstein/compass/commit/8684966be1e8166a986ae81abd3daf6c44ed4f94)\n* [Rails] Fixed a bug in rails integration if the request is not set on the controller.\n  [Commit](http://github.com/chriseppstein/compass/commit/7fba6028d8073a9124a6505aab9246b5b459db34)\n* [Blueprint] Fixed a bug in the calculations for the +colborder mixin. Closes GH-25.\n  [Commit](http://github.com/chriseppstein/compass/commit/d2b1370c80a32f70ae6ec94126b737f4f0fc0851)\n\n0.8.6 (July 08, 2009)\n---------------------\n\n### Rails\n\n* The rails installer now correctly references the haml 2.2 dependency.\n  [Commit](http://github.com/chriseppstein/compass/commit/85bb337f50a3a3dfaafa2820d5463f7296140c9e)\n  by [Filip Tepper][filiptepper].\n* When installing into a new rails project, set the http paths correctly for stylesheets and javascripts\n  in the configuration file.\n  [Commit](http://github.com/chriseppstein/compass/commit/94e9696b30a9a9fd750c45e6fe3c2bc93eba506a)\n* Fixed a bug in asset hosts support when compiling outside the context of a controller.\n  [Commit](http://github.com/chriseppstein/compass/commit/6b8bbd22b13ef4c329777913a633948e66e3da99)\n\n### Command Line\n\n* Fixed a bug that caused the output after installing to not display the conditional comments.\n  [Commit](http://github.com/chriseppstein/compass/commit/48a0356ad8bc7b965e64f82498a9adcc1872abad)\n\n### Compass Core\n\n* Fixed a copy & paste error in image_url() that caused the http_images_path to not get picked up unless the\n  http_stylesheets_path was also set.\n  [Commit](http://github.com/chriseppstein/compass/commit/b7a9772efb89b2b882d3fafe02813c0fc650719a)\n\n0.8.5 (July 06, 2009)\n---------------------\n\nThe Compass::TestCase class now inherits from ActiveSupport::TestCase if it exists.\n[Commit](http://github.com/chriseppstein/compass/commit/71d5ae8544d1c5ae49e28dcd6b3768fc39d7f01c)\n\n0.8.4 (July 06, 2009)\n---------------------\n\nFixed a bug in rails integration introduced in 0.8.3.\n\n0.8.3 (July 06, 2009)\n---------------------\n\nNote: Compass now depends on the stable release of haml with version 2.2.0 or greater.\n\n### Compass Core\n\n* A new helper function `stylesheet_url(path)` can now be used to refer to assets that are relative to the css directory.\n  [Commit](http://github.com/chriseppstein/compass/commit/ff5c8500144272ee2b94271b06cce1690cbbc000).\n* Cross browser ellipsis mixin is now available. Use `compass -p ellipsis` to install it into your project since it\n  requires some additional assets.\n  [Commit](http://github.com/chriseppstein/compass/commit/3d909ceda997bdcde2aec09bd72e646098389e7d).\n\n### Blueprint\n\n* The +colruler mixin now accepts an argument for the color.\n  [Commit](http://github.com/chriseppstein/compass/commit/a5393bbb7cd0941ab8add5be188aea1d6f9d4b00)\n  by [Thomas Reynolds][tdreyno].\n\n### Extensions\n\n* A bug was fixed related to how javascript installation as part of an extension manifest.\n  [Commit](http://github.com/chriseppstein/compass/commit/a5393bbb7cd0941ab8add5be188aea1d6f9d4b00)\n  by [dturnbull][dturnbull].\n* When installing a file, the :like option can now be set to have it installed into the\n  same location as what it is like. E.g. `file 'foo.xml', :like => :css` will install\n  the foo.xml file into the top level of the project's css directory.\n  [Commit](http://github.com/chriseppstein/compass/commit/21cfce33db81e185ce5517818844a9849b5a836e).\n\n### Configuration\n* Setting `http_images_path` to `:relative` is now **deprecated**. Instead, please set `relative_assets` to\n  `true`.\n  [Commit](http://github.com/chriseppstein/compass/commit/956c437fe9ffaad08b6b34d91b6cfb80d6121a2f).\n* New configuration option `http_path` can be used to set the project's path relative to the server's root.\n  Defaults to \"/\". The http paths to images, stylesheets, and javascripts are now assumed to be relative to that\n  path but can be overridden using the `http_images_path`, `http_css_path`, `http_javascripts_path`.\n  [Commit](http://github.com/chriseppstein/compass/commit/6555ab3952ae37d736d54f43ee7053c2a88f4a69).\n\n### Command Line\n\n* A new command line option `--relative-assets` can be used to cause links to assets generated\n  via compass helper functions to be relative to the target css file.\n  [Commit](http://github.com/chriseppstein/compass/commit/956c437fe9ffaad08b6b34d91b6cfb80d6121a2f).\n\n0.8.2 (July 04, 2009)\n---------------------\n\nFixed a bug that caused touch to fail on windows due to open files. (Contributor: Joe Wasson)\n\n0.8.1\n-----\n\nFixed some build issues and a bug in the rewritten --watch mode that caused changes to partials to go unnoticed.\n\n0.8.0\n-----\n\n### Rails\n\n* image_url() now integrates with the rails asset handling code when\n  stylesheets are generated within the rails container.\n  **This causes your rails configuration for cache busting and asset hosts\n  to be used when generating your stylesheets**. Unfortunately, all\n  that code runs within the context of a controller, so the stylesheets\n  have to be generated during first request to use this functionality. If you\n  need to compile stylesheets offline, use the compass configuration file to set\n  the <code>asset_host</code> and <code>asset_cache_buster</code>.\n  [Commit](http://github.com/chriseppstein/compass/commit/998168160b11c8702ded0a32820ea15b70d51e83).\n\n* An official Rails template for Compass is now [provided][rails_template].\n  [Commit](http://github.com/chriseppstein/compass/commit/f6948d1d58818ef8babce8f8f9d775562d7cd7ef)\n  by [Derek Perez][perezd].\n\n### Blueprint\n\n* The Blueprint port has been upgraded to match Blueprint 0.9. The following changes were made as part\n  of that project:\n  * Removed body margins from blueprint scaffolding by default.\n    The old body styles can be reinstated by mixing +blueprint-scaffolding-body into your body selector(s).\n    [Commit](http://github.com/chriseppstein/compass/commit/45af89d4c7a396fae5d14fab4ef3bab23bcdfb6a)\n    by [Enrico Bianco][enricob].\n  * A bug in the calculations affecting the +colborder mixin has been fixed.\n    [Commit](http://github.com/chriseppstein/compass/commit/4b33fae5e5c5421580ba536116cb10194f1318d1)\n    by [Enrico Bianco][enricob].\n    Related [commit](http://github.com/chriseppstein/compass/commit/0a0a14aab597d2ec31ff9d267f6ee8cfad878e10).\n  * Blueprint now has inline form support. Mix +blueprint-inline-form into a form selector to make it inline.\n    [Commit](http://github.com/chriseppstein/compass/commit/56c745b939c763cfcc5549b54979d48ab1309087)\n    by [Enrico Bianco][enricob].\n  * Please update the conditional comment that surrounds your IE stylesheet to use \"lt IE 8\" as the condition\n    as these styles are not needed in IE8. New blueprint projects will now use this conditional as their default.\n    [Commit](http://github.com/chriseppstein/compass/commit/77f6e02c0ec80d2b6fd19e611ced02be003c98ae)\n    by [Enrico Bianco][enricob].\n  * Explicitly define image interpolation mode for IE so that images aren't jagged when resizing.\n    [Commit](http://github.com/chriseppstein/compass/commit/63075f82db367913efcce5e1d0f5489888e86ca4)\n    by [Enrico Bianco][enricob].\n\n* When starting a new project based on Blueprint, a more complete screen.sass file will be\n  provided that follows compass best practices instead of matching blueprint css exactly. A\n  partials/_base.sass file is provided and already set up for blueprint customization.\n  [Commit](http://github.com/chriseppstein/compass/commit/11b6ea14c3ee919711fa4bdce349f88b64b68d51)\n\n* The sizes and borders for form styling can now be altered via mixin arguments.\n  [Commit](http://github.com/chriseppstein/compass/commit/b84dd3031b82547cff8e1ef1f85de66d98cd162b)\n  by [Thomas Reynolds][tdreyno].\n\n* Grid borders can now be altered via mixin arguments.\n  [Commit](http://github.com/chriseppstein/compass/commit/0a0a14aab597d2ec31ff9d267f6ee8cfad878e10)\n  by [Thomas Reynolds][tdreyno].\n\n* The reset file for blueprint has moved from compass/reset.sass to blueprint/reset.sass. Please\n  update your imports accordingly. Also note that some of the reset mixin names have changed\n  (now prefixed with blueprint-*).\n  [Commit](http://github.com/chriseppstein/compass/commit/2126240a1a16edacb0a758d782334a9ced5d9116)\n  by [Noel Gomez][noel].\n\n### Compass Core\n\n* **Sprites**. A basic sprite mixin is now available. Import compass/utilities/sprites.sass and use the +sprite-img\n  mixin to set the background image from a sprite image file. Assumes every sprite in the sprite image\n  file has the same dimensions.\n  [Commit](http://github.com/chriseppstein/compass/commit/1f21d6309140c009188d350ed911eed5d34bf02e)\n  by [Thomas Reynolds][tdreyno].\n\n* **Reset**. The compass reset is now based on [Eric Meyer's reset](http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/).\n  which makes no attempt to apply base styles like the blueprint reset does. **Existing compass projects\n  will want to change their reset import to point to blueprint/reset.sass** -- which is where the old\n  default reset for compass projects now lives -- see the blueprint notes above for more information.\n  [Commit](http://github.com/chriseppstein/compass/commit/2126240a1a16edacb0a758d782334a9ced5d9116)\n  by [Noel Gomez][noel].\n\n* A bug was fixed in the tag_cloud mixin so that it actually works.\n  [Commit](http://github.com/chriseppstein/compass/commit/be5c0ff6731ec5e0cdac73bc47f5603c3db899b5)\n  by [Bjørn Arild Mæland][Chrononaut].\n\n### Sass Extensions\n\n* The <code>inline_image(image_path)</code> function can now be used to generate a data url that embeds the image data in\n  the generated css file -- avoiding the need for another request.\n  This function works like <code>image_url()</code> in that it expects the image to be a path\n  relative to the images directory. There are clear advantages and disadvantages to this approach.\n  See [Wikipedia](http://en.wikipedia.org/wiki/Data_URI_scheme) for more details.\n  NOTE: Neither IE6 nor IE7 support this feature.\n  [Commit](http://github.com/chriseppstein/compass/commit/5a015b3824f280af56f1265bf8c3a7c64a252621).\n\n### Configuration\n\n* **Asset Hosts**. You can now configure the asset host(s) used for images via the image_url() function.\n  Asset hosts are off unless configured and also off when relative urls are enabled.\n  [Commit](http://github.com/chriseppstein/compass/commit/ef47f3dd9dbfc087de8b12a90f9a82993bbb592e).\n  In your compass configuration file, you must define an asset_host algorithm to be used like so:\n      # Return the same host for all images:\n      asset_host {|path| \"http://assets.example.com\" }\n      # Return a different host based on the image path.\n      asset_host do |path|\n        \"http://assets%d.example.com\" % (path.hash % 4)\n      end\n\n\n* **Configurable Cache Buster**. You can now configure the cache buster that gets placed at the end of\n  images via the image_url function. This might be useful if you need to coordinate the query string\n  or use something other than a timestamp.\n  [Commit](http://github.com/chriseppstein/compass/commit/ef47f3dd9dbfc087de8b12a90f9a82993bbb592e)\n  Example:\n      asset_cache_buster do |path, file|\n        \"busted=true\"\n      end\n\n* You can now set/override arbitrary sass options by setting the <code>sass_options</code> configuration property\n  to a hash. [Commit](http://github.com/chriseppstein/compass/commit/802bca61741db31da7131c82d31fff45f9323696).\n\n* You can now specify additional import paths to look for sass code outside the project.\n  [Commit](http://github.com/chriseppstein/compass/commit/047be06a0a63923846f53849fc220fb4be69513b).\n  This can be done in two ways:\n    1. By setting <code>additional_import_paths</code> to an array of paths.\n    2. By (repeatedly) calling <code>add_import_path(path)</code>\n\n* The compass configuration can now be placed in PROJECT_DIR/.compass/config.rb if you so choose.\n  [Commit](http://github.com/chriseppstein/compass/commit/69cf32f70ac79c155198d2dbf96f50856bee9504).\n\n\n### Command Line\n\n* **Watch Improvements** The watch command was rewritten for robustness and reliability. The most\n  important change is that generated css files will be deleted if the originating sass file is removed while\n  watching the project. [Commit](http://github.com/chriseppstein/compass/commit/0a232bd922695f6f659fac9f90466745d4425839).\n\n* The images and javascripts directories may now be set via the command line.\n  [Commit](http://github.com/chriseppstein/compass/84aec053d0109923ea0208ac0847684cf09cefc1).\n\n* The usage output (-h) of the command-line has been reformatted to make it more readable and understandable.\n  [Commit](http://github.com/chriseppstein/compass/f742f26208f4c5c783ba63aa0cc509bb19e06ab9).\n\n* The configuration file being read can now be specified explicitly using the -c option.\n  This also affects the output location of the --write-configuration command.\n  NOTE: The -c option used to be for writing the configuration file, an infrequently used option.\n  [Commit](http://github.com/chriseppstein/compass/d2acd343b899db960c1d3a377e2ee6f58595c6b1).\n\n* You can now install into the current working directory by explicitly setting the command line mode to -i\n  and providing no project name.\n  [Commit](http://github.com/chriseppstein/compass/f742f26208f4c5c783ba63aa0cc509bb19e06ab9).\n\n### Compass Internals\n\n* Some internal code was reorganized to make managing sass extensions and functions more manageable.\n\n* Some internal code was reorganized to make managing ruby application integration more manageable.\n\n* The compass unit tests were reorganized to separate rails testing from other tests.\n\n* The [Rip Packaging System](http://hellorip.com) is now supported.\n  [Commit](http://github.com/chriseppstein/compass/commit/56f36577c7654b93a349f74abf274327df23402b)\n  by [Will Farrington](http://github.com/wfarr).\n\n* A [licence is now available](http://github.com/chriseppstein/compass/blob/master/LICENSE.markdown)\n  making the copyrights and terms of use clear for people who care about such things.\n\n\n0.6.14\n------\n\nExtracted the css validator to an external gem that is only required if you try to use the validation feature.\nThis makes the compass gem a lot smaller (0.37MB instead of 4MB). To install the validator:\n\n    sudo gem install chriseppstein-compass-validator --source http://gems.github.com/\n\n0.6.8 thru 0.6.13\n-----------------\n\nThe compass gem is now built with Jeweler instead of Echoe. No changes to speak of. These versions were bug\nfixes and working out the new release process.\n\n0.6.7\n-----\n\nBug fix release.\n\n### Rails\n\nThe output_style will no longer be set in the compass.config file. Instead compass will use the runtime rails environment to set a sensible default.\n\n### Command Line\n\nThe Sass cache directory will be placed into the sass directory of the project instead of the directory from where the compass command was ran.\n\n### Compass Core\n\nExtracted two new mixins from +horizontal-list.  The new +horizontal-list-container and +horizontal-list-item mixins can be used to build your\nhorizontal list when you need more control over the selectors (E.g. when working with nested lists).\n\n0.6.6\n-----\n\nThe Haml project now releases a gem called haml-edge that is built from the haml master branch instead of stable. Compass now depends on this gem and will continue to do so until haml 2.2 is released. This should reduce the number of installation problems that have been encountered by new users.\n\n### Command Line\n\n* Fixed a bug that had broken the --write-configuration (-c) option.\n* The --force option will now force recompilation. Useful when the stylesheets don't appear to need a recompile according to the file timestamps.\n\n### Unit tests\n\n* Some unit tests were cleaned up for clarity and to better take advantage of the compass project management facilities.\n\n0.6.5\n-----\n\n### Compass Core\n\nConverted all mixins definitions referencing images to use the new sass function <code>image\\_url()</code>. The following mixins were affected:\n\n* <code>+pretty-bullets</code>\n* <code>+replace-text</code>\n\nThe calls to these mixins should now pass a path to the image that is relative to the images directory of the project.\n\n### Command Line\n\n* Required frameworks specified from the command line will now be added into the initial project configuration file.\n\n0.6.4\n-----\n\n### Command Line\n\nAdded a command line option --install-dir that will emit the directory where compass is installed. Useful for debugging and drilling into the compass examples and libraries.\n\n0.6.3\n-----\n\n### Rails\n\nBug fix: The http_images_path configuration default should be \"/images\" instead of \"/public/images\".\n\n### Command Line\n\nThese changes, coupled with upcoming changes to Sass result in significantly reduced time spent on compilation for large projects.\n\n* The compass command line will no longer recompile sass files that haven't changed (taking import dependencies into account).\n* The compass command line will now respect the -q (quiet) option during compilation. Additionally, the quiet option will be set by default when watching a project for changes.\n\n0.6.2\n-----\n\n### Blueprint\n\nSplit the push and pull mixins into sub-mixins that separate the common styles from the ones that vary. The generated css when using presentational class names will be smaller as a result. The existing <code>+push</code> and <code>+pull</code> mixins continue to work as expected. The following mixins were added:\n\n    +push-base\n    +push-margins\n    +pull-base\n    +pull-margins\n\nAdditonally, the liquid plugin was updated to have a span mixin that matches elsewhere.\n\n### YUI\n\nAdded Yahoo's version of the css reset. To use it, mix into the top level of your project:\n\n    @import yui/modules/reset.sass\n    +reset\n\n### Rails\n\n* Conditionally defining #blank? on String/NilClass (Erik Bryn <erik.bryn@gmail.com>)\n* Set compass environment in plugin based on RAILS_ENV (Lee Nussbaum <wln@scrunch.org>)\n\n0.6.1\n-----\n\nMaintenance release that fixes several bugs in the handling of configuration files.\n\n0.6.0\n-----\n\n### New Core Functionality: **Patterns**\n\nPatterns give a framework or plugin access to the compass installer framework\nto install customizable sass, html as well as image and javascript assets.\n\nA pattern is a folder in the plugin's templates directory. It must\nhave a manifest file that tells compass what to install and where.\nUnlike the project template, a pattern can be stamped out any number of\ntimes.\n\nIt is best for pattern stylesheets to only provide example usage to get\nthe user started. All the core styles for the pattern should be\ndistributed as part of the framework's stylesheets as mixins to\nfacilitate easy upgrades and bug fixing on the part of the pattern's\nmaintainer.\n\nExample Usage:\ncompass --framework blueprint --pattern buttons\n\nPlease read the\n[Wiki Page](http://wiki.github.com/chriseppstein/compass/patterns) for more information.\n\n### New Command-line options:\n\n1. <code>--validate</code><br/>\n   Validate your project's compiled css. Requires java and probably only works on Mac and Unix.\n2. <code>--grid-img [DIMENSIONS]</code><br/>\n   Generate a background image to test grid alignment. Dimension is given as\n   <column_width>+<gutter_width>. Defaults to 30+10.\n3. <code>-p, --pattern PATTERN</code><br/>\n   When combined with with the --framework option, will stamp a plugin's pattern named PATTERN.\n4. <code>-n, --pattern-name NAME</code><br/>\n   When combined with the --pattern option, the pattern that gets stamped out will\n   be isolated in subdirectories named NAME.\n5. <code>-c, --write-configuration</code><br/>\n   Emit a compass configuration file into the current directory, taking any existing configuration\n   file and any command line options provided into account. (command line options override\n   configuration file options).\n\n### New Sass Functions:\n\nCompass projects can call these sass functions within their sass files, if you find them useful.\n\n1. <code>enumerate(prefix, start, end)</code><br/>\n   Generates selectors with a prefix and a numerical ending\n   counting from start to end. E.g. enumerate(\"foo\", 1, 3) returns \"foo-1, foo-2, foo-3\"\n2. <code>image_url(path)</code><br/>\n   Uses the compass configuration to convert a path relative to the compass\n   project directory to a path that is either absolute for serving in an HTTP\n   context or that is relative to whatever css file the function was being\n   compiled into. In the future, this function may also tap into the rails\n   asset host configuration.\n\n### New Compass Core Mixins\n\n1. <code>+float-left</code> & <code>+float-right</code><br/>\n   In order to include fixes for IE's double-margin bug universally,\n   floats were implemented as a utility mixins. These are available by importing\n   compass/utilities/general/float.sass which also imports the clearfix module.\n2. <code>+pie-clearfix</code><br/>\n   Implementation of the\n   [position-is-everything clearfix](http://www.positioniseverything.net/easyclearing.html)\n   that uses content :after.\n\n### Blueprint 0.8\n\nThe Compass port of Blueprint has been upgraded from 0.7.1 to 0.8.0. The 0.8.0 release\nbrings many bug fixes and a few backward incompatible changes if you use it's presentational\nclassnames (you don't do that, do you?). Upgrading to 0.8 is automatic when you upgrade to\ncompass 0.6.0. The Blueprint team didn't release a detailed changelog for me to point at here.\nOne of the key features of the release was the inclusion of three new core blueprint plugins\n(a.k.a. folders you can copy). These are what prompted the development of the compass patterns\nfeature and two of them are packaged as patterns:\n\n1. Buttons<br/>\n   To install: <code>compass --framework blueprint --pattern buttons</code><br/>\n   Then follow your nose.\n2. Link Icons<br/>\n   To install: <code>compass --framework blueprint --pattern link\\_icons</code><br/>\n   Then follow your nose.\n\nThe third plugin is the RTL (right-to-left) plugin. To use this one, simply import it after the import\nof the blueprint grid and your mixins will be redefined to work in a left to right manner. Additionally,\nit provides +rtl-typography mixin that works in conjunction with +blueprint-typography and should be mixed\nin with it.\n\nLastly, I've rewrote some of the presentational class name generation code so that it very nearly\nmatches the blueprint CSS. Please note that they are not 100% the same because we fix some bugs\nthat are not yet fixed in blueprint-css and we use a different clearfix implementation.\n\n### Bug Fixes\n\n1. A Safari bug related to the +clearfix mixin was resolved.\n2. Running the compass command line installer a second time.\n\n### Bugs Introduced\n\nAlmost definitely. Please let me know if you encounter any problems and I'll get a patch out\n\n[tdreyno]: http://github.com/tdreyno\n[noel]: http://github.com/noel\n[enricob]: http://github.com/enricob\n[perezd]: http://github.com/perezd\n[Chrononaut]: http://github.com/Chrononaut\n[rails_template]: http://github.com/chriseppstein/compass/raw/4e7e51e2c5491851f66c77abf3f15194f2f8fb8d/lib/compass/app_integration/rails/templates/compass-install-rails.rb\n[dturnbull]: http://github.com/dturnbull\n[filiptepper]: http://github.com/filiptepper\n[pixelmatrix]: http://github.com/pixelmatrix\n[jsilver]: http://github.com/jsilver\n[avit]: http://github.com/avit\n[der-rich]: http://github.com/der-rich\n[adamstac]: http://github.com/adamstac\n[ttilley]: http://github.com/ttilley\n[inline-block-list]: http://compass-style.org/reference/compass/typography/lists/inline-block-list/\n[html5-reset]: http://compass-style.org/reference/compass/reset/utilities/#mixin-reset-html5\n[blueprint_10_change]: https://github.com/chriseppstein/compass/compare/a05e1ee7c0a1e4c0f0595a8bb812daa47872e476...864780969d872a93b1fd3b4f39f29dd9f0c3fe75\n[brandon]: http://brandonmathis.com/\n[lemonade]: http://www.hagenburger.net/BLOG/Lemonade-CSS-Sprites-for-Sass-Compass.html\n"
  },
  {
    "path": "compass-style.org/content/blog/archive.haml",
    "content": "---\nlayout: blog\n---\n%h1 Compass Blog Archive\n\n- for post in blog_posts_in_order.reverse\n  .post-snippet\n    %h2\n      - time = blog_date(post)\n      %span.timestamp= time.strftime(\"%Y/%m/%d\")\n      %a{:href => post.rep_named(:default).path}= post[:title]\n    %p= post[:intro] || post[:description]\n  \n    \n"
  },
  {
    "path": "compass-style.org/content/blog/atom.haml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n%feed(xmlns=\"http://www.w3.org/2005/Atom\")\n  %title Compass Blog\n  %link(href=\"http://compass-style.org/blog/atom.xml\" rel=\"self\")\n  %link(href=\"http://compass-style.org/blog/\")\n  %updated= Time.now.xmlschema\n  %id http://compass-style.org/blog/\n  %author\n    %name Compass Core Team\n  - for post in blog_posts_in_order.reverse\n    - full_url = \"http://compass-style.org#{post.rep_named(:default).path}\"\n    %entry\n      %title&= post[:title]\n      %link{:href=> full_url}\n      %updated= blog_date(post).localtime.xmlschema\n      %id= full_url[0..-2]\n      %content(type=\"html\")\n        = post[:intro] || post[:description]\n\n"
  },
  {
    "path": "compass-style.org/content/blog.haml",
    "content": "---\nlayout: blog\n---\n%h1 Compass Blog\n\n- for post in blog_posts_in_order.reverse\n  .post-snippet\n    %h2\n      - time = blog_date(post)\n      %span.timestamp= time.strftime(\"%Y/%m/%d\")\n      %a{:href => post.rep_named(:default).path}= post[:title]\n    %p= post[:intro] || post[:description]\n  \n    \n"
  },
  {
    "path": "compass-style.org/content/copyright.markdown",
    "content": "---\ntitle: Compass Copyright\ncrumb: Copyright\nbody_id: copyright\nlayout: article\n---\n<a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/3.0/us/\" id=\"cc-logo\"><img alt=\"Creative Commons License\" style=\"border-width:0\" src=\"http://i.creativecommons.org/l/by-nc-sa/3.0/us/88x31.png\" /></a><span xmlns:dc=\"http://purl.org/dc/elements/1.1/\" href=\"http://purl.org/dc/dcmitype/InteractiveResource\" property=\"dc:title\" rel=\"dc:type\">Compass Documentation</span>\nby <a xmlns:cc=\"http://creativecommons.org/ns#\" href=\"http://eppsteins.net/chris\" property=\"cc:attributionName\" rel=\"cc:attributionURL\">Christopher M. Eppstein</a>\nis licensed under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/3.0/us/\">Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License</a>.\nPermissions beyond the scope of this license may be available at <a xmlns:cc=\"http://creativecommons.org/ns#\" href=\"http://compass-style.org/copyright/\" rel=\"cc:morePermissions\">http://compass-style.org/copyright/</a>.\n"
  },
  {
    "path": "compass-style.org/content/examples/blueprint/grid/pull/stylesheet.scss",
    "content": "$blueprint_grid_columns: 3;\n\n@import \"blueprint/grid.scss\";\n\n#one {\n  @include column(2, true);\n  @include prepend(1);\n  background-color: #11770e;\n}\n\n#two {\n  @include column(1);\n  @include pull(3, true);\n  background-color: #242677;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/blueprint/grid/two_cols/stylesheet.scss",
    "content": "$blueprint_grid_columns: 8;\n$blueprint_grid_width: 40px;\n\n@import \"blueprint\";\n\n.two-col {\n  @include container;\n  background-color: #cccccc;\n  #header, #footer {\n    @include column(8);\n  }\n  #sidebar {\n    @include column(3);\n  }\n  #content {\n    @include column(5, true);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-clip/markup.haml",
    "content": ".example\n  #padding-box\n    Padding Box\n  #border-box\n    Border Box\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-clip/stylesheet.scss",
    "content": "@import \"compass/css3.scss\";\n\n.example {\n  padding: 2em;\n  div {\n    background-color: blue;\n    border: 10px solid rgba(255, 0, 0, 0.5);\n    color: white;\n    @include text-shadow(darken(blue, 50%) 2px 2px);\n    padding: 3px;\n    text-align: center;\n    margin-bottom: 2em;\n  }\n  #padding-box {\n    @include background-clip(padding-box);\n  }\n  #border-box {\n    @include background-clip(border-box);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-clip.haml",
    "content": "---\ntitle: Background Clip\ndescription: See background-clip in action.\nframework: compass\nstylesheet: compass/css3/_background-clip.scss\nexample: true\n---\n- render \"partials/example\" do\n  %p\n    In this example, there's a red border with alpha transparency.\n    The padding box appears pink against the white background of the page.\n    The border box appears purple because it blends with the blue background instead.\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-origin/markup.haml",
    "content": ".example\n  #padding-box\n    Padding Box\n  #border-box\n    Border Box\n  #content-box\n    Content Box"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-origin/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n.example {\n  padding: 2em;\n  div {\n    background: {\n      image: image-url(\"examples/css3/bg-origin/bg.png\");\n      repeat: repeat;\n      position: top left;\n    };\n    border: 10px solid rgba(255, 0, 0, 0.5);\n    color: white;\n    @include text-shadow(darken(blue, 50%) 2px 2px);\n    padding: 1em;\n    text-align: center;\n    margin-bottom: 2em;\n  }\n  #padding-box {\n    @include background-origin(padding-box);\n  }\n  #border-box {\n    @include background-origin(border-box);\n  }\n  #content-box {\n    @include background-origin(content-box);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-origin.haml",
    "content": "---\ntitle: Background Origin\ndescription: See background-origin in action.\nframework: compass\nstylesheet: compass/css3/_background-origin.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-size/markup.haml",
    "content": ".example\n  #auto\n    %code background-size: auto\n  #contain\n    %code background-size: contain\n  #cover\n    %code background-size: cover\n  #percent\n    %code background-size: 50% 50%\n  #absolute\n    %code background-size: 100px 25px"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-size/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n.example {\n  padding: 2em;\n  div {\n    background: {\n      image: image-url(\"examples/css3/bg-origin/bg.png\");\n      repeat: no-repeat;\n      position: top left;\n    };\n    border: 10px solid rgba(255, 0, 0, 0.5);\n    color: black;\n    @include text-shadow(white 1px 1px 4px);\n    padding: 1em;\n    text-align: center;\n    margin-bottom: 2em;\n  }\n  #auto {\n    @include background-size(auto);\n  }\n  #contain {\n    @include background-size(contain);\n  }\n  #cover {\n    @include background-size(cover);\n  }\n  #percent {\n    @include background-size(50% 50%);\n  }\n  #absolute {\n    @include background-size(100px 25px);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/background-size.haml",
    "content": "---\ntitle: Background Size\ndescription: See background-size in action.\nframework: compass\nstylesheet: compass/css3/_background-size.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/border_radius/markup.haml",
    "content": "#border-radius.border-radius-example\n  %p\n    Box with all corners rounded\n\n#border-radius-top-left.border-radius-example\n  %p\n    Box with only top left corner rounded\n\n#border-radius-top-right.border-radius-example\n  %p\n    Box with only top right corner rounded\n\n#border-radius-bottom-left.border-radius-example\n  %p\n    Box with only bottom left corner rounded\n\n#border-radius-bottom-right.border-radius-example\n  %p\n    Box with only bottom right corner rounded\n\n#border-radius-top.border-radius-example\n  %p\n    Box with top corners rounded\n\n#border-radius-bottom.border-radius-example\n  %p\n    Box with bottom corners rounded\n\n#border-radius-left.border-radius-example\n  %p\n    Box with left corners rounded\n\n#border-radius-right.border-radius-example\n  %p\n    Box with right corners rounded\n\n#border-radius-combo.border-radius-example\n  %p\n    Box with different roundings for top/bottom and left/right\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/border_radius/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n@import \"compass/utilities\";\n\n#demo {\n  @include clearfix;\n}\n\n.border-radius-example {\n  width: 125px;\n  height: 125px;\n  background: red;\n  margin: 20px;\n  float: left;\n  padding: 5px;\n}\n\n#border-radius {\n  @include border-radius(25px);\n}\n\n#border-radius-top-left {\n  @include border-top-left-radius(25px);\n}\n\n#border-radius-top-right {\n  @include border-top-right-radius(25px);\n}\n\n#border-radius-bottom-left {\n  @include border-bottom-left-radius(25px);\n}\n\n#border-radius-bottom-right {\n  @include border-bottom-right-radius(25px);\n}\n\n#border-radius-top {\n  @include border-top-radius(25px);\n}\n\n#border-radius-bottom {\n  @include border-bottom-radius(25px);\n}\n\n#border-radius-left {\n  @include border-left-radius(25px);\n}\n\n#border-radius-right {\n  @include border-right-radius(25px);\n}\n\n#border-radius-combo {\n  @include border-corner-radius(top, left, 40px);\n  @include border-corner-radius(top, right, 5px);\n  @include border-corner-radius(bottom, left, 15px);\n  @include border-corner-radius(bottom, right, 30px);\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/border_radius.haml",
    "content": "---\ntitle: Border radius\ndescription: css3 mixin for border-radius\nframework: compass\nstylesheet: compass/css3/_border-radius.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/box_shadow/markup.haml",
    "content": ".box-shadow-example\n  #box-shadow-default\n  #box-shadow-custom\n  #box-shadow-custom-multiple\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/box_shadow/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n.box-shadow-example div {\n  width: 40px;\n  height: 40px;\n  background: #eeeeee;\n  margin: 20px;\n  float: left;\n}\n\n// Default single box shadow\n#box-shadow-default {\n  @include single-box-shadow;\n}\n\n// Box shadow with custom settings\n#box-shadow-custom {\n  @include box-shadow(red 2px 2px 10px);\n}\n\n#box-shadow-custom-multiple {\n  @include box-shadow(rgba(blue, 0.4) 0 0 25px, rgba(green, 0.2) 0 0 3px 1px inset);\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/box_shadow.haml",
    "content": "---\ntitle: Box-shadow\ndescription: css3 mixin for box-shadow\nframework: compass\nstylesheet: compass/css3/_box-shadow.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/box_sizing/markup.haml",
    "content": "#content-box.box-sizing-example\n\n#border-box.box-sizing-example"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/box_sizing/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n.box-sizing-example {\n  background: red;\n  padding: 20px;\n  border: 10px solid green;\n  margin: 20px;\n  width: 200px;\n}\n\n#content-box {\n  @include box-sizing(content-box);\n}\n\n#border-box {\n  @include box-sizing(border-box);\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/box_sizing.haml",
    "content": "---\ntitle: Box-sizing\ndescription: css3 mixin for box-sizing\nframework: compass\nstylesheet: compass/css3/_box-sizing.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/columns/markup.haml",
    "content": "%div(id=\"two-column\")\n  Lorem ipsum dolor sit amet,\n  consectetur adipisicing elit,\n  sed do eiusmod tempor incididunt ut\n  labore et dolore magna aliqua.\n\n%div(id=\"three-column\")\n  Lorem ipsum dolor sit amet,\n  consectetur adipisicing elit,\n  sed do eiusmod tempor incididunt ut\n  labore et dolore magna aliqua.\n\n%div(id=\"four-column-with-rule\")\n  Lorem ipsum dolor sit amet,\n  consectetur adipisicing elit,\n  sed do eiusmod tempor incididunt ut\n  labore et dolore magna aliqua.\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/columns/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n#two-column {\n  @include column-count(2);\n  width: 300px;\n  margin-bottom: 20px;\n}\n\n#three-column {\n  @include column-count(3);\n  width: 300px;\n  margin-bottom: 20px;\n}\n\n#four-column-with-rule {\n  @include column-count(4);\n  @include column-rule(1px, solid, red);\n  width: 300px;\n  margin-bottom: 20px;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/columns.haml",
    "content": "---\ntitle: Columns\ndescription: css3 mixin for css columns\nframework: compass\nstylesheet: compass/css3/_columns.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/flexbox/markup.haml",
    "content": "%ul(id=\"vertical-center\")\n  %li One really long element that should wrap.  Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n  %li Two\n  %li Three\n  %li Four\n  %li Five\n  %li Six\n\n%ul(id=\"flexible\")\n  %li One\n  %li Two\n  %li Three\n  %li Four\n  %li Five\n  %li Six\n\n%ul(id=\"reorder\")\n  %li One\n  %li Two\n  %li Three\n  %li Four\n  %li Five\n  %li Six\n\n%section(id=\"layout\")\n  %header\n    %h1 Header Title\n\n    %nav\n      %ul\n        %li One\n        %li Two\n        %li Three\n\n  %article\n    %h1 Another Title\n\n    %p Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus porta elit vel ante hendrerit facilisis. Curabitur aliquam sollicitudin diam, id posuere elit consectetur nec. Vestibulum quam dolor, feugiat in posuere a, posuere imperdiet tellus.\n\n  %aside\n    %h1 Aside Title\n\n    %p Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus porta elit vel ante hendrerit facilisis.\n\n  %footer\n    %h1 Footer Title"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/flexbox/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n#vertical-center {\n  padding: 0;\n\n  li {\n    background: #CCC;\n    width: 15em;\n    margin: .5em;\n    height: 5em;\n    text-align: center;\n    vertical-align: text-top;\n    display: inline-block; /* non-flexbox browsers */\n    @include display-flex(inline-flex);\n    @include align-items(center);\n    @include justify-content(center);\n  }\n}\n\n#flexible {\n  padding: 0;\n  text-align: center;\n  @include display-flex;\n  @include flex-wrap(wrap);\n\n  li {\n    background: #CCC;\n    min-width: 12em;\n    margin: .5em;\n    padding: .5em;\n    display: inline-block; /* non-flexbox browsers */\n    @include flex(1 0);\n  }\n}\n\n#reorder {\n  $flex-legacy-enabled: true;\n  width: 100%; /* fix for old Firefox */\n  @include display-flex;\n  @include flex-direction(column);\n\n  li:nth-child(even) {\n    background: #CCC;\n    @include order(1);\n  }\n  $flex-legacy-enabled: false;\n}\n\n#layout {\n  @include display-flex;\n  @include flex-wrap(wrap);\n\n  header, footer {\n    @include flex(1 0 100%);\n  }\n\n  header {\n    background: lighten(yellow, 40%);\n  }\n\n  nav {\n    $flex-legacy-enabled: true;\n    ul {\n      padding: 0;\n      margin: -.5em;\n      min-width: 100%; /* fix for old Firefox */\n      @include display-flex(flex);\n    }\n\n    li {\n      background: #CCC;\n      margin: .5em;\n      display: inline-block; /* non-flexbox browsers */\n      @include flex(1 1 30%);\n    }\n    $flex-legacy-enabled: false;\n  }\n\n  article {\n    @include flex(2 1 30em);\n  }\n\n  aside {\n    flex: 1 0 15em;\n    background: lighten(blue, 40%);\n  }\n\n  footer {\n    background: lighten(green, 50%);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/flexbox.haml",
    "content": "---\ntitle: CSS3 Flexible Box\ndescription: unified mixins for the CSS3 flexible box\nframework: compass\nstylesheet: compass/css3/_flexbox.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/font-face/markup.haml",
    "content": ".example\n  %p The Quick Brown Fox jumped over the lazy dog.\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/font-face/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n@include font-face(\"Blooming Grove\", font-files(\"examples/bgrove.ttf\", \"examples/bgrove.otf\"));\n\n.example {\n  font-family: \"Blooming Grove\";\n  font-size: 1.5em;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/font-face.haml",
    "content": "---\ntitle: Compass Font Face Example\ndescription: How to use the @font-face mixin\nframework: compass\nstylesheet: compass/css3/_font-face.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/gradient/markup.haml",
    "content": ".ex\n  .gradient-example\n  %p\n    This box has no gradients\n\n.ex\n  #radial-gradient.gradient-example\n  %p\n    This will yield a radial gradient with an apparent specular highlight  \n\n.ex\n  #linear-gradient.gradient-example\n  %p\n    This yields a linear gradient spanning from $start to $end coordinates  \n\n.ex\n  #v-gradient.gradient-example\n  %p\n    This yields a gradient starting at the top with #fff, ending in #aaa  \n\n.ex\n  #v-gradient-2.gradient-example\n  %p\n    Same as above but with a #ccc at the halfway point  \n\n.ex\n  #v-gradient-3.gradient-example\n  %p\n    Same as the first example but with #ccc at the\n    30% from the top, and #bbb at 70% from the top  \n\n\n.ex\n  #h-gradient.gradient-example\n  %p\n    This yields a horizontal linear gradient spanning from left to right.\n\n.ex\n  #svg-gradient.gradient-example\n  %p\n    This gradient has SVG support enabled for opera and IE9.\n.ex\n  #angle-gradient.gradient-example\n  %p\n    This gradient uses an angle to specify the gradient direction.\n.ex\n  #angle-gradient-svg.gradient-example\n  %p\n    This is the SVG shim for the angle gradient without it being used\n    as a fallback.\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/gradient/stylesheet.scss",
    "content": "@import \"compass\";\n\n.ex {\n  width: 48%;\n  margin-right: 2%;\n  float: left;\n  @include clearfix;\n  p {\n    padding-top: 10px;\n  }\n}\n\n.gradient-example {\n  width: 80px;\n  height: 80px;\n  background: red;\n  float: left;\n  margin: 1em 1em 0 0;\n}\n\n// This will yield a radial gradient with an apparent specular highlight\n#radial-gradient {\n  @include background-image(radial-gradient(45px 45px, cyan 10px, dodgerblue 30px));\n}\n\n// This yields a linear gradient spanning from the upper left corner to the lower right corner\n#linear-gradient {\n  @include background-image(linear-gradient(to bottom right, white, #dddddd));\n}\n\n// This yields a gradient starting at the top with #fff, ending in #aaa\n#v-gradient {\n  @include background-image(linear-gradient(white, #aaaaaa));\n}\n\n// Same as above but with a #ccc at the halfway point\n#v-gradient-2 {\n  @include background-image(linear-gradient(white, #cccccc, #aaaaaa));\n}\n\n// Same as the first example but with #ccc at the 30% from the top, and #bbb at 70% from the top\n#v-gradient-3 {\n  @include background-image(linear-gradient(white, #cccccc 30%, #bbbbbb 70%, #aaaaaa));\n}\n\n// This yields a horizontal linear gradient spanning from left to right.\n#h-gradient {\n  @include background-image(linear-gradient(to right, white, #dddddd));\n}\n\n#svg-gradient {\n  $svg-gradient-shim-threshold: 1 !global;\n  @include background-image(linear-gradient(to right, #2ac363, #cd8c14, #9c4cc2));\n  width: 80px;\n  height: 80px;\n}\n\n#angle-gradient {\n  $svg-gradient-shim-threshold: 1 !global;\n  @include background-image(linear-gradient(120deg, #2ac363, #cd8c14, #9c4cc2));\n  width: 80px;\n  height: 80px;\n}\n\n#angle-gradient-svg {\n  background-image: -svg(linear-gradient(120deg, #2ac363, #cd8c14, #9c4cc2));\n  width: 80px;\n  height: 80px;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/gradient.haml",
    "content": "---\ntitle: Background Gradients\ndescription: css3 mixin for css gradients\nframework: compass\nstylesheet: compass/css3/_images.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/inline_block/markup.haml",
    "content": "%p\n  this is an\n  %span(id=\"inline-block\") inline block\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/inline_block/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n#inline-block {\n  @include inline-block;\n  padding: 4px 10px;\n  background: red;\n  color: white;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/inline_block.haml",
    "content": "---\ntitle: Inline-block\ndescription: css3 mixin for inline-block\nframework: compass\nstylesheet: compass/css3/_inline-block.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/input-placeholder/markup.haml",
    "content": "%form{:action => \"\", :method => \"get\"}\n  %label{:for => \"input\"} Input\n  %input{:type => \"text\", :name => \"input\", :placeholder => \"Type something…\"}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/input-placeholder/stylesheet.scss",
    "content": "@import \"compass/css3/user-interface\";\n\ninput[type=\"text\"] {\n  @include input-placeholder {\n    color: #bfbfbf;\n    font-style: italic;\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/input-placeholder.haml",
    "content": "---\ntitle: Input Placeholder\ndescription: css3 mixin to style input placeholders\nframework: compass\nstylesheet: compass/css3/_user-interface.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/opacity/markup.haml",
    "content": "#opacity-10.opacity-example\n#opacity-20.opacity-example\n#opacity-50.opacity-example\n#opaque.opacity-example\n#transparent.opacity-example\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/opacity/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n.opacity-example {\n  background: red;\n  width: 40px;\n  height: 40px;\n  float: left;\n}\n\n#opacity-10 {\n  @include opacity(0.1);\n}\n\n#opacity-20 {\n  @include opacity(0.2);\n}\n\n#opacity-50 {\n  @include opacity(0.5);\n}\n\n#opaque {\n  @include opaque;\n}\n\n#transparent {\n  @include transparent;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/opacity.haml",
    "content": "---\ntitle: Opacity\ndescription: css3 mixin for opacity\nframework: compass\nstylesheet: compass/css3/_opacity.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/regions/markup.haml",
    "content": ".source\n  %p\n    This is the source material\n\n.new-container\n  %p\n    This is the target location"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/regions/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n.source {\n  @include flow-into(target);\n  border: 10px solid green;\n  margin: 20px;\n  width: 200px;\n}\n\n.new-container {\n  @include flow-from(target);\n  border: 10px solid red;\n  margin: 20px;\n  width: 200px;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/regions.haml",
    "content": "---\ntitle: CSS Regions\ndescription: css3 mixin for css regions\nframework: compass\nstylesheet: compass/css3/_regions.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/text_shadow/markup.haml",
    "content": "%div this text has no shadow\n.has-single-shadow this text has a shadow\n.has-custom-shadow this text has a custom shadow\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/text_shadow/stylesheet.scss",
    "content": "$default-text-shadow-color: rgba(red, 0.6);\n$default-text-shadow-blur: 3px;\n$default-text-shadow-v-offset: 1px;\n\n@import \"compass/css3\";\n\n// Uses defaults set before the import above\n.has-single-shadow {\n  @include single-text-shadow;\n}\n\n// Can output up to ten text shadows\n.has-custom-shadow {\n  @include text-shadow(rgba(blue, 0.2) 1px 1px 0, rgba(blue, 0.2) 2px 2px 0, rgba(blue, 0.2) 3px 3px 0);\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/text_shadow.haml",
    "content": "---\ntitle: Text-shadow\ndescription: css3 mixin for text-shadow\nframework: compass\nstylesheet: compass/css3/_text-shadow.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/transition/markup.haml",
    "content": "%p\n  this box has a width transition on hover\n\n#width.transition-example\n\n%p\n  this box has a width transition on hover, with a set duration\n\n#width-duration.transition-example\n\n%p\n  this box has a width transition on hover, with a set duration, and uses the 'easein' timing function\n\n#width-duration-easein.transition-example\n\n%p\n  this box has a few seconds delay, so wait a little before the transition occurs\n\n#width-delay.transition-example"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/transition/stylesheet.scss",
    "content": "@import \"compass/css3\";\n\n.transition-example {\n  width: 40px;\n  height: 40px;\n  background: red;\n  margin: 20px;\n}\n\n#width {\n  @include transition-property(width);\n}\n\n#width:hover {\n  width: 80px;\n}\n\n#width-duration {\n  @include transition-property(width);\n  @include transition-duration(2s);\n}\n\n#width-duration:hover {\n  width: 80px;\n}\n\n#width-duration-easein {\n  @include transition-property(width);\n  @include transition-duration(2s);\n  @include transition-timing-function(ease-in);\n}\n\n#width-duration-easein:hover {\n  width: 80px;\n}\n\n#width-delay {\n  @include transition-property(width);\n  @include transition-delay(2s);\n}\n\n#width-delay:hover {\n  width: 80px;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/css3/transition.haml",
    "content": "---\ntitle: Transition\ndescription: css3 mixin for css transitions\nframework: compass\nstylesheet: compass/css3/_transition.scss\nexample: true\n---\n= render \"partials/example\""
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/elements-of-type/markup.haml",
    "content": ".example\n  %div\n    This is a block element.\n    It has an\n    %span inline span\n    and an\n    %em inline em\n    and a\n    %blockquote\n      Nested blockquote element\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/elements-of-type/stylesheet.scss",
    "content": ".example {\n  #{elements-of-type(block)} {\n    border: 1px solid #777777;\n    margin: 1em 3em;\n  }\n  #{elements-of-type(inline)} {\n    color: #cc0000;\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/elements-of-type.haml",
    "content": "---\ntitle: \"Compass Helper: elements-of-type\"\ndescription: How to use the elements-of-type() helper function.\nframework: compass\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/enumerate/markup.haml",
    "content": ".example\n  .class-1 .class-1\n  .class-2 .class-2\n  .class-3 .class-3\n  .class-4 .class-4\n  .class-5 .class-5"
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/enumerate/stylesheet.scss",
    "content": ".example {\n  #{enumerate(\".class\", 2, 4)} {\n    background-color: #aaaaaa;\n    border: 2px solid #777777;\n    margin: 1em;\n  }\n  @for $i from 2 through 4 {\n    .class-#{$i} {\n      margin-left: 1em * ($i - 1);\n    }\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/enumerate.haml",
    "content": "---\ntitle: \"Compass Helper: enumerate\"\ndescription: How to use the enumerate() helper function.\nframework: compass\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/using-extend-in-place-of-enumerate/markup.haml",
    "content": ".example\n  .class-1 .class-1\n  .class-2 .class-2\n  .class-3 .class-3\n  .class-4 .class-4\n  .class-5 .class-5\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/using-extend-in-place-of-enumerate/stylesheet.scss",
    "content": ".example {\n  .base-class {\n    background-color: #aaaaaa;\n    border: 2px solid #777777;\n    margin: 1em;\n  }\n  @for $i from 2 through 4 {\n    .class-#{$i} {\n      @extend .base-class;\n      margin-left: 1em * ($i - 1);\n    }\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/helpers/using-extend-in-place-of-enumerate.haml",
    "content": "---\ntitle: \"Using @extend in place of the enumerate() helper.\"\ndescription: Using @extend in place of the enumerate() helper.\nframework: compass\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/layout/sticky-footer/markup.haml",
    "content": ".example\n  #layout\n    #header\n      %h1 Sticky Footer Example\n\n    %p\n      This is the main content area.\n    %p\n      In this example you should pretend that the red box\n      is actually the browser window.\n    %p\n      Because, being a contrived example, it's not actually sticking\n      to the bottom of the page.\n    #layout_footer\n  #footer\n    This is the footer area.\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/layout/sticky-footer/stylesheet.scss",
    "content": "@import \"compass/reset.scss\";\n@import \"compass/layout.scss\";\n\n@include sticky-footer(72px, \"#layout\", \"#layout_footer\", \"#footer\");\n\n#header {\n  background: #999999;\n  height: 72px;\n}\n\n#footer {\n  background: #cccccc;\n}\n\n.example {\n  height: 500px;\n  border: 3px solid red;\n  p {\n    margin: 1em 0.5em;\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/layout/sticky-footer.haml",
    "content": "---\ntitle: Compass Sticky Footer Example\ndescription: How to use the sticky footer mixin.\nframework: compass\nstylesheet: compass/layout/_sticky-footer.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/layout/stretching/markup.haml",
    "content": ".example\n  %ul\n    %li.stretch-container\n      #stretch-full\n        This element is fully stretched.\n    %li.stretch-container\n      #stretch-offset\n        This element is stretched with a 1em offset on each side.\n    %li.stretch-container\n      #stretch-x\n        This\n        %br\n        element\n        %br\n        is\n        %br\n        stretched\n        %br\n        horizontally.\n    %li.stretch-container\n      #stretch-y\n        This\n        %br\n        element\n        %br\n        is\n        %br\n        stretched\n        %br\n        vertically.\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/layout/stretching/stylesheet.scss",
    "content": "@import \"compass/layout/stretching\";\n@import \"compass/utilities\";\n@import \"compass/css3\";\n\n.stretch-container {\n  border: 1px solid #999999;\n  width: 200px;\n  height: 200px;\n  position: relative;\n  @include inline-block;\n}\n\n%stretched {\n  $stretch-color: #4c6b99;\n  border: 3px solid $stretch-color;\n  @include border-radius(8px);\n  display: block;\n  background-color: darken($stretch-color, 30%);\n  color: white;\n  text-align: center;\n  vertical-align: middle;\n  padding: 0.5em;\n}\n\n#stretch-full {\n  @extend %stretched;\n  @include stretch;\n}\n\n#stretch-offset {\n  @extend %stretched;\n  @include stretch(1em, 1em, 1em, 1em);\n}\n\n#stretch-x {\n  @extend %stretched;\n  @include stretch-x;\n}\n\n#stretch-y {\n  @extend %stretched;\n  @include stretch-y;\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/layout/stretching.haml",
    "content": "---\ntitle: Compass Stretch Layout Example\ndescription: How to do stretch out your elements.\nframework: compass\nstylesheet: compass/layout/_stretching.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/all/markup.haml",
    "content": ".example\n  %table{:cellspacing => \"0\"}\n    %thead\n      %tr.odd\n        %th Title\n        %th One\n        %th Two\n        %th Three\n        %th Four\n        %th Row Total\n    %tbody\n      %tr.even\n        %th Single\n        %td.numeric 1.0\n        %td.numeric 2.0\n        %td.numeric 3.0\n        %td.numeric 4.0\n        %td.numeric 10.0\n      %tr.odd\n        %th Tens\n        %td.numeric 10.0\n        %td.numeric 20.0\n        %td.numeric 30.0\n        %td.numeric 40.0\n        %td.numeric 100.0\n    %tfoot\n      %tr.even\n        %th Total\n        %td.numeric 11.0\n        %td.numeric 22.0\n        %td.numeric 33.0\n        %td.numeric 44.0\n        %td.numeric 110.0\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/all/stylesheet.scss",
    "content": "@import \"compass/utilities/tables\";\n\n.example {\n  table {\n    $table-color: #7a98c6;\n    @include table-scaffolding;\n    @include inner-table-borders(1px, darken($table-color, 40%));\n    @include outer-table-borders(2px);\n    @include alternating-rows-and-columns($table-color, adjust-hue($table-color, -120deg), #222222);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/all.haml",
    "content": "---\ntitle: Compass Table Example\ndescription: How to use the table mixins.\nframework: compass\nstylesheet: compass/utilities/_tables.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/borders/markup.haml",
    "content": ".example\n  %table{:cellspacing => \"0\"}\n    %thead\n      %tr.odd\n        %th Title\n        %th One\n        %th Two\n        %th Three\n        %th Four\n        %th Row Total\n    %tbody\n      %tr.even\n        %th Single\n        %td.numeric 1.0\n        %td.numeric 2.0\n        %td.numeric 3.0\n        %td.numeric 4.0\n        %td.numeric 10.0\n      %tr.odd\n        %th Tens\n        %td.numeric 10.0\n        %td.numeric 20.0\n        %td.numeric 30.0\n        %td.numeric 40.0\n        %td.numeric 100.0\n    %tfoot\n      %tr.even\n        %th Total\n        %td.numeric 11.0\n        %td.numeric 22.0\n        %td.numeric 33.0\n        %td.numeric 44.0\n        %td.numeric 110.0\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/borders/stylesheet.scss",
    "content": "@import \"compass/utilities/tables/borders\";\n\n.example {\n  table {\n    @include inner-table-borders(1px, #7a98c6);\n    @include outer-table-borders(2px);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/borders.haml",
    "content": "---\ntitle: Compass Table Borders Example\ndescription: How to use the table border mixins.\nframework: compass\nstylesheet: compass/utilities/tables/_borders.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/scaffolding/markup.haml",
    "content": ".example\n  %table{:cellspacing => \"0\"}\n    %thead\n      %tr.odd\n        %th Title\n        %th One\n        %th Two\n        %th Three\n        %th Four\n        %th Row Total\n    %tbody\n      %tr.even\n        %th Single\n        %td.numeric 1.0\n        %td.numeric 2.0\n        %td.numeric 3.0\n        %td.numeric 4.0\n        %td.numeric 10.0\n      %tr.odd\n        %th Tens\n        %td.numeric 10.0\n        %td.numeric 20.0\n        %td.numeric 30.0\n        %td.numeric 40.0\n        %td.numeric 100.0\n    %tfoot\n      %tr.even\n        %th Total\n        %td.numeric 11.0\n        %td.numeric 22.0\n        %td.numeric 33.0\n        %td.numeric 44.0\n        %td.numeric 110.0\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/scaffolding/stylesheet.scss",
    "content": "@import \"compass/utilities/tables/scaffolding\";\n\n.example {\n  table {\n    @include table-scaffolding;\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/scaffolding.haml",
    "content": "---\ntitle: Compass Table Scaffolding Example\ndescription: How to use the table scaffolding mixins.\nframework: compass\nstylesheet: compass/utilities/tables/_scaffolding.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/striping/markup.haml",
    "content": ".example\n  %table{:cellspacing => \"0\"}\n    %thead\n      %tr.odd\n        %th Title\n        %th One\n        %th Two\n        %th Three\n        %th Four\n        %th Row Total\n    %tbody\n      %tr.even\n        %th Single\n        %td.numeric 1.0\n        %td.numeric 2.0\n        %td.numeric 3.0\n        %td.numeric 4.0\n        %td.numeric 10.0\n      %tr.odd\n        %th Tens\n        %td.numeric 10.0\n        %td.numeric 20.0\n        %td.numeric 30.0\n        %td.numeric 40.0\n        %td.numeric 100.0\n    %tfoot\n      %tr.even\n        %th Total\n        %td.numeric 11.0\n        %td.numeric 22.0\n        %td.numeric 33.0\n        %td.numeric 44.0\n        %td.numeric 110.0\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/striping/stylesheet.scss",
    "content": "@import \"compass/utilities/tables/alternating-rows-and-columns\";\n\n.example {\n  table {\n    $table-color: #7a98c6;\n    @include alternating-rows-and-columns($table-color, adjust-hue($table-color, -120deg), #222222);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/tables/striping.haml",
    "content": "---\ntitle: Compass Table Striping Example\ndescription: How to use the alternating-rows-and-columns mixin.\nframework: compass\nstylesheet: compass/utilities/tables/_alternating-rows-and-columns.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/utilities/contrast/markup.haml",
    "content": ".example\n  %p.dark This is a paragraph with a <em>dark</em> background and <em>light</em> text.\n  %p.light This is a paragraph with a <em>light</em> background and <em>dark</em> text.\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/utilities/contrast/stylesheet.scss",
    "content": "$contrasted-dark-default: #333333;\n$contrasted-light-default: #e7e7e7;\n\n@import \"compass/utilities/color/contrast\";\n\n.example {\n  p.dark {\n    @include contrasted(#5f1210);\n  }\n  p.light {\n    @include contrasted(#fa9e9c);\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/examples/compass/utilities/contrast.haml",
    "content": "---\ntitle: Compass Contrast Color Example\ndescription: Make text readable\nframework: compass\nstylesheet: compass/utilities/color/_contrast.scss\nexample: true\n---\n= render \"partials/example\"\n"
  },
  {
    "path": "compass-style.org/content/examples/index.haml",
    "content": "---\ntitle: Compass Examples\ncrumb: Examples\nclassnames:\n  - examples\nlayout: site\n---\n%article\n  %h1 Browse Code Examples\n\n%ul\n  - for example in example_items.sort_by {|e| e[:title] }\n    %li\n      %a{:href => example.identifier}= example[:title]\n"
  },
  {
    "path": "compass-style.org/content/frameworks.haml",
    "content": "---\ntitle: Plugins and frameworks\ncrumb: Plugins and frameworks\n---\n\n%h3\n  Adding Frameworks to Compass\n\n%ul\n  %li\n    Add a folder under\n    %code\n      compass/frameworks\n  %li\n    Register it by creating a file in\n    %code\n      compass/lib/compass/frameworks/\n  %li\n    Require it in\n    %code\n      compass/lib/compass/frameworks.rb\n    \\.\n\n%h3\n  Supported Frameworks\n\n%table.datagrid\n  %tr\n    %th Framework\n    %th Version\n    %th Status\n    %th Homepage\n    %th Documentation\n  %tr\n    %td Compass Core\n    %td 0.10\n    %td pre5\n    %td\n      %a\n        http://compass-style.org\n    %td\n      You are currently viewing the Compass docs.\n  %tr\n    %td Blueprint\n    %td 0.8.0\n    %td Stable\n    %td\n      %a\n        http://blueprintcss.org/\n    %td\n      %a{:href => \"/reference/blueprint/\"}\n        Blueprint docs\n  %tr\n    %td YUI\n    %td 2.5.2\n    %td Beta\n    %td\n      %a\n        http://developer.yahoo.com/yui/grids/\n    %td\n      %a{:href => \"http://wiki.github.com/chriseppstein/yui-compass-plugin/\"}\n        YUI docs\n  %tr\n    %td 960\n    %td 1.0\n    %td Stable\n    %td\n      %a\n        http://960.gs/\n    %td\n      %a{:href => \"http://github.com/chriseppstein/compass-960-plugin\"}\n        Compass960 plugin on Github\n\n%h3\n  Compass plugins\n\n%p\n  Compass allows you to easily download, install, and upgrade plugins that share design and design elements between users and projects.\n\n%p\n  For instructions on how to install a plugin, please refer to the individual plugin's instructions.\n\n%h3 Released Plugins\n\n%h4 Frameworks\n\n%ul\n  %li\n    %a{ :href => \"http://github.com/chriseppstein/compass-960-plugin\" }\n      960.gs\n    – a lightweight CSS framework for producing fixed-width grid-based layouts\n  %li\n    %a{ :href => \"http://github.com/adamstac/grid-coordinates\" }\n      Grid Coordinates\n    – a lightweight CSS framework for producing fixed-width grid-based layouts, based on\n    %a{ :href => \"http://1kbgrid.com/\" }\n      1KB CSS Grid\n    (which was loosely based on 960.gs). Supports nested grids.\n  %li\n    %a{ :href => \"http://github.com/alexcabrera/graphpaper\" }\n      GraphPaper\n    – a lightweight CSS framework for producing fixed-width grid-based layouts\n  %li\n    %a{ :href => \"http://github.com/tdreyno/compass-baseline\" }\n      Baseline\n    – a CSS framework for producing grid-based layouts (up to 8 columns) with typography. See\n    %a{ :href => \"http://baselinecss.com/\" }\n      http://baselinecss.com/\n  %li\n    %a{ :href => \"http://github.com/bangpound/compass-drupal-zen-plugin\" }\n      Drupal Zen\n    – adds the Drupal Zen theme STARTERKIT to Compass\n  %li\n    %a{ :href => \"http://github.com/ericam/compass-susy-plugin\" }\n      Susy\n    – a semantic CSS framework creator. Susy is an expert at fluid grids in an elastic (or fluid, or fixed) shell that will never activate the horizontal scroll bar.\n\n%h3\n  Colors\n%ul\n  %li\n    %a{ :href => \"http://github.com/chriseppstein/compass-colors\" }\n      Compass Colors\n    – for working with colors in Sass, and generating color themes\n\n%h3\n  Widgets\n%ul\n  %li\n    %a{ :href => \"http://github.com/imathis/fancy-buttons\" }\n      Fancy Buttons\n    –\n    %a{ :href => \"http://sass-lang.com/tutorial.html#mixins\" }\n      mixins\n    to get beautiful buttons with\n    %span.caps\n      CSS\n    gradients that degrade nicely.  Uses Compass Colors.\n\n%h3\n  Misc\n%ul\n  %li\n    %a{ :href => \"http://github.com/tdreyno/compass-slickmap\" }\n      Slickmap\n    – plugin for\n    %a{ :href => \"http://astuteo.com/slickmap/\" }\n      slickmap\n    sitemaps\n\n%h3\n  Sass Libraries\n%p\n  Libraries are simply Sass stylesheets or\n  %a{ :href => \"http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#partials\" }\n    partials\n  \\.\n%ul\n  %li\n    %a{ :href => \"http://github.com/handcrafted/handcrafted-compass-mixins/blob/master/_border-radius.scss\" }\n      Handcrafted Rounded Corners\n  %li\n    %a{ :href => \"http://github.com/ntreadway/JQuery.tools.tabs.scss\" }\n      Ntreadway JQuery tools tabs\n%h3\n  Plugins that are Works-In-Progress\n%ul\n  %li\n    %a{ :href => \"http://github.com/hpoydar/compass-aristo-plugin\" }\n      Aristo\n  %li\n    %a{ :href => \"http://github.com/marnen/compass-elastic-plugin\" }\n      Elastic\n  %li\n    %a{ :href => \"http://github.com/jtoy/compass-fluid960-plugin\" }\n      Fluid 960\n  %li\n    %a{ :href => \"http://github.com/kosmas58/compass-jquery-plugin\" }\n      jQuery\n  %li\n    %a{ :href => \"http://github.com/djmaze/compass-yaml-plugin\" }\n      %span.caps\n        YAML\n\n%h3\n  Other Sass-based Projects\n%ul\n  %li\n    %a{ :href => \"http://github.com/jazen/css\" }\n      Jazen’s\n      %span.caps\n        CSS\n      Framework\n    – Sass library that\n    %em\n      should\n    be a compass plugin.\n  %li\n    %a{ :href => \"http://github.com/teejayvanslyke/sassafras\" }\n      Sassafras\n    – Color Scheme Generator for Sass\n  %li\n    %a{ :href => \"http://github.com/danboy/tenplate\" }\n      Tenplate\n    – Another Sass library with rails helpers.\n"
  },
  {
    "path": "compass-style.org/content/get-involved/index.haml",
    "content": "---\ntitle: Get involved with the Compass community\ncrumb: Get Involved\nclassnames:\n  - get-involved\nlayout: default\n---\n\n%h1 Get Involved With Compass\n\n:markdown\n\n  Many [wonderful people](https://github.com/chriseppstein/compass/contributors) have helped to make Compass awesome.\n  Here are some ways you can get involved with the Compass community.\n\n  ## Share Sweet Stylesheets\n\n  So you've written some smashing Sass and you want to share them with others. Here are some ways you can.\n\n  1. [**Contribute to Compass**](/help/tutorials/contributing).\n  2. [**Develop a Compass Extension**](/help/tutorials/extensions).\n  3. [**Contribute to Sass Recipes**](http://chriseppstein.github.com/sass-recipes/).\n  4. Publish your code somewhere and email a link to the [mailing list](http://groups.google.com/group/compass-users).\n\n  ## Help Others\n\n  Join the [mailing list](http://groups.google.com/group/compass-users) and help answer questions and share from your experience. If you're\n  writing a blog post about Sass or Compass send a link to the mailing list and we'll help you spread the word.\n\n  ## Give Financially\n\n  Compass is charityware. You can use it as much as you like, but we encourage you to make a donation to help the [UMDF](http://umdf.org/)\n  find a cure for mitochondrial disease. If you can, please [donate here](http://umdf.org/compass/). Thanks!\n"
  },
  {
    "path": "compass-style.org/content/help/documentation/command-line.markdown",
    "content": "---\ntitle: Compass Command Line Documentation\nlayout: documentation\nclassnames:\n  - documentation\n---\nCompass Command Line Documentation\n==================================\n\nThis page lists the compass commands you can use to set up and manage your project.\n\nYou may also find one of these walk throughs useful:\n\n* HOWTO: [Compile your stylesheets for production](/help/tutorials/production-css/)\n\n<!--\nExtensions Commands\n-------------------\n\n### install a global extension. probably requires sudo.\n\n    compass extension install extension_name \n\n### install an extension into a project\n    compass extension unpack extension_name [path/to/project]\n\n### uninstall a local or global extension. global extensions will require sudo.\n\n    compass extension uninstall extension_name [path/to/project]\n\n### list the extensions in the project\n\n    compass extensions list\n\n### list the extensions available for install\n\n    compass extensions available\n-->\n\nProject Commands\n----------------\n<a name=\"create\"/>\n### Create a new compass project\n\n    compass create path/to/project [--using blueprint] [--sass-dir=sass ...] [--project-type=rails]\n\n<a name=\"init\"/>\n### Initialize an existing project to work with compass\n\n    compass init rails path/to/project [--using blueprint]\n\n<a name=\"install\"/>\n### Install a pattern from an extension into a project\n\n    compass install blueprint/buttons [path/to/project]\n\n<a name=\"compile\"/>\n### Compile the project's sass files into css\n\n    compass compile [path/to/project]\n\n<a name=\"watch\"/>\n### Watch the project for changes and compile whenever it does\n\n    compass watch [path/to/project]\n\n<a name=\"config\"/>\n### Emit a configuration file at the location specified.\n\n    compass config [path/to/config] [--sass-dir=sass --css-dir=css ...]\n\n<a name=\"validate\"/>\n### Validate the generated CSS.\n\n    compass validate [path/to/project]\n\nMisc commands\n-------------\n\n<a name=\"grid-img\"/>\n### Generate a background image that can be used to verify grid alignment\n\n    compass grid-img W+GxH [path/to/grid.png]\n\nWhere:\n<dl class=\"table\">\n  <dg><dt><code>W</code> = </dt><dd>Width of 1 column in pixels.</dd></dg>\n  <dg><dt><code>G</code> = </dt><dd>Width of 1 gutter in pixels.</dd></dg>\n  <dg><dt><code>H</code> = </dt><dd>Height of the typographic baseline in pixels.</dd></dg>\n</dl>\nExamples:\n\n    # 40px column, 10px gutter, 20px height at <images_dir>/grid.png\n    compass grid-img 40+10\n    # 40px column, 20px gutter, 28px height at <images_dir>/grid.png\n    compass grid-img 40+20x28\n    # 60px column, 20px gutter, 28px height at images/wide_grid.png\n    compass grid-img 60+20x28 images/wide_grid.png\n\n<a name=\"interactive\"/>\n### Enter into a console for testing SassScript in a compass environment.\n\n    compass interactive\n\n<a name=\"stats\"/>\n### Print out statistics about your stylesheets\n\n    compass stats\n\n<a name=\"version\"/>\n### Emit the version of compass\n\n    compass version\n\n<a name=\"unpack\"/>\n### Unpack a framework or extension into your project\n\n    compass unpack <extension>\n\nGet Help on the Command Line\n----------------------------\n\n<a name=\"help\"/>\n### Get help on compass\n\n    compass help\n\n<a name=\"help-extension\"/>\n### Get help on an extension\n\n    compass help extension_name\n\n<a name=\"help-pattern\"/>\n### Get help about an extension pattern\n\n    compass help extension_name/pattern_name\n\n<a name=\"help-command\"/>\n### Get help about a particular sub command\n\n    compass help command_name\n\n"
  },
  {
    "path": "compass-style.org/content/help/documentation/configuration-reference.markdown",
    "content": "---\ntitle: Configuration Reference\nlayout: documentation\nclassnames:\n  - documentation\n---\n# Ruby-based Configuration Reference\n\nThe compass configuration file is a ruby file, which means that we can do some\nclever things if we want to. But don’t let it frighten you; it’s really quite\neasy to set up your project.\n<a name=\"basic-format\"></a>\n## Basic format\n\nMost configuration properties are a simple assignment to a configuration property.\nFor example:\n\n    css_dir = \"stylesheets\"\n\nMost configuration properties have a value that is a “basic” type. There are three\nbasic types that can be set to a property:\n\n* **String** – Text is surrounded by either single or double quotes.\n  E.g. `\"this is a string\"`\n* **Symbol** – A symbol starts with a colon and has no spaces in it.\n  Symbols are used to represent values where the set of possible values are limited.\n  E.g. `:foo` or `:foo_bar_baz`\n* **Boolean** – `true` or `false`\n\nThere are two kinds of composite values:\n\n* **Array** – An Array is a comma delimited list of basic values surrounded by\n  square brackets. E.g. `[\"one\", \"two\", \"three\"]`.\n* **Hash** – A Hash is an association or mapping of one value to another.\n  It is a comma delimited list of associations surrounded by curly brackets.\n  An association is two values separated by `=>`. E.g. `{:foo => \"aaa\", :bar => \"zzz\"}`\n\n<a name=\"comments\"></a>\n## Comments\n\nUse the hash sign `#` to comment out everything from the hash sign to the end\nof the line.\n<a name=\"import-note-windows-users\"></a>\n## Import Note for Windows Users\n\nThe backslash character (`\\`) is a special character in a string delimited by\ndouble quotes (`\"`). If you are working with folders in your paths, you should\neither use **single quotes** to delimit your strings or escape your backslash\nby doubling it like `\"some\\\\path\"`.\n\n<a name=\"loading-compass-plugins\"></a>\n## Loading Compass Plugins\n\nCompass relies on the ruby `require` mechanism to load other libraries of code.\nTo load a compass-compatible plugin, simply require it at the top of your\nconfiguration file. If you used the -r option to access another library at project\ncreation time, this will already be set up for you.\n\nExample:\n\n    require 'ninesixty'\n    require 'susy'\n\n<a name=\"overriding-configuration-settings\"></a>\n## Overriding Configuration Settings\n\nWhen using the compass command line, configuration options that you set on the\ncommand line will override the corresponding settings in your configuration file.\n\n<a name=\"inspecting-configuration-settings-passed-via-the-command-line\"></a>\n## Inspecting Configuration Settings passed via the Command Line\n\nWhen using the compass command line, configuration options that you set on the\ncommand line can be inspected within the configuration file. For instance,\nif you set the environment:\n\n    $ compass compile -e production --force\n\nThen you can inspect the value like so:\n\n    output_style = (environment == :production) ? :compressed : :expanded\n\nValues that are not set on the CLI will be `nil` even though they will have a default value\nlater on.\n<a name=\"configuration-properties\"></a>\n## Configuration Properties\n\n<table>\n  <tr>\n    <th>Property Name</th>\n    <th>Type </th>\n    <th>Description </th>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>project_type</code> </td>\n    <td style=\"vertical-align:top;\">Symbol </td>\n    <td style=\"vertical-align:top;\">Can be <code>:stand_alone</code> or\n      <code>:rails</code>. Defaults to <code>:stand_alone</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>environment</code> </td>\n    <td style=\"vertical-align:top;\">Symbol </td>\n    <td style=\"vertical-align:top;\">The environment mode.\n      Defaults to <code>:development</code>, can also be <code>:production</code>\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>project_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">Not needed in <code>:stand_alone</code> mode\n      where it can be inferred by context. Sets the path to the root of the project.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>http_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The path to the project when running within the\n      web server. Defaults to <code>\"/\"</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>css_dir</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The directory where the css stylesheets are kept.\n      It is relative to the <code>project_path</code>.\n      Defaults to <code>\"stylesheets\"</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>css_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The full path to where css stylesheets are kept.\n      Defaults to <code>&lt;project_path&gt;/&lt;css_dir&gt;</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>http_stylesheets_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The full http path to stylesheets on the web server. Defaults to <code>http_path + \"/\" + css_dir</code>. </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>sass_dir</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The directory where the sass stylesheets are kept.\n      It is relative to the <code>project_path</code>. Defaults to <code>\"sass\"</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>sass_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The full path to where sass stylesheets are kept.\n      Defaults to <code>&lt;project_path&gt;/&lt;sass_dir&gt;</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>images_dir</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The directory where the images are kept.\n      It is relative to the <code>project_path</code>.\n      Defaults to <code>\"images\"</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>images_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The full path to where images are kept.\n      Defaults to <code>&lt;project_path&gt;/&lt;images_dir&gt;</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>http_images_path</code> </td>\n    <td style=\"vertical-align:top;\">String</td>\n    <td style=\"vertical-align:top;\">The full http path to images on the web server.\n      Defaults to <code>http_path + \"/\" + images_dir</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>generated_images_dir</code> </td>\n    <td style=\"vertical-align:top;\">String</td>\n    <td style=\"vertical-align:top;\">The directory where generated images are kept.\n      It is relative to the <code>project_path</code>.\n      Defaults to the value of <code>images_dir</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>generated_images_path</code> </td>\n    <td style=\"vertical-align:top;\">String</td>\n    <td style=\"vertical-align:top;\">The full path to where generated images are kept.\n      Defaults to the value of <code>&lt;project_path&gt;/&lt;generated_images_dir&gt;</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>http_generated_images_path</code> </td>\n    <td style=\"vertical-align:top;\">String</td>\n    <td style=\"vertical-align:top;\">The full http path to generated images on\n      the web server. Defaults to <code>http_path + \"/\" + generated_images_dir</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>javascripts_dir</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The directory where the javascripts are kept.\n      It is relative to the <code>project_path</code>. Defaults to\n      <code>\"javascripts\"</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>javascripts_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The full path to where javascripts are kept.\n      Defaults to <code>&lt;project_path&gt;/&lt;javascripts_dir&gt;</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>http_javascripts_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The full http path to javascripts on the web server.\n      Defaults to <code>http_path + \"/\" + javascripts_dir</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>output_style</code> </td>\n    <td style=\"vertical-align:top;\">Symbol </td>\n    <td style=\"vertical-align:top;\">The output style for the compiled css.\n      One of: <code>:nested</code>, <code>:expanded</code>, <code>:compact</code>,\n      or <code>:compressed</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>relative_assets</code> </td>\n    <td style=\"vertical-align:top;\">Boolean </td>\n    <td style=\"vertical-align:top;\">Indicates whether the compass helper functions\n      should generate relative urls from the generated css to assets, or absolute urls\n      using the http path for that asset type.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>additional_import_paths</code> </td>\n    <td style=\"vertical-align:top;\">Array of Strings </td>\n    <td style=\"vertical-align:top;\">Other paths on your system from which to import\n      sass files. See the <code>add_import_path</code> function for a simpler\n      approach.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>sourcemap</code> </td>\n    <td style=\"vertical-align:top;\">Boolean</td>\n    <td style=\"vertical-align:top;\">\n      Set this to true to enable sourcemap output.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>disable_warnings</code> </td>\n    <td style=\"vertical-align:top;\">Boolean </td>\n    <td style=\"vertical-align:top;\">\n      Set this to true to silence deprecation warnings.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>sass_options</code> </td>\n    <td style=\"vertical-align:top;\">Hash </td>\n    <td style=\"vertical-align:top;\">These options are passed directly to the\n      Sass compiler. For more details on the format of sass options, please read the\n      <a href=\"http://sass-lang.com/documentation/file.SASS_REFERENCE.html#options\">sass options documentation</a>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>line_comments</code> </td>\n    <td style=\"vertical-align:top;\">Boolean </td>\n    <td style=\"vertical-align:top;\">Indicates whether line comments should be added\n      to compiled css that says where the selectors were defined. Defaults to false\n      in production mode, true in development mode.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>preferred_syntax</code> </td>\n    <td style=\"vertical-align:top;\">Symbol </td>\n    <td style=\"vertical-align:top;\">Can be <code>:scss</code> or <code>:sass</code>.\n      Defaults to <code>:scss</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>fonts_dir</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The directory where the font files are kept.\n      Standalone projects will default to <code>&lt;css_dir&gt;/fonts</code>.\n      Rails projects will default to <code>\"public/fonts\"</code>.\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>fonts_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The full path to where font files are kept.\n      Defaults to <code>&lt;project_path&gt;/&lt;fonts_dir&gt;</code>.</td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>http_fonts_path</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The full http path to font files on the web server.</td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>http_fonts_dir</code> </td>\n    <td style=\"vertical-align:top;\">String </td>\n    <td style=\"vertical-align:top;\">The relative http path to font files on the web server.</td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>sprite_engine</code> </td>\n    <td style=\"vertical-align:top;\">Symbol </td>\n    <td style=\"vertical-align:top;\">Defaults to <code>:chunky_png</code></td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>chunky_png_options</code></td>\n    <td style=\"vertical-align:top;\">Hash </td>\n    <td style=\"vertical-align:top;\">\n      Defaults to <code>{:compression => Zlib::BEST_COMPRESSION}</code>. See the chunky_png <a href='https://github.com/wvanbergen/chunky_png/wiki/Constraints' _target='blank'>wiki</a> for more information\n    </td>\n  </tr>\n  <tr>\n    <td style=\"vertical-align:top;\"><code>sprite_load_path</code></td>\n    <td style=\"vertical-align:top;\">Array </td>\n    <td style=\"vertical-align:top;\">\n      Defaults to <code> [images_path] </code>\n    </td>\n  </tr>\n</table>\n\n<a name=\"configuration-functions\"></a>\n## Configuration Functions\n\n**`add_import_path`** – Call this function to add a path to the list of sass import\npaths for your compass project. E.g.:\n\n    add_import_path \"/Users/chris/work/shared_sass\"\n\n---\n\n**`asset_host`** – Pass this function a block of code that will define the asset\nhost url to be used. The block must return a string that starts with a protocol\n(E.g. http). The block will be passed the root-relative url of the asset.\nFor example, this picks one of four asset hosts numbered 0-3, depending on\nthe name of the asset:\n\n    asset_host do |asset|\n      \"http://assets%d.example.com\" % (asset.hash % 4)\n    end\n\nBy default there is no asset host used. When `relative_assets` is true\nthe asset host configuration is ignored.\n\n---\n\n<a name=\"asset-cache-buster\"></a>\n**`asset_cache_buster`** – Pass this function a block of code that defines the\ncache buster strategy to be used. The block must return nil, a string or a hash.\nIf the returned value is a hash the values of :path and/or :query is used to generate\na cache busted path to the asset. If a string value is returned, it is added as a query string.\nThe returned values for query strings must not include the starting `?`.\n\nThe block will be passed the root-relative url of the asset.\nIf the block accepts two arguments, it will also be passed a path\nthat points to the asset on disk — which may or may not exist.\n\n    # Increment the deploy_version before every release to force cache busting.\n    deploy_version = 1\n    asset_cache_buster do |http_path, file|\n      if file\n        file.mtime.strftime(\"%s\")\n      else\n        \"v=#{deploy_version}\"\n      end\n    end\n\nBusting the cache via path:\n\n    asset_cache_buster do |path, file|\n      if file\n        pathname = Pathname.new(path)\n        modified_time = file.mtime.strftime(\"%s\")\n        new_path = \"%s/%s-%s%s\" % [pathname.dirname, pathname.basename(pathname.extname), modified_time, pathname.extname]\n\n        {:path => new_path, :query => nil}\n      end\n    end\n\nTo disable the asset cache buster:\n\n    asset_cache_buster :none\n\n---\n\n**`watch`** -- React to changes to arbitrary files within your project. Can be invoked\nmore than once. Example:\n\n    watch \"images/**/*\" do |project_dir, relative_path|\n      if File.exists?(File.join(project_dir, relative_path))\n        puts \"File size of #{relative_path} is: #{File.size(File.join(project_dir, relative_path))}\"\n      end\n    end\n\nThis code will be called if the file is added, updated, or removed. Be sure to check for existence\nto avoid crashing the watcher in the case where the file has been removed.\n<a name=\"callbacks\"></a>\n## Callbacks\n\n**`on_sprite_saved`** -- Pass this function a block of code that gets executed after a sprite is saved to disk. The block will be passed the filename. Can be invoked more then once. Example:\n\n    on_sprite_saved do |filename|\n      post_process(filename) if File.exists?(filename)\n    end\n\n**`on_sprite_generated`** -- Pass this function a block of code that gets executed after a sprite is generated but before its saved to disk. The block will be passed an instance of `ChunkyPNG::Image`. Can be invoked more then once. Example:\n\n    on_sprite_generated do |sprite_data|\n      sprite_data.metadata['Caption'] = \"This Image is &copy; My Company 2011\"\n    end\n\n**`on_stylesheet_saved`** -- Pass this function a block of code that gets executed after a stylesheet is processed. The block will be passed the filename. Can be invoked more then once. Example:\n\n    on_stylesheet_saved do |filename|\n      Growl.notify {\n         self.message = \"#{File.basename(filename)} updated!\"\n         self.icon = '/path/to/success.jpg'\n       }\n    end\n\n**`on_stylesheet_error`** -- Pass this function a block of code that gets executed if a stylesheet has an error while processing. The block will be passed the filename and the error message. Can be invoked more then once. Example:\n\n    on_stylesheet_error do |filename, message|\n      Growl.notify {\n        self.message = \"#{File.basename(filename)}: #{message}\"\n        self.icon = '/path/to/fail.jpg'\n        sticky!\n      }\n    end\n"
  },
  {
    "path": "compass-style.org/content/help/documentation/sass-based-configuration-options.markdown",
    "content": "---\ntitle: Sass-based Configuration Options\nlayout: documentation\nclassnames:\n  - documentation\n---\n# Sass-based Configuration Options\n\nMost of the options available in the Ruby-based configuration file are\nused to configure the Sass compiler. These options cannot be configured\nfrom within your Sass files.\n\nHowever some Compass options are possible to set from within Sass\nbecause they are only used to control how Compass's built-in functions\nwork. For example, url generation using `image-url()` and `font-url()`.\n\nThe options that can be set via Sass configuration are:\n\n* `asset-cache-buster` - String, Function reference, or `null`. The function\n  reference must accept two arguments (url path, filename) and can\n  return either a string to be interpreted as a query parameter or a map\n  containing the keys query and/or path mapped to a string. The string\n  is a simple value to set as the query parameter on all urls, when\n  `null`, the cache busting feature is disabled.\n* `asset-host` - Function reference, or `null`. When `null` this feature\n  is disabled (default). A referenced function must accept a single\n  argument (the root relative url) and return a full url (starting with\n  \"http\").\n* `disable-warnings` - Boolean. When true, warnings will not be output.\n* `fonts-dir` - String. Relative to project directory.\n* `fonts-path` - String. Absolute path.\n* `generated-images-dir` - String. Relative to project directory.\n* `generated-images-path` - String. Absolute path.\n* `http-fonts-dir` - String. Relative to project directory.\n* `http-fonts-path` - String. Absolute path.\n* `http-generated-images-dir` - String. Relative to http path.\n* `http-generated-images-path` - String. Absolute path.\n* `http-images-dir` - String. Relative to project directory.\n* `http-images-path` - String. Absolute path.\n* `http-path` - String. URL Prefix of all urls starting with '/'.\n* `images-dir` - String. Relative to project directory.\n* `images-path` - String. Absolute path.\n* `relative-assets` - Boolean. When true, generate relative paths from\n  the css file to the asset.\n\nThe have the same meaning as the corresponding options in the ruby\nconfiguration format. However, there are some things that are different\nthat are worth explaining. \n\n## Working with paths.\n\nCompass provides a function called `absolute-path` that will turn any\npath relative to the sass file it is called from into an absolute path.\nIn order to make your stylesheets work on both windows and unix-based\noperating systems, you should use the `join-file-segments` function\ninstead of a file separator.\n\nFor example. If your configuration partial was stored in a subdirectory\nof your sass folder you would want to set `$project-path` to\n`absolute-path(join-file-segments('..', '..'))`.\n\nIn some cases it is useful to parse a url or filename.\nThe function `split-filename($filename)` returns a triple of\n`(directory, basename, extension)`. \n\n## Working with Function References\n\nSome configuration options passed to compass accept a function\nreference. This is an identifier that is the same name as a Sass\nfunction defined in either Sass or Ruby. What arguments the function\naccepts and should return depends on the particular configuration\nproperty. For example:\n\n    @function my-cache-buster($url, $file) {\n      $hash: md5sum($file);\n      @if $hash {\n        @return (query: \"h=#{$hash}\");\n      } @else {\n        @return null;\n      }\n    }\n    \n    @include compass-configuration($asset-cache-buster: my-cache-buster);\n\n\n## Configuration File Best Practices\n\nIt is suggested that all compass configuration performed from within\nSass should be kept in a single partial named `project-setup`. This file\nshould be imported into every Sass file that is to be used with Compass.\n\n\n## Understanding the project setup file\n\n    $project-path: absolute-path(\"..\");\n\nThe global `$project-path` must be set to an absolute path to the\ndirectory of the project. This global is used to initial compass\nwhen importing `compass/configuration`.\n\n    $debug-configuration: true;\n\nCauses compass to output useful debugging information about how it is\nconfigured.\n\n    @import \"compass/configuration\";\n\nInitializes compass and makes some useful configuration utilities available.\n\n        $compass-options: (http_path: \"/\");\n        @include compass-configuration($compass-options);\n\nConfigures Compass according to your specific needs. If this mixin is\ncalled more than once it will give you a warning. To reconfigure compass\nwith different options, pass `$reconfigure: true` to the\ncompass-configuration mixin.\n\n"
  },
  {
    "path": "compass-style.org/content/help/documentation/tuning-vendor-prefixes.markdown",
    "content": "---\ntitle: Tuning Vendor Prefix Support\nlayout: documentation\nclassnames:\n  - documentation\n---\n\n# Tuning Vendor Prefixes from Compass Stylesheets\n\nUnderneath the covers of Compass's vendor prefixing and legacy\nbrowser support is the very same data that drives the website\n[caniuse.com](http://caniuse.com).\n\nThis data allows Compass to correlate browser support with browser usage\nstatistics and browser versions for you. By telling Compass the user\nthresholds where you're comfortable letting a user's experience degrade\ngracefully or break Compass will automatically add or remove vendor\nprefixes for particular features according to the browser statistics\ncorresponding to them.\n\n## Allowing Graceful Degradation in Legacy Browsers\n\nCSS features that can degrade gracefully (E.g. `border-radius`) are set\nby default to adhere to the `$graceful-usage-threshold` variable. This\nvariable defaults to `0.1` which means that when 0.1% of users (1 in\n1,000) would be affected by removing the prefix for that feature, it\nwill be removed.\n\n## Allowing Broken Design in Legacy Browsers\n\nCSS features that do not degrade gracefully (E.g. `flexbox`) are set by\ndefault to adhere to the `$critical-usage-threshold` variable. This\nvariable defaults to `0.01` which means that when 0.01% of users (1 in\n10,000) would be affected by removing the prefix for that feature, it\nwill be removed.\n\n## Ensuring a Browser Version Is Supported\n\nSometimes you may wish to fully support a browser version no matter how\nfew people are using it. Maybe the CEO uses it and it has to look\nperfect. In this case you can set the minimum browser version for each\nknown browser with the `$browser-minimum-versions` map. For instance, if\nyou need to support IE 6, you would set `$browser-minimum-versions` to\n`(ie: '6')`. Please note that since not all browser versions that\nCompass tracks are numbers, every version specified must be a string.\n\n## Excluding a Browser no Matter How Many Users it Has\n\nThe `$supported-browsers` variable defines which browsers your site\nsupports. By default, all browsers are supported. You can use this\nsetting to whitelist only certain browsers, or you can blacklist\nspecific browsers by rejecting them from the full list. Example:\n`$supported-browsers: reject(browsers(), opera-mini, android)`\n\n## Discovering Browsers and Versions\n\nThe list of browsers and versions that are known to compass is guided by\nthe underlying data. You can inspect these values in the console:\n\n    $ compass interactive\n    >> browsers()\n    (\"android\", \"android-chrome\", \"android-firefox\", \"blackberry\", \"chrome\", \"firefox\", \"ie\", \"ie-mobile\", \"ios-safari\", \"opera\", \"opera-mini\", \"opera-mobile\", \"safari\")\n    >> browser-versions(ie)\n    (\"5.5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\")\n\n## Tweaking Support on a Per-Feature Basis\n\nEach CSS3 module provides feature-specific threshold variables. These\ndefault to either `$graceful-usage-threshold` or\n`$critical-usage-threshold`, which should be good enough, but if it's\nnot, you can adjust the support for just the features that matter to\nyou. For example, the border radius module has a configuration variable\n`$border-radius-threshold` which defaults to\n`$graceful-usage-threshold`. But if rounded corners are essential to\nyour design, you may want to set it to something lower.\n\n## Prefix Context\n\nThere are two variables relating to prefix context.\n\n`$prefix-context` will be set to a prefix whenever a prefix is in scope.\n\n`$current-prefix` is set the prefix that is currently being emitted. This\nis different from `$prefix-context` in that sometimes it is null when\nrendering official syntax within the scope of some other prefix.\n\nAll Compass mixins are aware of the prefix context and you can use them\nfreely and get the output you expect. You can also check the context\nyourself if you feel it is necessary.  For example, the keyframes mixin\naccepts a content block which is repeated several times:\n\n    @import \"compass/css3\";\n    @include keyframes(my-animation) {\n      0% {\n        @if $prefix-context == -moz {\n          // Do something mozilla specific in your animation.\n        }\n        @include border-radius(5px); // only outputs the -moz prefix an\n      }\n    }\n\nHowever, Compass comes with a handy mixin for targeting content to a\nspecific prefix context: `with-browser-prefix`. This mixin can be used\nto establish a context or prevent content from being placed into a\ncontext where it doesn't belong. For example, we could have written the\nexample above as:\n\n    @import \"compass/css3\";\n    @include keyframes(my-animation) {\n      0% {\n        @include with-prefix(-moz) {\n          // Do something mozilla specific in your animation.\n        }\n        @include border-radius(5px); // only outputs the -moz prefix an\n      }\n    }\n\nSimilarly, you can constrain compass output to a particular prefix. The\nexample below would only generate the mozilla and official keyframes\ndirectives and prefixed properties.\n\n    @import \"compass/css3\";\n    @include with-prefix(-moz) {\n      @include keyframes(my-animation) {\n        0% {\n          @include border-radius(5px); // only outputs the -moz prefix an\n        }\n      }\n    }\n\n## Targeting Legacy Browsers\n\nWhen a generic mixin has support for a legacy browser, the legacy\nspecific styles should be wrapped in a `for-legacy-browser` mixin.\nIn this way, the legacy content will only appear when not in an\nincompatible context and will be automaticaly removed when the usage\nof that browser range falls below acceptable thresholds.\n\n## Browser Context\n\nIf you are in a selector or scope that you know is specific to a\nparticular browser version, you can let compass know this with the\n`with-browser-ranges` mixins.\n\n## Debugging Browser Support\n\nIf you find yourself in a situation where you see a browser prefix you\ndidn't expect or don't see one that you did, it may be helpful to turn\non browser support debugging by setting `$debug-browser-support` to `true`.\n\nThis will cause CSS comments to be generated into your output that explains\nwhy support for certain browsers was included or excluded.\n\nYou can also use the `with-browser-support-debugging` mixin that will\nenable browser support debugging for all compass mixins uses within its\ncontent block.\n\nThe output will look like this:\n\n    /* Capability css-animation is prefixed with -moz because 1.03559% of users need it which is more than the threshold of 0.1%. */\n    /* Creating new -moz context. */\n    @-moz-keyframes foo {\n      0% {\n        /* Content for ie 8 omitted.\n           Not allowed in the current scope: ie 8 is incompatible with -moz. */\n        opacity: 0; }\n    \n      100% {\n        /* Content for ie 8 omitted.\n           Not allowed in the current scope: ie 8 is incompatible with -moz. */\n        opacity: 1; } }\n    /* Capability css-animation is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n    /* Capability css-animation is not prefixed with -o because 0.04931% of users are affected which is less than the threshold of 0.1. */\n    /* Capability css-animation is prefixed with -webkit because 51.42143% of users need it which is more than the threshold of 0.1%. */\n    /* Creating new -webkit context. */\n    @-webkit-keyframes foo {\n      0% {\n        /* Content for ie 8 omitted.\n           Not allowed in the current scope: ie 8 is incompatible with -webkit. */\n        opacity: 0; }\n    \n      100% {\n        /* Content for ie 8 omitted.\n           Not allowed in the current scope: ie 8 is incompatible with -webkit. */\n        opacity: 1; } }\n    @keyframes foo {\n      0% {\n        /* Content for ie 8 omitted.\n           Not allowed in the current scope: The current scope only works with ie 10 - 11. */\n        opacity: 0; }\n    \n      100% {\n        /* Content for ie 8 omitted.\n           Not allowed in the current scope: The current scope only works with ie 10 - 11. */\n        opacity: 1; } }\n    \n\n\n## More Information\n\nThere are many useful mixins and functions in\n[the code reference for browser support in compass](/reference/compass/support/).\n"
  },
  {
    "path": "compass-style.org/content/help/documentation.haml",
    "content": "---\ntitle: Compass Documentation\ncrumb: Documentation\nclassnames:\n  - documentation\nlayout: documentation\n---\n%h1 Compass Documentation\n\n:markdown\n  This documentation is still a work-in-progress, if something isn't covered here\n  please submit an issue to the [Compass issue tracker](https://github.com/chriseppstein/compass/issues?labels=documentation&state=open).\n\n"
  },
  {
    "path": "compass-style.org/content/help/index.haml",
    "content": "---\ntitle: Compass Help\ncrumb: Help\nclassnames:\n  - help\n  - getting-started\nlayout: site\n---\n%article\n  %h1 Getting started with Compass\n\n  :markdown\n    Compass is an open-source CSS authoring framework which uses the [Sass stylesheet\n    language](http://sass-lang.com) to make writing stylesheets powerful and easy. If you're\n    not familiar with Sass, Go to [sass-lang.com](http://sass-lang.com/guide) to learn\n    all about how it works.\n\n  :markdown\n    ## Installing Compass\n\n    To install, please follow the steps found in the [Compass installation guide](/install/).\n\n    This will install Compass and Sass too. If you want to verify that compass is installed, run:\n\n        $ compass version\n\n    ## Watching and Compiling your Project\n\n    When doing development on your project, you can run the compass watcher to keep your CSS files\n    up to date as changes are made.\n\n        $ cd /path/to/project\n        $ compass watch\n\n    When it comes time to compile your css files for production use, pass the `-e production`\n    compiler option to select defaults that optimize your output for end-users:\n\n        $ compass compile -e production\n\n    ## Using Compass without the command line tools\n\n    You can use compass without the compass command line tools. In some cases,\n    this may make it easier to integrate with sass-based compilers and frameworks that\n    do not explicitly support Compass.\n\n        $ gem install compass-core\n        $ cat <<- EOF > _project-setup.scss\n        \\$project-path: absolute-path(join-file-segments(\"..\"));\n        @import \"compass/configuration\";\n        \\$compass-options: (http_path: \"/\");\n        @include compass-configuration(\\$compass-options);\n        EOF\n        # Add to the top of each sass file: @import \"project-setup\";\n        # Compile using the Sass command line:\n        $ sass -r compass-core --update sass:css\n\n    Read more: [Compass's Sass-based configuration options](/help/documentation/sass-based-configuration-options/).\n\n    ## More command line options\n\n    Full documentation of all compass commands can be found by running:\n\n        $ compass help\n\n    To see the options available and description for a compass command run:\n\n        $ compass help <command>\n\n    Where `<command>` is one of the compass commands (E.g. `compile`)\n\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/best_practices.markdown",
    "content": "---\ntitle: Best practices\ncrumb: Best practices\nlayout: tutorial\nclassnames:\n  - tutorial\n---\n\n# Best Practices\n\nHere are some best practices for making your projects easier to build and\nsimpler to maintain.\n\n## Use a Base stylesheet file\n\nCreate a `_base.scss` [partial][1] to initialize your stylesheets with common\nvariables and ([often][2]) the framework utilities you plan to use:\n\n### _base.scss\n\n    $blueprint-grid-columns : 24;\n    $blueprint-grid-width   : 30px;\n    $blueprint-grid-margin  : 10px;\n    $font-color             : #333;\n\n    @import \"compass/reset\";\n    @import \"compass/utilities\";\n    @import \"blueprint\";\n\n    // etc.\n\nThe `_base.scss` file is also a great place to keep your own custom mixins, so\nthey’re available to any stylesheet that includes it.\n\nThen you can include this file in all other stylesheets:\n\n### application.scss\n\n    @import \"base\";\n\n    #wrapper {\n      @include container;\n    }\n\n    // etc.\n\nIt is important to define any compass/framework constants that you want to override\nin base.scss first, before @import-ing the framework files. See [Working with \nConfigurable Variables][3], for a specific example.  Note that you can refer to `_base.scss` without the\nleading underscore and without the extension, since it is a [partial][1].\n\n## Write your own Custom Mixins\n\nMixins let you insert any number of style rules into a selector (and its\ndescendants!) with a single line. This is a great way to [DRY][4] up your\nstylesheet source code and make it much more maintainable. Using mixins will\nalso make your stylesheet look like self-documented source code -- It’s much\nmore obvious to read something like `@include round-corners(6px, #f00)` than the whole\nlist of rules which define that appearance.\n\n## Presentation-free Markup\n\nCSS was created to extract the presentational concerns of a website from the\nwebpage content. Following this best practice theoretically results in a website\nthat is easier to maintain. However, in reality, the functional limitations of\nCSS force abstractions down into the markup to facilitate the [DRY][4] principle\nof code maintainability. Sass allows us to move our presentation completely to\nthe stylesheets because it lets us create abstractions and reuse entirely in\nthat context. Read [this blog post][5] for more information on the subject.\n\nOnce you have clean markup, style it using Mixins and Inheritance. With clean\nand clear abstractions you should be able to read stylesheets and imagine what\nthe webpage will look like without even loading the page in your web browser.\n\nIf you find your CSS is getting too bloated due to sharing styles between\nsemantic selectors, it may be time to refactor. For instance this stylesheet\nwill be unnecessarily bloated:\n\n    @mixin three-column {\n      .container { @include container;  }\n      .header,\n      .footer    { @include column(24); }\n      .sidebar   { @include column(6);  }\n      article    { @include column(10); }\n      .rightbar  { @include column(8);  }\n    }\n    body#article,\n    body#snippet,\n    body#blog-post { @include three-column; }\n\nInstead, ask yourself \"what non-presentational quality do these pages share in\ncommon?\" In this case, they are all pages of content, so it's better to apply a\nbody class of \"content\" to these pages and then style against that class.\n\n## Nest selectors, but not too much.\n\nIt's easier to style a webpage from scratch or starting from some common base\npoint for your application than it is to contend with unwanted styles bleeding\ninto your new design. In this way, it is better to use some basic nesting of\nstyles using some selector early in the markup tree. And then to refactor as patterns of use emerge to reduce bloat.\n\nIt's important to remember that long selectors incur a small rendering\nperformance penalty that in aggregate can slow down your web page. There is\nno need to exactly mimic your document structure in your css. Instead nest\nonly deep enough that the selector is unique to that part of the document.\nFor instance, don't use `table thead tr th` when a simple `th` selector will\nsuffice. This might mean that you have to separate your styles into several\nselectors and let the document cascade work to your advantage.\n\n[1]: http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#partials\n[2]: http://groups.google.com/group/compass-users/browse_frm/thread/0ed216d409476f88\n[3]: http://compass-style.org/help/tutorials/configurable-variables/\n[4]: http://c2.com/cgi/wiki?DontRepeatYourself\n[5]: http://chriseppstein.github.com/blog/2009/09/20/why-stylesheet-abstraction-matters/\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/configurable-variables.haml",
    "content": "---\ntitle: Working with Configurable Variables\nlayout: tutorial\nclassnames:\n  - tutorial\n---\n\n:markdown\n  Working with Configurable Variables\n  ===================================\n\n  There are two ways of defining a variable in Sass. The first, most common, approach is\n  simple assignment. For example:\n\n      $my-constant : #fedcba\n\n  The second approach is called guarded assignment. In this case, the constant is only\n  set if it does not already have a value. For example:\n\n      $my-constant : #fedcba !default\n\n  Many compass modules use guarded assignment to allow you to set defaults for that module.\n  In order for these configurable variables to work correctly, you must set the variables\n  *before* you import the module. For example:\n\n      $blueprint-grid-columns = 12\n      @import \"blueprint/grid\"\n\n  Because of this, it is common to have one or more partials\n  that set the constants first and get imported before any other\n  imports in your stylesheet(s). This is commonly referred to as\n  the \"base\" stylesheet and is usually named `_base.scss` or `_base.sass`."
  },
  {
    "path": "compass-style.org/content/help/tutorials/contributing.markdown",
    "content": "---\ntitle: Contributing Stylesheets\ncrumb: Contributing\nlayout: tutorial\nclassnames:\n  - tutorial\n---\nContributing Stylesheets to Compass\n===================================\n\nThank you for your interest in contributing to Compass. Our goal is to make it as easy\nas we can for you to contribute changes to compass -- So if there's something here that\nseems harder than it ought to be, please let us know.\n\nIf you find a bug **in this document**, you are bound to contribute a fix. Stop reading now\nif you do not wish to abide by this rule.\n\n**Step 1**: If you do not have a github account, create one.\n\n**Step 2**: Fork Compass to your account. Go to the [main repo](http://github.com/chriseppstein/compass)\nand click the fork button.\n\n![Fork Me](http://img.skitch.com/20101015-n4ssnfyj16e555cnn7wp2pg717.png)\n\nNow we're at a decision point. What kind of change do you intend to make?\n\n* [Fix a typo (or some other trivial change)](#trivial-changes)\n* [Documentation Changes](#documentation-changes)\n* [Fixing Stylesheet Bugs](#stylesheet-bugs)\n* [New Stylesheet Features](#stylesheet-changes)\n* [Ruby Changes](#ruby-changes)\n\nHere's some general information about the project you might find useful along the way:\n\n* [Submitting Patches](#patches)\n* [Project Structure](#project-structure)\n<!-- * Project Architecture\n  * [Command Line](/help/tutorials/command-line)\n  * [Extensions](/help/tutorials/extensions)\n  * [Configuration](help/tutorials/configuration-reference) -->\n* [General Philosophy](#project-philosophy)\n* [Stylesheet Conventions](#stylesheet-conventions)\n* [Miscellaneous Stuff](#faq)\n  * [Setting up Git](#setting-up-git)\n  * [Using Compass while Under Development](#running-local-code)\n  * [Running Tests](#running-tests)\n  * [Recovering from a cherry-pick or a rebase](#recovering-from-rebased-or-cherry-picked-changesets)\n\n<h2 id=\"trivial-changes\">Making Trivial Changes</h2>\n\nThanks to Github, making small changes is super easy. After forking the project navigate\nto the file you want to change and click the edit link.\n\n![Edit Me](http://img.skitch.com/20101015-n2x2iaric7wkey2x7u4fa2m1hj.png)\n\nChange the file, write a commit message, and click the `Commit` button.\n\n![Commit Me](http://img.skitch.com/20101015-br74tfwtd1ur428mq4ejt12kfc.png)\nNow you need to get your change [accepted](#patches).\n\n\n<h2 id=\"documentation-changes\">Making Documentation Changes</h2>\n\nThe compass documentation is stored in two places. First, the `compass-style.org` directory is\nwhere the documentation lives -- however much of the documentation is generated\nfrom comments in the Sass files themselves. More information on [changing\ndocumentation][documentation]. Once your changes are pushed, please\n[submit them](#patches).\n\n<h2 id=\"stylesheet-bugs\">Fixing Stylesheet Bugs</h2>\n\n**Step 3**: If this is a bug you discovered. Please [report it][issues] before working on a fix.\nThis helps us better understand the patch.\n\n**Step 4**: Get [the code](#setting-up-git) if you haven't yet done so.\n\n**Step 5**: Fix the bug and commit the changes. Please make sure to mention the bug\nid in your commit message like so:\n\n    Fixed the display of the fizzlebuzz in IE6.\n\n    Closes GH-123.\n\n**Step 6**: Verify the fix in as many browsers as you can as well as against your own\nproject. How to [use compass while changing it](#running-local-code).\n\n**Step 7**: Make sure the tests pass. More info on [running tests](#running-tests)\nIf the tests fail, fix the tests or the stylesheets accordingly. If the tests, don't\nfail, that means this aspect was not well enough tested. Please [add or augment\na test](#writing-tests).\n\nYou're done. Please [submit your changes](#patches).\n\n<h2 id=\"stylesheet-changes\">Making Stylesheet Changes</h2>\n\nIt is a good idea to discuss new features ideas with the compass users and developers\nbefore building something. Please don't be shy; send an email to the [compass mailing\nlist](http://groups.google.com/group/compass-users).\n\nMany feature ideas are good but not obviously a good fit for the compass core library.\nIn these cases, you can and should create a [compass extension][extensions]. Sometimes\nthis is because the concept does not align with the [compass philosophy](#project-philosophy).\nBut sometimes it's just because we think the idea needs time to bake. [Documentation on\nmaking extensions.][extensions]\n\n**Step 3**: Get [the code](#setting-up-git) if you haven't yet done so.\n\n**Step 4**: Add the feature -- contact the mailing list if you have any questions.\n\n**Step 5**: Add a test case. More info on [writing tests for compass](#writing-tests).\n\n**Step 6**: Documentation - Add or update the reference documentation. Add\nan example of using the feature. See the [doc readme for details][documentation].\n\nYou're done. Please [submit your changes](#patches).\n\n<h2 id=\"ruby-changes\">Making Ruby Changes</h2>\n\nAt this time, if you're a rubyist who's planning on working on the ruby-side of\nthings, it's assumed you know how to read code and use standard ruby tools like\nrake, gem, bundler, test/unit, cucumber, rspec, etc. If you have any questions,\nplease ask. No changes will be accepted without accompanying tests.\n\n<h2 id=\"patches\">Submitting Patches</h2>\n\nIf you are submitting features that have more than one changeset, please create a\ntopic branch to hold the changes while they are pending merge and also to track\niterations to the original submission. To create a topic branch:\n\n    $ git checkout -b new_branch_name\n    ... make more commits if needed ...\n    $ git push origin new_branch_name\n\nYou can now see these changes online at a url like:\n\n    http://github.com/your_user_name/compass/commits/new_branch_name\n\nIf you have single-commit patches, it is fine to keep them on master. But do keep in\nmind that these changesets might be\n[cherry-picked](#recovering-from-rebased-or-cherry-picked-changesets).\n\nOnce your changeset(s) are on github, select the appropriate branch containing your\nchanges and send a pull request. Make sure to choose the same upstream branch that\nyou developed against (probably stable or master). Most of the description of your\nchanges should be in the commit messages -- so no need to write a whole lot in the\npull request message. However, the pull request message is a good place to provide a\nrationale or use case for the change if you think one is needed. More info on [pull\nrequests][pulls].\n\n![Pull Request Example](http://img.skitch.com/20101015-rgfh43yhk7e61fchj9wccne9cq.png)\n\nPull requests are then managed like an issue from the [compass issues page][issues].\nA code review will be performed by a compass core team member, and one of three outcomes\nwill result:\n\n1. The change is rejected -- Not all changes are right for [compass's\n   philosophy](#project-philosophy). If your change is rejected it might be better\n   suited for a plugin, at least until it matures and/or proves itself with the users.\n2. The change is rejected, *unless* -- Sometimes, there are missing pieces, or\n   other changes that need to be made before the change can be accepted. Comments\n   will be left on the commits indicating what issues need to be addressed.\n3. The change is accepted -- The change is merged into compass, sometimes minor\n   changes are then applied by the committer after the merge.\n\n<h2 id=\"project-structure\">Project Structure</h2>\n\n    compass/\n      core/                     - The core of compass's configuration and stylesheets.\n        frameworks/             - All frameworks in this directory are loaded automatically\n          compass/              - The compass framework\n            stylesheets/        - The compass libraries\n            templates/          - The compass project templates and patterns\n        test/                   - unit tests\n        lib/\n          compass-core.rb       - The main compass-core ruby library\n          compass/\n            core/\n              sass_extensions/  - enhancements to Sass\n                functions/      - Sass functions exposed by compass\n                monkey_patches/ - Changes to sass itself\n            configuration/      - support for project configuration\n      cli/                      - All the compass code that makes the command line work\n        bin/\n          compass               - CLI executable\n        devbin/                 - development scripts after installing the bundle\n        test/                   - unit tests\n        features/               - tests for compass\n        lib/\n          compass.rb            - The main compass ruby library\n          compass/\n            app_integration/    - integration with app frameworks\n            commands/           - UI agnostic support for the CLI\n            configuration/      - Some CLI specific configuration.\n            exec/               - UI code for the CLI\n            installers/         - support for installing templates\n      compass-style.org/        - source for documentation\n        output/                 - generated documentation\n      import-once/              - Compass's import-once importer for Sass.\n\n<h2 id=\"project-philosophy\">General Philosophy</h2>\n\n1. Users specify their own selectors. Compass never forces a user\n   to use a presentational class name.\n2. Compass does not require javascript. It is a CSS framework.\n3. Compass core is \"design agnostic\". This is why compass core has no\n   grid framework -- grids are not design agnostic.\n4. Compass frameworks are not special. If compass can do it, so should an extension\n   be able.\n5. Sass is awesome -- Compass should make sass more accessible and\n   demonstrate how to use Sass to its fullest potential.\n6. Developing across browsers is hard and will always be hard. It takes\n   a community to get it right.\n7. By default, Compass supports as many browsers as it can. Where it can't\n   it progressively enhances. Where it degrades, the documentation should\n   make a note. Deviation from this requires an excellent reason.\n8. Compass is a proving ground for Sass features. The watcher and color\n   functions are examples of features that started in Compass and got\n   moved to Sass.\n\n<h2 id=\"stylesheet-conventions\">Stylesheet Conventions</h2>\n\n1. All framework stylesheets are partials. Their filename begin with an underscore.\n   Otherwise, Sass will create stylesheets directly into the user's CSS directory.\n2. Compass imports do not emit styles. There are a few limited exceptions to this like\n   the resets and base classes for inheritance.\n3. Mixins with two-level defaults. Mixins often provide two levels of default\n   values. The first is a global default that can be overridden once. The second\n   is a default that can be overridden when the mixin is included.\n4. Mixin argument names are part of the public API, make sure they are understandable and not\n   needlessly truncated or terse.\n5. If adding a new folder of stylesheets, add a single stylesheet with the same name that\n   imports all of the stylesheets in the folder.\n6. Try to avoid passing selectors as arguments. This is what mixins are for.\n\n\n<h2 id=\"faq\">Common Problems &amp; Miscellaneous Info</h2>\n\n<h3 id=\"setting-up-git\">Setting up Git</h3>\n\nPlease follow [these instructions](http://help.github.com/git-email-settings/)\nto set up your email address and attribution information.\n\nDownload your git repo:\n\n    git clone git@github.com:your_username/compass.git\n\nSet up a remote to the main repo:\n\n    cd compass\n    git remote add chriseppstein git://github.com/chriseppstein/compass.git\n\nGetting recent changes from the main repo:\n\n    git fetch chriseppstein\n\n<h3 id=\"running-local-code\">Using Compass while Under Development</h3>\n\n1. Use the bin script. `/path/to/compass/bin/compass` is a version of the compass\n   command line that uses the local changes you have made. You can add `/path/to/compass/bin`\n   to your `$PATH`, or refer to it directly.\n2. Build and install a gem:\n   1. Edit VERSION and change the version to something like: `1.0.0.something-unique-to-me.0`\n   2. `gem build compass.gemspec`\n   3. `gem install compass-0.10.6.something-uniq-to-me.0.gem` -- If installing to your\n      system gems, you'll probably need to add `sudo` to the front. If you don't know\n      what that means, you probably need to add `sudo` to the front.\n3. In a [bundled][bundler] environment, you can configure your gem to use compass\n   while you work on it like so:\n\n       gem 'compass', :path => \"/Users/myusername/some/path/to/compass\"\n\n   Bundler will perform some sort of charm on ruby to make it work.\n4. Configuring ruby directly. If you're a ruby pro, you probably don't need to be\n   told that you can set compass on the load path like so:\n\n       export RUBYLIB=/Users/myusername/some/path/to/compass/lib\n\n<h3 id=\"running-tests\">Running Tests</h3>\n\n1. You must have Ruby installed on your system. After [setting up git](#setting-up-git),\n   change to the root directory of your git checkout of Compass.\n\n       cd compass\n\n2. Install the bundler Ruby gem.\n\n       gem install bundler\n\n   If installing to your system gems, you'll probably need to add `sudo` to the\n   front of that command. If you don't know what that means, you probably need\n   to add `sudo` to the front.\n\n3. Install development dependencies:\n\n       bundle install --binstubs devbin\n\n4. Running core library and stylesheet tests:\n\n       bundle exec rake test features\n\n5. Running behavior tests\n\n       ./devbin/cucumber\n\nIf stylesheet tests fail, the output of the test project is captured in\n`test/fixtures/stylesheets/<project>/saved/` and the error message will report where\nthe error was. Here's an example:\n\n![Stylesheet Test Failure](http://img.skitch.com/20101015-k4t11k8n7xs2r53ftjhrji629d.png)\n\n<h3 id=\"writing-tests\">Writing Stylesheet Tests</h3>\n\nCompass has stylesheet tests to ensure that each stylesheet compiles, can be imported directly\nwithout any other dependencies and that refactorings that should not affect the output, don't.\n\nAt some point, it would be great to have a test system that verifies that the stylesheets\n*work correctly* in various browsers. If you have ideas for how to accomplish this in a sane\nway, please let us know.\n\nIn the `test/fixtures/stylesheets` directory, there are a number of compass projects.\nThe tests work by adding or updating the sass files, running the tests to make sure they fail,\nand then changing the expected css output to make the test pass. It is rudimentary, but as\na safety net, it has caught a number of problems that might have been missed otherwise.\nIf you add a new stylesheet to compass, please make sure to add a new test stylesheet\nthat only imports the newly added stylesheet and add rules that use the new features in that\nstylesheet.\n\n<h3 id=\"recovering-from-rebased-or-cherry-picked-changesets\">You cherry-picked/rebased\nmy changes. What should I do?</h3>\nDepending on any number of reasons, including but not limited to the alignment of the stars,\nYour changes might not be merged into compass using a simple merge. For instance, we might\ndecide to place a change against master into stable instead, or we might squish all your\nchanges together into a single commit at the time of merge, or we might want a change you've\nsubmitted but not a change that it was placed onto top of. In these cases, there are\na couple of ways you can react:\n\n1. If you have some changes on a branch that were not yet accepted, but other changes on that\n   branch were accepted then you should run the following command (make sure to fetch first):\n   `git checkout branch_name; git rebase chriseppstein/master` (assuming the change was applied\n   to the master branch)\n2. If all your changes on the topic branch were accepted or you don't care to keep it around\n   anymore: `git checkout master; git branch -D branch_name; git push origin :branch_name`\n\n[pulls]: http://help.github.com/pull-requests/\n[issues]: http://github.com/chriseppstein/compass/issues\n[documentation]: http://github.com/chriseppstein/compass/blob/stable/compass-style.org/README.markdown\n[bundler]: http://gembundler.com/\n[extensions]: /help/tutorials/extensions/\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/extending.markdown",
    "content": "---\ntitle: Extending Compass\nlayout: tutorial\ncrumb: Extending Compass\nclassnames:\n  - tutorial\n---\n\n# Extending Compass\n\n## Sprite engine\n\nThe sprite engine is the work horse of sprite generation it's the interface for assembling and writing the image file to disk.\n\n### Requirements\n\nA sprite engine requires two methods `construct_sprite`, and `save(filename)`\n\nOnce inside the class you have access to `images` which is a collection of [Compass::SassExtensions::Sprites::Image](http://rdoc.info/github/chriseppstein/compass/dda7c9/Compass/SassExtensions/Sprites/Image)\n\n### Configuration \n\nTo enable your sprite engine from the config file set\n    \n    sprite_engine = :<engine name>\n\nThe example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine.new(width, height, images)`\n\n    sprite_engine = :chunky_png\n\n### Class Definition\n\n    module Compass\n      module SassExtensions\n        module Sprites\n          class ChunkyPngEngine < Compass::SassExtensions::Sprites::Engine\n\n            def construct_sprite\n              #do something\n            end    \n        \n            def save(filename)\n              #save file\n            end\n        \n          end\n        end\n      end\n    end\n\n<a name=\"adding-configuration-properties\"></a>\n## Adding Configuration Properties to Compass\n\nTo add a new configuration property to Compass:\n\n    Compass::Configuration.add_configuration_property(:foobar, \"this is a foobar\") do\n      if environment == :production\n        \"foo\"\n      else\n        \"bar\"\n      end\n    end\n\nThis will do several things:\n\n1. make it possible for users to set the `foobar` configuration property in their\n   configuration file.\n2. Ruby code can read and write the `foobar` attribute from any configuration object.\n3. It will add the comment `# this is a foobar` above the property in the configuration file.\n   A comment is not required, you can simply omit this argument if you like.\n4. The block of code provided allows you to assign a sensible default value according to other\n   settings in the configuration or by using arbitrary code to determine what the value should\n   be. For instance it could read from another configuration file or it could change based on\n   the user's operating system."
  },
  {
    "path": "compass-style.org/content/help/tutorials/extensions.markdown",
    "content": "---\ntitle: Creating Compass Extensions\nlayout: tutorial\nclassnames:\n  - tutorial\n---\nCompass Extensions\n==================\n\nCompass, at its heart, is a framework upon which sass-based stylesheet frameworks\nare built. It provides the tools for building, installing and using reusable\nstylesheets that provide anything from full-fledged layout frameworks to designs\nfor widgets or even full page designs. All using the power of sass to keep the\nsemantic meaning of the html pages clear and free of design details.\n\nThis document describes the compass extension toolset so that you can build\nyour own compass extension.\n\nBasic Extension Layout\n----------------------\n\n<pre>\n<strong>my_extension</strong>\n|\n|- <strong>stylesheets</strong> (this directory will be on the sass load path)\n|  |\n|  |- my_extension (not technically required, but it's good to scope imports by the name of the extension)\n|  |  |\n|  |  |- _module_one.sass (this file would be imported using <code>@import my_extension/module_one.sass</code>)\n|  |  |- _module_two.sass (this file would be imported using <code>@import my_extension/module_two.sass</code>)\n|  |  |- ...\n|  |\n|  |- _my_extension.sass (This file will import the entire extension using <code>@import my_extension.sass</code>)\n|\n|- <strong>templates</strong> (this is where templates/patterns go)\n|  |\n|  |- <strong>project</strong> (this should be provided if you'd like people to be able to base their project on the extension)\n|  |  |\n|  |  |- <strong>manifest.rb</strong> (this file should declare the contents of the template)\n|  |  |- screen.sass (this would be the main stylesheet, importing from your extension and demonstrating its use)\n|  |  |- print.sass (this file would set up basic print styles)\n|  |  |- ie.sass (if you want, you can provide custom styles for IE)\n|  |\n|  |- some_pattern\n|     |\n|     |- <strong>manifest.rb</strong>\n|     |- some.sass (some sass is probably in order, always import from the extension library as much as possible)\n|     |- some_script.js (yes, you can provide javascript code)\n|     |- some_image.png (and images)\n|     |- some_content.html.haml (and even html and haml)\n|     |- some_other_file.txt (and other arbitrary files)\n|\n|- <strong>lib</strong> (optional ruby code)\n   |\n   |- <strong>my_extension.rb</strong> (this code can register your framework if you deviate from conventions and require sass extensions, etc.)\n   |- <strong>compass-my_extension.rb</strong> (This file is automatically required by compass if it is present. Avoiding the need to pass <code>-r</code> to the compass command line tool.)\n   |\n   |- my_extension\n      |\n      |- sass_extensions.rb (this is the standard location to place sass functions)\n</pre>\n\nNames in <strong>bold</strong> are part of the extension naming convention.\n\nGenerating an Extension\n-----------------------\n\nIf you want a leg up to get started working on your extension,\nyou can use compass to generate an extension with the following command:\n\n    compass create my_extension --using compass/extension \n\nThis will create a few basic files and folders to get you started.\n\nIf you prefer to use the scss syntax for your extension run the following command instead:\n\n    compass create my_extension --using compass/extension -x scss\n\nAdvanced Layout Options\n-----------------------\n\n### Library File Location\n\nThe extension library file referenced above as `my_extension/lib/my_extension.rb`\ncan actually be stored at any of the following three locations:\n\n1. `my_extension/compass_init.rb`\n2. `my_extension/lib/my_extension.rb` (NOTE: You must use this one if you're distributing as a rubygem.)\n3. `my_extension/my_extension.rb`\n\nThe first of those locations found (in the above order) will be loaded.\nThe compass_init.rb file takes priority, so that extensions that want to work\ndifferently as compass extensions than they do as normal ruby libraries,\nhave a way of targeting compass.\n\n<a name=\"registration\"></a>\n### Stylesheet and Template Locations\n\nIf you'd like to store your stylesheets and/or templates in a non-standard location within your extension,\nyou must provide a library file and register the extension explicitly like so:\n\n    base_directory  = File.join(File.dirname(__FILE__), '..')\n    stylesheets_dir = File.join(base_directory, 'my', 'stylesheets')\n    templates_dir   = File.join(base_directory, 'my', 'templates')\n    Compass::Frameworks.register('my_extension', :stylesheets_directory => stylesheets_dir, :templates_directory => templates_dir)\n\nIf you're following the standard naming convention, but the stylesheet and\ntemplate directories are not at the top level, you can just do this instead:\n\n    # path from the library file to where you're keeping your compass stuff.\n    base_directory  = File.join(File.dirname(__FILE__), '..', 'compass')\n    Compass::Frameworks.register('my_extension', :path => base_directory)\n\n### Adding Configuration Options to Compass\n\nFor details on how to add new configuration options to compass [read this](/help/tutorials/extending/#adding-configuration-properties).\n\nConventions to Follow\n---------------------\n\nThe following are not required, but are standards that your framework\nshould attempt to adhere to unless there's a good reason not to do so.\n\n1. Have a single import for your framework.\n2. Break up your framework into modules so that people can import just smaller\n   pieces for faster load times when they're not using everything.\n3. Use partials (files starting with an underscore) for stylesheets that are meant\n   to be imported. If you do not Sass will generate css\n   files for your libraries in some configurations.\n4. Provide a project template. If you do not, your project should only be\n   providing widgets or page designs, etc.\n\nBuilding a Template (a.k.a. Pattern)\n====================================\n\nManifest Files\n--------------\n\nThe manifest file declares the template contents and tells compass information\nabout the files in the template.\n\n### An Example Manifest File\n\n    description \"My awesome compass plugin.\"\n    \n    stylesheet 'screen.sass', :media => 'screen, projection'\n    stylesheet 'partials/_base.sass'\n    stylesheet 'print.sass',  :media => 'print'\n    stylesheet 'ie.sass',     :media => 'screen, projection', :condition => \"lt IE 8\"\n    \n    image 'grid.png'\n    javascript 'script.js'\n    \n    html 'welcome.html.haml', :erb => true\n    file 'README'\n    \n    help %Q{\n    This is a message that users will see if they type\n    \n      compass help my_extension\n    \n    You can use it to help them learn how to use your extension.\n    }\n    \n    welcome_message %Q{\n    This is a message that users will see after they install this pattern.\n    Use this to tell users what to do next.\n    }\n    \n\nYou may also see some real manifest files here:\n\n* [blueprint](http://github.com/chriseppstein/compass/blob/master/frameworks/blueprint/templates/project/manifest.rb)\n* [compass-css-lightbox](http://github.com/ericam/compass-css-lightbox/blob/master/templates/project/manifest.rb)\n\n### Manifest Declarations\n\n\n**Easy Mode:** If you just have some basic files and nothing fancy going on, simply place this line in your manifest:\n\n    discover :all\n\nIf the file is missing `discover :all` is the default\n\nThis will cause compass to find all the files in your template and use the files' extension to determine where they should go. Alternatively, you can request that compass only discover files of a certain type. For example, the following will only discover javascript and image assets, you could then declare other file types on your own.\n\n    discover :javascripts\n    discover :images\n\nThe following types may be discovered: `:stylesheets`, `:images`, `:javascripts`, `:fonts`, `:html`, `:files`, and `:directories`\n\n**Normal Mode:** There are seven kinds of manifest declarations:\n\n1. `stylesheet` - Declares a sass file.\n2. `image` - Declares an image.\n3. `javascript` - Declares a javascript file.\n4. `font` - Declares a font file.\n5. `html` - Declares an html file.\n6. `file` - Declares a random file.\n7. `directory` - Declares a directory should be created.\n\nAll declarations take the path to the file as their first argument. Note that the\nnormal slash `/` can and should be used in a manifest. Compass will take care of\nthe cross platform issues. The path to the file will be reproduced in the user's\nproject, so please keep that in mind when creating folders. The location where\nfiles are going to be installed is dictated by the user's project configuration,\nhowever, a template can place things into subdirectories relative to those locations.\n\nCommon options:\n\n* `:erb` - When set to true, the file will be processed via the ERB templating language.\n  See the \"Advanced Manifests\" section below for more details.\n* `:to` - The location where the file should be installed relative to the\n  type-specific location.\n* `:like` - Most often used with a `file` declaration, this option allows you to\n  install into the location of another manifest type (and also :css). E.g. :like => :css\n\nStylesheet options:\n\n* `:media` - this is used as a hint to the user about the media attribute of the\n  stylesheet link tag.\n* `:condition` - this is used to hint the user that a conditional comment should be\n  used to import the stylesheet with the given condition.\n\nDirectory options:\n\n* `:within` - where the directory should be created. If omitted, the directory\n  will be relative to the project directory. Can be one of: the following\n  * `sass_dir`\n  * `javascripts_dir`\n  * `fonts_dir`\n  * `images_dir`\n\nHTML files:\n\nYou can provide html as haml or as plain html. If you provide haml, the haml will be\nconverted to html when it is installed, unless the project allows haml files.\nProviding html files is usually done to demonstrate how to use a more complicated\ndesign and to get the user started off with working product.\n\n### Advanced Manifests and Templates\n\n* ERB Processing - This can be used to customize the contents of the file in an\n  extension template. The template will be processed in the context of a\n  TemplateContext instance, which gives you access to the full project configuration\n  information as well as the command line options. Since it's unlikely many templates\n  will need this functionality, I leave it as an exercise of the user to figure it out\n  and if they can't to contact the compass-devs mailing list for assistance.\n* `no_configuration_file!` - calling this method within the manifest will tell\n  the installer to skip the creation of a configuration file.\n* `skip_compilation!` - calling this method within the manifest will tell the\n  installer to skip compilation of sass files to css.\n\nDistributing Extensions as Ruby Gems\n------------------------------------\n\nRubygems is a flexible, easy-to-use system for distributing ruby software.\nIf you have any questions about rubygems, I suggest that you start looking\nfor help [here](http://help.rubygems.org/).\n\nThe big advantages of using rubygems to distribute your extension is that\nit allows your extension to be a dependency for other projects and that each\ninstall is versioned, which makes supporting your extension easier.\n\nIf distributing as a rubygem, it is a good idea to have a file\n`compass-<framework>.rb` in your lib directory that registers the\ncompass framework. This will allow compass to automatically require the\nframework from within rubygems.\n\nTips for Developing Extensions\n------------------------------\n\n* If you're developing a simple extension, you may find it convenient to place\n  your extension within an existing compass project in the extension folder.\n* Never specify an extension in your imports as this can cause issue when the\n  syntax of a file changes.\n\nPackaging an Extension as a RubyGem\n-----------------------------------\n\nYou do not _have_ to make your extension a ruby gem. But if you do, you get some benefits you would not have otherwise:\n\n* Releases\n* Versions\n* A standard way of asking your users what release they are using.\n* Better integration with ruby-based projects via tools like\n  [Bundler](http://gembundler.com/).\n\n### Creating a Gem\n\nBefore you begin, please ensure you have gem version `1.3.6` or greater. `gem -v` will tell you the currently installed version.\n\n1. Define your gemspec file at the top of your extension. Here's [an example of\n   one](http://github.com/ericam/compass-css-lightbox/blob/master/css-lightbox.gemspec).\n   The gemspec should have the same name as your gem.\n2. Register your framework by adding `lib/my_extension.rb` and registering it:\n   \n       require 'compass'\n       extension_path = File.expand_path(File.join(File.dirname(__FILE__), \"..\"))\n       Compass::Frameworks.register('my_extension', :path => extension_path)\n   \n   This is how compass knows where to find your extension's files when a user requires it.\n   For more options, go back up and read about [Stylesheet and Template Locations](#registration).\n3. Build a gem: `gem build my_extension.gemspec`. This will build your gem file and\n   add the current version to the name. E.g. `my_extension-0.0.1.gem`\n4. Test your gem by installing it locally: `gem install my_extension-0.0.1.gem`\n\n### Releasing a Gem\n\nThe ruby community is nice and will host your gem files for free. To release your gem:\n\n    gem push my_extension-0.0.1.gem\n\nYour ruby gem will be hosted on [rubygems.org](http://rubygems.org/).\nPlease familiarize yourself with [their documentation](http://rubygems.org/pages/gem_docs).\n\nInstalling Extensions\n=====================\n\nHow extensions are installed varies according to the decisions you make about\nhow you are packaging and releasing your gem. There will be a standard approach\nin a future release, but until then, it is suggested that you provide your users\nwith succinct installation instructions.\n\nInstalling Extensions Released as RubyGems\n------------------------------------------\n\nWhen creating a new project:\n\n    sudo gem install my_extension\n    compass create my_project -r my_extension --using my_extension\n\nThe `-r` option is annoying and will not be needed in a future version of compass.\nBut for now, it tells compass to find and load the extension from the local\nrubygems repository.\n\nTo install via rubygems into an existing project:\n\n    gem install my_extension\n    # edit the project configuration file and add:\n    require 'my_extension'\n    compass install my_extension\n\nOr if you have other patterns besides the project pattern:\n\n    compass install my_extension/pattern\n\nInstalling Ad-hoc Extensions\n----------------------------\n\nAd-hoc extensions are any set of files and folders following the basic conventions\ndescribed above. They could be installed via a zip file or by checking the code out\nfrom source control. Ad-hoc extensions will be automatically found in the extensions\ndirectory of a project and registered for import without needing a `require` statement\nin the compass configuration file.\n\nCurrently, ad-hoc extensions can only be installed into the extensions directory\nof an existing compass project. This will be fixed in a future release of compass.\nUntil then, you may need to instruct your users to create a bare project to get started:\n\n    compass create my_project --bare\n\nThis will create a project directory, a sass directory (with no sass files) and a configuration file.\n\nThe standard location for extensions is `project_root/extensions` for stand-alone\nprojects and `project_root/vendor/plugins/compass_extensions` for rails projects.\nAdditionally, the user may customize their extensions directory by setting\n`extensions_dir` in their compass configuration file.\n\nTo install into an existing project, simply place the extension into a project's\nextension directory. This could be done via a git clone or by extracting an archive.\nThe name of the directory it creates should be the name of the extension. The project\nwill now have access to the extension.\n\nVerifying that an Extension is Installed Correctly\n--------------------------------------------------\n\nThe user can verify that they have access to your extension by typing:\n\n    compass help\n\nAnd they should see the framework in the list of available frameworks.\nAlternatively, if you've provided a `help` message in the manifest, then\nthe user can type:\n\n    compass help my_extension\n    - or -\n    compass help my_extension/pattern_name\n\n*Note:* The user might need to provide the `-r` option to help in order for compass to\nfind a gem-based extension before a project exists. This is not needed for\nextensions installed into the extensions directory, or if the project is already\nrequired in the current directory's project configuration.\n\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/integration.markdown",
    "content": "---\ntitle: Application Integration\nlayout: tutorial\ncrumb: Application Integration\nclassnames:\n  - tutorial\n---\n# Application Integration\n\n## Ruby on Rails\n\n### Rails 3.1\nJust add compass to your Gemfile like so:\n    \n    gem 'compass'\n    \nAlso checkout this [gist](https://gist.github.com/1184843)\n  \n### Rails 3\n    compass init rails /path/to/myrailsproject\n### Rails 2.3\n    rake rails:template LOCATION=http://compass-style.org/rails/installer\n    \n## Sinatra\n\n    require 'compass'\n    require 'sinatra'\n    require 'haml'\n\n    configure do\n      set :haml, {:format => :html5}\n      set :scss, {:style => :compact, :debug_info => false}\n      Compass.add_project_configuration(File.join(settings.root, 'config', 'compass.rb'))\n    end\n\n    get '/stylesheets/:name.css' do\n      content_type 'text/css', :charset => 'utf-8'\n      scss :\"stylesheets/#{params[:name]}\", Compass.sass_engine_options\n    end\n\n    get '/' do\n      haml :index\n    end\n\n\nThis assumes you keep your Compass config file in `config/compass.rb`. If you keep your stylesheets in “views/stylesheets/” directory instead of just “views/”, remember to update `sass_dir` configuration accordingly.\nCheck out this [sample compass-sinatra project](http://github.com/chriseppstein/compass-sinatra) to get up and running in no time!\n\n[Sinatra Bootstrap](http://github.com/adamstac/sinatra-bootstrap) - a base Sinatra project with support for Haml, Sass, Compass, jQuery and more.\n\n## nanoc\n\n### Minimal integration: just drop it in\n\nOne simple route for lightweight integration is to simply install compass inside nanoc. Then edit `config.rb` to point to the stylesheets you want to use. This means you have to have the Compass watch command running in a separate window from the Nanoc compilation process. \n\nExample project that works this way: [unthinkingly](http://github.com/unthinkingly/unthinkingly-blog).\n\n### More formal integration\n\nAt the top of the Nanoc Rules file, load the Compass configuration, like this:\n\n    require 'compass'\n\n    Compass.add_project_configuration 'compass.rb'        # when using Compass > 0.10\n    sass_options = Compass.sass_engine_options            # when using Compass > 0.10\n\n    Compass.configuration.parse 'compass.rb'              # when using Compass < 0.10\n    sass_options = Compass.config.to_sass_engine_options  # when using Compass < 0.10\n\nThen create a `compass.rb` file in your site's root folder and add your Compass configuration. An example configuration could look like this:\n\n    http_path = \"/\"\n    project_path = File.expand_path(File.join(File.dirname(__FILE__), '..'))\n    css_dir = \"output/stylesheets\"\n    sass_dir = \"content/stylesheets\"\n    images_dir = \"assets/images\"\n    javascripts_dir = \"assets/javascripts\"\n    fonts_dir = \"assets/fonts\"\n    http_javascripts_dir = \"javascripts\"\n    http_stylesheets_dir = \"stylesheets\"\n    http_images_dir = \"images\"\n    http_fonts_dir = \"fonts\"\n\nYou may need to change the path to some directories depending on your directory structure and the setup in your Rules file.\n\nTo filter the stylesheets using Sass and Compass, call the sass filter with Sass engine options taken from Compass, like this:\n\n    compile '/stylesheets/*' do\n      filter :sass, sass_options.merge(:syntax => item[:extension].to_sym)\n    end\n\n\n### nanoc projects using the formal approach\n\n* [This Site](https://github.com/chriseppstein/compass/tree/stable/compass-style.org)\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/production-css.markdown",
    "content": "---\ntitle: Production Stylesheets\nlayout: tutorial\nclassnames:\n  - tutorial\n---\nProduction Stylesheets\n======================\n\nSee the [Configuration Reference](/help/tutorials/configuration-reference/) for a\ncomplete list of available configuration options.\n\nStrategies for Compiling Stylesheets for Production\n---------------------------------------------------\n\n**Option A:** Use the compass production defaults.\n\n    compass compile -e production --force\n\n*Note:* This only changes the compass defaults, options you've specified explicitly\nin your configuration will not be changed.\n\n**Option B:** Override your configuration file settings on the command line  \n\n    compass compile --output-style compressed --force\n\n**Option C:** Create a separate configuration file for production\n\n    cp config.rb prod_config.rb\n    \n    ..edit prod_config.rb to suit  your needs..\n    \n    compass compile -c prod_config.rb --force\n\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/spriting/customization-options.markdown",
    "content": "---\ntitle: Sprite Customization\nlayout: tutorial\ncrumb: Customization\nclassnames:\n  - tutorial\n---\n#Sprite Tutorial\n<%= sprite_tutorial_links %>\n## Customization Options\n\n### Options Applying to All Sprite Maps\n\nThese options allow you to customize the behavior of all sprites\nreferenced in your stylesheet. In many cases, there's a configuration option\nthat allows you to change the default for that sprite map or even an\nindividual sprite image.\n\n**NOTE:** These configuration options must be set **before** you import the\nsprites.\n\n* `$sprite-selectors` - Which interaction states should be considered\n  for creating [magic sprite selectors](/help/tutorials/spriting/magic-selectors/).\n* `$disable-magic-sprite-selectors` - Set to `true` to turn off magic\n  selectors. Defaults to `false`.\n* `$default-sprite-separator` - Defaults to a dash. You can set this to\n  an underscore (`\"_\"`) if you're one of *those* people.\n\n### Options per Sprite Map\n\nWhen constructing the sprite map, the entire sprite map and its associated stylesheet\ncan be configured in the following ways. Each option is specified by setting a [configuration\nvariable](/help/tutorials/configurable-variables/) before importing the sprite. The variables\nare named according to the name of the folder containing the sprites. In the examples below\nthe sprites were contained within a folder called `icon`.\n\n* `$<map>-spacing` -- The amount of transparent space, in pixels, around each sprite.\n  Defaults to `0px`. E.g. `$icon-spacing: 20px`.\n* `$<map>-repeat` -- Whether or not each sprite should repeat along the x axis. Defaults\n  to `no-repeat`. E.g. `$icon-repeat: repeat-x`.\n* `$<map>-position` -- The position of the sprite in the sprite map along the x-axis. Can\n  be specified in pixels or percentage of the sprite map's width. `100%` would cause the\n  sprite to be on the right-hand side of the sprite map. Defaults to `0px`.\n  E.g. `$icon-position: 100%`.\n* `$<map>-sprite-dimensions` -- Whether or not the dimensions of the sprite should be\n  included in each sprite's CSS output. Can be `true` or `false`. Defaults to `false`.\n* `$<map>-sprite-base-class` -- The base class for these sprites. Defaults to `.<map>-sprite`.\n  E.g. `$icon-sprite-base-class: \".action-icon\"`\n* `$<map>-clean-up` -- Whether or not to removed the old sprite file\n  when a new one is created. Defaults to true\n* `$<map>-class-separator` -- If you set this to an underscore (`\"_\"`)\n  then all the generated selectors for this sprite will use underscores\n  instead dashes. To change this value for all sprites, set\n  `$default-sprite-separator` to an underscore.\n\n### Options per Sprite\n\nWhen constructing the sprite map, each sprite can be configured in the following ways:\n\n* `$<map>-<sprite>-spacing` -- The amount of transparent space, in pixels, around the sprite. Defaults\n  to the sprite map's spacing which defaults to `0px`. E.g. `$icon-new-spacing: 20px`.\n* `$<map>-<sprite>-repeat` -- Whether or not the sprite should repeat along the x axis. Defaults\n  to the sprite map's repeat which defaults to `no-repeat`. E.g. `$icon-new-repeat: repeat-x`.\n* `$<map>-<sprite>-position` -- The position of the sprite in the sprite map along the x-axis. Can\n  be specified in pixels or percentage of the sprite map's width. `100%` would cause the\n  sprite to be on the right-hand side of the sprite map. Defaults to the sprite map's\n  position value which defaults to `0px`. E.g. `$icon-new-position: 100%`.\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/spriting/magic-selectors.markdown",
    "content": "---\ntitle: Sprite Magic Selectors\nlayout: tutorial\ncrumb: Magic Selectors\nclassnames:\n  - tutorial\n---\n# Sprite Tutorial\n<%= sprite_tutorial_links %>\n\n## Magic Selectors\n\nIf you want to add selectors for your sprites, it's easy todo by adding `_active` `_target` or `_hover` to the file name, In the example below we have a sprite directory that looks like:\n* note you can use `-` in file names also ex. `glossy-active.png` *\n* `my-buttons/glossy.png`\n* `my-buttons/glossy_hover.png`\n* `my-buttons/glossy_active.png`\n* `my-buttons/glossy_target.png`\n\nNow in our sass file we add:\n\n    @import \"my-buttons/*.png\";\n    \n    a {\n      @include my-buttons-sprite(glossy)\n    }\n\nAnd your stylesheet will compile to:\n\n    .my-buttons-sprite, a {\n      background: url('/my-buttons-sedfef809e2.png') no-repeat;\n    }\n\n    a {\n      background-position: 0 0;\n    }\n    a:hover, a.glossy_hover, a.glossy-hover {\n      background-position: 0 -40px;\n    }\n    a:target, a.glossy_target, a.glossy-target {\n      background-position: 0 -60px;\n    }\n    a:active, a.glossy_active, a.glossy-active {\n      background-position: 0 -20;\n    }\n\nAlternatively you can use the `@include all-my-buttons-sprites;` after the import and get the following output:\n\n    .my-buttons-sprite, .my-buttons-glossy {\n      background: url('/my-buttons-sedfef809e2.png') no-repeat;\n    }\n\n    .my-buttons-glossy {\n      background-position: 0 0;\n    }\n    .my-buttons-glossy:hover, .my-buttons-glossy.glossy_hover, .my-buttons-glossy.glossy-hover {\n      background-position: 0 -40px;\n    }\n    .my-buttons-glossy:target, .my-buttons-glossy.glossy_target, .my-buttons-glossy.glossy-target {\n      background-position: 0 -60px;\n    }\n    .my-buttons-glossy:active, .my-buttons-glossy.glossy_active, .my-buttons-glossy.glossy-active {\n      background-position: 0 -20px;\n    }\n\n## Disabling\n\nTo disable this feature set `$disable-magic-sprite-selectors` to true before calling the sprite mixin\n\n    a {\n      $disable-magic-sprite-selectors:true;\n      @include my-buttons-sprite(glossy)\n    }\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/spriting/sprite-layouts.markdown",
    "content": "---\ntitle: Sprite layouts\nlayout: tutorial\ncrumb: Sprite layouts\nclassnames:\n  - tutorial\n---\n# Sprite Tutorial\n<%= sprite_tutorial_links %>\n<a name='sorting'>\n## Sorting\n\nDefault is `none` sprites will be orderd however they are recived from the file system\n\nYou can sort by:\n\n* width\n* height\n* size\n* name\n* none\n\nExample\n\n    $my-sprite-sort-by : 'width';\n\nDefault search direction is acending if you wish to sort decending prepend a `!` \n\n    $my-sprite-sort-by : '!width';\n\n\n## Sprite Layouts\n\nExample:\n\n    $icon-layout:horizontal;\n    @import \"icon/*.png\";\n    \n    $dropcap-layout:diagonal\n    @import \"dropcap/*.png\";\n\n## Vertical\n\n    @import \"mysprite/*.png\";\n\nExample Output:\n\n![Vertical Example](/images/tutorials/sprites/layout/vert.png)\n## Horizontal\n\n    $mysprite-layout:horizontal;\n    @import \"mysprite/*.png\";\n\nExample Output:\n\n![Horizontal Example](/images/tutorials/sprites/layout/horizontal.png)\n\nNotes:\n\n  * Responds to the same configuration options that vertical has.\n  \n## Diagonal\n\n    $mysprite-layout:diagonal;\n    @import \"mysprite/*.png\";\n\nExample Output:\n\n![Diagonal Example](/images/tutorials/sprites/layout/diagonal.png)\n\nNotes:\n\n  * Configuration options do not effect the layout\n  * This is incredibly resource intensive on the browser\n\n## Smart\n\n    $mysprite-layout:smart;\n    @import \"mysprite/*.png\";\n\nExample Output:\n\n![Smart Example](/images/tutorials/sprites/layout/smart.png)\n\nNotes:\n\n  * Configuration options do not effect the layout\n  * Most efficient use of browser memory\n\nExample icons from [Open Icon Library](http://openiconlibrary.sourceforge.net/) and are released under public domain"
  },
  {
    "path": "compass-style.org/content/help/tutorials/spriting.markdown",
    "content": "---\ntitle: Spriting with Compass\nlayout: tutorial\ncrumb: Spriting\nclassnames:\n  - tutorial\n---\n\n# Spriting with Compass\n\nSpriting has never been easier than it is with Compass. You place the\nsprite images in a folder, import them into your stylesheet, and then\nyou can use the sprite in your selectors in one of several convenient\nways.\n\n****Note**: Only PNG images are supported at this time using \n[`chunky_png`](https://github.com/wvanbergen/chunky_png)[*](#Oily-PNG).\n\n## Sprite Tutorial Contents\n<%= sprite_tutorial_links(true) %>\n\n## Setup\n\nFor this tutorial, let's imagine that in your project's image folder there are four icons:\n\n* `images/my-icons/new.png`\n* `images/my-icons/edit.png`\n* `images/my-icons/save.png`\n* `images/my-icons/delete.png`\n\nEach is an icon that is 32px square.\n<a name=\"basic-usage\"></a>\n## Basic Usage\n\n****Note**: The use of `my-icons` is only for this example, \"my-icons\" represents the folder name that contains your sprites.\n\nThe simplest way to use these icon sprites is to let compass give you a class for each sprite:\n    \n    @import \"compass/utilities/sprites\";\n    @import \"my-icons/*.png\";\n    @include all-my-icons-sprites;\n\nAnd you'll get the following CSS output:\n\n    .my-icons-sprite,\n    .my-icons-delete,\n    .my-icons-edit,\n    .my-icons-new,\n    .my-icons-save   { background: url('/images/my-icons-s34fe0604ab.png') no-repeat; }\n    \n    .my-icons-delete { background-position: 0 0; }\n    .my-icons-edit   { background-position: 0 -32px; }\n    .my-icons-new    { background-position: 0 -64px; }\n    .my-icons-save   { background-position: 0 -96px; }\n\nYou can now apply the `my-icons-XXX` classes to your markup as needed.\n\nLet's go over what happened there. The import statement told compass to [generate a\nstylesheet that is customized for your sprites](https://gist.github.com/729507). This\nstylesheet is [magic](#magic-imports), it is not written to disk, and it can be customized\nby setting configuration variables before you import it. See the page on\n[Customization Options](/help/tutorials/spriting/customization-options/). The goal of\nthis stylesheet is to provide a simple naming convention for your\nsprites so that they are easy to remember and use. You should never have\nto care what is the name of the generated\nsprite map, nor where a sprite is located within it.\n\n<a name='nested-folders' id='nested-folders'></a>    \n## Nested Folders    \n\n****Note**: The use of `orange` is only for this example, \"orange\" represents the folder name that contains your sprites.\n\nSprites stored in a nested folder will use the last folder name in the path as the sprite name.\n\nExample:\n\n      @import \"themes/orange/*.png\";\n      @include all-orange-sprites;\n    \n<a name=\"selector-control\" id=\"selector-control\"></a>\n## Selector Control\n\n****Note**: The use of `my-icons` is only for this example, \"my-icons\" represents the folder name that contains your sprites.\n\nIf you want control over what selectors are generated, it is easy to do. In this example,\nthis is done by using the magic `my-icons-sprite` mixin. Note that the mixin's name is dependent\non the name of the folder in which you've placed your icons.\n\n    @import \"my-icons/*.png\";\n    \n    .actions {\n      .new    { @include my-icons-sprite(new);    }\n      .edit   { @include my-icons-sprite(edit);   }\n      .save   { @include my-icons-sprite(save);   }\n      .delete { @include my-icons-sprite(delete); }\n    }\n\nAnd your stylesheet will compile to:\n\n    .my-icons-sprite,\n    .actions .new,\n    .actions .edit,\n    .actions .save,\n    .actions .delete { background: url('/images/my-icons-s34fe0604ab.png') no-repeat; }\n    \n    .actions .new    { background-position: 0 -64px; }\n    .actions .edit   { background-position: 0 -32px; }\n    .actions .save   { background-position: 0 -96px; }\n    .actions .delete { background-position: 0 0;     }\n\n<a name=\"sass_functions\" id=\"sass_functions\"></a>\n## Sass Functions\n\n****Note**: The use of `my-icons` is only for this example, \"my-icons\" represents the folder name that contains your sprites.\n\nGetting the image dimensions of a sprite\n\nYou can get a unit value by using the magical dimension functions `<map>-sprite-height` and `<map>-sprite-width`\nIf you are looking to just return the dimensions see the [docs](/reference/compass/utilities/sprites/base/#mixin-sprite-dimensions)\n\nExample:\n\n\n    @import \"my-icons/*.png\";\n    $box-padding: 5px;\n    $height: my-icons-sprite-height(some_icon);\n    $width: my-icons-sprite-width(some_icon);\n    \n    .somediv {\n      height:$height + $box-padding;\n      width:$width + $box-padding;\n    }\n  \n  \n<a name=\"magic-imports\" id=\"magic-imports\"></a>\n## Magic Imports\n\n****Note**: The use of `my-icons` is only for this example, \"my-icons\" represents the folder name that contains your sprites.\n\nAs noted above, compass will magically create sprite stylesheets for you. Some people like\nmagic, some people are scared by it, and others are curious about how the magic works. If\nyou would like to avoid the magic, you can use compass to generate an import for you. On the\ncommand line:\n\n    compass sprite \"images/my-icons/*.png\"\n\nThis will create file using your project's preferred syntax, or you can specify the\noutput filename using the `-f` option and the syntax will be inferred from the extension.\nIf you do this, you'll need to remember to regenerate the import whenever you rename, add,\nor remove sprites.\n\nUsing the magic imports is recommended for most situations. But there are times when you\nmight want to avoid it. For instance, if your sprite map has more than about 20 to 30\nsprites, you may find that hand crafting the import will speed up compilation times. See\nthe section on [performance considerations](#performance) for more details.\n\n<a name=\"performance\" id=\"performance\"></a>\n## Performance Considerations\n\nReading PNG files and assembling new images and saving them to disk might have a non-trivial\nimpact to your stylesheet compilation times. Especially for the first compile. Please keep\nthis in mind.\n\n## Large numbers of sprites\nThe magic stylesheet can get very large when there are large numbers of sprites. 50 sprites\nwill cause there to be over 150 variables created and then passed into the\n`sprite-map` [function](/reference/compass/helpers/sprites/#sprite-map).\nYou may find that customizing the sprite function call to only pass those values that you\nare overriding will provide a small performance boost.\nSee a [concrete example](https://gist.github.com/747970).\n\n## Oily PNG\n\nCompass generates PNG files using a pure-ruby library called\n[`chunky_png`](https://github.com/wvanbergen/chunky_png). This library can be made faster by\ninstalling a simple C extension called [`oily_png`](https://github.com/wvanbergen/oily_png).\nAdd it to your `Gemfile` if you have one in your project:\n\n    gem 'oily_png'\n\nOr install the Rubygem:\n\n    gem install oily_png\n\nCompass will automatically detect its presence.\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/testing.markdown",
    "content": "---\ntitle: Testing Your Stylesheets\nlayout: tutorial\ncrumb: Testing\nclassnames:\n  - tutorial\n---\n\n# Test Unit\n\n    require 'compass/test_case'\n    class StylesheetsTest < Compass::TestCase\n      def test_stylesheets\n        my_sass_files.each do |sass_file|\n          assert_compiles(sass_file) do |result|\n            assert_not_blank result\n          end\n        end\n      end\n      protected\n      def my_sass_files\n        Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), \"../..\", \"app/stylesheets/**/[^_]*.sass\")))\n      end\n    end"
  },
  {
    "path": "compass-style.org/content/help/tutorials/upgrading/antares.markdown",
    "content": "---\ntitle: Compass v0.11 Upgrade\nlayout: tutorial\ncrumb: Upgrading to v0.11\nclassnames:\n  - tutorial\n---\n# Upgrading to the Compass Antares Release (v0.11)\n\nMany mixins and certain uses of mixins have been deprecated, but your\nexisting stylesheets should still work out of the box with one exception:\nusers who are using the `css3/transform` module should update their imports\nto import `css/transform-legacy` when they upgrade. They should then upgrade\nto the new `css/transform` module at their convenience.\n\nYou should read about what changed, update your stylesheets accordingly\nand then update your imports to the new version.\n\n<a name=\"box-shadow\"></a>\n## Box Shadow\nYou may get a deprecation warning using the `box-shadow` mixin.\nYou can resolve this in one of the following ways:\n\n1. Change your use of the `box-shadow` and instead use `single-box-shadow`.\n   This mixin has the same behavior and arguments as the old `box-shadow` mixin.\n2. Keep using `box-shadow`, change how you pass the arguments. The new\n   `box-shadow` takes up to 10 comma-delimited shadows. Each shadow is\n   how the values should appear in the CSS (space separated).\n\n<a name=\"text-shadow\"></a>\n## Text Shadow\n\nYou may get a deprecation warning using the `text-shadow` mixin.\nYou can resolve this in one of the following ways:\n\n1. Change your use of the `text-shadow` and instead use `single-text-shadow`.\n   This mixin has the same behavior and arguments as the old `text-shadow` mixin.\n2. Keep using `text-shadow`, change how you pass the arguments. The new\n   `text-shadow` takes up to 10 comma-delimited shadows. Each shadow is\n   how the values should appear in the CSS (space separated).\n\n<a name=\"transform\"></a>\n## CSS Transforms\nThe transform module was largely re-written to support 3D transforms. If you\nare using it, it is suggested that you read the [new module's documentation][new_transform]\nand adjust your code appropriately. Many mixin names and constants have changed.\nFor your convenience, the [old CSS transform module][old_transform] can still be imported, but it\nis deprecated and will be removed in the next release.\n\n<a name=\"gradients\"></a>\n## Gradients\n\nThe Compass gradient support now more closely emulates the CSS3 specification of how gradients\nare represented and passed around. The `linear-gradient` and `radial-gradient` mixins\nhave been deprecated and instead, you should use the `linear-gradient()` and `radial-gradient()`\nfunctions in conjunction with mixins for the [properties that support gradients][image_stylesheet] like\n`background` / `background-image`, `border-image`, `list-style` / `list-style-image`,\nand `content`.\n\nAfter upgrading, you'll receive deprecation warnings for your usage of the old gradient\nmixins and a suggested replacement value for each. If you'd rather keep the old mixins in\nyour project for convenience, just copy the following to your project after changing your imports:\n\n    @mixin radial-gradient($color-stops, $center-position: center center, $image: false) {\n      @include background-image($image, radial-gradient($center-position, $color-stops));\n    }\n    @mixin linear-gradient($color-stops, $start: top, $image: false) {\n      @include background-image($image, linear-gradient($start, $color-stops));\n    }\n\nOr for sass files:\n\n    =radial-gradient($color-stops, $center-position: center center, $image: false)\n      +background-image($image, radial-gradient($center-position, $color-stops))\n    \n    =linear-gradient($color-stops, $start: top, $image: false)\n      +background-image($image, linear-gradient($start, $color-stops))\n\n<a name=\"typography\"></a>\n## Typography Module\n\nWith the addition of vertical-rhythms to the compass core, we have created a new\n[typography module][typography_module], and moved several items that were formerly\nlisted as \"utilities\" into it. The moved modules are \"links\", \"lists\" and \"text\".\nThese will all remain part of the basic compass include, but if you were including \nthem individually in your stylesheets, you will need to adjust the include paths\nas follows:\n\n* \"compass/utilities/links\" becomes \"compass/typography/links\"\n* \"compass/utilities/lists\" becomes \"compass/typography/lists\"\n* \"compass/utilities/text\" becomes \"compass/typography/text\"\n\n\n[new_transform]: /reference/compass/css3/transform/\n[old_transform]: /reference/compass/css3/transform-legacy/\n[image_stylesheet]: /reference/compass/css3/images/\n[typography_module]: /reference/compass/typography/"
  },
  {
    "path": "compass-style.org/content/help/tutorials/upgrading/im-scared.markdown",
    "content": "---\ntitle: I'm Scared to Upgrade\nlayout: tutorial\ncrumb: Scared to Upgrade?\nclassnames:\n  - tutorial\n---\n# I'm scared to upgrade.\n\nWhy? Don't ya trust me? I won't break your stylesheets. Cross my heart. All those\n200+ github issues were feature requests. Honest. But you know, they might change\na little. Probably not in any meaningful way. Like a default that used to be\nspecified in the output might be omitted because it's the browser default anyway.\n\n## Trust but verify.\n\nBut you should probably keep me on my toes. Follow these simple steps to see\nwhat changed to your stylesheets:\n\n*(Steps beginning with a $ are command line commands. Don't type the $.)*\n\n1. $ cd my_compass_project\n2. $ compass compile --force\n3. $ cp -r stylesheets stylesheets.backup\n4. $ gem install compass # you might need to type sudo first if you're on mac or linux.\n5. $ compass compile --force\n6. Take note of any deprecation warnings printed in red during the compile.\n7. If you have textmate and installed the `mate` command line tool:<br>\n   $ diff -r stylesheets.backup stylesheets | mate\n8. If you have not installed the `mate` tool:<br>\n   $ sudo ln -s /Applications/TextMate.app/Contents/Resources/mate /usr/local/bin/mate\n   Then perform step 7.\n9. If you do not have Textmate, run the diff command like so:\n   $ diff -y -r stylesheets.backup stylesheets | less\n10. Scroll or use your arrow keys to review the differences between the files.\n11. If you're satisfied: $ git commit -a -m \"Upgraded compass\"\n12. If you're scared again:\n    1. Don't panic.\n    2. Read the [CHANGELOG](http://compass-style.org/CHANGELOG/) and\n       see if the changes are explained there.\n    3. Send an email to the [mailing list](http://groups.google.com/group/compass-users)\n       explaining the problem and providing enough context like snippets from your diff\n       and the relevant snippets of your sass/scss files. In rare cases we might request\n       that you construct a simple compass project that exhibits the issue and make an\n       archive of it and send us an email with it attached.\n    4. If it's pretty obviously a bug. Please file an issue\n       on [github](http://github.com/chriseppstein/compass/issues). If you're experiencing\n       a crash, please run the command with the --trace option and record the output for\n       diagnostic purposes.\n    5. $ sudo gem uninstall compass\n       Select the newest version of compass. You have now downgraded to the old\n       version of compass.\n    6. $ compass compile --force\n    7. Diff the folders as in steps 7 through 9.\n13. Breathe a sigh of relief.\n       \n       \n\n"
  },
  {
    "path": "compass-style.org/content/help/tutorials/upgrading/lemonade_upgrade_guide.markdown",
    "content": "---\ntitle: Lemonade Upgrade Guide\nlayout: tutorial\ncrumb: Lemonade Upgrade\nclassnames:\n  - tutorial\n---\n# Lemonade Upgrade Guide\n## Example 1\n\n### Lemonade\n\n    .logo {\n      background: sprite-image(\"lemonade/lemonade-logo.png\");\n    }\n    .lime {\n      background: sprite-image(\"lemonade/lime.png\");\n    }\n    .coffee {\n      background: sprite-image(\"other-drinks/coffee.png\") no-repeat;\n    }\n    \n### Compass\n\n\n    @import \"lemonade/*.png\";\n    @import \"other-drinks/*.png\"\n    @include all-lemonade-sprites;\n    @include all-other-drinks-sprites;\n\nCompass will return class names `.lemonade-logo`, `.lemonade-lime`, `.other-drinks-coffee`\n    \n    \n# Example 2\n\n### Lemonade\n\n    .lemonade-example-1 {\n      background: sprite-image(\"lemonade/example-1/blue-10x10.png\", 10px, 2px);\n    }\n\n### Compass\n  With compass you need to flatten the image directory to be `images/lemonade` instead of `images/lemonade/example-1`\n  \n    @import \"lemonade/*.png\"\n  \n    .lemonade-example-1 {\n      @include lemonade-sprite(blue-10x10, true, 10px, 2px);\n      background-color: yellow;\n    }"
  },
  {
    "path": "compass-style.org/content/help/tutorials/upgrading.markdown",
    "content": "---\ntitle: Upgrading Compass\nlayout: tutorial\ncrumb: Upgrading\nclassnames:\n  - tutorial\n---\nUpgrading Compass\n=================\nSo a new version of compass is out and you'd like to upgrade, but you're not sure how.\nWell you've come to the right place.\n\nThere's a few things you should know.\n\n1. **What is my currently installed compass version?**\n   You can find out your compass version by running `compass version`\n   on the command line.\n2. **What is the latest compass version?**\n   The latest version of compass is proudly displayed [here](https://rubygems.org/gems/compass).\n   <br>\n   ![rubygems](http://img.skitch.com/20101116-xkd9mtmqearh5mwhca33pa5yyy.png)\n3. **What is the latest preview release?** There's not always a preview release,\n   but when there is, you can see the latest version [here](https://rubygems.org/gems/compass)\n   <br>\n   ![rubygem versions](http://img.skitch.com/20101116-d3j5hf8ishb9x5249et8b6i23i.png)\n4. Compass keeps a very detailed list of changes in every release. You can read\n   the [changelog](/CHANGELOG/) to get up to speed on what has changed.\n\nIf you're scared to upgrade, that's silly. Read [this](./im-scared/)."
  },
  {
    "path": "compass-style.org/content/help/tutorials.haml",
    "content": "---\ntitle: Compass Tutorials\ncrumb: Tutorials\nclassnames:\n  - tutorial\nlayout: tutorial\n---\n%h1 Compass Tutorials\n\n:markdown\n  These tutorials are still a work-in-progress, if you have questions that aren't covered here let us know on the [Compass users mailing list](http://groups.google.com/group/compass-users) where there are lots of\n  friendly Compass users standing by to help you out.\n\n  ## New to Compass?\n\n  If you're new to Compass, you might be interested in [best practices](/help/tutorials/best_practices/), the [configuration reference](/help/documentation/configuration-reference/), [configurable variables](/help/tutorials/configurable-variables/),\n  or the [command line documentation](/help/documentation/command-line/).\n\n  ## Want to contribute?\n\n  If you've been using Compass for a while and you'd like to give back, check out the tutorials on [contributing](/help/tutorials/contributing/) and [creating extensions](/help/tutorials/extensions/).\n"
  },
  {
    "path": "compass-style.org/content/index/functions.haml",
    "content": "---\ntitle: Compass Documentation | All Functions\ncrumb: Docs\nbody_id: home\n---\n%article\n  %h1#logo Sass Based Functions\n\n  - all_functions.sorted_and_grouped_by_name{|f| f.last.name }.each do |(group, functions)|\n    %h3= group\n    %ul\n      - functions.each do |(i, f)|\n        %li\n          %a{:href=>\"#{i.path}#function-#{f.name}\"}= f.sass_signature(:html)\n\n  - sass_function_list = []\n  %h1#logo All Ruby Based Functions\n  %h3 Compass Functions\n  %ul\n    - Sass::Script::Functions.public_instance_methods.sort_by{|m| m.to_s}.each do |m|\n      - name = m.to_s.gsub(\"_\",\"-\")\n      - unless name =~ /^\\-compass/ # Private Fuctions!\n        - if i = item_for_function_name(name)\n          %li\n            %a{:href=>\"#{i.path}##{name}\"}= name\n        - elsif sass_functions().include? m\n          - sass_function_list << '<a href=\"http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#%s-instance_method\">%s</a>' % [m.to_s, name]\n        - else\n          %li\n            = name\n  %h3 Sass Functions\n  %ul\n    - sass_function_list.each do |m|\n      %li= m"
  },
  {
    "path": "compass-style.org/content/index/mixins.haml",
    "content": "---\ntitle: Compass Documentation | All Mixins\ncrumb: Docs\nbody_id: home\n---\n%article\n  %h1#logo Compass Mixins\n  \n  - all_mixins.sorted_and_grouped_by_name{|m| m.last.name }.each do |(group, mixins)|\n    %h3= group\n    %ul\n      - mixins.each do |(i, m)|\n        %li\n          %a{:href=>\"#{i.path}#mixin-#{m.name}\"}= m.sass_signature(:none, :html)\n"
  },
  {
    "path": "compass-style.org/content/index/variables.haml",
    "content": "---\ntitle: Compass Documentation | All Variables\ncrumb: Docs\nbody_id: home\n---\n%article\n  %h1#logo Compass Variables\n  \n  - all_constants.sorted_and_grouped_by_name{|v| v.last.name }.each do |(group, variables)|\n    %h3= group\n    %ul\n      - variables.each do |(i, v)|\n        %li\n          %a{:href=>\"#{i.path}#const-#{v.name}\"}= \"$\" + v.name\n  "
  },
  {
    "path": "compass-style.org/content/index.haml",
    "content": "---\ntitle: Compass Home\ncrumb: Home\nbody_id: home\nlayout: homepage\n---\n%h1#logo Compass\n%h2 <strong>Compass</strong> is an open-source <em>CSS Authoring Framework</em>.\n.overview\n  .info-box.compass\n    %h4 Why designers love Compass.\n    %ol\n      %li Experience cleaner markup without presentational classes.\n      %li It’s chock full of the web’s best <a href=\"/reference/compass/\">reusable patterns</a>.\n      %li It makes creating <a href=\"/help/tutorials/spriting/\">sprites</a> a breeze.\n      %li Compass mixins make <a href=\"/reference/compass/css3/\">CSS3</a> easy.\n      %li Create beautiful <a href=\"/reference/compass/typography/vertical_rhythm/\">typographic rhythms</a>.\n      %li Download and create extensions with ease.\n  .info-box.sass\n    %h4 Compass uses Sass.\n    %p\n      <a href=\"http://sass-lang.com/\">Sass</a> is an extension of CSS3 which\n      adds nested rules, variables, mixins, selector inheritance, and more.\n      Sass generates well formatted CSS and makes your stylesheets\n      easier to organize and maintain.\n  = render 'partials/ad'\n%h3 Brilliant people use Compass, including these <em>wildly talented</em> folks:\n%ul#featured_sites\n  %li\n    %a(href=\"http://linkedin.com/\")\n      %img(src=\"/images/sites/linkedin.png\")\n      %span.title LinkedIn\n      %span.url http://linkedin.com/\n  %li\n    %a(href=\"http://status.heroku.com/\")\n      %img(src=\"/images/sites/status.heroku.jpg\")\n      %span.title Heroku Addons\n      %span.url http://status.heroku.com\n  %li\n    %a(href=\"http://sencha.com/products/touch/\")\n      %img(src=\"/images/sites/sencha.jpg\")\n      %span.title Sencha Touch\n      %span.url http://sencha.com/products/touch\n  %li\n    %a(href=\"http://caring.com/\")\n      %img(src=\"/images/sites/caring.jpg\")\n      %span.title Caring.com\n      %span.url http://caring.com\n  %li\n    %a(href=\"http://hubblesite.org/\")\n      %img(src=\"/images/sites/hubblesite.jpg\")\n      %span.title HubbleSite\n      %span.url http://hubblesite.org\n  %li\n    %a(href=\"http://dailymile.com/\")\n      %img(src=\"/images/sites/dailymile.jpg\")\n      %span.title DailyMile\n      %span.url http://dailymile.com\n  %li\n    %a(href=\"http://cofamilies.com/\")\n      %img(src=\"/images/sites/cofamilies.jpg\")\n      %span.title Cofamilies\n      %span.url http://cofamilies.com\n  %li\n    %a(href=\"http://jumpstartlab.com\")\n      %img(src=\"/images/sites/jumpstartlab.jpg\")\n      %span.title Jumpstart Lab\n      %span.url http://jumpstartlab.com\n  %li\n    %a(href=\"http://busyconf.com/\")\n      %img(src=\"/images/sites/busyconf.jpg\")\n      %span.title BusyConf\n      %span.url http://busyconf.com\n\n%section.book\n  %h3 Save <em>37%</em> on the Book: (Currently In Beta)\n\n  %p\n    %a(href=\"http://www.manning.com/netherland/\")\n      %img(src=\"http://www.manning.com/netherland/netherland_cover150.jpg\" alt=\"Sass & Compass in Action\")\n    Compliments of Manning.com is a standing 37% discount on\n    <a href=\"http://www.manning.com/netherland/\">Sass and Compass in Action</a>.\n    Use promo code <code>sasscomp37</code> at manning.com on the MEAP, eBook and pBook of Sass and\n    Compass in Action.  All pBook purchases include free eFormats (PDF, ePub, and Kindle)\n    as soon as available.\n\n%section.gui\n  %h3 <em>Hate</em> the Command Line?\n\n  %a(href=\"http://compass.handlino.com/\")\n    %img(src=\"/images/compass.app.png\")\n  %p\n    Buy <a href=\"http://compass.handlino.com/\">Compass.app</a>\n    for Windows and Mac for just $10.\n  %p.note\n    Note: Compass.app is a product of Handlino, Inc but\n    30% of all proceeds go to Compass's charity of choice: <a href=\"http://umdf.org/compass\">UMDF.org</a>.\n"
  },
  {
    "path": "compass-style.org/content/install.haml",
    "content": "---\ntitle: Install the Compass Stylesheet Authoring Framework\ncrumb: Install\nbody_id: install\n---\n- content_for :javascripts do\n  %script(src=\"/javascripts/install.js\")\n  \n%h2 Installing Ruby  \n%p\n  Compass runs on any computer that has\n  <a href=\"http://www.ruby-lang.org/en/downloads/\">ruby installed</a>.\n%p\n  For more advanced users you may want to install\n  <a href=\"https://rvm.io/rvm/install\">rvm</a>.\n\n%h2 Setting up the ruby environment\n%ol\n  %li <code>$ gem update --system</code>\n  %li <code>$ gem install compass</code>\n\n%h2 Looking for the next release's preview version?\n%p\n  To install the preview version of Compass:\n\n%ol\n  %li <code>gem install compass --pre</code>\n\n%h2 Tell us about your project and we'll help you get it set up:\n%blockquote.madlib.customizable<\n  I would like to set up my\n  %select#existence\n    %option{:value => \"create\"} new\n    %option{:value => \"init\"} existing\n  %select#app-type\n    %option{:value => \"stand-alone\"} compass\n    %option{:value => \"rails\"} rails\n    %option{:value => \"other\"} other\n  project\n  %span.creating\n    named\n    %input#project_name(placeholder=\"<myproject>\")\n  with\n  %select#framework\n    %option{:value => \"compass\"} compass's\n    %option{:value => \"bare\"} no\n  starter stylesheets.\n  %br\n  I prefer the\n  %select#syntax\n    %option{:value => \"scss\"} CSS based (SCSS)\n    %option{:value => \"sass\"} Indent based (Sass)\n  syntax<span class=\"customization\">\n  and would like to\n  %select#options\n    %option{:value => \"default\"} use compass's recommended\n    %option{:value => \"customized\"} customize my project's\n  directory structure<span id=\"directories\" style=\"display:none;\">\n  using\n  %input#sassdir(placeholder=\"sass\")\n  for the sass source directory,\n  %input#cssdir(placeholder=\"stylesheets\")\n  for the stylesheets output directory,\n  %input#jsdir(placeholder=\"javascripts\")\n  for the javascripts directory,\n  and\n  %input#imagesdir(placeholder=\"images\")\n  for the images directory</span></span>.\n\n%h4 Thanks. Now run the following steps in your terminal:\n\n%p.note\n  Terminal newbies, read <a href=\"http://wiseheartdesign.com/articles/2010/11/12/the-designers-guide-to-the-osx-command-prompt/\">the Designer’s Guide to the OSX Command Prompt</a> first!\n\n#steps\n  Loading...\n%p.note Note: <code>$</code> is a placeholder for your terminal's prompt. You don't type it.\n%h4 Then follow the instructions that compass provides in the output.\n\n%h2 Hate the Command Line?\n\n%p Try one of these Community supported GUI applications:\n%ul\n  %li <a href=\"http://compass.handlino.com/\">Compass.app</a> from <a href=\"http://handlino.com/\">Handlino</a>.\n  %li <a href=\"http://mhs.github.com/scout-app/\">Scout</a> from <a href=\"http://mutuallyhuman.com/\">Mutually Human</a>.\n\n%h2 Next Steps\n%ul\n  %li\n    %a(href=\"http://sass-lang.com\" target=\"_blank\") Learn about Sass\n  %li\n    %a(href=\"/help/tutorials/\") Read our tutorials\n  %li\n    %a(href=\"/reference/compass/\") Study the reference documentation\n\n"
  },
  {
    "path": "compass-style.org/content/posts/2011-04-24-v011-release.markdown",
    "content": "---\ntitle: \"Compass v0.11 is Released!\"\ndescription: \"Months in the making, Compass v0.11 continues to revolutionize CSS Frameworks.\"\nauthor: chris\n---\n\nThe Compass team is proud to announce that v0.11 is released. With this release, Compass & Sass continue to revolutionize the world of CSS Frameworks bringing never-before-seen features and unmatched simplicity, quality, and flexibility to your stylesheets.\n\nIn this post, we summarize the new features. For all the nitty gritty details, see the [CHANGELOG](/CHANGELOG/).\n\nCompass is Charityware. If you love this release, [please donate to the UMDF](http://umdf.org/compass) on our behalf and help find a cure for thousands of children suffering from mitochondrial disease.\n\n## Sass 3.1\n\nThis release required you to upgrade to Sass 3.1. This release brings a ton of great new features that Compass now uses and you can too!\n\n* Proper List Support: Space and Comma separated lists used to cause values to become strings\n  when passing them to mixins. Now the values in lists are preserved as their original types.\n* Sass-based Functions. Define your own value functions and use them anywhere.\n* Keyword Style Argument passing to Functions and Mixins. It can be hard to understand what\n  the values being passed to a mixin or function are for, use keyword style arguments to\n  make it easier to understand remember and read mixin includes.\n* `@media` bubbling. Responsive design meets nested selectors! Use a media declaration anywhere and it\n  will be bubbled to the top level for you.\n\nFor more information about the new Sass features, see the [Sass CHANGELOG](http://sass-lang.com/docs/yardoc/file.SASS_CHANGELOG.html).\n\n\n## Embracing CSS3\n\nThe power and flexibility of CSS3 is well known and web developers and designers are finding many new and interesting ways to take advantage of it. In Compass v0.11 we have revisited each CSS3 feature to ensure the greatest ease of use and similarity to CSS3 syntax. The compass internals for managing cross-browser compatibility have been rewritten to provide a powerful platform for moving as fast as the browser implementors are. Going forward, <span style=\"text-decoration: underline;\">expect small point releases to adapt to new browser support and changes much more rapidly</span>. By default, Compass provides out-of-the-box support for **all** modern and legacy browsers as far back as IE6 and Firefox 2. But if you want slimmer stylesheets, it is [simple to configure](/reference/compass/support/) which browser support we provide.\n\nIn this release, we embraced the CSS3 syntax as much as possible. It might seem obvious, but the Compass convention is now that all CSS3 mixin arguments should match the CSS3 syntax for their corresponding properties so that you never have to *learn* a compass CSS3 mixin. If you ever find a case where this is not true, it is a bug and we would appreciate it if you would [provide the details in a bug report](http://github.com/chriseppstein/compass/issues). After upgrading, you will encounter a number of deprecation warnings guiding you through the syntax changes.\n\n### Gradients Evolved\n\nThe best example of the changes in the CSS3 module are related to gradients. In Compass v0.10 we provided two simple mixins: `linear-gradient` and `radial-gradient` for setting the `background-image` property:\n\n    .linear {\n      @include linear-gradient(#FFF, #000, color-stops(#C00 25%, #0C0 75%))\n    }\n\nThis syntax was inspired by the original webkit gradient syntax but tried to simplify it to some extent. But the gradient specification has evolved and because gradients can be used anywhere an image can, so we now provide a mixin for each property that can accept gradients and the arguments\ncan be any legal CSS3 value for the that property:\n\n    .linear {\n      @include background-image(linear-gradient(#FFF, #C00 25%, #0C0 75%, #000))\n    }\n\nWhich produces:\n\n    .linear {\n      background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(25%, #cc0000), color-stop(75%, #00cc00), color-stop(100%, #000000));\n      background-image: -webkit-linear-gradient(#ffffff, #cc0000 25%, #00cc00 75%, #000000);\n      background-image: -moz-linear-gradient(#ffffff, #cc0000 25%, #00cc00 75%, #000000);\n      background-image: -o-linear-gradient(#ffffff, #cc0000 25%, #00cc00 75%, #000000);\n      background-image: linear-gradient(#ffffff, #cc0000 25%, #00cc00 75%, #000000);\n    }\n\n## Dead Simple Sprites\n\nSpriting has never been easier with Compass. Nico Hagenburger joined the Compass team and we have built on his popular Lemonade plugin to make Compass sprites. Existing Lemonade users will need to upgrade.\n\nThe way they work is you place the sprite images in a folder,\nimport them into your stylesheet, and then you can use the sprite in your selectors in one\nof several convenient ways.\n\nFor example, let's imagine that in your project's image folder there are four icons:\n\n* `<images_dir>/icon/new.png`\n* `<images_dir>/icon/edit.png`\n* `<images_dir>/icon/save.png`\n* `<images_dir>/icon/delete.png`\n\nThe simplest way to use these icon sprites is to let compass give you a class for each sprite:\n\n    @import \"icon/*.png\";\n    @include all-icon-sprites;\n\nAnd you'll get the following CSS output:\n\n    .icon-sprite,\n    .icon-delete,\n    .icon-edit,\n    .icon-new,\n    .icon-save   { background: url('/images/icon-34fe0604ab.png') no-repeat; }\n\n    .icon-delete { background-position: 0 0; }\n    .icon-edit   { background-position: 0 -32px; }\n    .icon-new    { background-position: 0 -64px; }\n    .icon-save   { background-position: 0 -96px; }\n\nYou can now apply the `icon-XXX` classes to your markup as needed.\n\nOf course, this is Compass which means that underneath this simple veneer is a powerful system that you can use to customize your selectors and all kinds of other scenarios involving unicorns and rainbows. Get all the details in our [Spriting Tutorial](/help/tutorials/spriting/).\n\n## New Typography Module\n\nNew in this release is a typography module. Many of our utility mixins related to typography have been moved here, but the really exciting development is the addition of the [vertical rhythm module](/reference/compass/typography/vertical_rhythm/). Based on [this excellent tutorial](http://24ways.org/2006/compose-to-a-vertical-rhythm) from 24ways, it is now simpler than ever to compose to a vertical rhythm.\n\n## Blueprint 1.0\n\nBlueprint is 1.0 now and the Compass port is updated to match the changes there. Some of the changes that blueprint made might affect your design, so if you don't want to take this upgrade, you should unpack blueprint before you upgrade:\n\n    compass unpack blueprint\n\n## New Website\n\nAs you can see, we have a spiffy new website design from Compass Core team member [Brandon](http://brandonmathis.com/). A testament to the separation of content and presentation, most of this redesign was done by throwing out our old stylesheets and building new ones. If you don't like the light text on dark background theme, you can turn on the lights by clicking the power button in the upper right hand corner of every page.\n\n## Much, Much More\n\nThere's more features in this release than would fit into this post. Here's some other things you'll find in this release:\n\n* Custom directory and file watching (E.g. for pngcrush support)\n* Compilation Callback support\n* Trigonometric functions\n\nRead the [CHANGELOG](/CHANGELOG/) for all the details.\n\nAdditionally, expect a point release to follow shortly with support for:\n\n* Rails 3.1\n\nLastly, Compass v0.11 will have point releases as needed to adapt to changes in browser support for the CSS3 module.\n\n## Many Thanks\n\nCompass wouldn't be possible without Natalie Weizenbaum and her hard work on Sass. The latest Sass release\nprovides a ton of great features that have made this Compass release possible.\n\nCompass is far to big for one person to manage it now. I'd like to thank the hard work of the Compass core team members:\n\n* [Eric Suzanne](http://ericsuzanne.com/)\n* [Brandon Mathis](http://brandonmathis.com/)\n* [Scott Davis](https://github.com/jetviper21)\n* [Nico Hagenburger](http://www.hagenburger.net/)\n\nAdditionally, there were commits from 10 other great folks in this release and there's been [contributions from 68 people](https://github.com/chriseppstein/compass/contributors) in total so far.\n\nLastly thanks to the hundreds, if not thousands, of users who have helped test this release and provided valuable feedback, bug reports, and documentation suggestions. Together, we are making a real stylesheet framework and simplifying the lives of web developers across the world.\n"
  },
  {
    "path": "compass-style.org/content/posts/2011-04-26-compass-release-strategy.markdown",
    "content": "---\ntitle: \"Compass Release Strategy\"\ndescription: \"An overview of how Compass will be managing ongoing releases.\"\nauthor: chris\n---\n\nMost of this is probably obvious, but it doesn't hurt to be explicit about such things.\n\nIf you're interested in contributing to Compass, please read the\n[Contribution Guide](http://compass-style.org/help/tutorials/contributing/).\n\nVersioning\n----------\n\nMost stable releases will be released as release candidates first\n(e.g `0.11.1.rc.0`) and then made into official releases after a day\nor so if they don't cause any problems.\n\nSass Dependency\n---------------\n\nWe will decouple major Compass releases from the Sass release schedule\ngoing forward. When Sass releases happen, we will issue patches to both\nstable and master branches to adjust to any deprecations and new\nfeatures after they are fully released (which means we might have the\nchanges waiting in a topic branch). Because Sass is very careful to not\nbreak existing stylesheets without deprecating first, this shouldn't be\nhard to pull off.\n\nStylesheet Progress\n-------------------\n\nI do not want to see the compass stylesheets get frozen again \nlike they did in v0.10 while waiting for the next major release.\nCompass users expect us to keep up with browser developments and we will.\nIf this means that we need to make v0.12 become v0.13 because\nthe stylesheets need to make some major change, then we will do that.\n\nCommunicating Change\n--------------------\n\nAll new features should have tests, docs, and CHANGELOG entries\nas appropriate as part of the commit.\n\nAdditionally, we now have a compass team blog that we can use to communicate\nabout new features, best practices, or other Compass related stuff.\nIt's easy to add a post, you just drop a markdown file into\n[this directory](https://github.com/chriseppstein/compass/tree/stable/compass-style.org/content/posts).\nGuest posts are totally welcome via pull requests.\n\nStable\n------\n\nThe stable release is were code lives for the next v0.11 point release.\nCommits should only go here if they are ready for release, until that\npoint the code should live in your compass fork or in a topic branch.\n\nCore team members, please use pull requests to manage the code review\nprocess for any change of significance and get sign-off from one other\nteam member before committing to stable.\n\nChanges that can go on stable:\n\n* Browser support updates\n* Non-breaking stylesheet changes and minor features\n  like new mixins or modules.\n* Bug fixes\n\nChanges that can't go on stable:\n\n* New deprecations\n* Major features\n* Big refactors\n\nIf you're not sure where to put something, just ask.\n\nRails 3.1 support is the exception to this rule, given the timeline\nassocated with that release, I will make a topic branch and we'll\nmerge that to stable when it's ready.\n\nCore team members will, after committing/merging code to stable, then merge those changes to master so it is up to date.\n\nMaster\n------\n\nMaster is where code goes to be ready for v0.12. This focus of this\nnext release is making extensions easy to make, share, discover, install,\nremove, and use. Any and all ideas that you have related to this are\nwelcome. At a minimum, I would like to have an extension directory\napp hosted on compass-style.org and make sure that compass knows about\nit and can install extensions by name from there.\n\n\n"
  },
  {
    "path": "compass-style.org/content/posts/2011-05-09-compass-django.markdown",
    "content": "---\ntitle: \"How to use Compass/Sass with Django.\"\ndescription: \"All the documentation is for Ruby/Rails development, so how does it work for the rest of us?\"\nauthor: eric\n---\n\nIt's easy! Follow these two simple steps:\n\n1. Use Compass/Sass.\n2. Use Django. \n\nThat's it. Compass works great as a stand-alone tool. Run \"compass --watch\" on the command line or use [compass.app](http://compass.handlino.com/) to compile your stylesheets, and then commit the CSS to your Django project, just like you always have. Done.\n\n## What about integration?\n\nCompass and Sass are built in Ruby. When the rest of your project is also built in Ruby, it makes sense to squeeze every last ounce of convenient automatic integration, like having your project automatically compile Sass to CSS for you at runtime. But that integration is not actually necessary, and when the rest of your project is not Ruby, you pay a lot more for that little bit of convenience.\n\nA Rails/Ruby project already has a full Ruby stack and deployment infrastructure to make sure all the right Ruby gems are available on the server. Adding a few Compass gems makes very little difference in the complexity of your production deployment.\n\nFor a Django project, integrating run-time Compass compilation (via something like [django-css](https://github.com/dziegler/django-css)) means requiring a full Ruby stack on your production servers, plus new deployment infrastructure for getting all the right gem versions in place. This is a significant chunk of additional moving parts on your production servers.\n\nKeeping your production servers simpler is A Very Good Thing. (And, as a bonus, it allows you to deploy your project to pure-Python managed hosting environments).\n\n## In development.\n\nThe disadvantage to our approach is that you are committing generated code to the repo. That's generally frowned upon. But we haven't seen any actual problems as a result of this. Nobody on the team is tempted to edit the generated CSS directly; we all know that we use Compass for that. There are no mysterious display inconsistencies between one developer and another, or between development and production, because of minor differences in something like a Compass plugin gem version. Everyone sees the same CSS. Differences between developers' Compass environments are caught quickly, because they show up right away as unexpected changes in the pre-commit diff of the generated CSS.\n\nAnd I, as the designer/front-end developer, keep full control of the css-generation process without needing to touch the server. If I want to update the gems and make some changes, I can do that. I make the change, I commit the change, and it just works. For everyone. That's important to me. It removes all the pretense of dark magic that can come with Sass/Compass. I'm writing CSS. I'm committing CSS. Compass, Sass and all their plugins are just tools towards that end.\n\nOf course, you'll want to commit the Sass as well, especially if you have multiple front-end developers on the team. That way the source is available for anyone who needs to update it, even though it's not needed by the server. You might also want a way of documenting the latest gems that should be used to compile it. That's easy enough to add in a comment or doc of it's own. \n\n## Just Tools.\n\nI want to say that again because I think it is the most important and most often forgotten rule of using a css pre-processor. **Compass and Sass are simply tools for writing CSS. They are not a new styling language. They are not magic. They make writing css easier - and that is all. The css output is the only thing that matters.**"
  },
  {
    "path": "compass-style.org/content/posts/2012-01-29-compass-and-rails-integration.markdown",
    "content": "---\ntitle: \"Compass/Rails Integration in v0.12\"\ndescription: \"Starting in Compass v0.12 compass's rails integration is\ndone via a new project called compass-rails.\"\nauthor: chris\n---\n\nThe Compass v0.12 release is way behind schedule but it's finally getting\nvery close to release. The main goal of the v0.12 release has been to add\nsupport for the rails asset pipeline and we hope that you'll agree that this\nrelease achieves the very best integration with rails that compass has\never provided.\n\nIn v0.12, we've create a new gem called `compass-rails` to provide full\nsupport for rails 2.3 and greater. Let me tell you, this was no small\nfeat. 2.3 lacks Railtie support and 3.1 introduced the asset pipeline.\nBackflips were performed; blood, sweat, and tears were shed; Monkeys\nwere patched and Ducks were punched.\n\nThe compass command line tool will now be aware of and compass\nconfiguration settings you've made in your rails configuration files\nand/or in the compass configuration file.  You can use the approach that\nbest suites your workflow.\n\nWhile the asset pipeline is convenient, large applications with lots of\nstylesheets and many imports can become sluggish in development mode. To\nmake things snappier, you can now run the compass watcher in a separate\nterminal to begin compilation as soon as you save. In combination with\ntools like [live-reload](https://github.com/mockko/livereload), you may\nnot even need to reload your webpage to see the result in your browser.\n\nCompass extensions and their starter files can be added to your rails\nproject following the extensions' existing installation instructions.\nNo special consideration is needed to support rails except to note\nthat the extension gem should be listed in the `:assets` group of your\nGemfile and you might need to use `bundle exec` to launch the compass\ncommand line tool.\n\nHaving a dedicated gem for integration provides a number of benefits.\nFirst, it means that we can release rails integration fixes on a\nseparate release schedule from the main compass library. Second, it\nsolves a chicken & egg problem we had where the command-line tools\ndidn't know whether they were dealing with a rails project until it was\ntoo late. Finally, it allowed us to clean up some of the Compass\ninternals. To be clear, this gem doesn't mean that Rails support is\ndeprecated or a second class citizen in any way.\n\nHuge thanks go to [Scott Davis](https://github.com/scottdavis) for his\nhard work on the compass-rails gem.\n"
  },
  {
    "path": "compass-style.org/content/posts/2012-02-01-compass-0-12-is-released.markdown",
    "content": "---\ntitle: \"Compass v0.12 is Released\"\ndescription: \"Compass 0.12: Flexible Sprites, Rails Integration\"\nauthor: chris\n---\n\nCompass 0.12 is out! Install it now:\n\n    $ (sudo) gem install compass\n\nThis release is primarily to support the Rails Asset Pipeline which\nrequired major changes to the Compass internals. If you use rails\nwith Compass please read the [blog post about the new compass-rails\ngem][compass-rails].\n\nIn addition to the rails improvements this release contains many updates\nto Compass Sprites:\n\n* **Sprite Layouts**: `vertical` (default), `horizontal`, `diagonal`, and `smart`\n  layouts are now available. Different layouts may allow you to use\n  sprites more easily with differing design requirements. The `smart`\n  layout will efficiently pack sprites of different sizes -- resulting\n  in smaller file sizes. To select a layout set the\n  `$<spritename>-layout` variable to your desired layout name.\n* **Sprite Load Path**: Sprite source files can now be stored in more locations than\n  just your images directory. To add sprite locations in your compass\n  configuration: `sprite_load_path << 'my/sprite/folder'\n* **Sprite output location**: If you need to output sprites to a\n  location other than the images directory set `generated_images_dir`,\n  `generated_images_path`, `http_generated_images_dir`, and\n  `http_generated_images_path` in your compass configuration according\n  to your needs. You can refer to images in your generated images\n  directory using the `generated-image-url()` function.\n\nAdditionally there are many new CSS3 improvements, bug fixes, and other\nsmall enhancements that you can read about in the\n[CHANGELOG](/CHANGELOG/).\n\nWhat's next for Compass? First, we've added [Anthony\nShort](/blog/2012/03/11/anthony-short-joins-the-compass-core-team/) to\nthe team and we're really excited to see him come make our stylesheets\neven more awesome. The Sass 3.2 release is coming soon and the 0.13\nrelease of compass will take advantage of the great features that it\noffers. Additionally, we're working on an extension registry where you\ncan post your compass extensions and discover new ones.  Lastly, we'll\nbe extracting blueprint to a compass extension as that project seems to\nhave stagnated. I'd say we're getting pretty close to a 1.0 release!\n\n[compass-rails]: /blog/2012/01/29/compass-and-rails-integration/\n"
  },
  {
    "path": "compass-style.org/content/posts/2012-05-20-removing-blueprint.markdown",
    "content": "---\ntitle: \"Removing Blueprint from Compass in 0.13\"\ndescription: \"Blueprint will be extracted to a plugin\"\nauthor: chris\n---\n\nFive years ago, [Blueprint CSS](http://blueprintcss.org/) was an\ninnovative CSS Framework. It was a boilerplate before\n[H5BP](http://html5boilerplate.com/) and it was the most popular CSS\nGrid Framework when the concept was still young.\n\nBlueprint's regular structure and common-sense approach, together with\nits inherent weaknesses, was a major inspiration for the development of\nCompass. In fact, Compass started solely as a rejected sass-based\ntoolchain for the blueprint project.\n\nSadly, the blueprint core team, while having never officially announced\nthat the project is over, has through negligence, caused the project to\nfall behind. It has not kept up with layout and responsive approaches\nthat are essential to web design in 2012.\n\nFurthermore, there are many new layout mechanisms coming in CSS:\n[columns][css-columns], [box-sizing][box-sizing], [regions][css-regions],\n[grid layout][css-grid], and [flexbox][css-flexbox]. The future of\nlayout looks bright and we want Sass users to be at the forefront of\ntheir adoption, establishing the best practices of 2015 instead using\nthe best practices from 2009.\n\nGiven these developments, we have decided that it is time for Compass to\nget out of the \"Grid Business\". Starting in 0.13 (our next major\nrelease) we will have removed Blueprint from Compass. The stylesheets\nwill be extracted as a plugin so that our users can continue to\nuse it, if they need to. At that time, you can install it with two\nsimple steps:\n\n1. `gem install compass-blueprint`\n2. Edit your compass configuration and add: `require 'compass-blueprint'`\n\nWe hope that this means that the Compass community will think more\ncarefully about the grids that they use and whether they meet their\nproject's specific needs.\n\nIf you are looking for a grid system for your next site, or to replace\nblueprint with something more modern. We suggest you look into\n[Susy](http://susy.oddbird.net/). It is written by Compass core team\nmember, [Eric Suzanne](http://twitter.com/ericmsuzanne). Susy 1.0 has been\ncompletely overhauled to take advantage of modern browsers and the very\nlatest features in Sass 3.2 and Compass 0.13. If you have a favorite\ngrid framework, please feel free to mention it in the comments.\n\n**TL;DR** Starting in Compass 0.13, blueprint will be extracted from compass\nand available as a compass extension named `compass-blueprint`.\n\n\n[css-columns]: http://www.w3.org/TR/css3-multicol/\n[css-grid]: http://dev.w3.org/csswg/css3-grid-layout/\n[css-regions]: http://dev.w3.org/csswg/css3-regions/\n[css-flexbox]: http://www.w3.org/TR/css3-flexbox/\n[box-sizing]: http://caniuse.com/css3-boxsizing\n"
  },
  {
    "path": "compass-style.org/content/posts/2013-11-27-compass-versioning-change.markdown",
    "content": "---\ntitle: \"Compass Versioning Change\"\ndescription: \"Compass follows semantic versioning now. Chris shakes off\nhis fear of releasing imperfect software.\"\nauthor: chris\n---\n\nWhen I created compass I imagined a particular set of features Compass\nwould have when it was done with the initial build out. I assigned that\nrelease a number of 1.0 and expected it would only take a few releases to\nget there.\n\nBut then there was users and their needs and the features they wanted.\nAnd so there have been 77 releases at the time that I'm writing this\npost. And you know what? I don't know when, or if, compass will ever\nachieve the mythical feature set I imagined.\n\nFurthermore, it's been way too long since the last stable release.\nThere was a hiatus, and then there was a mountain of bugs and feature\nrequests that built up that I desperately wanted to get into the next\nrelease. And instead of just releasing incrementally better software\nevery few weeks, I've been making a bigger and bigger release that is\nharder and harder to release.\n\nAnd so I've fallen into the trap that so many software developers fall\ninto. I'm working hard every day and I'm not shipping because it's not\ndone. But we all know, software is never done (unless you are Donald\nKnuth).\n\nAnd so I've decided to make a few changes. Sass 3.3 is ready for release\nand I want to get it out. Compass has to be released with it and there's\nno way I will get everything bug fix and new feature I need to get done.\nBut what Compass development has right right now, is really a huge\nimprovement. It's time to ship, even though it's not done and get this\ntrain moving. So here's what I'm doing to address these issues:\n\n### 1.0.0 is the next release\n\nThe next release will be version 1.0.0. This number doesn't mean\nanything. It's just an acknowledgement that compass is a mature project\nthat has tens of thousands of users and that it is not in any way \"not\ndone\".\n\n### Semantic Versioning\n\nSemantic versioning is a [standard versioning scheme](http://semver.org/)\nwith standard expectations about what a change to a version means. From\nthe site:\n\n> Given a version number MAJOR.MINOR.PATCH, increment the:\n> \n> MAJOR version when you make incompatible API changes,<br>\n> MINOR version when you add functionality in a backwards-compatible manner, and<br>\n> PATCH version when you make backwards-compatible bug fixes.\n>\n> Additional labels for pre-release and build metadata are available as\n> extensions to the MAJOR.MINOR.PATCH format.\n\n<br>\n<br>\nCompass releases will follow semantic versioning going forward.\n\n### Compass Core\n\nThe core stylesheets and configuration of Compass have been extracted to\ntheir own gem named `compass-core`. This gem allows projects that don't\nneed Compass's command line tools, extension management, and compilation\nservices, to work very simply using pure sass for much of configurable\nbits of compass. The compass core framework will have it's own version\nand will be released on it's own release train. If you don't care about\nthis, don't worrry; `gem install compass` still works exactly like it\nused to.\n\n### Regular Releases\n\nOnce Compass 1.0.0 is released. There are a ton of bug fixes and new\nfeatures we'll be releasing. Instead of waiting until there's a critical\nmass, we'll just release whenever new features land and ship\nnon-critical bug fixes every two weeks.\n\n### Gem Version Dependencies\n\nIf you are the owner of a compass extension that declares a version\ndependency on compass, you need to update your gemspec to allow compass\n1.0.0. Hit me up on [twitter](http://twitter.com/chriseppstein) if\nyou're not sure how to do this.\n\n### Install it now, help QA!\n\nThere's a 1.0.0 preview release available right now (1.0.0.alpha.13)\n\n`gem install compass --pre` to get it.\n\nIf you find a bug, please make sure to mention 1.0 in the description.\n"
  },
  {
    "path": "compass-style.org/content/posts/2014-08-15-omg-compass-1-0.markdown",
    "content": "---\ntitle: \"Compass 1.0 is Released!\"\ndescription: \"Better late than never.\"\nauthor: chris\n---\n\nCompass 1.0 is now available!\n\nFirst, let's address the elephant in the room: This release took way too\nlong. I can give you a list of reasons and excuses, but none of them\nreally matter. Suffice it to say that if you ever find yourself owning\nan open source project that has gone unmaintained for more than a year\nlike Compass had when I re-engaged with the project, the most prudent\ncourse of action is to shut it down. But I'm way too stubborn for that.\n\nWhat matters now is how things are going to work going forward.\n\n1. Regular bug fix releases. Compass 1.0 is not perfect. Now that it is\n   released, we will be shipping regular updates with bug fixes and\n   fresh browser stats so that your prefixes are always up to date.\n   You can expect a couple releases per month at a minimum.\n2. New features. While compass 1.0 has undergone significant rewrites\n   and refactoring, it is actually quite devoid of what I would consider\n   any new significant features since 0.12. Now that it is released and\n   following semantic versioning, we will be free to release new features.\n\n### What's in Compass 1.0?\n\n* Vendor prefixing decisions are now data driven by [caniuse.com data](/help/documentation/tuning-vendor-prefixes/). You tell Compass what percentage of users you want to support and we'll take it from there.\n* Compass core library now enables you to [use compass without using the\n  compass command-line tools](/help/documentation/sass-based-configuration-options/).\n* Compass speeds up your project compile times by enabling import-once\n   importing.  Existing projects should add `require \"compass/import-once/activate\"` to their configuration to enable this. [Documentation](https://github.com/Compass/compass/blob/master/import-once/README.md).\n* Sass sourcemap support. Set `sourcemap = true` in your compass\n  configuration file to enable it.\n* Rewritten watcher/compiler. Compass now use's Sass builtin compiler\n  guaranteeing tighter integration and consistency between the projects.\n* Blueprint is removed. Not that you were using it, but if you were it's\n  now maintained as a [separate plugin](http://compass-blueprint.org/).\n* CSS3Pie integration is removed.\n* Support for recent CSS Developments:\n  [Animation](/reference/compass/css3/animation/), [Flexbox](/reference/compass/css3/flexbox/), Official Gradient syntax support, [Input Placeholders](/reference/compass/css3/user_interface/), \n* Compass extensions that have Sass files that are not partials will now deliver compiled css files into a subdirectory of the css output folder.\n* And [much, much more](/CHANGELOG/).\n\nCompass has been a release candidate for a few weeks now. We've fixed\nmany bugs, but given the magnitude of the changes here, we expect that\nthere will be more. If you see something strange, please [file a bug](https://github.com/Compass/compass/issues)! Or better yet, send us a patch :)\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/animation.haml",
    "content": "---\ntitle: Compass Animation\ncrumb: Animation\nframework: compass\nstylesheet: compass/css3/_animation.scss\nmeta_description: Specify the CSS3 animation property and all its sub-properties.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  :markdown\n    Provides a mixin for `animation` and all its sub-properties.\n    See the CSS3 specification: [animation](http://www.w3.org/TR/css3-animations/).\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/appearance.haml",
    "content": "--- \ntitle: Compass Appearance\ncrumb: Appearance\nframework: compass\nstylesheet: compass/css3/_appearance.scss\nmeta_description: Specify the CSS3 appearance property.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  :markdown\n    Provides a mixin for `appearance`.\n    See the CSS3 specification: [appearance](http://www.w3.org/TR/css3-ui/#appearance).\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/background_clip.haml",
    "content": "--- \ntitle: Compass Background Clip\ncrumb: Background Clip\nframework: compass\nstylesheet: compass/css3/_background-clip.scss\nmeta_description: Specify the background clip for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides a mixin for <code>background-clip</code>. See <a href=\"http://www.w3.org/TR/2009/CR-css3-background-20091217/#background-clip\">CSS3 spec: background-clip</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/background_origin.haml",
    "content": "--- \ntitle: Compass Background Origin\ncrumb: Background Origin\nframework: compass\nstylesheet: compass/css3/_background-origin.scss\nmeta_description: Specify the background origin for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides a mixin for the background origin property. See <a href=\"http://www.w3.org/TR/css3-background/#the-background-origin\">CSS3 spec: background-origin property</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/background_size.haml",
    "content": "--- \ntitle: Compass Background Size\ncrumb: Background Size\nframework: compass\nstylesheet: compass/css3/_background-size.scss\nmeta_description: Specify the background size for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    This mixin provides cross browser access to the CSS3 <code>background-size</code> attribute using supported vendor prefixes. See <a href=\"http://www.w3.org/TR/css3-background/#the-background-size\">CSS3 spec: background-size</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/border_radius.haml",
    "content": "--- \ntitle: Compass Border Radius\ncrumb: Border Radius\nframework: compass\nstylesheet: compass/css3/_border-radius.scss\nmeta_description: Specify the border radius for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    The border-radius mixin is used to give a block element rounded corners. It automatically outputs the correct vendor specific syntax for each browser (e.g. <code>-webkit-border-radius</code> and <code>-moz-border-radius</code>). See <a href=\"http://www.w3.org/TR/css3-background/#the-border-radius\">CSS3 spec: border-radius</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/box.haml",
    "content": "--- \ntitle: Compass Box\ncrumb: Box\nframework: compass\nstylesheet: compass/css3/_box.scss\nmeta_description: This module provides mixins that pertain to the CSS3 Flexible Box.\nlayout: core\ndeprecated: true\nclassnames:\n  - reference\n---\n- render 'reference' do\n  %p.warning\n    This module is deprecated and will be removed in the next release.\n    Please use the <a href=\"/reference/compass/css3/flexbox/\">flexbox module</a> instead.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/box_shadow.haml",
    "content": "--- \ntitle: Compass Box Shadow\ncrumb: Box Shadow\nframework: compass\nstylesheet: compass/css3/_box-shadow.scss\nmeta_description: Specify the box shadow for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    The box-shadow mixins are used to apply an inset or drop shadow to a block element.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/box_sizing.haml",
    "content": "--- \ntitle: Compass Box Sizing\ncrumb: Box Sizing\nframework: compass\nstylesheet: compass/css3/_box-sizing.scss\nmeta_description: Specify the box sizing for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides a mixin for the <code>box-sizing</code> property, which allows you to change how the box model works. See <a href=\"http://www.w3.org/TR/css3-ui/#box-sizing\">W3C CSS3 spec: box-sizing</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/columns.haml",
    "content": "--- \ntitle: Compass Columns\ncrumb: Columns\nframework: compass\nstylesheet: compass/css3/_columns.scss\nmeta_description: Specify a columnar layout for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides a mixin for the CSS3 Multi-column layout module. See <a href=\"http://www.w3.org/TR/css3-multicol/\">CSS3 spec: Multi-colum layout module</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/filter.haml",
    "content": "--- \ntitle: Compass Filter\ncrumb: Filter\nframework: compass\nstylesheet: compass/css3/_filter.scss\nmeta_description: Specify the (image) filter for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    The filter mixin is used to apply filters to images.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/flexbox.haml",
    "content": "--- \ntitle: Compass Flexbox\ncrumb: Flexbox\nframework: compass\nstylesheet: compass/css3/_flexbox.scss\nmeta_description: This module provides mixins that pertain to CSS3 Flexbox.\nlayout: core\nclassnames:\n  - reference\n---\n- render 'reference' do\n  :markdown\n    This module provides prefixing support for the three versions of flexbox that have been\n    implemented by browsers since 2009. However it does not attempt to provide a unified interface\n    across these different versions.\n\n    1. [July 2009 Working Draft](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/) (box)\n    2. [March 2012 Working Draft](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/) (flexbox)\n    3. [September 2012 Candidate Recommendation](http://www.w3.org/TR/2012/CR-css3-flexbox-20120918/) (flex)\n    \n    The flexbox property mixins will only prefix the properties\n    according the spec version 3.\n    \n    There are two ways to use this module. Per property mixins or by passing a map of properties\n    to the generic flexbox module.\n\n    ### Per-property mixins\n\n    The per-property mixins only work with browsers implementing the most recent (3rd) version\n    of the spec. If you want to support the legacy browsers, you will need to use the generic flexbox\n    mixin.\n\n    Example:\n\n        .row {\n          @include display-flex;\n          @include flex-direction(row);\n        }\n\n    ### Generic Flexbox Mixin\n\n    By default the flexbox mixin assumes it is applying prefixes for spec version 3 which will also\n    output the unprefixed property. However the `$version` argument allows for prefixing according to the\n    previous versions of the spec.\n\n    Example:\n\n        .row {\n          @include flexbox((\n            display: box,\n            box-orient: vertical\n          ), $version: 1);\n          @include flexbox((\n            display: flexbox,\n            flex-direction: row\n          ), $version: 2);\n          @include flexbox((\n            display: flex,\n            flex-direction: row\n          ));\n        }\n\n\n  %ol\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/font_face.haml",
    "content": "--- \ntitle: Compass Font Face\ncrumb: Font Face\nframework: compass\nstylesheet: compass/css3/_font-face.scss\nmeta_description: Specify a downloadable font face for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides a mixin to support @font-face. See <a href=\"http://www.w3.org/TR/css3-fonts/#the-font-face-rule\">CSS3 spec: @font-face</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/hyphenation.haml",
    "content": "--- \ntitle: Compass Hyphenation\ncrumb: Hyphenation\nframework: compass\nstylesheet: compass/css3/_hyphenation.scss\nmeta_description: Mixin for breaking space and injecting hypens into overflowing text\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  :markdown\n    Provides mixins that pertain to CSS3 Word Breaking and Hyphenation.\n    See the CSS3 specification: [hyphens](http://www.w3.org/TR/css3-text/#hyphens) and\n    [word-break](http://www.w3.org/TR/css3-text/#word-break).\n\n    Firefox requires you to set the `lang` attribute in your markup.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/images.haml",
    "content": "---\ntitle: Compass Images\ncrumb: Images\nframework: compass\nstylesheet: compass/css3/_images.scss\nmeta_description: Specify linear gradients and radial gradients for many browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  :markdown\n    Provides mixins that work across many modern browsers with the latest\n    CSS3 image rendering primitives.\n\n    These mixins provide intelligent cross-browser access to properties that accept\n    images or image-like values (e.g. gradients). The syntax is very straightforward,\n    it is exactly like the css syntax that you would use for the corresponding CSS3\n    properties: Values are comma and space delimited, just as they would be for a property.\n    Vendor prefixes are used only when necessary.\n\n    Example (more examples are available by following the links below):\n\n    <pre><code class=\"source-code scss\">.in-css3 {\n      background: url(foo.png),\n                  linear-gradient(to bottom right, #333, #0c0),\n                  radial-gradient(#c00, #fff 100px);\n    }\n    .with-compass {\n      @include background(image-url(\"foo.png\"),\n                          linear-gradient(to bottom right, #333, #0c0),\n                          radial-gradient(#c00, #fff 100px));\n    }</code></pre>\n\n    To enable SVG gradient support in Opera and IE9, lower the SVG shim threshold\n    <code>$svg-gradient-shim-threshold</code> to <code>0.1</code> (or to whatever\n    threshold you feel is best) in your stylesheet.\n\n    NOTE: At this time, Opera renders incorrectly an SVG background on a element\n    with a border, repeating the gradient towards the end. You can set\n    <code>background-repeat: no-repeat</code> to avoid this, but the gradient\n    will not fill the area completely.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/inline_block.haml",
    "content": "--- \ntitle: Compass Inline Block\ncrumb: Inline Block\nframework: compass\nstylesheet: compass/css3/_inline-block.scss\nmeta_description: Declare an element inline block for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides a cross-browser method to implement <code>display: inline-block;</code>. Note that this was actually introduced in CSS2, but badly implemented across browsers. See <a href=\"http://www.w3.org/TR/CSS21/visuren.html#propdef-display\">CSS2.1 spec: display</a>.\n  %blockquote\n    This value causes an element to generate a block box, which itself is flowed as a single inline box, similar to a replaced element. The inside of an inline-block is formatted as a block box, and the element itself is formatted as an inline replaced element. \n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/opacity.haml",
    "content": "--- \ntitle: Compass Opacity\ncrumb: Opacity\nframework: compass\nstylesheet: compass/css3/_opacity.scss\nmeta_description: Specify the opacity for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides cross-browser CSS opacity. See <a href=\"http://www.w3.org/TR/css3-color/#transparency\">CSS3 spec: transparency</a>."
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/pie.haml",
    "content": "--- \ntitle: CSS3 Pie\ncrumb: CSS3 Pie\nframework: compass\nstylesheet: compass/css3/_pie.scss\nmeta_description: Compass integration with the css3pie tool.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  :markdown\n    ### Installing\n    \n    CSS PIE is a javascript library that enhances Internet Explorer\n    to render many modern CSS3 capabilities wherever possible. To install:\n    \n        compass install compass/pie\n    \n    This will install an example stylesheet and a PIE.htc behavior file\n    that must be loaded into your pages for IE. This file must be delivered\n    with the following mime-type:\n    \n        Content-Type: text/x-component\n    \n    ### Conventions\n    \n    The example stylesheet will walk you through setting up your project with\n    css3pie support.\n\n    ### Properties Supported\n    \n    The following css3 properties are supported:\n    \n    * border-radius\n    * box-shadow\n    * border-image\n    * background (in the form of -pie-background, use the [background mixin](/reference/compass/css3/images/#mixin-background))\n    \n    Additionally, PIE supports the following CSS3 features:\n    \n    * rgba color values\n    * linear gradients in backgrounds\n    \n    [Full Documentation on Supported Properties](http://css3pie.com/documentation/supported-css3-features/)\n\n    ### Caveats\n    \n    1. PIE only understands shortcut properties, long-hand properties don't\n       work because the code, in order to be fast, does not attempt to resolve\n       the stylesheet cascade and so it cannot determine which order to apply\n       the long-hand properties.\n    2. Each element that has a PIE behavior attached adds about 10ms to\n       the page render time. Moderation is recommended.\n    3. PIE generates content that contains the css3 graphical elements. It has to\n       insert this content into your page and so it needs a little help from\n       you. You have two choices:\n       1. You can make your element `position: relative`.\n       2. You can give your element a z-index. If you do this you\n          should also give apply a z-index to an ancestor element that comes before\n          or itself has a background.\n       The compass mixins below and the example stylesheet will help get you set up.\n    \n    ### Best Practices\n    \n    It is suggested that you use Sass's `@extend` directive to mark elements as\n    PIE elements. The example stylesheet you get when you install `compass/pie`\n    into your project will walk you through the process of setting that up.\n    \n    ### Notes\n    \n    * For more information see the [css3pie website](http://css3pie.com/).\n    * CSS PIE is written by and copyright to: [Jason Johnston](http://twitter.com/lojjic)\n    * Compass is using css3pie version 1.0-beta3. It can be upgraded by downloading\n      a new behavior file and replacing the one that comes with compass.\n    \n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/regions.haml",
    "content": "--- \ntitle: Compass CSS Regions\ncrumb: CSS Regions\nframework: compass\nstylesheet: compass/css3/_regions.scss\nmeta_description: Specify CSS Regions for supported browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides two mixins for CSS regions, properties which allow you to flow content into new containers. See <a href=\"http://dev.w3.org/csswg/css3-regions/\">the spec draft</a> and <a href=\"http://labs.adobe.com/technologies/cssregions/\">Adobe's page on the topic</a>. "
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/selection.haml",
    "content": "--- \ntitle: Compass Text Selection\ncrumb: Selection\nframework: compass\nstylesheet: compass/css3/_selection.scss\nmeta_description: Style text selection foreground and background color with CSS using the Compass selection mixin.\nlayout: core\nclassnames:\n  - reference\n---\n- render 'reference' do\n  %p\n    Styles text selection foreground and background color with CSS.\n\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/shared.haml",
    "content": "--- \ntitle: Shared CSS3 Utilities\ncrumb: Shared Utilities\nframework: compass\nstylesheet: compass/css3/_shared.scss\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    This module provides support to the other CSS3 modules.\n    You may want to use it to provide your own support for other\n    CSS3 proposals as they are being worked on and before support\n    is added to compass.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/text-shadow.haml",
    "content": "--- \ntitle: Compass Text Shadow\ncrumb: Text Shadow\nframework: compass\nstylesheet: compass/css3/_text-shadow.scss\nmeta_description: Specify the text shadow for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides a mixin for CSS text shadows. See <a href=\"http://www.w3.org/TR/2003/CR-css3-text-20030514/#text-shadows\">CSS3 spec: text-shadow</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/transform.haml",
    "content": "--- \ntitle: Compass Transform\ncrumb: Transform\nframework: compass\nstylesheet: compass/css3/_transform.scss\nmeta_description: Specify transformations for many browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides mixins for CSS3 2D and 3D transforms. See\n    <a href=\"http://www.w3.org/TR/css3-2d-transforms/\">W3C: CSS 2D transforms</a>\n    and See <a href=\"http://www.w3.org/TR/css3-3d-transforms/\">W3C: CSS 3D transforms</a>.\n  %p\n    Safari is the only browser that currently supports 3D transforms.\n    Because of that it can be important to control whether a given 2D transform\n    uses the full range of experimental browser prefixes, or only the 3D list.\n    To make that easy, all 2D transforms include an browser-targeting toggle ($only3d)\n    to switch between the two support lists. The toggle defaults to 'false' (2D),\n    and also accepts 'true' (3D). Currently the lists are as follows:\n    2D: Mozilla, Webkit, Opera, Official\n    3D: Webkit, Official **(Only Safari Supports 3D perspective)**\n  \n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/transition.haml",
    "content": "--- \ntitle: Compass Transition\ncrumb: Transition\nframework: compass\nstylesheet: compass/css3/_transition.scss\nmeta_description: Specify a style transition for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides a mixin for CSS3 transitions. See <a href=\"http://www.w3.org/TR/css3-transitions/\">CSS3 Spec: transitions</a>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3/user_interface.haml",
    "content": "--- \ntitle: Compass User Interface\ncrumb: User Interface\nframework: compass\nstylesheet: compass/css3/_user-interface.scss\nmeta_description: Declare an element inline block for all browsers.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\n---\n- render 'reference' do\n  %p\n    Provides mixins for the CSS3 User Interface module.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/css3.haml",
    "content": "--- \ntitle: Compass CSS3\ncrumb: CSS3\nframework: compass\nstylesheet: compass/_css3.scss\nsidebar: true\nlayout: core\nclassnames:\n  - reference\n  - core\n  - css3\nmeta_description: Provides cross browser CSS3 mixins that take advantage of available pre-spec vendor prefixes. \nlayout: core\n---\n- render 'reference' do\n  %p\n    The CSS3 module provides cross-browser mixins for CSS properties\n    introduced in CSS3, for example\n    <a href=\"/reference/compass/css3/border_radius/\"><code>border-radius</code></a>\n    and <a href=\"/reference/compass/css3/text-shadow/\"><code>text-shadow</code></a>.\n  %p\n    What rendering engines you support for the experimental css properties is governed by\n    the configurable variables defined in <a href=\"/reference/compass/support/\">the browser\n    support module</a>."
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/color-stops.haml",
    "content": "--- \ntitle: Compass Color Stops Helper\ncrumb: Color Stops\nframework: compass\nmeta_description: Helper function for color-stops.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"color-stops\"\n---\n%h1 Compass Color Stops Helper\n\n#color-stops.helper\n  %h3\n    %a(href=\"#color-stops\")\n      color-stops([<span class=\"arg\">$color-stop</span>]*)\n  .details\n    %p\n      The color-stops helper provides a way to pass an arbitrary number of\n      colors stops to the <a href=\"/reference/compass/css3/images/\">gradient mixins</a>.\n    %p\n      Any number of comma-delimited color stops can be passed, each color stop\n      should take the form of a color followed by an optional stopping point (separated by a space).\n      Where stop values are not provided they will be inferred by assuming an equal distribution\n      of colors between any specified locations.\n    %dl\n      %dg.head\n        %dt Example Call\n        %dd Means\n      %dg#ex1\n        %dt\n          color-stops(#FFF,#F00,#00C)\n        %dd\n          \\#FFF 0%, #F00 50%, #00C 100%\n      %dg#ex2\n        %dt\n          color-stops(#FFF, #F00 25%, #0C0, #00C)\n        %dd\n          \\#FFF 0%, #F00 25%, #0C0 62.5%, #00C 100%\n      %dg#ex3\n        %dt\n          color-stops(#FFF, #F00 5px, #0C0, #00C 25px)\n        %dd\n          \\#FFF 0px, #F00 5px, #0C0 15px, #00C 25px\n  .examples\n    %h4 Examples\n    %ul\n      %li\n        %a(href=\"/examples/compass/css3/gradient/\") Example of Gradients\n\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/colors.haml",
    "content": "--- \ntitle: Compass Color Helpers\ncrumb: Colors\nframework: compass\nmeta_description: Helper function for colors.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"adjust-lightness\"\n  - \"adjust-saturation\"\n  - \"scale-lightness\"\n  - \"scale-saturation\"\n  - \"shade\"\n  - \"tint\"\n---\n%h1 Compass Color Helpers\n%p\n  These color functions are useful for creating generic libraries that have to accept a\n  range of inputs. For more color functions see\n  <a href=\"http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html\">the sass reference\n  documentation</a>\n\n#adjust-lightness.helper\n  %h3\n    %a(href=\"#adjust-lightness\")\n      adjust-lightness(<span class=\"arg\">$color</span>, <span class=\"arg\">$amount</span>)\n  .details\n    %p\n      Adds <code>$amount</code> to <code>$color</code>'s lightness value. <code>$amount</code>\n      can be negative.\n\n#adjust-saturation.helper\n  %h3\n    %a(href=\"#adjust-saturation\")\n      adjust-saturation(<span class=\"arg\">$color</span>, <span class=\"arg\">$amount</span>)\n  .details\n    %p\n      Adds <code>$amount</code> to <code>$color</code>'s saturation value. <code>$amount</code>\n      can be negative.\n\n#scale-lightness.helper\n  %h3\n    %a(href=\"#scale-lightness\")\n      scale-lightness(<span class=\"arg\">$color</span>, <span class=\"arg\">$amount</span>)\n  .details\n    %p\n      Scales <code>$color</code>'s lightness value by <code>$amount</code>.\n      <code>$amount</code> can be negative.\n\n#scale-saturation.helper\n  %h3\n    %a(href=\"#scale-saturation\")\n      scale-saturation(<span class=\"arg\">$color</span>, <span class=\"arg\">$amount</span>)\n  .details\n    %p\n      Scales <code>$color</code>'s saturation value by <code>$amount</code>.\n      <code>$amount</code> can be negative.\n\n#shade.helper\n  %h3\n    %a(href=\"#shade\")\n      shade(<span class=\"arg\">$color</span>, <span class=\"arg\">$percentage</span>)\n  .details\n    %p\n      Darkens the <code>$color</code> by mixing it with black as specified by <code>$percentage</code>.\n\n#tint.helper\n  %h3\n    %a(href=\"#tint\")\n      tint(<span class=\"arg\">$color</span>, <span class=\"arg\">$percentage</span>)\n  .details\n    %p\n      Lightens the <code>$color</code> by mixing it with white as specified by <code>$percentage</code>.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/constants.haml",
    "content": "--- \ntitle: Compass Constant Helpers\ncrumb: Constants\nframework: compass\nmeta_description: Helper functions for working with constants.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"opposite-position\"\n---\n%h1 Compass Constant Helpers\n\n:markdown\n  These helpers manipulate CSS Constants.\n\n#opposite-position.helper\n  %h3\n    %a(href=\"#opposite-position\")\n      opposite-position(<span class=\"arg\">$position</span>)\n  .details\n    :markdown\n      Returns the opposition position for the position given. Examples:\n      \n          Input                              Output\n          -------------------------------    ------------\n          opposite-position(left)         => right\n          opposite-position(top)          => bottom\n          opposite-position(center)       => center\n          opposite-position(top left)     => bottom right\n          opposite-position(center right) => center left\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/cross-browser.haml",
    "content": "--- \ntitle: Compass Cross Browser Helpers\ncrumb: Cross Browser\nframework: compass\nmeta_description: Helper functions for working with vendor prefixed functions.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"prefixed\"\n  - \"prefix\"\n  - \"-webkit\"\n  - \"-moz\"\n  - \"-o\"\n  - \"-ms\"\n  - \"-svg\"\n  - \"-pie\"\n  - \"-css2\"\n---\n%h1 Compass Cross Browser Helpers\n\n:markdown\n  These helpers are used by compass to create mixins that can insulate\n  the user from cross browser syntax and vendor prefix complexities.\n  \n  If you need to support a new experimental (prefixed) function in your\n  project using these helpers, you can add support for it adding the following\n  to your compass configuration file:\n  \n      Compass::BrowserSupport.add_support(\"function-name\", \"webkit\", \"moz\")\n\n  For an example of how to use these functions see the\n  [compass images module](https://github.com/chriseppstein/compass/blob/master/frameworks/compass/stylesheets/compass/css3/_images.scss).\n\n#prefixed.helper\n  %h3\n    %a(href=\"#prefixed\")\n      prefixed(<span class=\"arg\">$prefix<span>, <span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      Returns true if any of the arguments require the given prefix.\n\n#prefix.helper\n  %h3\n    %a(href=\"#prefix\")\n      prefix(<span class=\"arg\">$prefix<span>, <span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      Transforms the argument(s) into a representation for the rendering engine\n      indicated by <code>$prefix</code>. Usually this means just adding a prefix,\n      but in some cases, this may result in entirely different representations for\n      the given rendering engine (E.g. linear-gradient).\n    %p\n      Values that do not have a specific representation are passed through without\n      being transformed.\n\n#-webkit.helper\n  %h3\n    %a(href=\"#-webkit\")\n      \\-webkit(<span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      This is a shortcut for calling <code>prefix(-webkit, $arg, ...)</code>.\n#-moz.helper\n  %h3\n    %a(href=\"#-moz\")\n      \\-moz(<span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      This is a shortcut for calling <code>prefix(-moz, $arg, ...)</code>.\n#-o.helper\n  %h3\n    %a(href=\"#-o\")\n      \\-o(<span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      This is a shortcut for calling <code>prefix(-o, $arg, ...)</code>.\n#-ms.helper\n  %h3\n    %a(href=\"#-ms\")\n      \\-ms(<span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      This is a shortcut for calling <code>prefix(-ms, $arg, ...)</code>.\n#-svg.helper\n  %h3\n    %a(href=\"#-svg\")\n      \\-svg(<span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      This is a shortcut for calling <code>prefix(-svg, $arg, ...)</code>.\n      Instead of adding a prefix, it returns a representation of the\n      arguments using SVG to render them where it can.\n#-pie.helper\n  %h3\n    %a(href=\"#-pie\")\n      \\-pie(<span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      This is a shortcut for calling <code>prefix(-pie, $arg, ...)</code>.\n      It it used to get <a href=\"/reference/compass/css3/pie/\">CSS3 PIE</a>\n      support where necessary.\n#-css2.helper\n  %h3\n    %a(href=\"#-css2\")\n      \\-css2(<span class=\"arg\">$arg</span>, ...)\n  .details\n    %p\n      This is a shortcut for calling <code>prefix(-css2, $arg, ...)</code>.\n      It is a kind of hack to sanitize the output of experimental code\n      into a form that can be parsed by a css2.1 compliant parser.\n      Usually this results in causing some functions to be omitted.\n#css2-fallback.helper\n  %h3\n    %a(href=\"#css2-fallback\")\n      css2-fallback(<span class=\"arg\">$value</span>, <span class=\"arg\">$css2-value</span>)\n  .details\n    %p\n      This function returns a value that is normally <code>$value<code>,\n      but is <code>$css2-value</code> when passed through the <code>-css2()</code>\n      helper function. Many of the compass css3 mixins will create a css2 fallback\n      value if the arguments have a css2 representation (gradients have a null css2\n      representation).\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/display.haml",
    "content": "--- \ntitle: Compass Display Helpers\ncrumb: Display Helpers\nframework: compass\nmeta_description: Helper functions for working with the display property.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"elements-of-type\"\n---\n%h1 Compass Display Helpers\n\n%p Helper functions for working with the display property.\n\n#elements-of-type.helper\n  %h3\n    %a(href=\"#elements-of-type\") elements-of-type(<span class=\"arg\">$display</span>)\n  .details\n    %p\n      The following display values exist and will return\n      the elements listed below the display value.\n    %dl\n      %dg.head\n        %dt Display Value\n        %dd Elements Returned\n      - display_map = Compass::Core::SassExtensions::Functions::Display::DEFAULT_DISPLAY\n      - display_map.keys.each do |key|\n        %dg\n          %dt= key\n          %dd= display_map[key].sort.join(\", \")\n  .examples\n    %h4 Examples\n    %ul\n      %li\n        %a(href=\"/examples/compass/helpers/elements-of-type/\") Example of elements-of-type\n\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/env.haml",
    "content": "--- \ntitle: Compass Environment Helpers\ncrumb: Environment Helpers\nframework: compass\nmeta_description: Helper functions for inspecting the environment of the current compilation.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"compass-env\"\n  - \"current-time\"\n  - \"current-date\"\n  - \"current-source-file\"\n  - \"current-output-file\"\n\n---\n%h1 Compass Environment Helpers\n\n%p Helper functions for inspecting the environmental details of the current compilation\n\n#compass-env.helper\n  %h3\n    %a(href=\"#compass-env\") compass-env()\n  .details\n    %p\n      Returns the compass environment for the current compile. (`development` or `production`)\n\n#current-time.helper\n  %h3\n    %a(href=\"#current-time\") current-time([<span class=\"arg\">$format</span>])\n  .details\n    :markdown\n      Returns the current time when the file is compiled. With no arguments, the time will be\n      returned in the format of `08:37:48-06:00`. However, if a `$format` string is provided,\n      the time will be printed according to that format. Valid formats are any valid format string\n      to [Ruby's strftime function](http://www.ruby-doc.org/core-2.0/Time.html#method-i-strftime).\n\n#current-date.helper\n  %h3\n    %a(href=\"#current-date\") current-date([<span class=\"arg\">$format</span>])\n  .details\n    :markdown\n      Returns the current date when the file is compiled. With no arguments, the date will be\n      returned in the format of `2013-05-13`. However, if a `$format` string is provided,\n      the date will be printed according to that format. Valid formats are any valid format string\n      to <a href=\"http://www.ruby-doc.org/core-2.0/Time.html#method-i-strftime\">Ruby's strftime function</a>.\n\n#current-source-file.helper\n  %h3\n    %a(href=\"#current-source-file\") current-source-file([<span class=\"arg\">$absolute</span>])\n  .details\n    :markdown\n      Returns the file name of the Sass file that initiated the compilation.\n      If the `$absolute` parameter is set to true, the full path of the stylesheet\n      will be returned, otherwise it will be relative to the project's Sass directory.\n      When the `$absolute` parameter is omitted, it defaults to false.\n\n#current-output-file.helper\n  %h3\n    %a(href=\"#current-output-file\") current-output-file([<span class=\"arg\">$absolute</span>])\n  .details\n    :markdown\n      Returns the file name of the CSS file that is being generated.\n      If the `$absolute` parameter is set to true, the full path of the stylesheet\n      will be returned, otherwise it will be relative to the project's CSS\n      stylesheets directory.  When the `$absolute` parameter is omitted, it\n      defaults to false.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/font-files.haml",
    "content": "---\ntitle: Compass Font Files Helper\ncrumb: Font Files\nframework: compass\nmeta_description: Helper function for listing fonts.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"font-files\"\n---\n%h1 Compass Font Files Helper\n\n#font-files.helper\n  %h3\n    %a(href=\"#font-files\")\n      font-files([<span class=\"arg\">$font</span>]*)\n  .details\n    %p\n      The <code>font-files</code> function takes a list of arguments containing the path to each font files relative to your project's font directory.\n    %p\n      This helper is used with the <a href=\"/reference/compass/css3/font_face/#mixin-font-face\"><code>font-face</code> mixin</a>\n      and is what makes it possible to pass any number of font files.\n    %p\n      <a href=\"http://www.w3.org/TR/css3-fonts/#font-reference-the-src-descriptor\">W3C Reference</a>\n  .examples\n    %h4 Examples\n    %ul\n      %li\n        %a(href=\"/examples/compass/css3/font-face/\") Font-face Example\n\n\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/image-dimensions.haml",
    "content": "--- \ntitle: Compass Image Dimension Helpers\ncrumb: Image Dimensions\nframework: compass\nmeta_description: Helper functions for working with image dimensions.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"image-width\"\n  - \"image-height\"\n---\n%h1 Compass Image Dimension Helpers\n\n#image-width.helper\n  %h3\n    %a(href=\"#image-width\")\n      image-width(<span class=\"arg\">$image</span>)\n  .details\n    %p\n      Returns the width of the image found at the path supplied by <code>$image</code>\n      relative to your project's images directory.\n\n#image-height.helper\n  %h3\n    %a(href=\"#image-height\")\n      image-height(<span class=\"arg\">$image</span>)\n  .details\n    %p\n      Returns the height of the image found at the path supplied by <code>$image</code>\n      relative to your project's images directory."
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/inline-data.haml",
    "content": "--- \ntitle: Compass Inline Data Helpers\ncrumb: Inline Data\nframework: compass\nmeta_description: Helper functions for embedding inline data.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"inline-image\"\n  - \"inline-font-files\"\n---\n%h1 Compass Inline Data Helpers\n\n#inline-image.helper\n  %h3\n    %a(href=\"#inline-image\")\n      inline-image(<span class=\"arg\">$image</span>, <span class=\"arg\" data-default-value=\"inferred\">$mime-type</span>)\n  .details\n    %p\n      Embeds the contents of an image directly inside your stylesheet,\n      eliminating the need for another HTTP request. For small images,\n      this can be a performance benefit at the cost of a larger\n      generated CSS file.\n    %p\n      Like the <a href=\"#\"><code>image-url()</code></a> helper, the path\n      specified should be relative to your project's images directory.\n\n#inline-font-files.helper\n  %h3\n    %a(href=\"#inline-font-files\")\n      inline-font-files([<span class=\"arg\">$font</span>, <span class=\"arg\">$format</span>]*)\n  .details\n    %p\n      Like the <a href=\"/reference/compass/helpers/font-files/\"><code>font-files()</code></a> helper, but the font\n      file is embedded within the generated CSS file."
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/math.haml",
    "content": "--- \ntitle: Compass Math Helpers\ncrumb: Math\nframework: compass\nmeta_description: Helper math functions.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"pi\"\n  - \"sin\"\n  - \"cos\"\n  - \"tan\"\n  - \"asin\"\n  - \"acos\"\n  - \"atan\"\n  - \"e\"\n  - \"logarithm\"\n  - \"sqrt\"\n  - \"pow\"\n---\n%h1 Compass Math Helpers\n\n:markdown\n  Sass math functions are sufficient for most cases, but in those moments of extreme geekiness these additional functions can really come in handy.\n\n\n#pi.helper\n  %h3\n    %a(href=\"#pi\")\n      pi()\n  .details\n    %p\n      Returns the value of π.\n\n#sin.helper\n  %h3\n    %a(href=\"#sin\")\n      sin(<span class=\"arg\">$number</span>)\n  .details\n    %p\n      Returns the sine of a number. If the number is unitless or has a unit of <code>deg</code>\n      then it will return a unitless result. Unless the number has a unit of <code>deg</code> it\n      will be evaluated as radians. Degrees will first be converted to radians.\n      If the number is any other unit, the units will be passed thru to the result,\n      and the number will be treated as radians.\n\n#cos.helper\n  %h3\n    %a(href=\"#cos\")\n      cos(<span class=\"arg\">$number</span>)\n  .details\n    %p\n      Returns the cosine of a number. If the number is unitless or has a unit of <code>deg</code>\n      then it will return a unitless result. Unless the number has a unit of <code>deg</code> it\n      will be evaluated as radians. Degrees will first be converted to radians.\n      If the number is any other unit, the units will be passed thru to the result,\n      and the number will be treated as radians.\n\n#tan.helper\n  %h3\n    %a(href=\"#tan\")\n      tan(<span class=\"arg\">$number</span>)\n  .details\n    %p\n      Returns the tangent of a number. If the number is unitless or has a unit of <code>deg</code>\n      then it will return a unitless result. Unless the number has a unit of <code>deg</code> it\n      will be evaluated as radians. Degrees will first be converted to radians.\n      If the number is any other unit, the units will be passed thru to the result,\n      and the number will be treated as radians.\n\n#asin.helper\n  %h3\n    %a(href=\"#asin\")\n      asin(<span class=\"arg\">$number</span>)\n  .details\n    %p\n      Returns the arcsine of a number. If the number is unitless or has a unit of <code>deg</code>\n      then it will return a unitless result. Unless the number has a unit of <code>deg</code> it\n      will be evaluated as radians. Degrees will first be converted to radians.\n      If the number is any other unit, the units will be passed thru to the result,\n      and the number will be treated as radians.\n\n#acos.helper\n  %h3\n    %a(href=\"#acos\")\n      acos(<span class=\"arg\">$number</span>)\n  .details\n    %p\n      Returns the arccosine of a number. If the number is unitless or has a unit of <code>deg</code>\n      then it will return a unitless result. Unless the number has a unit of <code>deg</code> it\n      will be evaluated as radians. Degrees will first be converted to radians.\n      If the number is any other unit, the units will be passed thru to the result,\n      and the number will be treated as radians.\n\n#atan.helper\n  %h3\n    %a(href=\"#atan\")\n      atan(<span class=\"arg\">$number</span>)\n  .details\n    %p\n      Returns the arctangent of a number. If the number is unitless or has a unit of <code>deg</code>\n      then it will return a unitless result. Unless the number has a unit of <code>deg</code> it\n      will be evaluated as radians. Degrees will first be converted to radians.\n      If the number is any other unit, the units will be passed thru to the result,\n      and the number will be treated as radians.\n\n#e.helper\n  %h3\n    %a(href=\"#e\")\n      e()\n  .details\n    %p\n      Returns the value of <a href=\"http://en.wikipedia.org/wiki/E_(mathematical_constant)\">e</a>.\n\n#logarithm.helper\n  %h3\n    %a(href=\"#logarithm\")\n      logarithm(<span class=\"arg\">$number</span>, <span class=\"arg\" data-default-value=\"e\" title=\"Defaults to: e\">$base</span>)\n  .details\n    %p\n      Calculates the logarithm of a number to a base. Base defaults to <code>e</code>.\n\n#sqrt.helper\n  %h3\n    %a(href=\"#sqrt\")\n      sqrt(<span class=\"arg\">$number</span>)\n  .details\n    %p\n      Calculates the square root of a number.\n\n#pow.helper\n  %h3\n    %a(href=\"#pow\")\n      pow(<span class=\"arg\">$number</span>, <span class=\"arg\">$exponent</span>)\n  .details\n    %p\n      Calculates the value of a number raised to the power of an exponent.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/selectors.haml",
    "content": "--- \ntitle: Compass Selector Helpers\ncrumb: Selectors\nframework: compass\nmeta_description: Helper functions for working with selectors.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"nest\"\n  - \"append-selector\"\n  - \"enumerate\"\n  - \"headings\"\n  - \"headers\"\n---\n%h1 Compass Selector Helpers\n\n#nest.helper\n  %h3\n    %a(href=\"#nest\")\n      nest(<span class=\"arg\">$selector1</span>, <span class=\"arg\">$selector2</span>, ...)\n  .details\n    %p\n      Nest selectors as if they had been nested within a sass file.\n      Each selector passed in can be a comma-delimited list of selectors\n      and they will be permuted as they would be in a sass file.\n      The generated selectors can be further nested within the sass file\n      itself.\n    %p\n      This function can accept any number of selector arguments.\n    %dl\n      %dg\n        %dt nest(\".foo\", \".bar\", \".baz\")\n        %dd .foo .bar .baz\n      %dg\n        %dt nest(\".foo, .bar\", \".baz\")\n        %dd .foo .baz, .bar .baz\n      %dg\n        %dt nest(\".foo, .bar\", \"a, span\")\n        %dd .foo a, .foo span, .bar a, .bar span\n\n#append-selector.helper\n  %h3\n    %a(href=\"#append-selector\")\n      append-selector(<span class=\"arg\">$selector</span>, <span class=\"arg\">$to-append</span>)\n  .details\n    %p\n      This helper function appends any selector with some string. No space or punctuation is\n      added when appending. The selector can be a comma-delimited list of selectors.\n    %dl\n      %dg\n        %dt append-selector(\".foo\", \".bar\")\n        %dd .foo.bar\n      %dg\n        %dt append-selector(\"p, div, span\", \".bar\")\n        %dd p.bar, div.bar, span.bar\n\n#enumerate.helper\n  %h3\n    %a(href=\"#enumerate\")\n      enumerate(<span class=\"arg\">$prefix</span>, <span class=\"arg\">$from</span>, <span class=\"arg\">$through</span>, <span class=\"arg\" data-default-value='-'>$separator</span>)\n  .details\n    %p\n      Enumerate the given <code>$prefix</code> from <code>$from</code> through <code>$through</code>.\n    %p <em>Note:</em> Using the <code>@extend</code> directive is usually preferred to this helper, which was created before <code>@extend</code> existed.\n  .examples\n    %h4 Examples\n    %ul\n      %li\n        %a(href=\"/examples/compass/helpers/enumerate/\") Example of enumerate\n      %li\n        %a(href=\"/examples/compass/helpers/using-extend-in-place-of-enumerate/\") Example of using <code>@extend</code> in place of enumerate\n\n%a(name=\"headers\")\n#headings.helper\n  %h3\n    %a(href=\"#append-selector\")\n      headings(<span class=\"arg\" data-default-value=\"nil\">$from</span>, <span class=\"arg\" data-default-value=\"nil\">$to</span>)\n  .details\n    %p\n      This helper function emits headings. It's best to just see it in action:\n    %p\n      <em>Note:</em> This function is aliased to <code>headers()</code>, both can be used interchangeably.\n    %dl\n      %dg\n        %dt headings()\n        %dd h1, h2, h3, h4, h5, h6\n      %dg\n        %dt headings(all)\n        %dd h1, h2, h3, h4, h5, h6\n      %dg\n        %dt headings(2)\n        %dd h1, h2\n      %dg\n        %dt headings(2,5)\n        %dd h2, h3, h4, h5\n  "
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/sprites.haml",
    "content": "--- \ntitle: CSS Sprite Helpers for Compass\ncrumb: Sprites\nframework: compass\nmeta_description: Helper functions for working with CSS Sprite images.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"sprite-map\"\n  - \"sprite\"\n  - \"sprite-map-name\"\n  - \"sprite-file\"\n  - \"sprite-url\"\n  - \"sprite-position\"\n  - \"sprite-height\"\n  - \"sprite-width\"\n  - \"sprite-path\"\n  - \"sprite-names\"\n---\n%h1 <strong>CSS Sprite</strong> Helpers for Compass\n\n:markdown\n  These helpers make it easier to build and to work with <em>css sprites</em>.\n  \n  While it is allowed to use these directly, to do so is considered \"advanced usage\".\n  It is recommended that you instead use the css sprite mixins that are designed to work\n  with these functions.\n  \n  See the [Spriting Tutorial](/help/tutorials/spriting/) for more information.\n\n#sprite-map.helper\n  %h3\n    %a(href=\"#sprite-map\")\n      sprite-map(<span class=\"arg\">$glob</span>, <span class=\"arg\">...</span>)\n  .details\n    :markdown\n      Generates a css sprite map from the files matching the glob pattern. Uses the\n      keyword-style arguments passed in to control the placement.\n      \n      Only PNG files can be made into css sprites at this time.\n      \n      The `$glob` should be glob pattern relative to the images directory that specifies\n      what files will be in the css sprite. For example:\n      \n          $icons: sprite-map(\"icons/*.png\");\n          background: $icons;\n      \n      This will generate a css sprite map and return a reference to it. It's important to\n      capture this to a variable, because you will need to use it later when creating\n      css sprites. In the above example you might end up with a new file named\n      `images/sprites/icons-a2ef041.png` and your css stylesheet will have:\n      \n          background: url('/images/sprites/icons-a2ef041.png?1234678') no-repeat;\n      \n      The exact image name is not something you should depend on as it may change based on the\n      arguments you pass in. Instead, you can use the `sprite-url()` function to create a\n      reference to the css sprite map without generating the image again. Alternatively, simply\n      using the sprite map variable in an property will have the same effect as calling\n      `sprite-url()`.\n      \n      For each sprite in the css sprite map you can control the position, spacing, and whether or\n      not it repeats. You do this by passing arguments to this function that tell each sprite\n      how to behave. For instance if there is a icons/new.png then you can control it like so:\n      \n          $icon-sprite: sprite-map(\"icons/*.png\",\n                          $new-position: 100%, $new-spacing: 15px, $new-repeat: no-repeat);\n      \n      If you don't specify these options they will default to `0%` for `position`,\n      `0px` for spacing, and `no-repeat` for `repeat`.\n      \n      Default values for all sprites can be specified by passing values for `$position`,\n      `$spacing`, and `$repeat`.\n\n#sprite.helper\n  %h3\n    %a(href=\"#sprite\")\n      sprite(<span class=\"arg\">$map</span>, <span class=\"arg\">$sprite</span>, <span class=\"arg\" data-default-value=\"0\">$offset-x</span>, <span class=\"arg\" data-default-value=\"0\">$offset-y</span>, <span class=\"arg\" data-default-value=\"false\">$use-percentages</span>)\n  .details\n    :markdown\n      Returns the image and background position for use in a single shorthand property:\n      \n          $icons: sprite-map(\"icons/*.png\"); // contains icons/new.png among others.\n          background: sprite($icons, new) no-repeat;\n      \n      Becomes:\n      \n          background: url('/images/icons.png?12345678') 0 -24px no-repeat;\n\n      Passing `true` for `$use-percentages` results in the background position\n      being expressed in percentages instead of pixels. Example:\n        \n          background: url('/images/icons.png?12345678') 0 25% no-repeat;\n\n#sprite-width.helper\n  %h3\n    %a(href=\"#sprite-width\")\n      sprite-width(<span class=\"arg\">$map</span>)\n  .details\n    :markdown\n      Returns the width of the generated sprite\n\n#sprite-height.helper\n  %h3\n    %a(href=\"#sprite-height\")\n      sprite-height(<span class=\"arg\">$map</span>)\n  .details\n    :markdown\n      Returns the height of the generated sprite\n\n#sprite-path.helper\n  %h3(href=\"#sprite-path\")\n    sprite-path(<span class=\"arg\">$map</span>)\n  .details\n    :markdown\n      Returns the filesystem path of the generated sprite\n\n#sprite-names.helper\n  %h3(href=\"#sprite-names\")\n    sprite-names(<span class=\"arg\">$map</span>)\n  .details\n    :markdown\n      Returns a list of all sprite names within the supplied map\n\n#sprite-map-name.helper\n  %h3\n    %a(href=\"#sprite-map-name\")\n      sprite-map-name(<span class=\"arg\">$map</span>)\n  .details\n    :markdown\n      Returns the name of a css sprite map\n      The name is derived from the folder than contains the css sprites.\n\n#sprite-file.helper\n  %h3\n    %a(href=\"#sprite-file\")\n      sprite-file(<span class=\"arg\">$map</span>, <span class=\"arg\">$sprite</span>)\n  .details\n    :markdown\n      Returns the path to the original file\n      used when construction the sprite. This is suitable for passing to the\n      `image-width` and `image-height` helpers.\n\n#sprite-url.helper\n  %h3\n    %a(href=\"#sprite-url\")\n      sprite-url(<span class=\"arg\">$map</span>)\n  .details\n    :markdown\n      Returns a url to the sprite image.\n\n#sprite-position.helper\n  %h3\n    %a(href=\"#sprite-position\")\n      sprite-position(<span class=\"arg\">$map</span>, <span class=\"arg\">$sprite</span>, <span class=\"arg\" data-default-value=\"0\">$offset-x</span>, <span class=\"arg\" data-default-value=\"0\">$offset-y</span>, <span class=\"arg\" data-default-value=\"false\">$use-percentages</span>)\n  .details\n    :markdown\n      Returns the position for the original image in the sprite.\n      This is suitable for use as a value to background-position:\n      \n          $icons: sprite-map(\"icons/*.png\");\n          background-position: sprite-position($icons, new);\n      \n      Might generate something like:\n      \n          background-position: 0 -34px;\n      \n      You can adjust the background relative to this position by passing values for\n      `$offset-x` and `$offset-y`:\n      \n          $icons: sprite-map(\"icons/*.png\");\n          background-position: sprite-position($icons, new, 3px, -2px);\n      \n      Would change the above output to:\n      \n          background-position: 3px -36px;\n\n      Passing `true` for the `$use-percentages` argument will return the\n      sprite position in percentages instead of pixels. This is useful if you\n      need to be able to scale the sprite up and down. Following the example\n      above, this:\n\n          background-position: sprite-position($icons, new, 0, 0, true);\n\n      Would result in something like:\n\n          background-position: 0 25%;\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers/urls.haml",
    "content": "--- \ntitle: Compass URL Helpers\ncrumb: URLs\nframework: compass\nmeta_description: Helper functions for working with URLs.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\ndocumented_functions:\n  - \"stylesheet-url\"\n  - \"font-url\"\n  - \"image-url\"\n  - \"generated-image-url\"\n---\n%h1 Compass URL Helpers\n\n:markdown\n  These url helpers isolate your stylesheets from environmental differences.\n  They allow you to write the same stylesheets and use them locally without\n  a web server, and then change them to be using asset hosts in production.\n  \n  They might also insulate you against some code reorganization changes.\n\n#stylesheet-url.helper\n  %h3\n    %a(href=\"#stylesheet-url\")\n      stylesheet-url(<span class=\"arg\">$path</span>, <span class=\"arg\" data-default-value=\"false\" title=\"Defaults to: false\">$only-path</span>)\n  .details\n    %p\n      Generates a path to an asset found relative to the project's css directory.\n      %br\n      Passing a true value as the second argument will cause pronly the path to be returned\n      instead of a <code>url()</code> function\n\n#font-url.helper\n  %h3\n    %a(href=\"#font-url\")\n      font-url(<span class=\"arg\">$path</span>, <span class=\"arg\" data-default-value=\"false\" title=\"Defaults to: false\">$only-path</span>, <span class=\"arg\" data-default-value=\"false\" title=\"Defaults to: false\">$cache-buster</span>)\n  .details\n    %p\n      Generates a path to an asset found relative to the project's font directory.\n      %br\n      Passing a true value as the second argument will cause only the path to be returned\n      instead of a <code>url()</code> function\n    %p\n      The third argument is used to control the cache buster on a per-use basis.\n      When set to <code>false</code> no cache buster will be used. When a string, that\n      value will be used as the cache buster.\n\n#image-url.helper\n  %h3\n    %a(href=\"#image-url\")\n      image-url(<span class=\"arg\">$path</span>, <span class=\"arg\" data-default-value=\"false\" title=\"Defaults to: false\">$only-path</span>, <span class=\"arg\" data-default-value=\"true\" title=\"Defaults to: true\">$cache-buster</span>)\n  .details\n    %p\n      Generates a path to an asset found relative to the project's images directory.\n    %p\n      Passing a true value as the second argument will cause only the path to be returned\n      instead of a <code>url()</code> function\n    %p\n      The third argument is used to control the cache buster on a per-use basis.\n      When set to <code>false</code> no cache buster will be used. When a string, that\n      value will be used as the cache buster.\n\n#generated-image-url.helper\n  %h3\n    %a(href=\"#generated-image-url\")\n      generated-image-url($path, $cache-buster: false)\n  .details\n    %p\n      Generates a path to an image generated during compilation using the\n      <code>generated_image</code> related configuration properties.\n    %p\n      Most users will never call this helper directly, it is primarily provided\n      for use by plugins that need to generate paths to images they create. E.g.\n      The <code>sprite-url()</code> helper calls this helper.\n    %p\n      The second argument is used to control the cache buster on a per-use basis.\n      Defaults to <code>false</code>, meaning that no cache buster will be used.\n      When a string, that value will be used as the cache buster, when <code>true</code>\n      Compass will generate a cache-buster based on the image's modification time.\n\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/helpers.haml",
    "content": "--- \ntitle: Compass Helpers\ncrumb: Helpers\nframework: compass\nsidebar: true\nlayout: core\nclassnames:\n  - reference\n  - core\n  - helpers\nmeta_description: Provides cross browser CSS3 mixins that take advantage of available pre-spec vendor prefixes. \nlayout: core\n---\n%h1 Compass Helper Functions\n\n:markdown\n  The compass helpers are functions that augment the [functions provided\n  by Sass](http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html).\n  \n  All Helpers:\n  \n  * [adjust-lightness()](/reference/compass/helpers/colors/#adjust-lightness)\n  * [adjust-saturation()](/reference/compass/helpers/colors/#adjust-saturation)\n  * [append-selector()](/reference/compass/helpers/selectors/#append-selector)\n  * [color-stops()](/reference/compass/helpers/color-stops/)\n  * [cos()](/reference/compass/helpers/math/#cos)\n  * [compass-env()](/reference/compass/helpers/env/#compass-env)\n  * [css2-fallback()](/reference/compass/helpers/cross-browser/#css2-fallback)\n  * [current-date()](/reference/compass/helpers/env/#current-date)\n  * [current-source-file()](/reference/compass/helpers/env/#current-source-file)\n  * [current-time()](/reference/compass/helpers/env/#current-time)\n  * [current-output-file()](/reference/compass/helpers/env/#current-output-file)\n  * [e()](/reference/compass/helpers/math/#e)\n  * [elements-of-type()](/reference/compass/helpers/display/)\n  * [enumerate()](/reference/compass/helpers/selectors/#enumerate)\n  * [font-files()](/reference/compass/helpers/font-files/)\n  * [font-url()](/reference/compass/helpers/urls/#stylesheet-url)\n  * [headings()](/reference/compass/helpers/selectors/#headings)\n  * [image-width()](/reference/compass/helpers/image-dimensions/#image-width)\n  * [image-height()](/reference/compass/helpers/image-dimensions/#image-height)\n  * [image-url()](/reference/compass/helpers/urls/#image-url)\n  * [inline-font-files()](/reference/compass/helpers/inline-data/#inline-font-files)\n  * [inline-image()](/reference/compass/helpers/inline-data/#inline-image)\n  * [logarithm()](/reference/compass/helpers/math/#logarithm)\n  * [nest()](/reference/compass/helpers/selectors/#nest)\n  * [pow()](/reference/compass/helpers/math/#pow)\n  * [prefix()](/reference/compass/helpers/cross-browser/#prefix)\n  * [prefixed()](/reference/compass/helpers/cross-browser/#prefixed)\n  * [pi()](/reference/compass/helpers/math/#pi)\n  * [sin()](/reference/compass/helpers/math/#sin)\n  * [sqrt()](/reference/compass/helpers/math/#sqrt)\n  * [stylesheet-url()](/reference/compass/helpers/urls/#stylesheet-url)\n  * [scale-lightness()](/reference/compass/helpers/colors/#scale-lightness)\n  * [shade()](/reference/compass/helpers/colors/#shade)\n  * [tan()](/reference/compass/helpers/math/#tan)\n  * [tint()](/reference/compass/helpers/colors/#tint)\n  * [-css2()](/reference/compass/helpers/cross-browser/#-css2)\n  * [-moz()](/reference/compass/helpers/cross-browser/#-moz)\n  * [-ms()](/reference/compass/helpers/cross-browser/#-ms)\n  * [-o()](/reference/compass/helpers/cross-browser/#-o)\n  * [-pie()](/reference/compass/helpers/cross-browser/#-pie)\n  * [-svg()](/reference/compass/helpers/cross-browser/#-svg)\n  * [-webkit()](/reference/compass/helpers/cross-browser/#-webkit)\n\n\n-\n\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/layout/grid_background.haml",
    "content": "---\ntitle: Compass Grid Backgrounds\ncrumb: Grid Background\nframework: compass\nstylesheet: compass/layout/_grid-background.scss\nlayout: core\nclassnames:\n  - reference\n  - core\n  - layout\n---\n- render 'reference' do\n  %p\n    The grid-background mixins allow you to generate fixed, fluid and elastic\n    grid-images on-the-fly using css3 gradients. These can be used for testing\n    both horizontal and vertical grids.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/layout/sticky_footer.haml",
    "content": "--- \ntitle: Compass Sticky Footer\ncrumb: Sticky Footer\nframework: compass\nstylesheet: compass/layout/_sticky-footer.scss\nlayout: core\nclassnames:\n  - reference\n  - core\n  - layout\n---\n- render 'reference' do\n  :markdown\n    This module provides tools needed to lay out your footer such\n    that it sticks to the bottom of the page.\n\n    Mix in to the top level of your stylesheet, so the footer stays\n    at the bottom of the screen. This mixin relies on the following\n    HTML structure, and a fixed-height `#footer` element:\n\n        <body>\n          <div id=\"root\">\n            <div id=\"root_footer\"></div>\n          </div>\n          <div id=\"footer\">\n            Footer content goes here.\n          </div>\n        </body>\n\n    If you use the default selectors, this mixin is simple to use.\n    Just mix it into the top level of your stylesheet:\n    \n        @include sticky-footer(54px)\n\n    You can also define the selectors yourself:\n\n        @include sticky-footer(54px, \"#my-root\", \"#my-root-footer\", \"#my-footer\")"
  },
  {
    "path": "compass-style.org/content/reference/compass/layout/stretching.haml",
    "content": "--- \ntitle: Compass Stretching\ncrumb: Stretching\nframework: compass\nstylesheet: compass/layout/_stretching.scss\nlayout: core\nclassnames:\n  - reference\n  - core\n  - layout\n---\n- render 'reference' do\n  %p\n    The stretch mixins allow you to style absolutely positioned elements\n    such that they will stretch to fill their positioning parent.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/layout.haml",
    "content": "---\ntitle: Compass Layout\ncrumb: Layout\nframework: compass\nsidebar: true\nstylesheet: compass/_layout.scss\nmeta_description: Page layout module.\nlayout: core\nclassnames:\n  - reference\n  - core\n  - layout\n---\n- render 'reference' do\n  %p\n    This module provides tools to help you with page layout.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/reset/utilities.haml",
    "content": "--- \ntitle: Compass Reset Utilities\ncrumb: Reset Utilities\nframework: compass\nstylesheet: compass/reset/_utilities.scss\nlayout: core\nmeta_description: Mixins for resetting elements.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  :markdown\n    These utilities are used to reset your document. The easiest way to use them\n    is to simply `@import \"compass/reset\"` which will import this module and apply\n    the appropriate mixins for you.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/reset-legacy/utilities-legacy.haml",
    "content": "--- \ntitle: Compass Reset Utilities (legacy)\ncrumb: Reset Utilities (legacy)\nframework: compass\nstylesheet: compass/reset/_utilities-legacy.scss\nlayout: core\ndeprecated: true\nmeta_description: Mixins for resetting elements.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p.warning\n    This import is deprecated. Please import\n    <a href=\"/reference/compass/reset/utilities/\" class=\"better\">reset utilities</a> instead.\n\n  :markdown\n    These utilities are used to reset your document. The easiest way to use them\n    is to simply `@import \"compass/reset\"` which will import this module and apply\n    the appropriate mixins for you.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/reset-legacy.haml",
    "content": "--- \ntitle: Compass Reset (legacy)\ncrumb: Reset (legacy)\nframework: compass\nstylesheet: compass/_reset-legacy.scss\nlayout: core\nsidebar: true\ndeprecated: true\nclassnames:\n  - reference\n  - core\n  - reset\nmeta_description: Adds a CSS Reset into your stylesheet.\n---\n- render 'reference' do\n  %p.warning\n    This import is deprecated. Please import\n    <a href=\"/reference/compass/reset/\" class=\"better\">reset</a> instead.\n  \n  :markdown\n    This module applies the [global reset](/reference/compass/reset/utilities-legacy/#mixin-global-reset)\n    to your stylesheet by simply importing it.\n    \n    **Note:** This module will place styles into your stylesheet by importing it. This\n    is not the standard behavior of a compass module but it optimizes the common use case.\n    If you want to control the reset, please use the mixins defined in the [reset\n    utilities module](/reference/compass/reset/utilities-legacy/)\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/reset.haml",
    "content": "--- \ntitle: Compass Reset\ncrumb: Reset\nframework: compass\nstylesheet: compass/_reset.scss\nlayout: core\nsidebar: true\nclassnames:\n  - reference\n  - core\n  - reset\nmeta_description: Adds a CSS Reset into your stylesheet.\n---\n- render 'reference' do\n  :markdown\n    This module applies the [global reset](/reference/compass/reset/utilities/#mixin-global-reset)\n    to your stylesheet by simply importing it.\n    \n    **Note:** This module will place styles into your stylesheet by importing it. This\n    is not the standard behavior of a compass module but it optimizes the common use case.\n    If you want to control the reset, please use the mixins defined in the [reset\n    utilities module](/reference/compass/reset/utilities/) \n"
  },
  {
    "path": "compass-style.org/content/reference/compass/support.haml",
    "content": "--- \ntitle: Compass Cross-Browser Support Configuration\ncrumb: Browser Support\nframework: compass\nstylesheet: compass/_support.scss\nclassnames:\n  - reference\n  - core\n  - support\nmeta_description: Provides configuration options for the Compass Browser Support Matrix.\nlayout: core\n---\n- render 'reference' do\n  %p\n    You can configure the compass default browser support matrix by\n    setting these variables as needed.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/links/hover_link.haml",
    "content": "--- \ntitle: Compass Hover Link\ncrumb: Hover Link\nframework: compass\nstylesheet: compass/typography/links/_hover-link.scss\nlayout: core\nmeta_description: Underline a link when you hover over it.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/links/link_colors.haml",
    "content": "--- \ntitle: Compass Link Colors\ncrumb: Link Colors\nframework: compass\nstylesheet: compass/typography/links/_link-colors.scss\nlayout: core\nmeta_description: Easy assignment of colors to link states.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/links/unstyled_link.haml",
    "content": "--- \ntitle: Compass Unstyled Link\ncrumb: Unstyled Link\nframework: compass\nstylesheet: compass/typography/links/_unstyled-link.scss\nlayout: core\nmeta_description: Make a link appear like regular text.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  %p\n    Makes a link appear like regular text. Not supported by IE 6 or 7.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/links.haml",
    "content": "--- \ntitle: Compass Links\ncrumb: Links\nframework: compass\nstylesheet: compass/typography/_links.scss\nsidebar: true\nlayout: core\nmeta_description: Tools for styling anchor links.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  %p\n    Tools for styling anchor links.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/lists/bullets.haml",
    "content": "--- \ntitle: Compass Bullets\ncrumb: Bullets\nframework: compass\nstylesheet: compass/typography/lists/_bullets.scss\nlayout: core\nmeta_description: Mixins for managing list bullets.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/lists/horizontal_list.haml",
    "content": "--- \ntitle: Compass Horizontal List\ncrumb: Horizontal List\nframework: compass\nstylesheet: compass/typography/lists/_horizontal-list.scss\nlayout: core\nmeta_description: Float a list so it appears horizontally.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  :markdown\n    Easy mode using simple descendant li selectors:\n    \n        ul.nav\n          +horizontal-list\n    \n    Advanced mode:\n    If you need to target the list items using a different selector then use\n    +horizontal-list-container on your ul/ol and +horizontal-list-item on your li.\n    This may help when working on layouts involving nested lists. For example:\n    \n        ul.nav\n          +horizontal-list-container\n          > li\n            +horizontal-list-item\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/lists/inline-block-list.haml",
    "content": "--- \ntitle: Compass Inline-Block List\ncrumb: Inline-Block List\nframework: compass\nstylesheet: compass/typography/lists/_inline-block-list.scss\nlayout: core\nmeta_description: set list-elements to inline-block so they appear horizontally while retaining their structure.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  :markdown\n    Easy mode using simple descendant li selectors:\n    \n        ul.nav\n          +inline-block-list\n    \n    Advanced mode:\n    If you need to target the list items using a different selector then use\n    +inline-block-list-container on your ul/ol and +inline-block-list-item on\n    your li. This may help when working on layouts involving nested lists. For \n    example:\n    \n        ul.nav\n          +inline-block-list-container\n          > li\n            +inline-block-list-item\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/lists/inline_list.haml",
    "content": "--- \ntitle: Compass Inline List\ncrumb: Inline List\nframework: compass\nstylesheet: compass/typography/lists/_inline-list.scss\nlayout: core\nmeta_description: Style a list as inline text.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/lists.haml",
    "content": "--- \ntitle: Compass Lists\ncrumb: Lists\nframework: compass\nstylesheet: compass/typography/_lists.scss\nsidebar: true\nlayout: core\nmeta_description: Tools for styling lists.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/text/ellipsis.haml",
    "content": "--- \ntitle: Truncating Text with Ellipses\ncrumb: Ellipsis\nframework: compass\nstylesheet: compass/typography/text/_ellipsis.scss\nlayout: core\nmeta_description: Text truncation with ellipsis.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  :markdown\n    There is an XML file that must be installed into your stylesheet\n    directory in order for this utility to work correctly. To install it:\n    \n        compass install compass/ellipsis\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/text/force-wrap.haml",
    "content": "--- \ntitle: Wrapping Long Text and URLs\ncrumb: Force Wrap\nframework: compass\nstylesheet: compass/typography/text/_force-wrap.scss\nlayout: core\nmeta_description: Wrap URLs and long lines of text.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  %p\n    This mixin will wrap URLs and long lines of text to prevent text from breaking layouts.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/text/nowrap.haml",
    "content": "--- \ntitle: Compass No Wrap\ncrumb: No Wrap\nframework: compass\nstylesheet: compass/typography/text/_nowrap.scss\nlayout: core\nmeta_description: Remembering whether or not there's a hyphen in white-space is too hard.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  %p\n    Remembering whether or not there's a hyphen in white-space is too hard.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/text/replacement.haml",
    "content": "--- \ntitle: Compass Text Replacement\ncrumb: Text Replacement\nframework: compass\nstylesheet: compass/typography/text/_replacement.scss\nlayout: core\nmeta_description: Replace text with images.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n= render 'reference'"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/text.haml",
    "content": "--- \ntitle: Compass Text\ncrumb: Text\nframework: compass\nstylesheet: compass/typography/_text.scss\nlayout: core\nsidebar: true\nmeta_description: Style helpers for your text.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  %p\n    Utilities for managing text.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography/vertical_rhythm.haml",
    "content": "--- \ntitle: Vertical Rhythm\ncrumb: Vertical Rhythm\nframework: compass\nstylesheet: compass/typography/_vertical_rhythm.scss\nlayout: core\nmeta_description: Create and maintain a vertical rhythm for your type.\nclassnames:\n  - reference\n  - core\n  - typography\n---\n- render 'reference' do\n  :markdown\n    Create a vertical rhythm for your site by setting the `$base-font-size` and \n    `$base-line-height` variables and then including the `establish-baseline` \n    mixin at the root of your document.\n    \n    Manage the vertical rhythm using the other vertical-rhythm mixins to adjust\n    font and line-height values, extra vertical whitespace, borders, etc.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/typography.haml",
    "content": "--- \ntitle: Compass Typography\ncrumb: Typography\nframework: compass\nsidebar: true\nstylesheet: compass/_typography.scss\nclassnames:\n  - reference\n  - core\n  - typography\nmeta_description: Provides basic mixins for common typography patterns.\nlayout: core\nnav_stylesheet: compass/_typography.scss\n---\n- render 'reference' do\n  %p\n    The Compass Typography module provides some basic mixins\n    for common text styling patterns.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/color/brightness.haml",
    "content": "--- \ntitle: Compass Color Brightness\ncrumb: Color Brightness\nframework: compass\nstylesheet: compass/utilities/color/_brightness.scss\nlayout: core\nmeta_description: Compute the brightness of a color.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/color/contrast.haml",
    "content": "--- \ntitle: Compass Color Contrast\ncrumb: Color Contrast\nframework: compass\nstylesheet: compass/utilities/color/_contrast.scss\nlayout: core\nmeta_description: Contrast foreground with background colors.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/color.haml",
    "content": "--- \ntitle: Compass Color\ncrumb: Color\nframework: compass\nstylesheet: compass/utilities/_color.scss\nlayout: core\nsidebar: true\nmeta_description: Utilities for working with colors.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p\n    Utilities for working with colors.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/general/clearfix.haml",
    "content": "--- \ntitle: Compass Clearfix\ncrumb: Clearfix\nframework: compass\nstylesheet: compass/utilities/general/_clearfix.scss\nlayout: core\nmeta_description: Mixins for clearfixing.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p\n    A clearfix will extend the bottom of the element to enclose any\n    floated elements it contains.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/general/float.haml",
    "content": "--- \ntitle: Compass Float\ncrumb: Float\nframework: compass\nstylesheet: compass/utilities/general/_float.scss\nlayout: core\nmeta_description: Mixins for cross-browser floats.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  :markdown\n    This module provides mixins that help you work around the\n    [double-margin bug in IE5/6][dmb].\n    [dmb]: http://www.positioniseverything.net/explorer/doubled-margin.html\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/general/hacks.haml",
    "content": "--- \ntitle: Compass Hacks\ncrumb: Hacks\nframework: compass\nstylesheet: compass/utilities/general/_hacks.scss\nlayout: core\nmeta_description: Mixins for hacking specific browsers.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p\n    A collection of mixins for hacking specific browsers.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/general/min.haml",
    "content": "--- \ntitle: Minimum Dimensions\ncrumb: Minimums\nframework: compass\nstylesheet: compass/utilities/general/_min.scss\nlayout: core\nmeta_description: Mixins for cross-browser min-height and min-width.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p\n    Cross browser implementation of min-height and min-width.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/general/reset.haml",
    "content": "--- \ntitle: Compass Reset\ncrumb: Reset\nframework: compass\nstylesheet: compass/utilities/general/_reset.scss\nlayout: core\nmeta_description: Mixins for resetting elements (old import).\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p\n    This is a legacy wrapper for the <code>reset/utilities</code> module.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/general/tag_cloud.haml",
    "content": "--- \ntitle: Compass Tag Cloud\ncrumb: Tag Cloud\nframework: compass\nstylesheet: compass/utilities/general/_tag-cloud.scss\nlayout: core\nmeta_description: Mixin for styling tag clouds.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/general.haml",
    "content": "--- \ntitle: Compass General Utilities\ncrumb: General\nframework: compass\nstylesheet: compass/utilities/_general.scss\nsidebar: true\nlayout: core\nmeta_description: Generally useful utilities that don't fit elsewhere.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p\n    Generally useful utilities.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/print.haml",
    "content": "--- \ntitle: Compass Print\ncrumb: Print\nframework: compass\nstylesheet: compass/utilities/_print.scss\nlayout: core\nmeta_description: Control what elements gets printed.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  :markdown\n    Control what gets printed. Apply the `no-print` (or `noprint`) class to any\n    elements that should be hidden when printing. Apply the `print-only` class\n    to those elements which should only appear in your printed pages.\n    \n    The tricky part about `print-only` is getting the display right when you turn\n    an element back on in the case where both styles are applied. This mixin\n    uses the `elements-of-type` function to make sure that elements have the correct\n    display value according to the element type.\n\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/sprites/base.haml",
    "content": "--- \ntitle: Compass Sprite Base\ncrumb: Sprite Base\nframework: compass\nstylesheet: compass/utilities/sprites/_base.scss\nlayout: core\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  :markdown\n    These mixins are useful for working with sprites. This file is imported by\n    magic sprite imports.\n    \n    See the [Spriting Tutorial](/help/tutorials/spriting/) for more information.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/sprites/sprite_img.haml",
    "content": "--- \ntitle: Compass Sprite Image\ncrumb: Sprite Image\nframework: compass\nstylesheet: compass/utilities/sprites/_sprite-img.scss\nlayout: core\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  :markdown\n    **Example 1** Simple mixins:\n    \n        a.twitter\n          +sprite-img(\"icons-32.png\", 1)\n        a.facebook\n          +sprite-img(\"icons-32.png\", 2)\n    \n    **Example 2** Sharing a common base:\n    \n        a\n          +sprite-background(\"icons-32.png\")\n          &.twitter\n            +sprite-column(1)\n          &.facebook\n            +sprite-row(2)\n  "
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/sprites.haml",
    "content": "--- \ntitle: Compass Sprites\ncrumb: Sprites\nframework: compass\nstylesheet: compass/utilities/_sprites.scss\nsidebar: true\nlayout: core\nmeta_description: Sprite mixins.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %h3 Additional Resources\n  %ul\n    %li\n      %a(href=\"/help/tutorials/spriting/\") Spriting Tutorial\n    %li\n      %a(href=\"/reference/compass/helpers/sprites/\") Sprite Helpers\n    %li\n      %a(href=\"/reference/compass/utilities/sprites/base/\") Base Stylesheet\n    "
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/tables/alternating_rows_and_columns.haml",
    "content": "--- \ntitle: Compass Table Striping\ncrumb: Table Striping\nframework: compass\nstylesheet: compass/utilities/tables/_alternating-rows-and-columns.scss\nlayout: core\nmeta_description: Add striping to a table.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  :markdown\n    Add striping to a table in both directions based on a few colors.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/tables/borders.haml",
    "content": "--- \ntitle: Compass Table Borders\ncrumb: Table Borders\nframework: compass\nstylesheet: compass/utilities/tables/_borders.scss\nlayout: core\nmeta_description: Add borders to a table.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n= render 'reference'\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/tables/scaffolding.haml",
    "content": "--- \ntitle: Compass Table Scaffolding\ncrumb: Table Scaffolding\nframework: compass\nstylesheet: compass/utilities/tables/_scaffolding.scss\nlayout: core\nmeta_description: Basic styling of tables to get you started.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p\n    Basic styling of tables to get you started.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities/tables.haml",
    "content": "--- \ntitle: Compass Tables\ncrumb: Tables\nframework: compass\nstylesheet: compass/utilities/_tables.scss\nlayout: core\nsidebar: true\nmeta_description: Style helpers for your tables.\nclassnames:\n  - reference\n  - core\n  - utilities\n---\n- render 'reference' do\n  %p\n    Style helpers for your tables.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass/utilities.haml",
    "content": "--- \ntitle: Compass Utilities\ncrumb: Utilities\nframework: compass\nsidebar: true\nstylesheet: compass/_utilities.scss\nclassnames:\n  - reference\n  - core\n  - utilities\nmeta_description: Provides basic mixins for common styling patterns.\nlayout: core\nnav_stylesheet: compass/_utilities.scss\n---\n- render 'reference' do\n  %p\n    The Compass Utilities module provides some basic mixins\n    for common styling patterns.\n"
  },
  {
    "path": "compass-style.org/content/reference/compass.haml",
    "content": "---\ntitle: Compass Core Framework\ncrumb: Compass Core\nframework: compass\nstylesheet: _compass.scss\nclassnames:\n  - reference\n  - core\nmeta_description: The Compass Core Framework.\nlayout: core\n---\n- render 'reference' do\n  %p\n    The compass core framework is a design-agnostic framework that\n    provides common code that would otherwise be duplicated across\n    other frameworks and extensions.\n\n  %h2 Alphabetical index of all:\n  %ul#indexes\n    %li\n      %a(href=\"/index/variables/\") Variables\n    %li\n      %a(href=\"/index/mixins/\") Mixins\n    %li\n      %a(href=\"/index/functions/\") Functions\n\n  %h2 Importing\n\n%h2 Non Imported Modules\n%em You can import these yourself if you want to use them.\n%ol\n  %li= render \"partials/reference/import\", :import => \"compass/_layout.scss\"\n  %li= render \"partials/reference/import\", :import => \"compass/_reset.scss\"\n\n"
  },
  {
    "path": "compass-style.org/content/reference.haml",
    "content": "---\ntitle: Compass Documentation\nredirect: /reference/compass/\n---"
  },
  {
    "path": "compass-style.org/content/screencast.haml",
    "content": "---\ntitle: Compass Documentation\ncrumb: Docs\nbody_id: home\n---\n%h1 Screencast Tutorial\n\n%p\n  This screencast will walk you through getting set up,\n  learning Sass, and then how to use Compass to style a webpage.\n\n<object width=\"660\" height=\"371\"><param name=\"allowfullscreen\" value=\"true\" /><param name=\"allowscriptaccess\" value=\"always\" /><param name=\"movie\" value=\"http://vimeo.com/moogaloop.swf?clip_id=4335944&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1\" /><embed src=\"http://vimeo.com/moogaloop.swf?clip_id=4335944&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" allowscriptaccess=\"always\" width=\"660\" height=\"371\" /></object>\n\n"
  },
  {
    "path": "compass-style.org/content/search-data.js.erb",
    "content": "function unique(arrayName)\n {\n    var newArray = new Array();\n    label: for (var i = 0; i < arrayName.length; i++)\n    {\n        for (var j = 0; j < newArray.length; j++)\n        {\n            if (newArray[j] == arrayName[i])\n            continue label;\n        }\n        newArray[newArray.length] = arrayName[i];\n    }\n    return newArray;\n}\nfunction search(query, callback) {\n  var terms = $.trim(query).replace(/[\\W\\s_]+/m,' ').toLowerCase().split(/\\s+/);\n  var matching_ids = null;\n  for (var i = 0; i < terms.length; i++) {\n    var term = terms[i];\n    var exactmatch = index.terms[term] || [];\n    var approxmatch = index.approximate[term] || [];\n    var ids = unique(exactmatch.concat(approxmatch));\n    if (matching_ids) {\n      matching_ids = $.grep(matching_ids, function(id) {\n        return ids.indexOf(id) != -1;\n      });\n    } else {\n      matching_ids = ids;\n    }\n  }\n  callback($.map(matching_ids, function(id){ return index.items[id]; }))\n}\n\nvar index = <%= search_index.to_json %>;\n"
  },
  {
    "path": "compass-style.org/content/search.haml",
    "content": "---\ntitle: Search | Compass Documentation\ncrumb: Search\nbody_id: search\n---\n- content_for(:javascripts) do\n  %script(type=\"text/javascript\" src=\"/javascripts/search-data.js\")\n  %script(type=\"text/javascript\" src=\"/javascripts/jquery.url.packed.js\")\n  :javascript\n    $(function(){\n      if ($.url.param(\"q\")) {\n        var query = $.url.param(\"q\").replace(\"+\",\" \");\n        $('input#q').attr('value', query);\n        search(query, displayResults);\n      }\n      $('input#q').keyup(function(){\n        search(this.value, displayResults);\n      });\n    })\n    function displayResults(items) {\n      if (items.length > 0) {\n        var html = \"\"\n        for (var i = 0; i < items.length; i++) {\n          html += '<li><a href=\"'+items[i].url+'\">'+items[i].title+'</a></li>';\n        }\n        $('ol#results').html(html)\n      } else {\n        $('ol#results').html(\"<li class='none'>Nothing found.</li>\");\n      }\n    }\n%input#q{:type => \"text\", :placeholder=>\"Search\"}\n\n%h2 Index of all:\n%ul#indexes\n  %li\n    %a(href=\"/index/variables/\") Variables\n  %li\n    %a(href=\"/index/mixins/\") Mixins\n  %li\n    %a(href=\"/index/functions/\") Functions\n\n%h2 Results\n%ol#results\n  %li.none Please enter a search term."
  },
  {
    "path": "compass-style.org/content/sitemap.xml",
    "content": "<%= xml_sitemap %>\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/core/_base-classes.sass",
    "content": "$default-rounded-corner: 4\n\n.group\n  +pie-clearfix\n\n.truncate\n  +ellipsis\n\n.border-box\n  +box-sizing(border-box)\n\n.round-corners-4\n  +border-radius(4px)\n\n.round-corners-em\n  +border-radius(1em)\n  \n=round-corners($num: $default-rounded-corner)\n  @extend .round-corners-#{$num}\n\n=round-top-corners($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-bottom-right-corner\n  @extend .clear-bottom-left-corner\n=round-bottom-corners($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-right-corner\n  @extend .clear-top-left-corner\n=round-left-corners($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-right-corner\n  @extend .clear-bottom-right-corner\n=round-right-corners($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-left-corner\n  @extend .clear-bottom-left-corner\n\n=round-top-left-corner($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-right-corner\n  @extend .clear-bottom-right-corner\n  @extend .clear-bottom-left-corner\n=round-top-right-corner($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-left-corner\n  @extend .clear-bottom-right-corner\n  @extend .clear-bottom-left-corner\n=round-bottom-left-corner($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-right-corner\n  @extend .clear-bottom-right-corner\n  @extend .clear-top-left-corner\n=round-bottom-right-corner($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-right-corner\n  @extend .clear-top-left-corner\n  @extend .clear-bottom-left-corner\n\n=square-top-left-corner($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-left-corner\n=square-top-right-corner($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-top-right-corner\n=square-bottom-left-corner($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-bottom-left-corner\n=square-bottom-right-corner($num: $default-rounded-corner)\n  +round-corners($num)\n  @extend .clear-bottom-right-corner"
  },
  {
    "path": "compass-style.org/content/stylesheets/core/_clearing-classes.sass",
    "content": ".clear-top-left-corner\n  +border-top-left-radius(0)\n.clear-top-right-corner\n  +border-top-right-radius(0)\n.clear-bottom-left-corner\n  +border-bottom-left-radius(0)\n.clear-bottom-right-corner\n  +border-bottom-right-radius(0)\n\n.hide\n  display: none\n.clear-box-shadow\n  +box-shadow(none)\n.clear-border-radius\n  @extend .clear-rounded-corners\n.clear-rounded-corners\n  +border-radius(0)\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/core/_extensions.scss",
    "content": "@mixin reset($reset-type: false){\n  @if($reset-type){\n    @if($reset-type == global){\n      @include global-reset;\n    }\n    @if($reset-type == html5){\n      @include reset-html5;\n    }\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/core/_media-block.scss",
    "content": ".context {\n  @include clearfix;\n}\n\n.media {\n  @extend .context;\n  .m {\n    float: left;\n    &.rt {\n      float: right;\n    }\n  }\n  .bd {\n    @extend .context;\n  }\n}\n\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/home.scss",
    "content": "@import \"compass\";\n@import \"core/extensions\";\n@include reset(global);\n@include reset(html5);\n@import \"core/base-classes\";\n@import \"core/media-block\";\n\n@import \"partials/theme\";\n@import \"partials/layout\";\n@import \"partials/nav\";\n@import \"partials/typography\";\n@import \"partials/main\";\n@import \"partials/code\";\n@import \"partials/home\";\n@import \"partials/ads\";\n\nhtml.dark { @include dark-theme; }\nhtml.light { @include light-theme; }\n\n@import \"core/clearing-classes\";\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/ie.scss",
    "content": "ul#featured_sites li {\n  margin-left: 4px;\n  margin-top: 4px;\n  &:hover{ padding: 6px;\n    img { width: 240px; }}}"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_ads.scss",
    "content": ".advertisement {\n  padding: 8px 5px !important;\n  text-align: center;\n  line-height: 1.1em !important;\n  @include opacity(0);\n  @include transition(opacity 1s ease-in 1.5s);\n  &.visible {\n    @include opacity(1);\n  }\n  a:not(.pagerankspam) {\n    display: block;\n    color: white;\n    @extend .heading-font;\n    text-decoration: none;\n    &:hover {\n      @include text-shadow(0 0 2px #aaa);\n    }\n  }\n  .pagerankspam { font-size: 9px; }\n .dark & {\n   @extend .code-block-dark;\n   img:hover { @include single-box-shadow($color: white); }\n }\n .light & {\n   @extend .code-block-light;\n   a:not(.pagerankspam) { color: #222}\n   img:hover { @include single-box-shadow($color: #222); }\n }\n #home & {\n   float: right;\n   width: 380px;\n   margin-top: 11px;\n   .fusionimg {\n     margin: 6px 8px;\n     float: left;\n   }\n   .fusiontext {\n     padding-top: 6px;\n   }\n }\n}\n\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_blog.scss",
    "content": "body#blog-archive {\n  .timestamp {\n    margin-right: 1em;\n    font-size: 12px;\n  }\n}"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_code.scss",
    "content": "@import \"compass/layout/stretching\";\n//html.sass .mixin-source .scss, html.scss .mixin-source .sass { @extend .hide;}\n.mixin-source, .example-source, .function-source, .selector-source {\n  position: relative; @extend .fixed-font;\n  .syntaxhighlighter, pre {\n  &.scss, &.sass, &.css, &.haml, &.html { display: none; } } }\n\nhtml.sass { .mixin-source, .example-source, .function-source, .selector-source { .syntaxhighlighter.sass { display: block; } } }\nhtml.scss { .mixin-source, .example-source, .function-source, .selector-source { .syntaxhighlighter.scss { display: block; } } }\nhtml.css .example-source .syntaxhighlighter.css { display: block; }\nhtml.html .example-source .syntaxhighlighter.html { display: block; }\nhtml.haml .example-source .syntaxhighlighter.haml { display: block; }\n\n\n\n.mixin-source, .function-source, .selector-source { display: none; }\n\nhtml.light .syntaxhighlighter, html.dark .syntaxhighlighter {\n  margin: 0 0 2px;\n  code { padding: 0; }\n  //font-size: 1.1em;\n  text-shadow: none;\n  .code-block { background: none; @extend .clear-box-shadow; }\n  table td.gutter { .line { &:first-child { padding-top: 10px !important; } &:last-child { padding-bottom: 10px !important; } } }\n  .toolbar { display: none; }\n  //a.help { font-size: 1.5em; @extend .pictos; color: #aaa; position: relative; right: 6px; top: 2px; }\n  }\n\na[rel=\"github-source\"] {\n  position: relative;\n  float: right;\n  top: 1.1em;\n}\n\npre {\n  margin: 1.5em 0;\n  overflow: auto;\n  .code-block:first-child { padding: .6em; display: block; }\n  .code-block:first-child { width: 100%; @include box-sizing(border-box); overflow: auto; }\n}\n\n.code-block { @extend .round-corners-4; @extend .fixed-font;\n  display: inline-block;\n  font-size: .95em;\n  padding: 0 .4em;\n  line-height: 1.5em;\n}\n\n.source-documentation {\n  @extend .round-corners-4;\n  padding: 10px 15px;\n  @include round-bottom-corners\n}\n\nh3 { @include round-corners;\n  padding: 10px 15px;\n  margin: 20px 0 20px;\n  font-weight: bold;\n  position: relative;\n  a { text-decoration: none;}\n  code, .arg { font-weight: normal; }\n}\nh3.mixin, h3.function, h3.selector { @include round-top-corners; margin-bottom: 2px;}\n.arg {\n  display: inline-block;\n  padding: 0 2px;\n  &[data-default-value] {\n    font-style: italic;\n    &:before { content: \"[\" ; }\n    &:after { content: \"]\" ; }}\n}\n\na[rel=\"view source\"]{ float: right; padding: 9px 15px; margin-top: 20px; position: relative; z-index: 2; font-size: .8em; @include hover-link;}\nh2 + a[rel=\"view source\"]{ margin-top: 6px;}\n\n.syntaxhighlighter {\n  a, div, code, table, table td, table tr, table tbody, table thead, table caption, textarea {\n    background: none; border: 0; bottom: auto; float: none; height: auto; left: auto; line-height: 1.2em !important;\n    padding: 0; margin: 0; outline: 0;\n    overflow: visible; position: static; right: auto;\n    text-align: left; top: auto; vertical-align: baseline;\n    width: auto;\n    font: { weight: normal; style: normal;\n      size: 1em;\n    }\n    min: { height: inherit; }\n  }\n}\n\n.syntaxhighlighter { width: 100%; margin: 1em 0 1em 0; position: relative; overflow: auto; font-size: 1em;\n\n  // set up bold and italic\n  .bold { font-weight: bold; }\n  .italic { font-style: italic; }\n  .line { white-space: pre; }\n\n  // main table and columns\n  table { width: 100%;\n    td.code { width: 100%;\n      .line { padding: 0 .6em; } }\n    td.gutter .line { text-align: right; padding: 0 0.8em 0 1em; } } // middle spacing between line numbers and lines\n\n  // Styles for the toolbar\n  .toolbar { position: absolute; right: 1px; top: 1px; width: 11px; height: 11px; font-size: 10px; z-index: 10;\n    span.title { display: inline; }\n    a { display: block; text-align: center; text-decoration: none; padding-top: 1px; } }\n  .container { position: relative; }\n  textarea { @include stretch(0, .65em, 0, .65em); @extend .fixed-font; font-size: .95em; line-height: 1.3em !important;}\n}\n.syntaxhighlighter, pre .code-block:first-child, pre {\n  &::-webkit-scrollbar { height: 12px; }\n  &::-webkit-scrollbar-button { &:start:decrement, &:end:increment { display: block; width: 0; height: 0; } }\n  &::-webkit-scrollbar-thumb:horizontal { -webkit-border-radius: 5px; -webkit-background-clip: padding-box; }\n}\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_example.scss",
    "content": "html.light #demo, html.dark #demo {\n  color: #333;\n}\n\n#demo {\n  @include round-corners;\n  @extend .group;\n  background: #fff;\n  margin-bottom: 1.2em;\n  padding: 40px;\n  code {\n    @include box-shadow(rgba(#000, .3) 0 1px 3px, rgba(#000, .15) 0 1px 0 0 inset);\n    background: #fff;\n    color: inherit;\n  }\n}\n\n#how {\n  section { width: 49%; float: left; }\n  section + section { float: right; }\n\n  .example-source { clear: both; }\n}\n\n#reference {\n  float: right;\n  margin-top: 1em;\n}\n\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_home.scss",
    "content": "body#home {\n  width: 810px;\n  #page { padding-top: 31px;}\n  h1#logo {\n    $logo: 'compass-logo.png';\n    background: image-url($logo) no-repeat;\n    text-indent: -9999px;\n    overflow: hidden;\n    width: image-width($logo);\n    height: image-height($logo)/2;\n    padding: 0;\n    margin: 0 auto 18px;\n  }\n  #{headings()}{ @extend .heading-font; }\n  h2 {\n    text-align: center;\n    font-size: 30px;\n    padding-bottom: 15px;\n    margin-bottom: 30px;\n    line-height: 1.1em;\n  }\n  h3 {\n    text-align: center;\n    font-size: 25px;\n    margin-top: 32px;\n  }\n  h4 { font-size: 1.5em; }\n  .overview {\n    @extend .group;\n    .compass { width: 330px; float: left;\n      h4:before { content: \"k\"; } }\n    .sass { width: 350px; float: right; \n      h4:before { content: \"2\"; } }\n    .info-box {\n      padding: 20px;\n      h4 {\n        padding-bottom: 12px;\n        margin-bottom: 12px;\n        padding-left: 40px;\n        text-indent: -18px;\n        line-height: 1.333em;\n        &:before {\n          @extend .pictos;\n          color: #fb292d;\n          display: inline-block;\n          font-size: 1.2em;\n          padding-right: .3em;\n        }\n      }\n    }\n    ol { padding-left: 18px; text-indent: -18px; list-style: inside decimal; margin-bottom: 0; }\n    p { margin-bottom: 0; }\n    ol, p { line-height: 1.8em; font-size: .95em;}\n  }\n}\nul#featured_sites {\n  @extend .group;\n  overflow: visible;\n  margin-top: 30px;\n  list-style: none;\n  padding: 0px;\n  li {\n    float: left;\n    text-shadow: none;\n    overflow: visible;\n    position: relative;\n    &:nth-child(3n+2){ margin: 0 7px; }\n    &:nth-child(1n+4){ margin-top: 7px; }\n    &:nth-child(3n+4){ clear: left; }\n    padding: 6px;\n    a { text-decoration: none; }\n    img { float: left; width: 240px; }\n    span { display: none;}\n    &:hover { z-index: 100;\n      padding: 3px 2px;\n      img { width: 248px; }\n      span { display: block; position: absolute; text-shadow: none;}\n    }\n    .url {\n      bottom: 2px; left: 2px; right: 2px; background: #000; background: rgba(#000, .8); z-index: 102; padding: 2.2em 10px 6px;\n      font-size: .8em; border-top: 1px solid rgba(#fff, .2); }\n    .title { bottom: 1.7em; left: 0; z-index: 103; text-decoration: none; padding: 0 11px; color: #fff; }\n  }\n}\nsection.book, section.gui {\n  width: 48%;\n  float: left;\n  @extend .group;\n  h3 { margin-bottom: 1em; height: 2em; text-align: left; }\n}\nsection.book {\n  margin-right: 2%;\n  img { float: left; margin-right: 1em; margin-bottom: 1em; }\n}\nsection.gui  {\n text-align: center;\n .note {\n   font-size: smaller;\n }\n}\n\nhtml.light body#home { h1#logo { background-position: bottom;} }\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_install.scss",
    "content": "body#install {\n  #steps, p.madlib, p.note, h4 { margin-top: 1em;                        }\n  p.note                       { font-size: smaller; font-style: italic; }\n  p.warning                    { color: #c00;                            }\n  .customization               { display: none;                          }\n  .customizable .customization { display: inline;                        }\n  blockquote                   { border-left: 2px solid #ccc;\n                                 text-indent: 0; padding-left: 0.5em;    }\n  .customization input         { width: 8em;                             }\n}"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_layout.scss",
    "content": "$min-width: 700px;\n$side-nav-width: 160px;\n$main-min-width: $min-width - $side-nav-width;\n\nbody {\n  max-width: 1500px;\n  min-width: $min-width;\n  margin: 0 auto;\n  @extend .sans-font;\n  line-height: 1.45em;\n}\n\n#wrap { @extend .group; padding: 0 20px 20px; }\n#page { @extend .group; padding-bottom: 30px; }\nfooter { @extend .group; clear: both; padding-top: 20px;}\nheader { padding: 22px 0 0; position: relative; }\n#page aside + article { margin-left: $side-nav-width + 22px; padding-left: 23px; }\naside { float: left; width: $side-nav-width; position: relative; z-index: 2;}\n\nbody#home #page article { padding-left: 0;}\nbody.site, body#changelog, body.default { max-width: 1024px; }\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_main.scss",
    "content": "body.get-involved h1 + p { font-size: 1.2em; line-height: 1.45em; }\n\n#page {\n  position: relative;\n  padding-top: 40px;\n  & > article { padding-top: 10px; font-size: 15px;\n  img { max-width: 100%; } } }\n\n#theme_pref {\n  a { display: block; font-size: 18px; width: .9em; position: relative; text-decoration: none; @extend .pictos; } }\n\n#docs_panel {\n  position: absolute; top: 0; right: 0;\n  width: 100%;\n  & > div { float: right; margin-left: 10px; @include round-bottom-corners; border: 1px solid; border-top: 0;}\n  a { text-decoration: none; }\n  #theme_pref { padding: 3px 12px 6px; a { position: relative; top: 2px;} }\n  #version { font-size: .75em; padding: 4px 0 5px; background: none; border: none; position: absolute; left: 0; a { @include hover-link; } }\n\n}\n\n#syntax_pref, .syntax_pref { padding: 4px 8px 5px; a { font-size: .9em; padding: 0px 6px 1px; display: inline-block; line-height: 1.45em;} }\n\n.syntax_pref {\n  float: left; @include round-top-corners; border: 1px solid; border-bottom: 0;\n  a { text-decoration: none; }\n}\n\nfooter {\n  .links { float: left; font-size: .9em;\n    img { vertical-align: middle; padding-right: 5px; position: relative; top: -2px;}\n    span { position: relative; top: -1px; }\n    ul { @include horizontal-list(15px); overflow: visible;\n    li { padding-top: 3px; }\n    li:last-child {border: 0; @include box-shadow(none); } } }\n}\n#page article h2 {\n  margin-top: 1.5em;\n}\nh2 a.help {\n  text-indent: -9999px;\n  display: inline-block;\n  position: relative;\n  text-decoration: none;\n  @include opacity(.3);\n  &:hover { @include opacity(.7); }\n  &:before {\n    @extend .pictos;\n    content: \"?\";\n    text-indent: 0;\n    position: absolute;\n    top: 2px;\n    left: 0;\n    font-size: .85em;\n  }\n}\nhr {\n  height: 0px;\n  border: 0;\n  border-bottom-width: 4px;\n  margin: 3em 0;\n  background: transparent;\n}\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_nav.scss",
    "content": ".triangle-marker {\n  border-color: transparent transparent;\n  content: \"\\00a0\";\n  height: 0; width: 0;\n  position: absolute;\n  border-style: solid; }\n\nnav a { @include hover-link; }\nnav .selected a:hover { text-decoration: none;}\n\nheader { @extend .group;\n  font-size: 1.3em; @extend .heading-font; border-width: 4px;}\n#main-nav {\n  display: inline-block;\n  padding-bottom: 10px;\n  ul {\n    @include horizontal-list(10px);\n    line-height: 2em; }}\n\n#sub-nav {\n  @extend .group;\n  padding: 8px 0; }\n\n#docs-nav, #module-nav {\n  display: inline-block;\n  float: left;\n  a {\n    padding: 2px 10px;\n    display: inline-block; }}\n\n#docs-nav { padding-right: 30px;\n  & + #module-nav {\n    padding-left: 20px;\n  }}\n\n#module-nav {\n  display: inline-block;\n  ul { @include horizontal-list(false); }}\n\nbody.getting-started #module-nav li.getting-started,\nbody.tutorial #module-nav li.tutorials,\nbody.support #module-nav li.support,\n#module-nav li.selected {\n  position: relative;\n  a {\n    text-decoration: none;\n  }\n  a:before{ @extend .triangle-marker;\n    border-width: 0 8px 8px;\n    z-index: 2;\n    bottom: -9px;\n    left: 50%;\n    margin-left: -8px;\n    border-bottom-color: #121212;\n  }\n  &:before { @extend .triangle-marker;\n    border-bottom-color: #414141;\n    border-width: 0 6px 6px;\n    z-index: 3;\n    bottom: -9px;\n    left: 50%;\n    margin-left: -6px;\n  }\n  &:after { @extend .triangle-marker;\n    border-bottom-color: #343434;\n    border-width: 0 5px 5px;\n    z-index: 3;\n    bottom: -10px;\n    left: 50%;\n    margin-left: -5px;\n  }\n}\n\n#search-docs {\n  width: 170px;\n  float: right;\n  position: relative;\n  top: .3em;\n  //position: absolute; top: 29px; right: 0;\n  &:before {\n    content: \"s\";\n    display: block;\n    @extend .pictos;\n    position: absolute;\n    left: 6px;\n    top: 4px;\n    font-size: .8em;\n    z-index: 20;\n    @include opacity(.8)\n  }\n  input { @extend .sans-font; @include round-corners;\n    @include box-sizing(border-box);\n    width: 170px; border: 0; margin: 0; padding: 5px 8px 5px 26px;\n    font-size: .8em;\n    float: right;\n    position: relative; } }\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_sidebar.scss",
    "content": "aside {\n  padding-top: 15px;\n  text-align: right;\n  padding-right: 22px;\n  h2, h3 {\n    text-align: left;\n    font-size: 1.3em;\n    line-height: 1.45em;\n    padding-bottom: .2em;\n    margin-bottom: .4em;\n    @extend .clear-border-radius;\n  }\n  h3 {\n    padding: 0 0 .5em; line-height: 1.1em;\n  }\n  a {\n    font-size: .85em;\n  }\n  ul ul a {\n    &.selected, &.selected:hover {\n      font-weight: bold;\n      text-decoration: underline;\n    }\n  }\n  .deprecated {\n    text-decoration: line-through;\n  }\n  .beta span:after {\n    content: \" (\\3B2)\";\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_theme.scss",
    "content": "@mixin site-theme($theme, $page-bg, $text, $strong-text, $heading, $link, $code, $search, $nav-link, $main-nav, $main-nav-selected, $option-panel-border, $option-panel-bg){\n  background: $page-bg;\n  body { background: $page-bg; color: $text;\n    a { color: $link; } }\n\n  #page { @extend .horizontal-rule-#{$theme}; }\n  header { @extend .horizontal-rule-#{$theme}; border-width: 4px; }\n\n  nav a { color: $nav-link; }\n  #main-nav a { color: $main-nav;}\n\n  body#home #main-nav a[rel=home],\n  body#help #main-nav a[rel=help],\n  body.tutorial #main-nav a[rel=tutorial],\n  body.reference #main-nav a[rel=documentation],\n  body#changelog #main-nav a[rel=documentation],\n  body.demo #main-nav a[rel=documentation],\n  body#get-involved #main-nav a[rel=get-involved]{ color: $main-nav-selected; }\n\n  #search-docs input {\n    @extend .inset-panel-#{$theme}; color: $search;\n    &::-webkit-input-placeholder { color: $search; } }\n  #{headings()}{ color: $heading;\n    strong { color: $main-nav-selected; }\n    em { color: $code; } }\n\n  #page > article h2 { @extend .horizontal-rule-top-#{$theme}; }\n  hr { @extend .horizontal-rule-#{$theme};\n    border-bottom-width: 8px}\n  body#home h2 { @extend .horizontal-rule-#{$theme}; }\n\n  #page aside + article { @extend .vertical-rule-left-#{$theme}; }\n\n  aside {\n    h2 a { color: $strong-text; }\n    h2, h3 { @extend .horizontal-rule-#{$theme}; }\n  }\n\n  footer .links li { @extend .vertical-rule-#{$theme}; }\n  code { @extend .code-block-#{$theme}; color: $code; }\n\n  #theme_pref { @extend .theme-switch-#{$theme}; }\n  #docs_panel div, .syntax_pref { background: $option-panel-bg; border-color: $option-panel-border; }\n\n  body#home .overview .info-box { @extend .inset-panel-#{$theme};\n    h4 { @extend .horizontal-rule-#{$theme}; } }\n  #featured_sites li { @extend .inset-panel-#{$theme}; }\n  \n  body.tutorial #page article img {\n    @extend .image-border-#{$theme};\n  }\n\n}\n@mixin docs-theme($theme, $heading, $code, $nav-link, $docs-nav-selected, $module-nav-selected){\n\n  #page > article {\n    h1 { @extend .horizontal-rule-#{$theme}; }\n    h2 { @extend .horizontal-rule-top-#{$theme}; }\n    h3 { @extend .heading-panel-#{$theme}; }\n    h1 + h2, hr + h2 {\n      @extend .clear-box-shadow; border-top: 0;\n    margin-top: 0;}\n  }\n\n  #sub-nav { @extend .horizontal-rule-#{$theme}; }\n  #docs-nav { @extend .vertical-rule-#{$theme}; }\n  body.core a[rel=core], body.blueprint a[rel=blueprint]{ @extend .inset-panel-#{$theme}; color: $docs-nav-selected; @extend .round-corners-4;}\n  #main-nav a[rel=home] { @include replace-text-with-dimensions(\"compass-logo-small-#{$theme}.png\"); display: inline-block; float: left; }\n\n  #module-nav {\n    ul { overflow: visible; }}\n  body.getting-started #module-nav li.getting-started,\n  body.tutorial #module-nav li.tutorials,\n  body.support #module-nav li.support,\n  #module-nav li.selected { @extend .selected-marker-#{$theme};\n    a { color: $module-nav-selected; } }\n\n  a[rel=sass], a[rel=scss], a[rel=css], a[rel=html], a[rel=haml] { @extend .syntax-switch-#{$theme}; }\n  &.sass a[rel=sass], &.scss a[rel=scss], &.css a[rel=css], &.html a[rel=html], &.haml a[rel=haml] { color: $heading; color: rgba($heading, .7); @extend .round-corners-em; @extend .inset-panel-#{$theme}; }\n\n  #version { color: rgba($heading, .3); a { color: rgba($nav-link, .7); } }\n  .mixin-source, .example-source, .function-source, .selector-source { @extend .mixin-panel-#{$theme};\n    .container textarea { color: $code; }\n  }\n  h2 a.help { color: $heading;}\n\n  .source-documentation { @extend .doc-panel-#{$theme}; }\n\n  #demo { @extend .demo-#{$theme}; }\n\n  .arg { color: $code; }\n  .arg[data-default-value] { color: rgba($code, .7); }\n  a[rel=\"view source\"]{ color: rgba($heading, .5); &:hover{ color: rgba($heading, .8);} }\n\n}\n\n// Dark theme\n.inset-panel-dark {\n  @include box-shadow(rgba(#fff, .1) 0 1px 0, rgba(#000, .8) 0 1px 7px 0px inset);\n  background: darken(#2f2f2f, 6); background-color: rgba(#000, .3); }\n\n.horizontal-rule-dark {\n  @include box-shadow(rgba(#fff, .07) 0 1px 0);\n  border-bottom: 1px solid #121212; }\n\n.horizontal-rule-top-dark {\n  @include box-shadow(rgba(#fff, .07) 0 1px 0 inset);\n  border-top: 1px solid #121212; }\n\n.vertical-rule-dark {\n  @include box-shadow(rgba(#fff, .07) 1px 0 0);\n  border-right: 1px solid #121212; }\n\n.vertical-rule-left-dark {\n  @include box-shadow(rgba(#fff, .07) 1px 0 0 inset);\n  border-left: 1px solid #121212; }\n\n.code-block-dark { @extend .code-block; @extend .inset-panel-dark; }\n\n.demo-dark {\n  @include box-shadow(rgba(#000, .5) 0 2px 10px inset, rgba(#fff, .3) 0 1px 2px 0px, rgba(#000, .8) 0 0 0 1px inset); }\n\n.heading-panel-dark {\n  background: darken(#2f2f2f, 6);\n  background: rgba(#000, .2);\n  @include box-shadow(rgba(#000, .2) 0 0 0 1px inset);\n  a:hover { color: #fff;\n    .arg { color: rgba(#fff, .6);}\n  }\n}\n.doc-panel-dark {\n  background: darken(#2f2f2f, 4);\n  background: rgba(#000, .1);\n  @include box-shadow(rgba(#000, .2) 0 0 0 1px inset);\n}\n\n.syntax-switch-dark {\n  color: #000; text-shadow: rgba(#fff, .08) 0 1px 0;\n  &:hover { color: #fff; text-shadow: #000 0 1px 0; } }\n\n.theme-switch-dark {\n  cursor: pointer;\n  a { color: #000; color: rgba(#000, .8); text-shadow: rgba(#fff, .08) 0 1px 0; }\n  &:hover a { color: #eee; text-shadow: #000 0 1px 0; } }\n\n.selected-marker-dark {\n  a:before{ border-bottom-color: #121212; }\n  &:before { border-bottom-color: #414141; }\n  &:after { border-bottom-color: #323232; }\n}\n.mixin-panel-dark {\n  @extend .inset-panel-dark;\n  td.gutter { background: rgba(#fff, .05); .line { border-right: 2px solid rgba(#fff, .15); color: rgba(#fff, .5); }}\n  .container textarea { background: darken(#2f2f2f, 6); }\n}\n\n.image-border-dark {\n  border:2px solid #BFBFBF;\n  @extend .round-corners-4;\n}\n\n@mixin dark-theme($docs: false) {\n  $page-bg: #2f2f2f;\n\n  $text: #c6c6c6;\n  $heading: white;\n  $strong-text: #dbdbdb;\n\n  $search: #6e6e6e;\n\n  $code: #dadbb1;\n  $nav-link: #bfbfbf;\n  $link: saturate(lighten(#85AFC9, 4), 19);\n\n  $main-nav: white;\n  $main-nav-selected: #fb292d;\n  $docs-nav-selected: $strong-text;\n  $module-nav-selected: $link;\n\n  $option-panel-border: rgba(#000, .5);\n  $option-panel-bg: rgba(#fff, .06);\n\n  @include site-theme(dark, $page-bg, $text, $strong-text, $heading, $link, $code, $search, $nav-link, $main-nav, $main-nav-selected, $option-panel-border, $option-panel-bg);\n\n  @if($docs){\n    @include docs-theme(dark, $heading, $code, $nav-link, $docs-nav-selected, $module-nav-selected);\n    .syntaxhighlighter, pre, pre .code-block:first-child {\n      &::-webkit-scrollbar-track-piece { -webkit-box-shadow: rgba(#000, .5) 0 0 3px 1px inset; background: rgba(#000, .2); }\n    }\n    .syntaxhighlighter, pre, pre .code-block:first-child {\n      &::-webkit-scrollbar-thumb:horizontal { background: -webkit(linear-gradient(rgba(#fff, .3), rgba(#fff, 0))) #000; -webkit-box-shadow: rgba(black, 0.8) 0px 0 0 1px inset; }\n    }\n  }\n}\n\n// Light Theme\n.inset-panel-light {\n  @include box-shadow(rgba(#fff, 1) 0 1px 0, rgba(#000, .5) 0 1px 3px 0px inset);\n  text-shadow: 0 1px 1px #fff;\n  background: darken(#fff, .04); background-color: rgba(#000, .04); }\n\n.horizontal-rule-light {\n  @include box-shadow(#fff 0 1px 0);\n  border-bottom: 1px solid #bbb; }\n\n.horizontal-rule-top-light {\n  @include box-shadow(#fff 0 1px 0 inset);\n  border-top: 1px solid #bbb; }\n\n.vertical-rule-light {\n  @include single-box-shadow(1px, 0, 0, $color: rgba(#fff, 1));\n  border-right: 1px solid #bbb; }\n\n.vertical-rule-left-light {\n  @include single-box-shadow(1px, 0, 0, $color: rgba(#fff, 1),  $inset: inset);\n  border-left: 1px solid #bbb; }\n\n.code-block-light { @extend .code-block; @extend .inset-panel-light; background: rgba(#fff, .5); }\n\n.demo-light { @include box-shadow(rgba(#000, .3) 0 2px 10px inset, #fff 0 1px 2px 0px, rgba(#000, .05) 0 0 0 1px inset); }\n\n.syntax-switch-light {\n  color: rgba(#000, .3); text-shadow: rgba(#fff, .08) 0 1px 0;\n  &:hover { color: #000; text-shadow: #fff 0 1px 0; }}\n\n.theme-switch-light {\n  cursor: pointer;\n  a {color: rgba(#000, .2); text-shadow: rgba(#fff, 1) 0 1px 0;}\n  &:hover a { color: #000; } }\n\n.heading-panel-light {\n  background: rgba(#fff, .5);\n  @include box-shadow(rgba(#000, .13) 0 0 0 1px inset);\n  a:hover { color: #000;\n    .arg { color: rgba(#000, .6); } }\n}\n\n.selected-marker-light {\n  a:before{ border-bottom-color: #bbbbbb; }\n  &:before { border-bottom-color: #fff; }\n  &:after { border-bottom-color: #e5e5e5; }\n}\n\n.doc-panel-light {\n  background: rgba(#000, .03);\n  text-shadow: rgba(#fff, .9) 0 1px 1px;\n  @include box-shadow(rgba(#000, .15) 0 0 0 1px inset);\n}\n\n.mixin-panel-light, .function-panel-light, .selector-panel-light {\n  @extend .inset-panel-light;\n  background: rgba(#fff, .8);\n  td.gutter { background: rgba(#000, .08); .line { border-right: 2px solid rgba(#000, .2); color: rgba(#000, .4); } }\n  .container textarea { background: darken(#fff, .04); }\n}\n\n.image-border-light {\n  border:2px solid #444444;\n  @extend .round-corners-4;\n}\n\n@mixin light-theme($docs: false) {\n  $page-bg: #ececec; // image-url('bg-light.jpg');\n\n  $text: #111;\n  $heading: #222;\n  $strong-text: #000;\n\n  $search: #666;\n\n  $link: #307eb6;\n  $nav-link: #444;\n  $code: #222;\n\n  $main-nav: #000;\n  $main-nav-selected: darken(#fb292d, 15);\n  $docs-nav-selected: $strong-text;\n  $module-nav-selected: $link;\n\n  $option-panel-border: rgba(#000, .2);\n  $option-panel-bg: #fff;\n\n  @include site-theme(light, $page-bg, $text, $strong-text, $heading, $link, $code, $search, $nav-link, $main-nav, $main-nav-selected, $option-panel-border, $option-panel-bg);\n\n  @if($docs){\n    @include docs-theme(light, $heading, $code, $nav-link, $docs-nav-selected, $module-nav-selected);\n    .syntaxhighlighter::-webkit-scrollbar-track-piece { -webkit-box-shadow: rgba(#000, .3) 0 0 3px 1px inset; background: rgba(#ddd, .8); }\n    .syntaxhighlighter::-webkit-scrollbar-thumb:horizontal { background: -webkit(linear-gradient(rgba(#000, 0) 40%, rgba(#000, .2))) #fff; -webkit-box-shadow: rgba(black, 0.2) 0px 0 0 1px inset; }\n  }\n}\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/partials/_typography.scss",
    "content": "@font-face {\n  font-family: \"pictos-web\";\n  src: url('/otherfonts/pictos-web.eot');\n  src: local(\"?\"), url('/otherfonts/pictos-web.woff') format('woff'), url('/otherfonts/pictos-web.ttf') format('truetype'), url('/otherfonts/pictos-web.svg#webfontIyfZbseF') format('svg');}\n\n@include font-face(\"museosans-web\", font-files(\"museosans-web.woff\", woff, \"museosans-web.ttf\", truetype, \"museosans-web.svg#webfontJHBEijmD\", svg), 'museosans-web.eot');\n\n\n.sans-font { font-family: 'Lucida Grande', Arial, sans-serif; }\n.heading-font { font-family: 'Museo Sans', \"museosans-web\", 'serif'; }\n.pictos { font-family: pictos, pictos-web; font-weight: normal; font-style: normal;}\n.fixed-font { font-family: menlo, monaco, \"andale mono\", \"courier new\", fixed;}\n\n#page {\n  line-height: 1.45em;\n  ol { list-style: outside decimal; padding-left: 2.5em; }\n  ol ol { list-style: outside lower-alpha; padding-left: 2.5em; }\n  ul, ol, dl { margin-bottom: 1.5em;}\n  p { margin-bottom: 1.2em;}\n  #{headings(1,2)}{ @extend .heading-font; line-height: 1.2em; }\n  h1 { font-size: 35px; margin-bottom: 15px; padding-bottom: 6px; }\n  h2 { font-size: 26px; margin: 1em 0 15px; padding-bottom: 6px; }\n  h3 { font-size: 18px; }\n  h4 { font-size: 18px; margin: .4em 0; }\n  ul { list-style: inside disc; }\n  dt { font-weight: bold; }\n}\n#page aside {\n  ul { list-style: none; margin-bottom: 1em;}\n  h2 { line-height: 1.3em; margin-top: 0; padding-top: 3px;}\n}\nem     { font-style: italic; }\nstrong { font-weight: bold;  }\n\n#page > article {\n  ul ul { padding-left: 1em; }\n  position: relative;\n  h2 { font-size: 26px; margin: .5em 0 .6em;\n    padding: 1em 0 6px;}\n  hr + h2 { padding-top: 0; }\n  hr + h3, h4, h5 { margin-top: 0; }\n}\n\ndl.table dt, dl.table dd { display: inline-block; }\ndg { display: block; margin-bottom: 1.5em; }\n\n.warning { color: #c00; }"
  },
  {
    "path": "compass-style.org/content/stylesheets/screen.scss",
    "content": "@import \"compass\";\n@import \"compass/layout\";\n@import \"core/extensions\";\n\n@include global-reset;\n@include reset-html5;\n\n@import \"core/base-classes\";\n@import \"core/media-block\";\n\n@import \"partials/theme\";\n@import \"partials/layout\";\n@import \"partials/typography\";\n\n@import \"partials/nav\";\n@import \"partials/sidebar\";\n@import \"partials/ads\";\n@import \"partials/main\";\n@import \"partials/code\";\n@import \"partials/example\";\n@import \"partials/install\";\n@import \"partials/blog\";\n\n@import \"syntax/syntax-theme\";\n\n@import \"core/clearing-classes\";\n\n\nhtml.dark { @include dark-theme(true); }\nhtml.light { @include light-theme(true); }\n\nfooter {\n  margin: 0 auto;\n  width: 640px;\n}\n\nblockquote {\n  @extend code;\n}\n\n#page h3 {\n  padding-left: 0;\n}\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/syntax/_shCore.scss",
    "content": "@mixin round_corners_custom($top, $right, $bottom, $left) {\n\t-moz-border-radius: $top $right $bottom $left !important;\n\t-webkit-border-radius: $top $right $bottom $left !important;\n}\n\n@mixin round_corners($radius) {\n\t@include round_corners_custom($radius, $radius, $radius, $radius);\n}\n\n.syntaxhighlighter {\n\ta,\n\tdiv,\n\tcode,\n\ttable,\n\ttable td,\n\ttable tr,\n\ttable tbody,\n\ttable thead,\n\ttable caption,\n\ttextarea {\n\t\t@include round_corners(0);\n\t\t\n\t\tbackground: none !important;\n\t\tborder: 0 !important;\n\t\tbottom: auto !important;\n\t\tfloat: none !important;\n\t\theight: auto !important;\n\t\tleft: auto !important;\n\t\tline-height: 1.1em !important;\n\t\tmargin: 0 !important;\n\t\toutline: 0 !important;\n\t\toverflow: visible !important;\n\t\tpadding: 0 !important;\n\t\tposition: static !important;\n\t\tright: auto !important;\n\t\ttext-align: left !important;\n\t\ttop: auto !important;\n\t\tvertical-align: baseline !important;\n\t\twidth: auto !important;\n\t\tbox-sizing: content-box !important;\n\t\tfont: {\n\t\t\tfamily: \"Consolas\", \"Bitstream Vera Sans Mono\", \"Courier New\", Courier, monospace !important;\n\t\t\tweight: normal !important;\n\t\t\tstyle: normal !important;\n\t\t\tsize: 1em !important;\n\t\t}\n\t\tmin: {\n\t\t\t// For IE8, FF & WebKit\n\t\t\theight: inherit !important;\n\t\t\t// For IE7\n\t\t\theight: auto !important;\n\t\t}\n\t}\n}\n\n.syntaxhighlighter {\n\twidth: 100% !important;\n\tmargin: 1em 0 1em 0 !important;\n\t\n\tposition: relative !important;\n\toverflow: auto !important;\n\tfont-size: 1em !important;\n\t\n\t&.source { overflow: hidden !important; }\n\t\n\t// set up bold and italic\n\t.bold { font-weight: bold !important; }\n\t.italic { font-style: italic !important; }\n\t\n\t.line { white-space: pre !important; }\n\t\n\t// main table and columns\n\ttable {\n\t\twidth: 100% !important;\n\t\tcaption {\n\t\t\ttext-align: left !important;\n\t\t\tpadding: .5em 0 0.5em 1em !important;\n\t\t}\n\t\t\n\t\ttd.code {\n\t\t\twidth: 100% !important;\n\t\t\t\n\t\t\t.container {\n\t\t\t\tposition: relative !important;\n\t\t\t\t\n\t\t\t\ttextarea {\n\t\t\t\t\tbox-sizing: border-box !important;\n\t\t\t\t\tposition: absolute !important;\n\t\t\t\t\tleft: 0 !important;\n\t\t\t\t\ttop: 0 !important;\n\t\t\t\t\twidth: 100% !important;\n\t\t\t\t\theight: 100% !important;\n\t\t\t\t\tborder: none !important;\n\t\t\t\t\tbackground: white !important;\n\t\t\t\t\tpadding-left: 1em !important;\n\t\t\t\t\toverflow: hidden !important;\n\t\t\t\t\twhite-space: pre !important;\n\t\t\t\t} \n\t\t\t} \n\t\t}\n\t\t\n\t\t// middle spacing between line numbers and lines\n\t\ttd.gutter .line {\n\t\t\ttext-align: right !important;\n\t\t\tpadding: 0 0.5em 0 1em !important; \n\t\t}\n\t\t\n\t\ttd.code .line {\n\t\t\tpadding: 0 1em !important;\n\t\t}\n\t}\n\t\n\t&.nogutter {\n\t\ttd.code {\n\t\t\t.container textarea, .line { padding-left: 0em !important; }\n\t\t}\n\t}\n\t\n\t&.show { display: block !important; }\n\t\n\t// Adjust some properties when collapsed\n\t&.collapsed {\n\t\ttable { display: none !important; }\n\t\t\n\t\t.toolbar {\n\t\t\tpadding: 0.1em 0.8em 0em 0.8em !important;\n\t\t\tfont-size: 1em !important;\n\t\t\tposition: static !important;\n\t\t\twidth: auto !important;\n\t\t\theight: auto !important;\n\t\t\t\n\t\t\tspan {\n\t\t\t\tdisplay: inline !important;\n\t\t\t\tmargin-right: 1em !important;\n\t\t\t\t\n\t\t\t\ta {\n\t\t\t\t\tpadding: 0 !important;\n\t\t\t\t\tdisplay: none !important;\n\t\t\t\t\t&.expandSource { display: inline !important; } \n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// Styles for the toolbar\n\t.toolbar {\n\t\tposition: absolute !important;\n\t\tright: 1px !important;\n\t\ttop: 1px !important;\n\t\twidth: 11px !important;\n\t\theight: 11px !important;\n\t\tfont-size: 10px !important;\n\t\tz-index: 10 !important;\n\t\t\n\t\tspan.title { display: inline !important; }\n\t\t\n\t\ta {\n\t\t\tdisplay: block !important;\n\t\t\ttext-align: center !important;\n\t\t\ttext-decoration: none !important;\n\t\t\tpadding-top: 1px !important;\n\t\t\t\n\t\t\t&.expandSource { display: none !important; }\n\t\t}\n\t}\n\t\n\t&.ie {\n\t\tfont-size: .9em !important;\n\t\tpadding: 1px 0 1px 0 !important;\n\t\t\n\t\t.toolbar {\n\t\t\tline-height: 8px !important;\n\t\t\ta {\n\t\t\t\tpadding-top: 0px !important;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// Print view.\n\t// Colors are based on the default theme without background.\n\t&.printing {\n\t\t.line.alt1 .content,\n\t\t.line.alt2 .content,\n\t\t.line.highlighted .number,\n\t\t.line.highlighted.alt1 .content,\n\t\t.line.highlighted.alt2 .content { background: none !important; }\n\t\t\n\t\t// Gutter line numbers\n\t\t.line {\n\t\t\t.number { color: #bbbbbb !important; }\n\t\t\t// Add border to the lines\n\t\t\t.content { color: black !important; }\n\t\t}\n\t\t\n\t\t// Toolbar when visible\n\t\t.toolbar { display: none !important; }\n\t\ta { text-decoration: none !important; }\n\t\t.plain, .plain a { color: black !important; }\n\t\t.comments, .comments a { color: #008200 !important; }\n\t\t.string, .string a { color: blue !important; }\n\t\t.keyword {\n\t\t\tcolor: #006699 !important;\n\t\t\tfont-weight: bold !important; \n\t\t}\n\t\t.preprocessor { color: gray !important; }\n\t\t.variable { color: #aa7700 !important; }\n\t\t.value { color: #009900 !important; }\n\t\t.functions { color: #ff1493 !important; }\n\t\t.constants { color: #0066cc !important; }\n\t\t.script { font-weight: bold !important; }\n\t\t.color1, .color1 a { color: gray !important; }\n\t\t.color2, .color2 a { color: #ff1493 !important; }\n\t\t.color3, .color3 a { color: red !important; }\n\t\t.break, .break a { color: black !important; }\n\t}\n}"
  },
  {
    "path": "compass-style.org/content/stylesheets/syntax/_shThemeRDark.scss",
    "content": "\n// Dark Theme\n\n$background: none;\n\n$line_highlighted_background:\t#323E41;\n$line_highlighted_number:\t\t#b9bdb6;\n\n$gutter_text:\t\t\t\t\t#afafaf;\n$gutter_border_color:\t\t\trgba(#fff, .15);\n\n$toolbar_collapsed_a:\t\t\t#5ba1cf;\n$toolbar_collapsed_a_hover:\t\t#5ce638;\n$toolbar_collapsed_background:\t#000;\n\n$toolbar_a:\t\t\t\t\t\t#fff;\n$toolbar_a_hover:\t\t\t\t#e0e8ff;\n\n$code_plain:\t\t\t\t\t#dadbb1;\n$code_comments:\t\t\t\t\t#878a85;\n$code_string:\t\t\t\t\t#64b041;\n$code_keyword:\t\t\t\t\t#6cc7eb;\n$code_preprocessor:\t\t\t\t#cd5c57;\n$code_variable:\t\t\t\t\t$code_keyword;\n$code_value:\t\t\t\t\t#ffa0a0;\n$code_functions:\t\t\t\t#3d95e6;\n$code_constants:\t\t\t\t#e0e8ff;\n$code_script:\t\t\t\t\t$code_keyword;\n$code_script_background:\t\tnone;\n$code_color1:\t\t\t\t\t#b0b76b;\n$code_color2:\t\t\t\t\t#98f77a;\n$code_color3:\t\t\t\t\t#ffaa3e;\n$code_color4:\t\t\t\t\t$code_plain;\n\n//@import \"theme_template.scss\";\n\n// Interface elements.\nhtml.dark .syntaxhighlighter {\n\t// Actual syntax highlighter colors.\n\t.plain, .plain a { color: $code_plain; }\n\t.comments, .comments a { color: $code_comments; }\n\t.string, .string a { color: $code_string; }\n\t.keyword { color: $code_keyword; }\n\t.preprocessor { color: $code_preprocessor; }\n\t.variable { color: $code_variable; }\n\t.value { color: $code_value; }\n\t.functions { color: $code_functions; }\n\t.constants { color: $code_constants; }\n\t.script {\n\t\tfont-weight: bold;\n\t\tcolor: $code_script;\n\t\tbackground-color: $code_script_background;\n\t}\n\t.color1, .color1 a { color: $code_color1; }\n\t.color2, .color2 a { color: $code_color2; }\n\t.color3, .color3 a { color: $code_color3; }\n\t.color4, .color4 a { color: $code_color4; }\n}\n\n// Light Theme\n\n$background: none;\n\n$line_highlighted_background:\t#c3defe;\n$line_highlighted_number:\t\t#fff;\n\n$gutter_text:\t\t\t\t\t#787878;\n$gutter_border_color:\t\t\t#d4d0c8;\n\n$toolbar_collapsed_a:\t\t\t#3f5fbf;\n$toolbar_collapsed_a_hover:\t\t#aa7700;\n$toolbar_collapsed_background:\t#fff;\n\n$toolbar_a:\t\t\t\t\t\t#a0a0a0;\n$toolbar_a_hover:\t\t\t\tred;\n\n$code_plain:\t\t\t\t\tblack;\n$code_comments:\t\t\t\t\t#3f5fbf;\n$code_string:\t\t\t\t\t#4fa33f;\n$code_keyword:\t\t\t\t\t#7f0055;\n$code_preprocessor:\t\t\t\t#006699;\n$code_variable:\t\t\t\t\t#aa7700;\n$code_value:\t\t\t\t\t#4fa33f;\n$code_functions:\t\t\t\t#b553ba;\n$code_constants:\t\t\t\t#0066cc;\n$code_color1:\t\t\t\t\tgray;\n$code_color2:\t\t\t\t\t#ca6436;\n$code_color3:\t\t\t\t\tred;\n$code_color4:\t\t\t\t\t$code_plain;\n\n// Interface elements.\nhtml.light .syntaxhighlighter {\n\t// Actual syntax highlighter colors.\n\t.plain, .plain a { color: $code_plain; }\n\t.comments, .comments a { color: $code_comments; }\n\t.string, .string a { color: $code_string; }\n\t.keyword { color: $code_keyword; }\n\t.preprocessor { color: $code_preprocessor; }\n\t.variable { color: $code_variable; }\n\t.value { color: $code_value; }\n\t.functions { color: $code_functions; }\n\t.constants { color: $code_constants; }\n\t.script {\n\t\tfont-weight: bold;\n\t\tcolor: $code_script;\n\t\tbackground-color: $code_script_background;\n\t}\n\t.color1, .color1 a { color: $code_color1; }\n\t.color2, .color2 a { color: $code_color2; }\n\t.color3, .color3 a { color: $code_color3; }\n\t.color4, .color4 a { color: $code_color4; }\n}\n\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/syntax/_syntax-theme.scss",
    "content": "// Default Syntax Highlighter theme.\n//@import \"shCore.scss\";\n\n@import \"shThemeRDark.scss\";\n\n/*.syntaxhighlighter {\n\t.keyword { font-weight: bold !important; }\n}*/\n"
  },
  {
    "path": "compass-style.org/content/stylesheets/syntax/_theme_template.scss",
    "content": "$background:\t\t\t\t\twhite !default;\n\n$line_alt1_background:\t\t\t$background !default;\n$line_alt2_background:\t\t\t$background !default;\n\n$line_highlighted_background:\t#e0e0e0 !default;\n$line_highlighted_number:\t\tblack !default;\n\n$gutter_text:\t\t\t\t\t#afafaf !default;\n$gutter_border_color:\t\t\t#6ce26c !default;\n$gutter_border:\t\t\t\t\t3px solid $gutter_border_color !default;\n\n$toolbar_collapsed_a:\t\t\t#00f !default;\n$toolbar_collapsed_a_hover:\t\t#f00 !default;\n$toolbar_collapsed_background:\t#fff !default;\n$toolbar_collapsed_border:\t\t1px solid $gutter_border_color !default;\n\n$toolbar_a:\t\t\t\t\t\t#fff !default;\n$toolbar_a_hover:\t\t\t\t#000 !default;\n$toolbar_background:\t\t\t$gutter_border_color !default;\n$toolbar_border:\t\t\t\tnone !default;\n\n$code_plain:\t\t\t\t\tblack !default;\n$code_comments:\t\t\t\t\t#008200 !default;\n$code_string:\t\t\t\t\tblue !default;\n$code_keyword:\t\t\t\t\t#006699 !default;\n$code_preprocessor:\t\t\t\tgray !default;\n$code_variable:\t\t\t\t\t#aa7700 !default;\n$code_value:\t\t\t\t\t#009900 !default;\n$code_functions:\t\t\t\t#ff1493 !default;\n$code_constants:\t\t\t\t#0066cc !default;\n$code_script:\t\t\t\t\t$code_keyword !default;\n$code_script_background:\t\tnone !default;\n$code_color1:\t\t\t\t\tgray !default;\n$code_color2:\t\t\t\t\t#ff1493 !default;\n$code_color3:\t\t\t\t\tred !default;\n\n$caption_color:\t\t\t\t\t$code_plain !default;\n\n// Interface elements.\n.syntaxhighlighter {\n\tbackground-color: $background !important;\n\n\t// Highlighed line number\n\t.line {\n\t\t&.alt1 { background-color: $line_alt1_background !important; }\n\t\t&.alt2 { background-color: $line_alt2_background !important; }\n\n\t\t// Highlighed line\n\t\t&.highlighted {\n\t\t\t&.alt1, &.alt2 { background-color: $line_highlighted_background !important; }\n\t\t\t&.number { color: $line_highlighted_number !important; }\n\t\t}\n\t}\n\n\ttable {\n\t\tcaption {\n\t\t\tcolor: $caption_color !important;\n\t\t}\n\t}\n\n\t// Add border to the lines\n\t.gutter {\n\t\tcolor: $gutter_text !important;\n\t\t.line {\n\t\t\tborder-right: $gutter_border !important;\n\n\t\t\t&.highlighted {\n\t\t\t\tbackground-color: $gutter_border_color !important;\n\t\t\t\tcolor: $background !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.printing .line .content { border: none !important; }\n\n\t&.collapsed {\n\t\toverflow: visible !important;\n\n\t\t.toolbar {\n\t\t\tcolor: $toolbar_collapsed_a !important;\n\t\t\tbackground: $toolbar_collapsed_background !important;\n\t\t\tborder: $toolbar_collapsed_border !important;\n\n\t\t\ta {\n\t\t\t\tcolor: $toolbar_collapsed_a !important;\n\t\t\t\t&:hover { color: $toolbar_collapsed_a_hover !important; }\n\t\t\t}\n\t\t}\n\t}\n\n\t.toolbar {\n\t\tcolor: $toolbar_a !important;\n\t\tbackground: $toolbar_background !important;\n\t\tborder: $toolbar_border !important;\n\t\ta {\n\t\t\tcolor: $toolbar_a !important;\n\t\t\t&:hover { color: $toolbar_a_hover !important; }\n\t\t}\n\t}\n\n\t// Actual syntax highlighter colors.\n\t.plain, .plain a { color: $code_plain !important; }\n\t.comments, .comments a { color: $code_comments !important; }\n\t.string, .string a { color: $code_string !important; }\n\t.keyword { color: $code_keyword !important; }\n\t.preprocessor { color: $code_preprocessor !important; }\n\t.variable { color: $code_variable !important; }\n\t.value { color: $code_value !important; }\n\t.functions { color: $code_functions !important; }\n\t.constants { color: $code_constants !important; }\n\t.script {\n\t\tfont-weight: bold !important;\n\t\tcolor: $code_script !important;\n\t\tbackground-color: $code_script_background !important;\n\t}\n\t.color1, .color1 a { color: $code_color1 !important; }\n\t.color2, .color2 a { color: $code_color2 !important; }\n\t.color3, .color3 a { color: $code_color3 !important; }\n}\n"
  },
  {
    "path": "compass-style.org/layouts/article.haml",
    "content": "- render 'basic' do\n  #wrap\n    = render \"partials/main-navigation\"\n    #page\n      #docs_panel\n        #theme_pref\n          %a{:href => \"#\", :rel => \"theme\", :title => \"switch theme\" } Q\n        -#syntax_pref\n          %a{:href => \"#\", :rel => \"scss\" } scss\n          %a{:href => \"#\", :rel => \"sass\" } sass\n        #version\n          Version:\n          %a.number(href=\"/CHANGELOG/\")= compass_version\n      %article= yield\n    %footer(role=\"contentinfo\")= render \"partials/footer\"\n  = content_for(@item, :javascripts)\n  = render \"partials/analytics\"\n  <script type=\"text/javascript\">SyntaxHighlighter.all();</script>\n\n"
  },
  {
    "path": "compass-style.org/layouts/basic.haml",
    "content": "!!!5\n- # This template is just the stuff until the body tag.\n%html.no-js{:dir => \"ltr\", :lang => \"en\"}\n  %head\n    %meta{:charset => \"utf-8\"}/\n    %meta{:content => \"chrome=1\", \"http-equiv\" => \"X-UA-Compatible\"}\n    %meta(name=\"viewport\" content=\"width=780\")\n    - if ENV[\"BETA\"]\n      %meta(name=\"robots\" content=\"noindex\")\n    %link(rel=\"shortcut icon\" type=\"image/png\" href=\"/images/compass_icon.png\")\n    %link{:href=>\"/blog/atom.xml\", :rel=>\"alternate\", :title=>\"Compass Blog\", :type=>\"application/atom+xml\"}\n    %title\n      #{@item[:title]} | Compass Documentation\n    %link{:charset => \"utf-8\", :href => \"/stylesheets/screen.css\", :rel => \"stylesheet\", :type => \"text/css\"}\n    = render \"partials/js-core\"\n    = render \"partials/js-highlighter\"\n    /[if lte IE 8]\n      %link{:charset => \"utf-8\", :href => \"/stylesheets/ie.css\", :rel => \"stylesheet\", :type => \"text/css\"}\n    - if content_for(@item, :additional_css)\n      %style(type=\"text/css\")= content_for(@item, :additional_css)\n  %body{body_attributes(@item)}= yield\n"
  },
  {
    "path": "compass-style.org/layouts/blog.haml",
    "content": "- render \"basic\" do\n  #wrap\n    = render \"partials/main-navigation\"\n    #sub-nav\n      - p = previous_post\n      - n = next_post\n      - if p || n\n        %nav#docs-nav{:role => \"navigation\"}\n          - if p\n            %a{:href => p.rep_named(:default).path, :title => p[:title]} &laquo; Previous Post\n          - if n\n            %a{:href => n.rep_named(:default).path, :title => n[:title]} Next Post &raquo;\n    #page\n      #docs_panel\n        #theme_pref\n          %a{:href => \"#\", :rel => \"theme\", :title => \"switch theme\" } Q\n        #version\n          Version:\n          %a.number(href=\"/CHANGELOG/\")= compass_version\n      = yield\n    %footer(role=\"contentinfo\")= render \"partials/footer\"\n  = content_for(@item, :javascripts)\n  = render \"partials/analytics\"\n"
  },
  {
    "path": "compass-style.org/layouts/core.haml",
    "content": "- render 'main' do\n  - content_for :module_nav do\n    %ul= item_tree(reference_item(:stylesheet => \"compass.scss\"), :depth => 1, :omit_self => true, :headings => false)\n  %aside(role=\"sidebar\")= render 'partials/sidebar', :default_stylesheet => \"_compass.scss\", :omit_self => false, :heading_level => 2, :heading_depth => 1\n  %article= yield"
  },
  {
    "path": "compass-style.org/layouts/default.haml",
    "content": "!!!5\n%html.no-js{:dir => \"ltr\", :lang => \"en\"}\n  %head\n    %meta{:charset => \"utf-8\"}/\n    %meta{:content => \"chrome=1\", \"http-equiv\" => \"X-UA-Compatible\"}\n    %meta(name=\"viewport\" content=\"width=780\")\n    - if ENV[\"BETA\"]\n      %meta(name=\"robots\" content=\"noindex\")\n    %link(rel=\"shortcut icon\" type=\"image/png\" href=\"/images/compass_icon.png\")\n    %title\n      #{@item[:title]} | Compass Documentation\n    %link{:charset => \"utf-8\", :href => \"/stylesheets/screen.css\", :rel => \"stylesheet\", :type => \"text/css\"}\n    = render \"partials/js-core\"\n  %body.default{body_attributes(@item)}\n    #wrap\n      = render \"partials/main-navigation\"\n      #page\n        #docs_panel\n          #theme_pref\n            %a{:href => \"#\", :rel => \"theme\", :title => \"switch theme\" } Q\n          #version\n            Version:\n            %a.number(href=\"/CHANGELOG/\")= compass_version\n        %article= yield\n      %footer(role=\"contentinfo\")= render \"partials/footer\"\n    = render \"partials/analytics\"\n\n"
  },
  {
    "path": "compass-style.org/layouts/documentation.haml",
    "content": "- render 'site' do\n  %aside(role=\"sidebar\")\n    %nav#local-nav\n      %ul= item_tree(documentation_item(:root), :depth => 2, :omit_self => false, :heading_level => 2)\n  %article= yield\n"
  },
  {
    "path": "compass-style.org/layouts/example.haml",
    "content": "- render 'basic' do\n  - content_for(:additional_css) do\n    = example_css\n  #wrap\n    = render \"partials/main-navigation\"\n    #page\n      #docs_panel\n        #theme_pref\n          %a{:href => \"#\", :rel => \"theme\", :title => \"switch theme\" } Q\n        -#syntax_pref\n          %a{:href => \"#\", :rel => \"scss\" } scss\n          %a{:href => \"#\", :rel => \"sass\" } sass\n        #version\n          Version:\n          %a.number(href=\"/CHANGELOG/\")= compass_version\n      %article= yield\n    %footer(role=\"contentinfo\")= render \"partials/footer\"\n  = content_for(@item, :javascripts)\n  = render \"partials/analytics\"\n  <script type=\"text/javascript\">SyntaxHighlighter.all();</script>\n"
  },
  {
    "path": "compass-style.org/layouts/homepage.haml",
    "content": "!!!5\n%html.no-js{:dir => \"ltr\", :lang => \"en\"}\n  %head\n    %meta{:charset => \"utf-8\"}/\n    %meta{:content => \"chrome=1\", \"http-equiv\" => \"X-UA-Compatible\"}\n    %meta(name=\"viewport\" content=\"width=810\")\n    - if ENV[\"BETA\"]\n      %meta(name=\"robots\" content=\"noindex\")\n    %link(rel=\"shortcut icon\" type=\"image/png\" href=\"/images/compass_icon.png\")\n    %title\n      #{@item[:title]} | Compass Documentation\n    %link{:charset => \"utf-8\", :href => \"/stylesheets/home.css?v=1\", :rel => \"stylesheet\", :type => \"text/css\"}\n    = render \"partials/js-core\"\n    /[if lte IE 8]\n      %link{:charset => \"utf-8\", :href => \"/stylesheets/ie.css\", :rel => \"stylesheet\", :type => \"text/css\"}\n    - if content_for(@item, :additional_css)\n      %style(type=\"text/css\")= content_for(@item, :additional_css)\n  %body{body_attributes(@item)}\n    #wrap\n      = render \"partials/main-navigation\"\n      #page\n        #docs_panel\n          #theme_pref\n            %a{:href => \"#\", :rel => \"theme\", :title => \"switch theme\" } Q\n        = yield\n      %footer(role=\"contentinfo\")= render \"partials/footer\"\n    = render \"partials/analytics\"\n"
  },
  {
    "path": "compass-style.org/layouts/main.haml",
    "content": "- render \"basic\" do\n  #wrap\n    = render \"partials/main-navigation\"\n    #sub-nav\n      - if content_for(@item, :module_nav)\n        %nav#module-nav= content_for(@item, :module_nav)\n    #page\n      #docs_panel\n        #theme_pref\n          %a{:href => \"#\", :rel => \"theme\", :title => \"switch theme\" } Q\n        #syntax_pref\n          %a{:href => \"#\", :rel => \"scss\" } scss\n          %a{:href => \"#\", :rel => \"sass\" } sass\n        #version\n          Version:\n          %a.number(href=\"/CHANGELOG/\")= compass_version\n      = yield\n    %footer(role=\"contentinfo\")= render \"partials/footer\"\n  = content_for(@item, :javascripts)\n  = render \"partials/analytics\"\n  <script type=\"text/javascript\">SyntaxHighlighter.all();</script>\n"
  },
  {
    "path": "compass-style.org/layouts/partials/ad.haml",
    "content": ".advertisement\n  <script type=\"text/javascript\">(function(){ var fusion = document.createElement('script'); fusion.src = window.location.protocol + '//adn.fusionads.net/api/1.0/ad.js?zoneid=158&rand=' + Math.floor(Math.random()*9999999); fusion.async = true; (document.head || document.getElementsByTagName('head')[0]).appendChild(fusion); })(); $(function(){ $(\".advertisement\").addClass(\"visible\")});</script>\n  #fusion_ad\n    %a.pagerankspam(href=\"http://fusionads.net\") Powered by Fusion\n"
  },
  {
    "path": "compass-style.org/layouts/partials/analytics.haml",
    "content": ":plain\n  <script type=\"text/javascript\">\n  var gaJsHost = ((\"https:\" == document.location.protocol) ? \"https://ssl.\" : \"http://www.\");\n  document.write(unescape(\"%3Cscript src='\" + gaJsHost + \"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\"));\n  </script>\n  <script type=\"text/javascript\">\n  try {\n  var pageTracker = _gat._getTracker(\"UA-6779438-1\");\n  pageTracker._trackPageview();\n  } catch(err) {}</script>\n  <script type=\"text/javascript\">\n  var disqus_shortname = 'compassbetadocs';\n  (function () {\n    var s = document.createElement('script'); s.async = true;\n    s.src = 'http://disqus.com/forums/compassbetadocs/count.js';\n    (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);\n  }());\n  </script>\n"
  },
  {
    "path": "compass-style.org/layouts/partials/breadcrumbs.haml",
    "content": "- if breadcrumbs_trail.size > 1\n  %ol#breadcrumbs\n    - breadcrumbs_trail.each_with_index do |bc, index|\n      - next unless bc\n      - klass = \"first\" if index == 0\n      - klass = \"last\" if index == breadcrumbs_trail.size - 1\n      %li{:class => klass}= link_to_unless_current((bc[:crumb] || bc[:title]), bc.reps.find { |r| r.name == :default })\n  "
  },
  {
    "path": "compass-style.org/layouts/partials/example.haml",
    "content": "- if @item[:stylesheet] && (reference = reference_item(:stylesheet => @item[:stylesheet]))\n  #reference= link_to \"Reference Documentation\", reference\n\n%h1 Demo: #{@item[:title]}\n#demo= example_html\n\n= yield if block_given?\n\n#how\n  %section#markup\n    .syntax_pref\n      %a{:href => \"#\", :rel => \"html\" } html\n      %a{:href => \"#\", :rel => \"haml\" } haml\n    .example-source\n      %pre.source-code.html= h(example_html)\n      %pre.source-code.haml= h(example_haml)\n  %section#styles\n    .syntax_pref\n      %a{:href => \"#\", :rel => \"scss\" } scss\n      %a{:href => \"#\", :rel => \"sass\" } sass\n      %a{:href => \"#\", :rel => \"css\" } css\n    .example-source\n      %pre.source-code.scss= h(example_scss)\n      %pre.source-code.sass= h(example_sass)\n      %pre.source-code.css= h(example_css)\n"
  },
  {
    "path": "compass-style.org/layouts/partials/footer.haml",
    "content": ".links\n  %ul\n    %li.media\n      <a rel=\"license\" href=\"/copyright/\" id=\"cc-logo\" class=\"m\"><img alt=\"Creative Commons License\" style=\"border-width:0;margin-top:7px\" src=\"http://i.creativecommons.org/l/by-nc-sa/3.0/us/88x31.png\" /></a>\n      .bd Christopher M.<br>Eppstein\n    %li\n      Compass is Charityware -\n      <br>\n      Help the UMDF:\n      %a(href=\"http://umdf.org/compass\") Donate Now!\n    %li\n      %strong Problem with this page?\n      <br>\n      Please <a id=\"doc-issue\" href=\"https://github.com/chriseppstein/compass/issues/new?labels=documentation\">file a bug</a>.\n\n:javascript\n  $(function() {\n    var href = $(\"#doc-issue\").attr(\"href\");\n    var body_contents = \"On Page: \";\n    body_contents += document.location.toString();\n    body_contents += \"\\n\\nI was looking for:\\n<details>\\n\\nBut instead I found:\\n<more details>\\n\"\n    href = href + \"&body=\" + encodeURIComponent(body_contents);\n    $(\"#doc-issue\").attr(\"href\", href)\n   });\n\n- if content_for(@item, :footer)\n  %hr\n  = content_for(@item, :footer)\n"
  },
  {
    "path": "compass-style.org/layouts/partials/js-core.haml",
    "content": "%script(src=\"/javascripts/modernizr-1.6.min.js\" type=\"text/javascript\")\n%script(src=\"/javascripts/jquery-1.3.2.min.js\" type=\"text/javascript\")\n%script(src=\"/javascripts/jquery.cookie.js\" type=\"text/javascript\")\n%script(src=\"/javascripts/placeholder.js\" type=\"text/javascript\" deferred)\n%script(src=\"/javascripts/site.js\" type=\"text/javascript\")\n%script(src=\"/javascripts/fixups.js\" type=\"text/javascript\" deferred)\n"
  },
  {
    "path": "compass-style.org/layouts/partials/js-highlighter.haml",
    "content": "%script(src=\"/javascripts/shCore.js\" type=\"text/javascript\" deferred)\n%script(src=\"/javascripts/shBrushSass.js\" type=\"text/javascript\" deferred)\n%script(src=\"/javascripts/shBrushCss.js\" type=\"text/javascript\" deferred)\n%script(src=\"/javascripts/shBrushXml.js\" type=\"text/javascript\" deferred)\n%script(src=\"/javascripts/shBrushPlain.js\" type=\"text/javascript\" deferred)\n"
  },
  {
    "path": "compass-style.org/layouts/partials/main-navigation.haml",
    "content": "%header#banner{:role => \"banner\"}\n  %form#search-docs{:action => \"/search/\", :method => \"GET\"}\n    %input#search{:name => \"q\", :type => \"text\", :value => \"\", :placeholder => \"Search the docs\"}\n\n  %nav#main-nav{:role => \"navigation\"}\n    %ul\n      %li\n        %a{:href => \"/install/\", :rel=> \"install\"} Install\n      %li\n        %a{:href => \"/help/\", :rel=> \"help\"} Help &amp; Documentation\n      %li\n        %a{:href => \"/reference/compass/\", :rel => \"documentation\"} Code Reference\n      %li\n        %a{:href => \"/blog/\", :rel=> \"blog\"} Blog\n      %li\n        %a{:href => \"/get-involved/\", :rel=> \"get-involved\"} Contribute\n"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/const_table.haml",
    "content": "- constants.each do |constant_def|\n  - const_id = constant_def.name.gsub(/_/,'-')\n  %h3.constant{:id=>\"const-#{const_id}\"}\n    %a.permalink{:href => \"#const-#{const_id}\"}= \"$\"+constant_def.name\n    %code= constant_def.expr.to_sass(:format => :html)\n  - if constant_def.comment && constant_def.comment.strip.size > 0\n    %p= format_doc constant_def.comment\n"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/constants.haml",
    "content": "- if (constant_defs = constants(@item)).any?\n  - variables = constant_defs.select{|d| d.guarded }\n  - constants = constant_defs.reject{|d| d.guarded }\n  - if variables.any?\n    %h2\n      Configurable Variables\n      %a(href=\"/help/tutorials/configurable-variables/\" class=\"help\") help\n    = render \"partials/reference/const_table\", :constants => variables\n\n  - if constants.any?\n    %h2 Constants\n    = render \"partials/reference/const_table\", :constants => constants"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/examples.haml",
    "content": "- if (examples = examples(@item)).any?\n  %h2 Examples\n  %dl.examples\n    - examples.each do |example|\n      %dt= link_to example.item[:title], example\n      - if example.item[:description]\n        %dd= example.item[:description]\n"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/functions.haml",
    "content": "- if (functions = functions(@item)).any?\n  %h2 Functions\n\n  - functions.each do |function|\n    %a{:href=>\"#function-#{function.name}-source\", :rel => \"view source\"} view source\n    %h3.function{:id=>\"function-#{function.name}\"}\n      %a.permalink{:href => \"#function-#{function.name}\"}= function.sass_signature(:html)\n    .function-source{:id=>\"function-#{function.name}-source\"}\n      %pre.source-code.sass= function.to_sass\n      %pre.source-code.scss= function.to_scss\n\n    .source-documentation\n      = format_doc(function.comment)\n      - if (examples = examples(@item, function)).any?\n        %dl.examples\n          - examples.each do |example|\n            %dt= link_to example.item[:title], example\n            - if example.item[:description]\n              %dd= example.item[:description]\n"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/import-few.haml",
    "content": "- if path = reference_path(:stylesheet => import)\n  - imported_item = reference_item(:stylesheet => import)\n  <a href=\"#{path}\" title=\"@import #{import}\">#{imported_item[:crumb] || imported_item[:title]}</a>#{\",\" unless @last}\n\n"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/import.haml",
    "content": "- if path = reference_path(:stylesheet => import)\n  - imported_item = reference_item(:stylesheet => import)\n  %a{:href => path, :title => \"@import #{import}\"}= imported_item[:crumb] || imported_item[:title]\n  - if imported_item[:meta_description]\n    &ndash; #{imported_item[:meta_description]}\n- else\n  = import\n"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/imports.haml",
    "content": "- if (imported_libs = imports(@item)).any?\n  - if imported_libs.size == 1000\n    %p\n      Automatically imports:\n      - imported_libs.each do |import|\n        = render \"partials/reference/import-few\", :import => import, :last => import == imported_libs.last\n  - else\n    %h2 Imports\n    %ol\n      - imported_libs.each do |import|\n        %li= render \"partials/reference/import\", :import => import\n\n"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/mixins.haml",
    "content": "- if (mixin_defs = mixins(@item)).any?\n  %h2 Mixins\n\n  - mixin_defs.each do |mixin|\n    %a{:href=>\"#mixin-#{mixin.name}-source\", :rel => \"view source\"} view source\n    %h3.mixin{:id=>\"mixin-#{mixin.name}\"}\n      %a.permalink{:href => \"#mixin-#{mixin.name}\"}= mixin.sass_signature(:none, :html)\n    .mixin-source{:id=>\"mixin-#{mixin.name}-source\"}\n      %pre.source-code.sass= mixin.to_sass\n      %pre.source-code.scss= mixin.to_scss\n\n    .source-documentation\n      = format_doc(mixin.comment)\n      - if (examples = examples(@item, mixin)).any?\n        %dl.examples\n          - examples.each do |example|\n            %dt= link_to example.item[:title], example\n            - if example.item[:description]\n              %dd= example.item[:description]\n"
  },
  {
    "path": "compass-style.org/layouts/partials/reference/selectors.haml",
    "content": "- if (sels = selectors(@item)).any?\n  %h2 Selectors\n\n  - sels.each do |selector|\n    %a{:href=>\"#selector-#{selector.identifier}-source\", :rel => \"view source\"} view source\n    %h3.selector{:id=>\"selector-#{selector.identifier}\"}\n      %a.permalink{:href => \"#selector-#{selector.identifier}\"}= selector.name\n    .selector-source{:id=>\"selector-#{selector.identifier}-source\"}\n      %pre.source-code.sass= selector.to_sass\n      %pre.source-code.scss= selector.to_scss\n\n    .source-documentation\n      = format_doc(selector.comment)\n"
  },
  {
    "path": "compass-style.org/layouts/partials/sidebar/container.haml",
    "content": "%ul= @contents"
  },
  {
    "path": "compass-style.org/layouts/partials/sidebar/heading.haml",
    "content": "%li{:class => (\"selected\" if @selected)}\n  - haml_tag(@heading) do\n    %a{:href => default_path(@current_item), :class => (\"selected\" if @selected)}= @crumb\n"
  },
  {
    "path": "compass-style.org/layouts/partials/sidebar/item.haml",
    "content": "- classes = [(\"selected\" if @selected), (\"deprecated\" if @current_item[:deprecated]), (\"beta\" if @current_item[:beta])].compact.join(\" \")\n%li{:class => classes}\n  %a{:href => default_path(@current_item), :class => classes}\n    %span= @crumb\n"
  },
  {
    "path": "compass-style.org/layouts/partials/sidebar.haml",
    "content": "%nav#local-nav\n  - sidebar_item = reference_item(:stylesheet => @item[:nav_stylesheet]) if @item[:nav_stylesheet]\n  - sidebar_item ||= sidebar_item(@item)\n  - sidebar_item ||= reference_item(:stylesheet => @default_stylesheet)\n  %ul= item_tree(sidebar_item, :depth => 1, :omit_self => get_var(:omit_self){true}, :heading_level => get_var(:heading_level){1}, :heading_depth => get_var(:heading_depth){10})\n\n\n= render 'partials/ad'\n"
  },
  {
    "path": "compass-style.org/layouts/post.haml",
    "content": "- render \"blog\" do\n  %h1= @item[:title]\n  - author = author(@item[:author])\n  %h2\n    By\n    - if author[\"byline_link\"]\n      %a{:href=>author[\"byline_link\"]}= author[\"fullname\"]\n    - else\n      = author[\"fullname\"]\n  = yield\n"
  },
  {
    "path": "compass-style.org/layouts/redirect.haml",
    "content": "!!!5\n- # This template redirects.\n%html{:dir => \"ltr\", :lang => \"en\"}\n  %head\n    %meta{:\"http-equiv\" => \"refresh\", :content => \"0;#{@item[:redirect]}\"}/"
  },
  {
    "path": "compass-style.org/layouts/reference.haml",
    "content": "- gh_url = \"http://github.com/chriseppstein/compass/blob/stable/frameworks/\"\n- gh_url << \"#{item[:framework]}/stylesheets/#{item[:stylesheet]}\"\n%a{:href => gh_url, :rel=>\"github-source\", :title=>\"view source for this module on github\"} Source on Github\n\n%h1= item[:title]\n\n- if item[:beta]\n  %p.beta\n    This module is fairly new and is currently in BETA (&beta;).\n\n= yield if block_given?\n\n%p\n  This file can be imported using:\n  %code @import \"#{departialize(item[:stylesheet][0..-6])}\"\n\n= render \"partials/reference/examples\"\n\n= render \"partials/reference/imports\"\n\n= render \"partials/reference/constants\"\n\n= render \"partials/reference/functions\"\n\n= render \"partials/reference/mixins\"\n\n= render \"partials/reference/selectors\"\n"
  },
  {
    "path": "compass-style.org/layouts/simple_core.haml",
    "content": "- render 'main' do\n  - content_for :module_nav do\n    %ul= item_tree(reference_item(:stylesheet => \"compass.scss\"), :depth => 1, :omit_self => true, :headings => false)\n  %aside(role=\"sidebar\")\n    %nav#local-nav\n      = item_tree(reference_item(:stylesheet => (@item[:nav_stylesheet] || @default_stylesheet)), :depth => 2, :omit_self => get_var(:omit_self){false}, :heading_level => get_var(:heading_level){1})\n  %article= yield"
  },
  {
    "path": "compass-style.org/layouts/site.haml",
    "content": "!!!5\n%html.no-js{:dir => \"ltr\", :lang => \"en\"}\n  %head\n    %meta{:charset => \"utf-8\"}/\n    %meta{:content => \"chrome=1\", \"http-equiv\" => \"X-UA-Compatible\"}\n    %meta(name=\"viewport\" content=\"width=780\")\n    - if ENV[\"BETA\"]\n      %meta(name=\"robots\" content=\"noindex\")\n    %link(rel=\"shortcut icon\" type=\"image/png\" href=\"/images/compass_icon.png\")\n    %title\n      #{@item[:title]} | Compass Documentation\n    %link{:charset => \"utf-8\", :href => \"/stylesheets/screen.css\", :rel => \"stylesheet\", :type => \"text/css\"}\n    = render \"partials/js-core\"\n  %body.site{body_attributes(@item)}\n    #wrap\n      = render \"partials/main-navigation\"\n      #sub-nav\n        %nav#module-nav\n          %ul\n            %li.getting-started\n              %a{:href => \"/help/\", :rel => \"getting started\"} <span>Getting Started</span>\n            %li.tutorials\n              %a{:href => \"/help/tutorials/\", :rel => \"getting started\"} <span>Tutorials</span>\n            %li.examples\n              %a{:href => \"/examples/\", :rel => \"code examples\"} <span>Examples</span>\n            %li.documentation\n              %a{:href => \"/help/documentation/\"} <span>Documentation</span>\n            %li.support\n              %a{:href => \"http://groups.google.com/group/compass-users\", :rel => \"support\"} <span>Support</span>\n            %li\n              %a{:href => \"http://github.com/chriseppstein/compass/issues\", :rel => \"bugs\"} <span>Bugs</span>\n      #page\n        #docs_panel\n          #theme_pref\n            %a{:href => \"#\", :rel => \"theme\", :title => \"switch theme\" } Q\n          #version\n            Version:\n            %a.number(href=\"/CHANGELOG/\")= compass_version\n        = yield\n      %footer(role=\"contentinfo\")= render \"partials/footer\"\n    = render \"partials/analytics\"\n"
  },
  {
    "path": "compass-style.org/layouts/tutorial.haml",
    "content": "- render 'site' do\n  %aside(role=\"sidebar\")\n    %nav#local-nav\n      %ul= item_tree(tutorial_item(:root), :depth => 2, :omit_self => false, :heading_level => 2)\n  %article= yield\n"
  },
  {
    "path": "compass-style.org/lib/blog.rb",
    "content": "POST_NAME = %r{^/posts/(\\d{4})-(\\d{2})-(\\d{2})-(.*)/$}\nrequire 'time'\nrequire 'yaml'\n\ndef blog_posts_in_order\n  @blog_posts_in_order ||= @items.select {|i| i.identifier =~ %r{/posts} }.sort_by {|i| i.identifier }\nend\n\ndef previous_post(item = @item)\n  current_index = blog_posts_in_order.index(item)\n  if current_index && current_index > 0\n    blog_posts_in_order[current_index - 1]\n  end\nend\n\ndef next_post(item = @item)\n  current_index = blog_posts_in_order.index(item)\n  if current_index && current_index < blog_posts_in_order.size - 1\n    blog_posts_in_order[current_index + 1]\n  end\nend\n\ndef blog_date(item = @item)\n  if item.identifier =~ POST_NAME\n    Time.new($1.to_i, $2.to_i, $3.to_i)\n  end\nend\n\ndef authors\n  @site.cached(\"authors\") do\n    YAML.load_file(\"#{File.dirname(__FILE__)}/../authors.yml\")\n  end\nend\n\ndef author(author_id)\n  authors[author_id]\nend\n"
  },
  {
    "path": "compass-style.org/lib/data_sources/asset_data_source.rb",
    "content": "module Nanoc3::DataSources\n\n  # https://github.com/cboone/nanoc-static-data-source\n  # original author appears to be Denis Defreyne\n\n  class AssetDataSource < Nanoc3::DataSource\n    identifier :filesystem_assets\n\n    def items\n      # Get prefix\n      prefix = config[:prefix] || 'assets'\n\n      # Get all files under prefix dir\n      filenames = Dir[prefix + '/**/*'].select { |f| File.file?(f) }\n\n      # Convert filenames to items\n      filenames.map do |filename|\n        attributes = {\n          :extension => File.extname(filename)[1..-1],\n          :filename  => filename,\n        }\n        identifier = filename[(prefix.length+1)..-1] + '/'\n\n        mtime      = File.mtime(filename)\n        checksum   = checksum_for(filename)\n\n        Nanoc3::Item.new(\n          filename,\n          attributes,\n          identifier,\n          :binary => true, :mtime => mtime, :checksum => checksum\n        )\n      end\n    end\n\n  private\n\n    # Returns a checksum of the given filenames\n    # TODO un-duplicate this somewhere\n    def checksum_for(*filenames)\n      filenames.flatten.map do |filename|\n        digest = Digest::SHA1.new\n        File.open(filename, 'r') do |io|\n          until io.eof\n            data = io.readpartial(2**10)\n            digest.update(data)\n          end\n        end\n        digest.hexdigest\n      end.join('-')\n    end\n  end\n\nend\n"
  },
  {
    "path": "compass-style.org/lib/data_sources/better_combined_datasource.rb",
    "content": "# This is basically the default filesystem_combined datasource\n# But items without a metadata header don't get an error.\nclass BetterFilesystemCombined < Nanoc3::DataSources::FilesystemCombined\n  identifier :better_combined\n\n  def parse_file(filename, kind)\n    contents = File.read(filename)\n    if contents =~ /^(-{5}|-{3})/\n      # Split file\n      pieces = contents.split(/^(-{5}|-{3})/).compact\n      if pieces.size < 4\n        raise RuntimeError.new(\n          \"The file '#{filename}' does not seem to be a nanoc #{kind}\"\n        )\n      end\n\n      # Parse\n      meta    = YAML.load(pieces[2]) || {}\n      content = pieces[4..-1].join.strip\n\n      [ meta, content ]\n    else\n      [{}, contents]\n    end\n  end\n\nend\n  "
  },
  {
    "path": "compass-style.org/lib/data_sources/core_extensions.rb",
    "content": "class Object\n  def try(method, *args, &block)\n    send(method, *args, &block)\n  end\nend\n\nclass NilClass\n  def try(*args)\n    nil\n  end\nend\n"
  },
  {
    "path": "compass-style.org/lib/data_sources/nanoc_monkey_patches.rb",
    "content": "class Nanoc3::Site\n  def cached(key)\n    if cached_stuff.has_key?(key)\n      cached_stuff[key]\n    else\n      cached_stuff[key]= yield\n    end\n  end\n  def cached_stuff\n    @cached_stuff ||= {}\n  end\nend\n"
  },
  {
    "path": "compass-style.org/lib/data_sources/syntax_highter.rb",
    "content": "require 'nokogiri'\nrequire 'coderay'\nclass SyntaxHighlighterFilter < Nanoc3::Filter\n  identifier :highlight\n\n  def highlight(code, type)\n    hl_map = Hash.new(:coderay)\n    hl_map[:sass] = :pygmentize\n    send(hl_map[type], code, type)\n  end\n\n  def pygmentize(code, type)\n    # -O linenos=table\n    IO.popen(\"pygmentize -l #{type} -f html -O encoding=utf-8\", \"r+\") do |io|\n      io.write(code)\n      io.close_write\n      return io.read\n    end\n  end\n\n  def coderay(code, type)\n    # :line_numbers => :table,\n    type = :css if type == :scss\n    CodeRay.scan(code, type).div(:css => :class)\n  end\n\n  def run(content, params={})\n    doc = Nokogiri::HTML.fragment(content)\n    [:css, :sass, :scss, :html, :haml].each do |format|\n      doc.css(\"pre.source-code.#{format}, code.#{format}\").each do |el|\n        el.set_attribute(\"class\", \"brush: #{format} \"+el.attribute(\"class\").value)\n      end\n    end\n    doc.to_s\n  end\n\nend\n"
  },
  {
    "path": "compass-style.org/lib/default.rb",
    "content": "# All files in the 'lib' directory will be loaded\n# before nanoc starts compiling.\nrequire 'erb'\nrequire 'active_support/inflector'\ninclude Nanoc3::Helpers::LinkTo\ninclude Nanoc3::Helpers::Capturing\ninclude Nanoc3::Helpers::Rendering\ninclude Nanoc3::Helpers::Breadcrumbs\ninclude Nanoc3::Helpers::XMLSitemap\n\ndef body_class(item)\n  classes = [\"\"]\n  classes += item[:classnames] || []\n  classes << \"demo\" if item.identifier =~ /^\\/examples/\n  classes.join(\" \")\nend\n\ndef body_id(item)\n  if item[:body_id]\n    item[:body_id]\n  elsif id = item.identifier.chop[1..-1]\n    id.gsub(/\\/|_/, \"-\")\n  end\nend\n\ndef body_attributes(item)\n  {\n    :id => body_id(item),\n    :class => body_class(item)\n  }\nend\n\nmodule Enumerable\n  def sorted_and_grouped_by_name\n    sort_by{|i| yield(i)}.group_by{|i| yield(i).sub(/^[^\\w]/,\"\")[0..0].upcase}\n  end\nend\n\nclass Recycler\n  attr_accessor :values\n  attr_accessor :index\n  def initialize *values\n    self.values = values\n    self.index = 0\n  end\n  def next\n    values[index]\n  ensure\n    self.index += 1\n    self.index = 0 if self.index >= self.values.size\n  end\n  def reset!\n    self.index = 0\n  end\nend\n\ndef cycle(*args)\n  yield Recycler.new *args\nend\n\ndef default_path(item)\n  item.reps.find{|r| r.name == :default}.path\nend\n\ndef find(identifier)\n  @items.find{|i| i.identifier == identifier}\nend\n\ndef get_var(instance_var)\n  instance_variable_defined?(\"@#{instance_var}\") ? instance_variable_get(\"@#{instance_var}\") : yield\nend\n\ndef sidebar_item(item)\n  if item.nil?\n    nil\n  elsif item[:sidebar]\n    item\n  else\n    sidebar_item(item.parent)\n  end\nend\n\ndef sidebar_stylesheet(item)\n  i = sidebar_item(item)\n  i[:stylesheet] if i\nend\n  \n\ndef item_tree(item, options = {})\n  crumb = item[:crumb] || item[:title]\n  options[:heading_level] ||= 1 if options.fetch(:headings, true)\n  child_html = \"\"\n  if options.fetch(:depth,1) > 0\n    child_opts = options.dup\n    child_opts[:depth] -= 1 if child_opts.has_key?(:depth)\n    child_opts[:heading_depth] -= 1 if child_opts.has_key?(:heading_depth)\n    child_opts[:heading_level] += 1 if child_opts[:heading_level]\n    child_opts.delete(:omit_self)\n    item.children.sort_by{|c| c[:crumb] || c[:title]}.each do |child|\n      next if child[:navigable] == false\n      child_html << item_tree(child, child_opts)\n    end\n  else\n    options.delete(:heading_level)\n  end\n  child_html = render(\"partials/sidebar/container\", :contents => child_html) unless child_html.size == 0\n  css_class = nil\n  contents = unless options[:omit_self]\n    item_opts = {\n      :current_item => item,\n      :selected => !!@item.identifier[item.identifier],\n      :crumb => item[:crumb] || item[:title]\n    }\n    if options[:heading_level] && (options.fetch(:heading_depth, 1) > 0)\n      render(\"partials/sidebar/heading\",\n        item_opts.merge(:heading => \"h#{options[:heading_level]}\")\n      )\n    else\n      render(\"partials/sidebar/item\", item_opts)\n    end\n  end\n  %Q{#{contents}#{child_html}}\nend\n\ndef tutorial_item(path)\n  path = \"\" if path == :root\n  @items.detect do |i|\n    i.identifier == \"/help/tutorials/#{path}\"\n  end\nend\n\ndef documentation_item(path)\n  path = \"\" if path == :root\n  @items.detect do |i|\n    i.identifier == \"/help/documentation/#{path}\"\n  end\nend\n\n\ndef compass_version\n  v = Compass.version\n  \"#{v[:major]}.#{v[:minor]}#{\".\"+v[:state] if v[:state]}.#{v[:build] || v[:patch]}\"\nend\n\ndef long_compass_version\n  require 'compass/commands'\n  Compass::Commands::PrintVersion.long_output_string\nend\n\n\ndef sprite_tutorial_links(index=false)\n  string = <<-ERB\n<% unless index %>\n  * [Sprite Tutorial Index](/help/tutorials/spriting/)\n<% end %>\n<% Dir[\"./content/help/tutorials/spriting/**/*.markdown\"].sort.each do |file| %>\n  * [<%= File.basename(file, '.markdown').gsub('-', ' ').titleize %>](/help/tutorials/spriting/<%= File.basename(file, '.markdown') %>)\n<% end %>\n  ERB\n  ::ERB.new(string).result(binding)\nend\n"
  },
  {
    "path": "compass-style.org/lib/examples.rb",
    "content": "def example_haml\n  markup_item = @item.children.detect{|child| child.identifier =~ /markup/}\n  markup_item.reps.find { |r| r.name == :default }.content_at_snapshot(:raw)\nend\n\ndef example_html\n  Haml::Engine.new(example_haml).render\nend\n\ndef example_scss\n  markup_item = @item.children.detect{|child| child.identifier =~ /stylesheet/}\n  markup_item.reps.find { |r| r.name == :default }.content_at_snapshot(:raw)\nend\n\ndef example_sass\n  Sass::Engine.new(example_scss, {:syntax => :scss}).to_tree.to_sass\nend\n\ndef example_css\n  Sass::Engine.new(example_sass, Compass.sass_engine_options.merge(:line_comments => false)).render\nend"
  },
  {
    "path": "compass-style.org/lib/search.rb",
    "content": "require 'json'\n\nSTOP_WORDS = %w{\n  a about above across after afterwards again against all almost\n  alone along already also although always am among amongst amoungst\n  amount an and another any anyhow anyone anything anyway anywhere\n  are around as at back be became because become becomes becoming\n  been before beforehand behind being below beside besides between\n  beyond bill both bottom but by call can cannot cant co computer con\n  could couldnt cry de describe detail do done down due during each\n  eg eight either eleven else elsewhere empty enough etc even ever\n  every everyone everything everywhere except few fifteen fify fill\n  find fire first five for former formerly forty found four from\n  front full further get give go had has hasnt have he hence her here\n  hereafter hereby herein hereupon hers herself him himself his how\n  however hundred i ie if in inc indeed interest into is it its\n  itself keep last latter latterly least less ltd made many may me\n  meanwhile might mill mine more moreover most mostly move much must\n  my myself name namely neither never nevertheless next nine no\n  nobody none noone nor not nothing now nowhere of off often on once\n  one only onto or other others otherwise our ours ourselves out over\n  own part per perhaps please put rather re same see seem seemed\n  seeming seems serious several she should show side since sincere\n  six sixty so some somehow someone something sometime sometimes\n  somewhere still such system take ten than that the their them\n  themselves then thence there thereafter thereby therefore therein\n  thereupon these they thick thin third this those though three\n  through throughout thru thus to together too top toward towards\n  twelve twenty two un under until up upon us very via was we well\n  were what whatever when whence whenever where whereafter whereas\n  whereby wherein whereupon wherever whether which while whither who\n  whoever whole whom whose why will with within without would yet you\n  your yours yourself yourselves\n} unless defined?(STOP_WORDS)\n\ndef search_terms_for(item)\n  if item.identifier =~ /^\\/(reference|tutorials)/\n    content = item.rep_named(:default).compiled_content\n    doc = Nokogiri::HTML(content)\n    full_text = doc.css(\"p, h1, h2, h3, h4, h5, h6\").map{|el| el.inner_text}.join(\" \")\n    \"#{item[:title]} #{item[:meta_description]} #{full_text}\".gsub(/[\\W\\s_]+/m,' ').downcase.split(/\\s+/).uniq - STOP_WORDS\n  else\n    []\n  end\nend\n\ndef search_index\n  id = 0;\n  idx = {\n    \"approximate\" => {},\n    \"terms\" => {},\n    \"items\" => {}\n  }\n  @items.each do |item|\n    search_terms_for(item).each do |term|\n      idx[\"terms\"][term] ||= []\n      idx[\"terms\"][term] << id\n      (0...term.length).each do |c|\n        subterm = term[0...c]\n        # puts \"Indexing: #{subterm}\"\n        idx[\"approximate\"][subterm] ||= []\n        unless idx[\"approximate\"][subterm].include?(id)\n          idx[\"approximate\"][subterm] << id\n        end\n      end\n      # puts \"Indexed: #{term}\"\n    end\n    idx[\"items\"][id] = {\n      \"url\" => \"#{item.identifier}\",\n      \"title\" => item[:title],\n      \"crumb\" => item[:crumb]\n    }\n    id += 1\n  end\n  idx\nend\n"
  },
  {
    "path": "compass-style.org/lib/stylesheets/sass_extensions.rb",
    "content": "require 'sass'\nmodule Sass\n  module Tree\n    class RuleNode\n      attr_accessor :comment unless method_defined? :comment\n      def identifier\n        @identifier ||= begin\n                          id = name.gsub(/[^a-zA-Z]+/,\"-\").downcase\n                          id = id[1..-1] if id[0..0] == \"-\"\n                          id = id[0..-2] if id[-1..-1] == \"-\"\n                          id\n                        end\n      end\n      def name\n        @name ||= rule.map{|part| Sass::Script::Node === part ? \"\\#{#{part.to_sass}}\" : part}.join('')\n      end\n    end\n    class VariableNode < Node\n      attr_accessor :name unless method_defined? :name\n      attr_accessor :expr unless method_defined? :expr\n      attr_accessor :guarded unless method_defined? :guarded\n      attr_accessor :comment unless method_defined? :comment\n    end\n    class DebugNode < Node\n      def to_sass\n        \"\"\n      end\n    end\n    class MixinNode < Node\n      attr_accessor :name unless method_defined? :name\n      attr_accessor :args unless method_defined? :args\n    end\n    class VariableNode < Node\n      attr_accessor :comment unless method_defined? :comment\n    end\n    module HasSignature\n      def sass_signature(format = :text)\n        \"#{name}#{arglist_to_sass(format)}\"\n      end\n\n      private\n      def arglist_to_sass(format = :text)\n        if args && args.any?\n          \"(#{args.map{|a| arg_to_sass(a, format)}.join(\", \")})\"\n        else\n          \"\"\n        end\n      end\n      def arg_to_sass(arg, format = :text)\n        name, default_value = arg\n        sass_str = \"\"\n        if format == :html\n          ddv = %Q{ data-default-value=\"#{h(default_value.to_sass)}\"} if default_value\n          sass_str = %Q{<span class=\"arg\"#{ddv}>#{name.to_sass}</span>}\n        else\n          sass_str = \"#{name.to_sass}\"\n          if default_value\n            sass_str << \" = \"\n            sass_str << default_value.to_sass\n          end\n        end\n        sass_str\n      end\n    end\n    class MixinDefNode < Node\n      attr_accessor :name unless method_defined? :name\n      attr_accessor :args unless method_defined? :args\n      attr_accessor :comment unless method_defined? :comment\n      unless included_modules.include?(HasSignature)\n        include HasSignature\n        alias sass_signature_without_prefix sass_signature\n        def sass_signature(mode = :definition, format = :text)\n          prefix = case mode\n          when :definition\n            \"=\"\n          when :include\n            \"+\"\n          end\n          \"#{prefix}#{sass_signature_without_prefix(format)}\"\n        end\n      end\n    end\n    class FunctionNode < Node\n      attr_accessor :name unless method_defined? :name\n      attr_accessor :args unless method_defined? :args\n      attr_accessor :comment unless method_defined? :comment\n      include HasSignature unless included_modules.include?(HasSignature)\n    end\n    class ImportNode < RootNode\n      attr_accessor :imported_filename unless method_defined? :imported_filename\n    end\n    class CommentNode < Node\n      unless defined?(PRE_COMMENT)\n        PRE_COMMENT = %r{(^ */*\\**(\\s*\\|)?( |$))}\n      end\n      unless defined?(POST_COMMENT)\n        POST_COMMENT = %r{ *\\*/$}\n      end\n      def self.clean(docstring)\n        docstring.gsub(/@doc off(.*?)@doc on/m, '')\n      end\n      def docstring\n        v = value\n        v = v.join(\"\\n\") if v.respond_to?(:join)\n        v.gsub(PRE_COMMENT, '').gsub(POST_COMMENT, '')\n      end\n      def doc\n        if value == \"@doc off\"\n          false\n        elsif value == \"@doc on\"\n          true\n        end\n      end\n    end\n  end\n  module Script\n    class Color < Literal\n      def to_sass(options = {})\n        if options[:format] == :html\n          %Q{<span class=\"color\">#{to_s}</span>}\n        else\n          to_s\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "compass-style.org/lib/stylesheets.rb",
    "content": "require 'rdiscount'\n\ndef stylesheets_dir(framework)\n  Compass::Frameworks[framework].stylesheets_directory\nend\n\ndef tree_key(item)\n  \"tree/\"+[item[:framework], item[:stylesheet]].join(\"/\")\nend\n\ndef tree(item)\n  @site.cached(tree_key(item)) do\n    file = File.join(stylesheets_dir(item[:framework]), item[:stylesheet])\n    contents = File.read(file)\n    syntax = item[:stylesheet] =~ /\\.scss$/ ? :scss : :sass\n    Sass::Engine.new(contents, :syntax => syntax).send :to_tree\n  end\nend\n\ndef imports(item)\n  sass_tree = tree(item)\n  imports = []\n  sass_tree.children.each do |child|\n    if child.is_a?(Sass::Tree::ImportNode)\n      imports << child.imported_filename\n    end\n  end\n  imports.sort\nend\n\ndef reference_item(options)\n  stylesheet = options[:stylesheet]\n  path = stylesheet_path(stylesheet)\n  if path\n    @site.cached(\"reference/item/#{path}\") do\n      @items.detect do |i|\n        if i.identifier =~ /^\\/reference/ && i[:stylesheet]\n          i[:stylesheet] == path\n        end\n      end\n    end\n  end\nend\n\ndef departialize(path)\n  path.gsub(%r{(\\b|/)_}){|m| m.size > 1 ? \"/\" : \"\"}\nend\n\ndef reference_path(options)\n  if item = reference_item(options)\n    rep = item.reps.find { |r| r.name == :default }\n    rep.path\n  end\nend\n\ndef import_paths\n  paths = []\n  if @item[:stylesheet]\n    paths << [File.join(Compass::Frameworks[@item[:framework]].stylesheets_directory,\n                        File.dirname(@item[:stylesheet])),\n              @item[:stylesheet][\"/\"] ? File.dirname(@item[:stylesheet]) : \"\"]\n  end\n\n  paths += Compass::Frameworks::ALL.inject([]) {|m, f| m << f.stylesheets_directory}.map!{|p|[p, '']}\n  paths\nend\n\ndef stylesheet_path(ss)\n  possible_names = possible_filenames_for_stylesheet(ss)\n  import_paths.each do |import_path|\n    possible_names.each do |filename|\n      full_path = File.join(import_path.first, filename)\n      if File.exist?(full_path)\n        return \"#{import_path.last}#{\"/\" if import_path.last && import_path.last.length > 0}#{filename}\"\n      end\n    end\n  end\n  nil\nend\n\ndef possible_filenames_for_stylesheet(ss)\n  ext = File.extname(ss)\n  path = File.dirname(ss)\n  path = path == \".\" ? \"\" : \"#{path}/\"\n  base = File.basename(ss)[0..-(ext.size+1)]\n  extensions = if ext.size > 0\n    [ext]\n  else\n    [\".scss\", \".sass\"]\n  end\n  basenames = [\"_#{base}\", base]\n  filenames = []\n  basenames.each do |basename|\n    extensions.each do |extension|\n      filenames << \"#{path}#{basename}#{extension}\"\n    end\n  end\n  filenames\nend\n\ndef mixins(item)\n  sass_tree = tree(item)\n  mixins = []\n  comment = nil\n  sass_tree.children.each do |child|\n    if child.is_a?(Sass::Tree::MixinDefNode)\n      child.comment = comment && Sass::Tree::CommentNode.clean(comment)\n      comment = nil\n      mixins << child\n    elsif child.is_a?(Sass::Tree::CommentNode)\n      comment ||= \"\"\n      comment << \"\\n\" unless comment.empty?\n      comment << child.docstring\n    else\n      comment = nil\n    end\n  end\n  mixins.reject{|m| m.comment =~ /@private/}\nend\n\ndef selectors(item)\n  sass_tree = tree(item)\n  # Visitors::CheckNesting.visit(sass_tree)\n  # sass_tree = Visitors::Perform.visit(sass_tree)\n  selectors = []\n  comment = nil\n  sass_tree.children.each do |child|\n    case child\n    when Sass::Tree::RuleNode\n      child.comment = comment && Sass::Tree::CommentNode.clean(comment)\n      comment = nil\n      selectors << child\n    when Sass::Tree::CommentNode\n      comment ||= \"\"\n      comment << \"\\n\" unless comment.empty?\n      comment << child.docstring\n    else\n      comment = nil\n    end\n  end\n  selectors.reject!{|s| s.comment =~ /@private/}\n  # selectors.select!{|s| s.comment.strip.size > 0} # this would cause only documented selectors to be output\n  selectors\nend\n\ndef functions(item)\n  sass_tree = tree(item)\n  functions = []\n  comment = nil\n  sass_tree.children.each do |child|\n    if child.is_a?(Sass::Tree::FunctionNode)\n      child.comment = comment && Sass::Tree::CommentNode.clean(comment)\n      comment = nil\n      functions << child\n    elsif child.is_a?(Sass::Tree::CommentNode)\n      comment ||= \"\"\n      comment << \"\\n\" unless comment.empty?\n      comment << child.docstring\n    else\n      comment = nil\n    end\n  end\n  functions.reject{|m| m.comment =~ /@private/}\nend\n\ndef constants(item)\n  sass_tree = tree(item)\n  constants = []\n  comment = nil\n  sass_tree.children.each do |child|\n    if child.is_a?(Sass::Tree::VariableNode)\n      child.comment = comment && Sass::Tree::CommentNode.clean(comment)\n      comment = nil\n      child.name.tr!(\"_\",'-')\n      constants << child\n    elsif child.is_a?(Sass::Tree::CommentNode)\n      comment ||= \"\"\n      comment << \"\\n\" unless comment.empty?\n      comment << child.docstring\n    else\n      comment = nil\n    end\n  end\n  constants.reject{|c| c.comment =~ /@private/}\nend\n\ndef all_constants\n  @items.inject([]) do |variables, item|\n    next variables unless item.identifier =~ %r{/reference}\n    next variables unless item[:stylesheet]\n    variables += constants(item).map{|v| [item, v] }\n  end\nend\n\ndef all_mixins\n  @items.inject([]) do |all_mixins, item|\n    next all_mixins unless item.identifier =~ %r{/reference}\n    next all_mixins unless item[:stylesheet]\n    all_mixins += mixins(item).map{|m| [item, m] }\n  end\nend\n\ndef all_functions\n  @items.inject([]) do |all_functions, item|\n    next all_functions unless item.identifier =~ %r{/reference}\n    next all_functions unless item[:stylesheet]\n    all_functions += functions(item).map{|f| [item, f] }\n  end\nend\n\n# Sass Only Functions from 3.1.10 (Brainy Betty)\n# Not as elegant, but does the trick.\ndef sass_functions\n  [:rgb, :rgba, :hsl, :hsla, :red, :green, :blue, :hue, :saturation, :lightness, :alpha, :opacity, :opacify, :fade_in, :transparentize, :fade_out, :lighten, :darken, :saturate, :desaturate, :adjust_hue, :adjust_color, :scale_color, :change_color, :mix, :grayscale, :complement, :invert, :unquote, :quote, :type_of, :unit, :unitless, :comparable, :percentage, :round, :ceil, :floor, :abs, :length, :nth, :join, :append, :zip, :index, :if]\nend\n\ndef example_items\n  @site.cached(\"examples\") do\n    @items.select do |i|\n      i.identifier =~ /^\\/examples/ && i[:example]\n    end\n  end\nend\n\ndef item_for_function_name(function_name)\n  @items.detect do |item|\n    (item.identifier =~ %r{helpers}) && item[:documented_functions] && item[:documented_functions].include?(function_name)\n  end\nend\n\ndef examples_for_item(item)\n  @site.cached(\"examples/#{item.identifier}\") do\n    example_items.select do |i|\n      i[:framework] == item[:framework] &&\n      i[:stylesheet] == item[:stylesheet]\n    end\n  end\nend\n\ndef examples(item, mixin = nil)\n  examples = examples_for_item(item)\n  if mixin\n    examples = examples.select {|i| i[:mixin] == mixin.name }\n  else\n    examples = examples.reject {|i| i[:mixin] }\n  end\n  examples.map{|i| i.reps.find{|r| r.name == :default}}\nend\n\ndef format_doc(docstring)\n  if docstring\n    RDiscount.new(docstring).to_html\n  end\nend\n\n"
  },
  {
    "path": "compass-style.org/tasks/generators.thor",
    "content": "require 'bundler'\nBundler.setup\n\nrequire 'fileutils'\nrequire 'compass'\n\nCOMPASS_DIR = File.expand_path(File.join(File.dirname(__FILE__), \"../..\"))\n\nclass Generate < Thor\n  desc \"example path/to/module\", \"Generate a new example.\"\n\n  method_option :title, :type => :string, :aliases => \"-t\", :desc => %(Title of the example.)\n  method_option :description, :type => :string, :aliases => \"-d\", :desc => %(Description of the example, which is shown below the link.)\n  method_option :mixin, :type => :string, :aliases => \"-m\", :desc => %(Name of the specific mixin in the module if the example isn't about the whole module.)\n\n  def example(module_path)\n    module_path = module_path.dup\n    module_path = \"compass/#{module_path.chomp(\"/\")}\"\n\n    options = @options.merge(:stylesheet => stylesheet_path(module_path))\n\n    title = options[:title] || (options[:mixin] && titleize(options[:mixin])) || titleize(File.basename(module_path))\n\n    directory = \"examples/#{module_path}\"\n    puts \"Generating /#{directory}/\"\n    puts \"DIRECTORY content/#{directory}/\"\n    FileUtils.mkdir_p(\"content/#{directory}/\")\n\n    file_name = \"content/examples/#{module_path}.haml\"\n    puts \"   CREATE #{file_name}\"\n    open(file_name, \"w\") do |example_file|\n      mixin = \"mixin: #{options[:mixin]}\\n\" if options[:mixin]\n      example_contents = <<-EXAMPLE\n      | ---\n      | title: #{title}\n      | description: #{options[:description] || \"How to use #{title}\"}\n      | framework: compass\n      | stylesheet: #{options[:stylesheet]}\n      | #{mixin}example: true\n      | ---\n      | - render \"partials/example\" do\n      |   %p Lorem ipsum dolor sit amet.\n      EXAMPLE\n      example_file.puts example_contents.gsub(/^ +\\| /, '')\n    end\n\n    file_name = \"content/examples/#{module_path}/markup.haml\"\n    puts \"   CREATE #{file_name}\"\n    open(file_name, \"w\") do |example_file|\n      example_contents = <<-EXAMPLE\n        | .example\n        |   .title #{title}\n        |   %p This file gets included into the example.\n        |   %p And the source is shown to the user as HTML and as Haml.\n      EXAMPLE\n      example_file.puts example_contents.gsub(/^ +\\| /, '')\n    end\n\n    file_name = \"content/examples/#{module_path}/stylesheet.scss\"\n    puts \"   CREATE #{file_name}\"\n    open(file_name, \"w\") do |example_file|\n      example_contents = <<-EXAMPLE\n        | @import \"#{module_path}\";\n        | \n        | // This file is used to style the example markup.\n        | // And the source is shown to the user as SCSS, Sass and as CSS.\n        | \n        | .example {\n        |   .title {\n        |     font-size: 36px;\n        |     margin-bottom: 30px;\n        |     color: #333;\n        |     border: none;\n        |   }\n        | \n        |   p { color: #666; }\n        | }\n      EXAMPLE\n      example_file.puts example_contents.gsub(/^ +\\| /, '')\n    end\n  end\n\n  desc \"reference path/to/module\", \"Generate a reference page for the given module.\"\n\n  method_option :title, :type => :string, :aliases => \"-t\", :desc => %(Title of the reference.)\n\n  def reference(module_path)\n    module_path = module_path.dup\n    module_path = \"compass/#{module_path.chomp(\"/\")}\"\n\n    options = @options.merge(:stylesheet => stylesheet_path(module_path))\n\n    title = options[:title] || titleize(File.basename(module_path))\n\n    directory = \"reference/#{module_path}\"\n    puts \"Generating /#{directory}/\"\n    puts \"DIRECTORY content/#{directory}/\"\n    FileUtils.mkdir_p \"content/#{directory}\"\n\n    file_name = \"content/reference/#{module_path}.haml\"\n    puts \"   CREATE #{file_name}\"\n    open(file_name, \"w\") do |reference_file|\n      contents = <<-REFERENCE\n      | ---\n      | title: Compass #{title}\n      | crumb: #{title}\n      | framework: compass\n      | stylesheet: #{options[:stylesheet]}\n      | layout: core\n      | classnames:\n      |   - reference\n      |   - core\n      | ---\n      | - render \"reference\" do\n      |   %p Lorem ipsum dolor sit amet.\n      REFERENCE\n      reference_file.puts contents.gsub(/^ +\\| /, '')\n    end\n  end\n\n  private\n  def titleize(string)\n    string.split('-').map(&:capitalize).join(' ')\n  end\n\n  def stylesheet_path(module_path)\n    array = module_path.split(\"/\")\n    stylesheet_name = array.pop\n    prefix = array.join(\"/\")\n\n    stylesheet = Dir[\"../frameworks/compass/stylesheets/#{prefix}/_#{stylesheet_name}.{scss,sass}\"].first\n    raise \"no stylesheet found for module #{module_path}\" if stylesheet.nil?\n    stylesheet = File.expand_path(stylesheet)\n\n    \"#{prefix}/#{File.basename(stylesheet)}\"\n  end\nend\n"
  },
  {
    "path": "core/.gitignore",
    "content": "pkg/\n.bundle/\nGemfile.lock\n"
  },
  {
    "path": "core/Gemfile",
    "content": "source 'https://rubygems.org'\n\n# Specify your gem's dependencies in compass-core.gemspec\ngemspec\n\ngem 'pry'\ngem 'diff-lcs', '~> 1.1.2'\ngem 'true', \"~> 0.2.3\"\ngem 'timecop', \"~> 0.5.9.2\"\ngem 'test-unit', '~> 3.0.9'\n"
  },
  {
    "path": "core/LICENSE.txt",
    "content": "Copyright (c) 2013 Chris Eppstein\n\nMIT License\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "core/README.md",
    "content": "# Compass Core Library\n\nThis compass core library delivers the necessary stylesheets and sass\nextensions in order to embed compass into any framework including using\ncompass with the Sass compiler.\n\n## Installation\n\n### With the Compass Command line framework\n\n[Install Compass](. This code will be installed automatically for you.\n\n### Vanilla Sass\n\nAdd `-r compass-core` to the Sass command line.\n\n### Ruby Projects\n\nAdd this line to your application's Gemfile:\n\n    gem 'compass-core'\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install compass-core\n\n## Usage\n\nTODO: Write usage instructions here\n\n## Contributing\n\n1. Fork it\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create new Pull Request\n"
  },
  {
    "path": "core/Rakefile",
    "content": "sh \"git checkout lib/compass/core/generated_version.rb\"\nrequire 'rake/testtask'\nrequire 'rubygems/package_task'\nrequire 'bundler/setup'\n\nnamespace :test do\n  Rake::TestTask.new(:integrations) do |t|\n    t.libs << \"test/integrations\"\n    t.libs << \"lib\"\n    t.test_files = FileList['test/integrations/**/*_test.rb']\n    t.verbose = true\n  end\n  Rake::TestTask.new(:units) do |t|\n    t.libs << \"test/units\"\n    t.libs << \"lib\"\n    t.test_files = FileList['test/units/**/*_test.rb']\n    t.verbose = true\n  end\nend\n\ndesc \"Download the latest browser stats data.\"\ntask :caniuse do\n  require 'uri'\n  require 'net/http'\n  require 'net/https'\n  uri = URI.parse(\"https://raw.githubusercontent.com/Fyrd/caniuse/master/data.json\")\n  https = Net::HTTP.new(uri.host,uri.port)\n  https.use_ssl = true\n  req = Net::HTTP::Get.new(uri.path)\n  res = https.request(req)\n  filename = File.join(File.dirname(__FILE__), \"data\", \"caniuse.json\")\n  open(filename, \"wb\") do |file|\n    file.write(res.body)\n  end\n  puts \"#{filename} (#{res.body.size} bytes)\"\nend\n\n\ndesc \"Run all tests\"\ntask :test => [\"test:integrations\", \"test:units\"]\n\ntask :default => :test\n\nspec = eval(File.read(FileList['compass-core.gemspec'].first), binding, \"compass-core.gemspec\")\nspec.files << \"lib/compass/core/generated_version.rb\"\nspec.files.delete(\"VERSION\")\n\ndef spec.bump!\n  segments = version.to_s.split(\".\")\n  segments[-1] = segments.last.succ\n  self.version = Gem::Version.new(segments.join(\".\"))\nend\n\n# Set SAME_VERSION when moving to a new major version and you want to specify the new version\n# explicitly instead of bumping the current version.\n# E.g. rake build SAME_VERSION=true\nspec.bump! unless ENV[\"SAME_VERSION\"]\n\ndesc \"Run tests and build compass-core-#{spec.version}.gem\"\ntask :build => [:test, :gem]\n\ntask :gem => :release_version\n\ntask \"lib/compass/core/generated_version.rb\" do\n  open(\"lib/compass/core/generated_version.rb\", \"w\") do |f|\n    f.write(<<VERSION_EOF)\nmodule Compass\n  module Core\n    VERSION = \"#{spec.version}\"\n  end\nend\nVERSION_EOF\n  end\nend\n\ntask :release_version => \"lib/compass/core/generated_version.rb\"\n\ndesc \"Make the prebuilt gem compass-core-#{spec.version}.gem public.\"\ntask :publish => [:record_version, :push_gem, :tag]\n\ndesc \"Build & Publish version #{spec.version}\" \ntask :release => [:build, :publish]\n\nGem::PackageTask.new(spec) do |pkg|\n  pkg.need_zip = true\n  pkg.need_tar = true\nend\n\ndesc \"Record the new version in version control for posterity\"\ntask :record_version do\n  unless ENV[\"SAME_VERSION\"]\n    open(FileList[\"VERSION\"].first, \"w\") do |f|\n      f.write(spec.version.to_s)\n    end\n    sh \"git add VERSION\"\n    sh \"git checkout lib/compass/core/generated_version.rb\"\n    sh %Q{git commit -m \"Bump version to #{spec.version}.\"}\n  end\nend\n\ndesc \"Tag the repo as #{spec.version} and push the code and tag.\"\ntask :tag do\n  sh \"git tag -a -m 'Core Version #{spec.version}' core-#{spec.version}\"\n  sh \"git push --tags origin #{`git rev-parse --abbrev-ref HEAD`}\"\nend\n\ndesc \"Push compass-core-#{spec.version}.gem to the rubygems server\"\ntask :push_gem do\n  sh \"gem push pkg/compass-core-#{spec.version}.gem\"\nend\n\n"
  },
  {
    "path": "core/VERSION",
    "content": "1.0.2"
  },
  {
    "path": "core/compass-core.gemspec",
    "content": "# coding: utf-8\nlib = File.expand_path('lib', File.dirname(__FILE__))\n$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)\nrequire 'compass/core/version'\n\nGem::Specification.new do |spec|\n  spec.name          = \"compass-core\"\n  spec.version       = Compass::Core::VERSION\n  spec.authors       = [\"Chris Eppstein\", \"Scott Davis\", \"Eric M. Suzanne\", \"Brandon Mathis\"]\n  spec.email         = [\"chris@eppsteins.net\"]\n  spec.description   = %q{The Compass core stylesheet library and minimum required ruby extensions. This library can be used stand-alone without the compass ruby configuration file or compass command line tools.}\n  spec.summary       = %q{The Compass core stylesheet library}\n  spec.homepage      = \"http://compass-style.org/reference/compass/\"\n  spec.license       = \"MIT\"\n\n  spec.files         = `git ls-files`.split($/).select {|f| File.exist?(f) && f =~ %r{^(data|lib|stylesheets|templates)/} }\n  spec.files         += %w(\n    VERSION\n    LICENSE.txt\n  )\n  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }\n  spec.require_paths = [\"lib\"]\n\n  spec.add_dependency \"sass\", \">= 3.3.0\", \"< 3.5\"\n  spec.add_dependency 'multi_json', '~> 1.0'\n  spec.add_development_dependency \"bundler\"\n  spec.add_development_dependency \"rake\"\nend\n"
  },
  {
    "path": "core/data/caniuse.json",
    "content": "{\"eras\":{\"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.278852,\"7\":0.135658,\"8\":4.46163,\"9\":2.6001,\"10\":2.63025,\"11\":7.18231},\"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,\"5.5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",null,null,null]},\"firefox\":{\"browser\":\"Firefox\",\"abbr\":\"FF\",\"prefix\":\"moz\",\"type\":\"desktop\",\"usage_global\":{\"2\":0.007153,\"3\":0.078683,\"3.5\":0.021459,\"3.6\":0.14306,\"4\":0.035765,\"5\":0.021459,\"6\":0.035765,\"7\":0.021459,\"8\":0.050071,\"9\":0.028612,\"10\":0.064377,\"11\":0.057224,\"12\":0.128754,\"13\":0.050071,\"14\":0.050071,\"15\":0.064377,\"16\":0.100142,\"17\":0.078683,\"18\":0.050071,\"19\":0.057224,\"20\":0.07153,\"21\":0.264661,\"22\":0.092989,\"23\":0.078683,\"24\":0.200284,\"25\":0.092989,\"26\":0.171672,\"27\":0.185978,\"28\":0.307579,\"29\":6.53784,\"30\":4.68521,\"31\":0.193131,\"32\":0.014306,\"33\":0.007153,\"34\":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\"]},\"chrome\":{\"browser\":\"Chrome\",\"abbr\":\"Chr.\",\"prefix\":\"webkit\",\"type\":\"desktop\",\"usage_global\":{\"4\":0.021459,\"5\":0.014306,\"6\":0.021459,\"7\":0.014306,\"8\":0.014306,\"9\":0.014306,\"10\":0.028612,\"11\":0.114448,\"12\":0.042918,\"13\":0.035765,\"14\":0.028612,\"15\":0.035765,\"16\":0.028612,\"17\":0.021459,\"18\":0.057224,\"19\":0.014306,\"20\":0.028612,\"21\":0.393415,\"22\":0.121601,\"23\":0.050071,\"24\":0.050071,\"25\":0.057224,\"26\":0.221743,\"27\":0.536475,\"28\":0.128754,\"29\":0.300426,\"30\":0.193131,\"31\":0.593699,\"32\":0.472098,\"33\":0.844054,\"34\":1.33761,\"35\":28.3903,\"36\":0.114448,\"37\":0.150213,\"38\":0,\"39\":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\"]},\"safari\":{\"browser\":\"Safari\",\"abbr\":\"Saf.\",\"prefix\":\"webkit\",\"type\":\"desktop\",\"usage_global\":{\"3.1\":0,\"3.2\":0.008692,\"4\":0.107295,\"5\":0.193131,\"5.1\":0.672382,\"6\":0.329038,\"6.1\":0.57224,\"7\":1.63804,\"8\":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,\"3.1\",\"3.2\",\"4\",\"5\",\"5.1\",\"6\",\"6.1\",\"7\",\"8\",null,null]},\"opera\":{\"browser\":\"Opera\",\"abbr\":\"Op.\",\"prefix\":\"webkit\",\"type\":\"desktop\",\"usage_global\":{\"9.5-9.6\":0.007153,\"10.0-10.1\":0.014306,\"10.5\":0.008392,\"10.6\":0.007296,\"11\":0.014996,\"11.1\":0.008219,\"11.5\":0.007296,\"11.6\":0.014306,\"12\":0.021459,\"12.1\":0.321885,\"15\":0.007153,\"16\":0.007153,\"17\":0.007153,\"18\":0.021459,\"19\":0.014306,\"20\":0.064377,\"21\":0.107295,\"22\":0.364803,\"23\":0.007153,\"24\":0},\"versions\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,\"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\",null],\"prefix_exceptions\":{\"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.00666865,\"4.2-4.3\":0.0400119,\"5.0-5.1\":0.186722,\"6.0-6.1\":0.733551,\"7.0-7.1\":5.69503,\"8\":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,\"3.2\",\"4.0-4.1\",\"4.2-4.3\",\"5.0-5.1\",\"6.0-6.1\",\"7.0-7.1\",\"8\",null,null]},\"op_mini\":{\"browser\":\"Opera Mini\",\"abbr\":\"O.Mini\",\"prefix\":\"o\",\"type\":\"mobile\",\"usage_global\":{\"5.0-7.0\":3.19172},\"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,\"5.0-7.0\",null,null,null]},\"android\":{\"browser\":\"Android Browser\",\"abbr\":\"And.\",\"prefix\":\"webkit\",\"type\":\"mobile\",\"usage_global\":{\"2.1\":0.0208543,\"2.2\":0.0556116,\"2.3\":1.03577,\"3\":0,\"4\":0.855028,\"4.1\":2.01592,\"4.2-4.3\":2.04373,\"4.4\":0.945397,\"4.4.3\":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,\"2.1\",\"2.2\",\"2.3\",\"3\",\"4\",\"4.1\",\"4.2-4.3\",\"4.4\",\"4.4.3\",null,null]},\"op_mob\":{\"browser\":\"Opera Mobile\",\"abbr\":\"O.Mob\",\"prefix\":\"o\",\"type\":\"mobile\",\"usage_global\":{\"10\":0,\"11.5\":0,\"12\":0.0198698,\"12.1\":0.0596095,\"22\":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,\"10\",null,null,\"11.5\",\"12\",\"12.1\",\"22\",null,null,null],\"prefix_exceptions\":{\"22\":\"webkit\"}},\"bb\":{\"browser\":\"Blackberry Browser\",\"abbr\":\"BB\",\"prefix\":\"webkit\",\"type\":\"mobile\",\"usage_global\":{\"7\":0.110321,\"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,\"7\",\"10\",null,null,null]},\"and_chr\":{\"browser\":\"Chrome for Android\",\"abbr\":\"Chr/And.\",\"prefix\":\"webkit\",\"type\":\"mobile\",\"usage_global\":{\"36\":5.52318},\"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,\"36\",null,null,null]},\"and_ff\":{\"browser\":\"Firefox for Android\",\"abbr\":\"FF/And.\",\"prefix\":\"moz\",\"type\":\"mobile\",\"usage_global\":{\"31\":0.119574},\"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,\"31\",null,null,null]},\"ie_mob\":{\"browser\":\"IE Mobile\",\"abbr\":\"IE.Mob\",\"prefix\":\"ms\",\"type\":\"mobile\",\"usage_global\":{\"10\":0.408117},\"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,\"10\",null,null,null]}},\"statuses\":{\"rec\":\"Recommendation\",\"pr\":\"Proposed Recommendation\",\"cr\":\"Candidate Recommendation\",\"wd\":\"Working Draft\",\"other\":\"Other\",\"unoff\":\"Unofficial / Note\"},\"cats\":{\"CSS\":[\"CSS\",\"CSS2\",\"CSS3\"],\"HTML5\":[\"Canvas\",\"HTML5\"],\"JS API\":[\"JS API\"],\"Other\":[\"DOM\",\"PNG\",\"Other\"],\"SVG\":[\"SVG\"]},\"updated\":1406691079,\"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://dillerdesign.com/experiment/DD_belatedPNG/\",\"title\":\"Workaround for IE6\"},{\"url\":\"http://en.wikipedia.org/wiki/Portable_Network_Graphics\",\"title\":\"Wikipedia\"}],\"categories\":[\"PNG\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"y\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":93.17,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp\",\"title\":\"Chrome extension providing support\"},{\"url\":\"https://github.com/davidmz/apng-canvas\",\"title\":\"Polyfill using canvas\"},{\"url\":\"http://en.wikipedia.org/wiki/APNG\",\"title\":\"Wikipedia\"}],\"categories\":[\"PNG\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Where support for APNG is missing, only the first frame is displayed\",\"notes_by_num\":{},\"usage_perc_y\":14.67,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"video\":{\"title\":\"Video element\",\"description\":\"Method of playing videos on webpages (without requiring a plug-in)\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#video\",\"status\":\"wd\",\"links\":[{\"url\":\"http://camendesign.co.uk/code/video_for_everybody\",\"title\":\"Video for Everybody\"},{\"url\":\"http://webmproject.org\",\"title\":\"WebM format information\"},{\"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\"},{\"url\":\"http://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/\",\"title\":\"Detailed article on video/audio elements\"},{\"url\":\"http://diveinto.org/html5/video.html\",\"title\":\"Video on the Web - includes info on Android support\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":85.18,\"usage_perc_a\":0.08,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"<video>\"},\"audio\":{\"title\":\"Audio element\",\"description\":\"Method of playing sound on webpages (without requiring a plug-in)\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#audio\",\"status\":\"wd\",\"links\":[{\"url\":\"http://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/\",\"title\":\"Detailed article on video/audio elements\"},{\"url\":\"http://docs.webplatform.org/wiki/html/elements/audio\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://html5doctor.com/native-audio-in-the-browser/\",\"title\":\"HTML5 Doctor article\"},{\"url\":\"http://textopia.org/androidsoundformats.html\",\"title\":\"File format test page\"},{\"url\":\"http://www.jplayer.org/latest/demos/\",\"title\":\"Demos of audio player that uses the audio element\"},{\"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://24ways.org/2010/the-state-of-html5-audio\",\"title\":\"Detailed article on support\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":85.18,\"usage_perc_a\":0.02,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"contenteditable\":{\"title\":\"contenteditable attribute (basic support)\",\"description\":\"Method of making any HTML element editable\",\"spec\":\"http://www.w3.org/TR/html/editing.html#contenteditable\",\"status\":\"cr\",\"links\":[{\"url\":\"http://html5demos.com/contenteditable\",\"title\":\"Demo page\"},{\"url\":\"http://docs.webplatform.org/wiki/html/attributes/contentEditable\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://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\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"y\",\"6\":\"y\",\"7\":\"y\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":89,\"usage_perc_a\":0.08,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"dragndrop\":{\"title\":\"Drag and Drop\",\"description\":\"Method of easily dragging and dropping elements on a page, requiring minimal JavaScript.\",\"spec\":\"http://www.w3.org/TR/html5/editing.html#dnd\",\"status\":\"wd\",\"links\":[{\"url\":\"http://html5doctor.com/native-drag-and-drop/\",\"title\":\"HTML5 Doctor article\"},{\"url\":\"http://html5demos.com/drag\",\"title\":\"Demo with link blocks\"},{\"url\":\"http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html\",\"title\":\"Shopping cart demo\"},{\"url\":\"http://docs.webplatform.org/wiki/dom/DragEvent\",\"title\":\"WebPlatform Docs\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"a\",\"6\":\"a\",\"7\":\"a\",\"8\":\"a\",\"9\":\"a\",\"10\":\"a\",\"11\":\"a\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"p\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"p\",\"12.1\":\"y\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Partial support in older IE refers to no support for the dataTransfer.files or .types objects and limited supported formats for dataTransfer.setData/getData. dataTransfer.items only supported by google chrome. IE has no support for .setDragImage. Firefox 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\":{},\"usage_perc_y\":53.39,\"usage_perc_a\":17.3,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"draganddrop\"},\"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://docs.webplatform.org/wiki/css/selectors_api/querySelector\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://cjihrig.com/blog/javascripts-selectors-api/\",\"title\":\"Blog post\"}],\"categories\":[\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Only works for the CSS selectors available. Thus the IE8 implementation is limited to the CSS 2.1 selectors\",\"notes_by_num\":{},\"usage_perc_y\":92.94,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"query,selectors,selectors api\"},\"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://docs.webplatform.org/wiki/dom/HTMLElement/getElementsByClassName\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://www.quirksmode.org/dom/tests/basics.html#getElementsByClassName\",\"title\":\"Test page\"}],\"categories\":[\"DOM\",\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":88.56,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"byclassname\"},\"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\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html\",\"status\":\"wd\",\"links\":[{\"url\":\"http://www.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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"a\"},\"bb\":{\"7\":\"n\",\"10\":\"a\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"a\"},\"ie_mob\":{\"10\":\"a\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":0.51,\"usage_perc_a\":75.87,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"input,datepicker\"},\"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\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#sections\",\"status\":\"wd\",\"links\":[{\"url\":\"http://blog.whatwg.org/supporting-new-elements-in-ie\",\"title\":\"Workaround for IE\"},{\"url\":\"http://blog.whatwg.org/styling-ie-noscript\",\"title\":\"Alternate workaround\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-html5-elements\",\"title\":\"has.js test\"},{\"url\":\"http://oli.jp/2009/html5-structure3/\",\"title\":\"Article on structural elements\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"y #1\",\"10\":\"y #1\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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 &lt;main> element.\",\"notes_by_num\":{\"1\":\"Does not include support for the &lt;main> element \"},\"usage_perc_y\":84.9,\"usage_perc_a\":3.67,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html\",\"status\":\"wd\",\"links\":[{\"url\":\"http://diveinto.org/html5/offline.html\",\"title\":\"Dive Into HTML5 article\"},{\"url\":\"http://docs.webplatform.org/wiki/apis/appcache/ApplicationCache\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://hacks.mozilla.org/2010/01/offline-web-applications/\",\"title\":\"Mozilla Hacks article/demo\"},{\"url\":\"http://www.sitepoint.com/offline-web-application-tutorial/\",\"title\":\"Sitepoint tutorial\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":82.65,\"usage_perc_a\":0.08,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"appcache,app cache,application cache,online\"},\"webworkers\":{\"title\":\"Web Workers\",\"description\":\"Method of running scripts in the background, isolated from the web page\",\"spec\":\"http://www.w3.org/TR/workers/\",\"status\":\"cr\",\"links\":[{\"url\":\"http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/\",\"title\":\"Tutorial\"},{\"url\":\"http://code.google.com/p/ie-web-worker/\",\"title\":\"Polyfill for IE (single threaded)\"},{\"url\":\"https://developer.mozilla.org/En/Using_web_workers\",\"title\":\"MDN article\"},{\"url\":\"http://nerget.com/rayjs-mt/rayjs.html\",\"title\":\"Web Worker demo\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"p\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"p\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":76.6,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://www.css3files.com/font/\",\"title\":\"Information page\"},{\"url\":\"http://docs.webplatform.org/wiki/css/atrules/@font-face\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://en.wikipedia.org/wiki/Web_typography\",\"title\":\"Wikipedia\"},{\"url\":\"http://webfonts.info\",\"title\":\"News and information site\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"a\",\"6\":\"a\",\"7\":\"a\",\"8\":\"a\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"a\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":84.05,\"usage_perc_a\":6.09,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"font face\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Proposal by Microsoft, being considered for W3C standardization.\",\"notes_by_num\":{},\"usage_perc_y\":17.29,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"fontface\",\"keywords\":\"\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Reported to be supported in some modified versions of the Android 4.0 browser.\",\"notes_by_num\":{},\"usage_perc_y\":78.81,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"fontface\",\"keywords\":\"\"},\"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.css3files.com/background/\",\"title\":\"Information page\"},{\"url\":\"http://www.css3.info/preview/multiple-backgrounds/\",\"title\":\"Demo & 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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":88.44,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://docs.webplatform.org/wiki/css/properties/border-image\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://www.css3files.com/border/\",\"title\":\"Information page\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\",\"4.4.3\":\"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\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":70.74,\"usage_perc_a\":8.89,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"https://github.com/louisremi/background-size-polyfill\",\"title\":\"Polyfill for IE7-8\"},{\"url\":\"http://www.css3files.com/background/\",\"title\":\"Information page\"},{\"url\":\"http://www.standardista.com/css3/css3-background-properties\",\"title\":\"Detailed compatibility tables and demos\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"a\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"a\",\"8\":\"a\"},\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"a\"},\"android\":{\"2.1\":\"a x\",\"2.2\":\"y x\",\"2.3\":\"y x\",\"3\":\"y\",\"4\":\"y\",\"4.1\":\"y\",\"4.2-4.3\":\"y\",\"4.4\":\"y\",\"4.4.3\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"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). Partial support in Safari 6 refers to not supporting background sizing offset from edges syntax.\",\"notes_by_num\":{},\"usage_perc_y\":82.43,\"usage_perc_a\":6.03,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":93.04,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"display:table, display: table,table-cell,table-row,table-layout\"},\"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\",\"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\":\"http://docs.webplatform.org/wiki/css/generated_and_replaced_content\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://dev.opera.com/articles/view/css-generated-content-techniques/\",\"title\":\"Dev.Opera article\"}],\"categories\":[\"CSS3\",\"CSS2\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"a\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":88.57,\"usage_perc_a\":4.46,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"before,after\"},\"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://docs.webplatform.org/wiki/css/properties/position\",\"title\":\"WebPlatform Docs\"},{\"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\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"y\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Only works in Android 2.2+ by using the following meta tag: &lt;meta name=\\\"viewport\\\" content=\\\"width=device-width, user-scalable=no\\\">. Partial support in 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\":82.21,\"usage_perc_a\":7.73,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"http://www.w3.org/TR/html5/history.html#event-hashchange\",\"status\":\"cr\",\"links\":[{\"url\":\"http://github.com/3nr1c/jUri.js\",\"title\":\"Polyfill\"},{\"url\":\"http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx\",\"title\":\"MSDN article\"},{\"url\":\"https://developer.mozilla.org/en/DOM/window.onhashchange\",\"title\":\"MDN article\"},{\"url\":\"http://docs.webplatform.org/wiki/dom/Element/hashchange\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://www.quirksmode.org/dom/events/tests/hashchange.html\",\"title\":\"Simple demo\"}],\"categories\":[\"HTML5\",\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"p\",\"6\":\"p\",\"7\":\"p\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"p\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":89.54,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"onhashchange,HashChangeEvent\"},\"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.yourhtmlsource.com/stylesheets/advancedselectors.html\",\"title\":\"Examples of advanced selectors\"},{\"url\":\"http://www.quirksmode.org/css/contents.html\",\"title\":\"Detailed support information\"},{\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":93.17,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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.css3.info/selectors-test/\",\"title\":\"Automated CSS3 selector test\"},{\"url\":\"http://www.quirksmode.org/css/selectors/\",\"title\":\"Detailed support information\"},{\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":88.48,\"usage_perc_a\":4.6,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://docs.webplatform.org/wiki/css/properties/text-shadow\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://www.css3files.com/shadow/#textshadow\",\"title\":\"Information page\"},{\"url\":\"http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_text-shadow.htm\",\"title\":\"Live editor\"},{\"url\":\"http://hacks.mozilla.org/2009/06/text-shadow/\",\"title\":\"Mozilla hacks article\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"a\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":{},\"usage_perc_y\":82.57,\"usage_perc_a\":3.31,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"text shadow\"},\"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://docs.webplatform.org/wiki/css/properties/box-shadow\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://tests.themasta.com/blogstuff/boxshadowdemo.html\",\"title\":\"Demo of various effects\"},{\"url\":\"http://www.css3files.com/shadow/\",\"title\":\"Information page\"},{\"url\":\"http://westciv.com/tools/boxshadows/index.html\",\"title\":\"Live editor\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y x\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":84.04,\"usage_perc_a\":1.23,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"box-shadows,boxshadows,box shadow,shaow\"},\"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\":\"http://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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":88.55,\"usage_perc_a\":0.01,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"rgb,hsl,rgba,hsla\"},\"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://github.com/Schepp/box-sizing-polyfill\",\"title\":\"Polyfill for IE\"},{\"url\":\"https://developer.mozilla.org/En/CSS/Box-sizing\",\"title\":\"MDN article\"},{\"url\":\"http://docs.webplatform.org/wiki/css/properties/box-sizing\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://css-tricks.com/box-sizing/\",\"title\":\"CSS Tricks\"},{\"url\":\"http://www.456bereastreet.com/archive/201104/controlling_width_with_css3_box-sizing/\",\"title\":\"Blog post\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"p\",\"6\":\"p\",\"7\":\"p\",\"8\":\"a\",\"9\":\"a\",\"10\":\"a\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"a\"},\"bb\":{\"7\":\"a x\",\"10\":\"a\"},\"op_mob\":{\"10\":\"a\",\"11\":\"a\",\"11.1\":\"a\",\"11.5\":\"a\",\"12\":\"a\",\"12.1\":\"a\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a\"}},\"notes\":\"Partial support refers to supporting only the \\\"border-box\\\" value, not \\\"padding-box\\\" (which was added to the spec later).\",\"notes_by_num\":{},\"usage_perc_y\":14.17,\"usage_perc_a\":78.86,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"border-box,content-box,padding-box\"},\"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://docs.webplatform.org/wiki/css/atrules/@media\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://ie.microsoft.com/testdrive/HTML5/85CSS3_MediaQueries/\",\"title\":\"IE demo page with information\"},{\"url\":\"https://github.com/scottjehl/Respond\",\"title\":\"Polyfill for IE\"},{\"url\":\"http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries\",\"title\":\"Media Queries tutorial\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"p\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Incomplete support by older webkit browsers refers to only acknowledging different media rules on page reload\",\"notes_by_num\":{},\"usage_perc_y\":88.47,\"usage_perc_a\":0.01,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"@media\"},\"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\":\"http://dev.opera.com/articles/view/css3-multi-column-layout/\",\"title\":\"Dev.Opera article\"},{\"url\":\"http://docs.webplatform.org/wiki/css/properties/column-width\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/an-introduction-to-the-css3-multiple-column-layout-module/\",\"title\":\"Introduction page\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"a x\"},\"and_chr\":{\"36\":\"a x\"},\"and_ff\":{\"31\":\"a x\"},\"ie_mob\":{\"10\":\"y\"}},\"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.\",\"notes_by_num\":{},\"usage_perc_y\":13.87,\"usage_perc_a\":72.05,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"column-count\"},\"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://muddledramblings.com/table-of-css3-border-radius-compliance\",\"title\":\"Detailed compliance table\"},{\"url\":\"http://css3pie.com/\",\"title\":\"Polyfill which includes border-radius\"},{\"url\":\"http://border-radius.com\",\"title\":\"Border-radius CSS Generator\"},{\"url\":\"http://www.css3files.com/border/#borderradius\",\"title\":\"Information page\"},{\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y x\",\"3.2\":\"y x\",\"4\":\"y x\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":85.35,\"usage_perc_a\":0.01,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"roundedcorners, border radius,-moz-border-radius\"},\"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.css3files.com/transform/\",\"title\":\"Information page\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform\",\"title\":\"has.js test\"},{\"url\":\"http://www.webresourcesdepot.com/cross-browser-css-transforms-csssandpaper/\",\"title\":\"Workaround script for IE\"},{\"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.useragentman.com/IETransformsTranslator/\",\"title\":\"Converter for IE\"},{\"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\"},\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y x\"},\"bb\":{\"7\":\"y x\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"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\":85.27,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"transformation,translate,rotation,rotate,scale,css-transforms\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":80.03,\"usage_perc_a\":0.87,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"transforms3d\":{\"title\":\"CSS3 3D Transforms\",\"description\":\"Method of transforming an element in the third dimension\",\"spec\":\"http://www.w3.org/TR/css3-3d-transforms/\",\"status\":\"wd\",\"links\":[{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform\",\"title\":\"has.js test\"},{\"url\":\"http://thewebrocks.com/demos/3D-css-tester/\",\"title\":\"3D CSS Tester\"},{\"url\":\"http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/\",\"title\":\"Mozilla hacks article\"},{\"url\":\"http://css3.bradshawenterprises.com/flip/\",\"title\":\"Multi-browser demo\"},{\"url\":\"http://docs.webplatform.org/wiki/css/transforms/transform\",\"title\":\"WebPlatform Docs\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"a\",\"11\":\"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\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a\"}},\"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\":70.24,\"usage_perc_a\":10.22,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"css 3d,3dtransforms,translate3d,transform3d\"},\"sharedworkers\":{\"title\":\"Shared Web Workers\",\"description\":\"Method of allowing multiple scripts to communicate with a single web worker.\",\"spec\":\"http://www.w3.org/TR/workers/#shared-workers-introduction\",\"status\":\"cr\",\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"n\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"u\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":49.35,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"webworkers\",\"keywords\":\"shared worker\"},\"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://docs.webplatform.org/wiki/css/properties/hyphens\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://blog.fontdeck.com/post/9037028497/hyphens\",\"title\":\"Blog post\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y x\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Chrome 29- and Android 4.0 Browser support \\\"-webkit-hyphens: none\\\", but not the \\\"auto\\\" property. Chrome 30+ doesn't support it either.\",\"notes_by_num\":{},\"usage_perc_y\":33.54,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"hyphen,shy\"},\"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://docs.webplatform.org/wiki/css/properties/transition\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://www.webdesignerdepot.com/2010/01/css-transitions-101/\",\"title\":\"Article on usage\"},{\"url\":\"http://www.opera.com/docs/specs/presto2.12/css/transitions/#anima\",\"title\":\"Animation of property types support in Opera\"},{\"url\":\"http://www.the-art-of-web.com/css/timing-function/\",\"title\":\"Examples on timing functions\"},{\"url\":\"http://www.css3files.com/transition/\",\"title\":\"Information page\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y x\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"y x\",\"11\":\"y x\",\"11.1\":\"y x\",\"11.5\":\"y x\",\"12\":\"y x\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":82.5,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"css transition\"},\"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://html5accessibility.com/\",\"title\":\"Detailed tables on accessability support\"},{\"url\":\"http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/\",\"title\":\"Mozilla hacks article\"},{\"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\"},\"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\",\"33\":\"y\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"n\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":64.21,\"usage_perc_a\":2.96,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"font-feature,font-feature-settings,kern,kerning,font-variant-alternates,ligatures,font-variant-ligatures\"},\"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://docs.webplatform.org/wiki/css/properties/animations\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://www.css3files.com/animation/\",\"title\":\"Information page\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Partial support in Android browser refers to buggy behavior in different scenarios.\",\"notes_by_num\":{},\"usage_perc_y\":81.27,\"usage_perc_a\":1.11,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"animations,css-animations,keyframe,keyframes\"},\"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://docs.webplatform.org/wiki/css/functions/linear-gradient\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://www.css3files.com/gradient/\",\"title\":\"Information page\"},{\"url\":\"http://css3pie.com/\",\"title\":\"Tool to emulate support in IE\"},{\"url\":\"http://www.colorzilla.com/gradient-editor/\",\"title\":\"Cross-browser editor\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"a x\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"a x\",\"11.5\":\"a x\",\"12\":\"y x\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"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\":80.92,\"usage_perc_a\":1.69,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"linear,linear-gradient,gradiant\"},\"css-canvas\":{\"title\":\"CSS Canvas Drawings\",\"description\":\"Method of using HTML5 Canvas as a background image\",\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"u\",\"33\":\"u\",\"34\":\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Proposal by Webkit, being considered for W3C standardization. A similar effect can be achieved in Firefox 4+ using the -moz-element() background property\",\"notes_by_num\":{},\"usage_perc_y\":57.87,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Similar effect can be achieved in Firefox 4+ using the -moz-element() background property\",\"notes_by_num\":{},\"usage_perc_y\":57.87,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"box-reflect\"},\"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\":\"wd\",\"links\":[{\"url\":\"http://www.html5rocks.com/en/tutorials/masking/adobe/\",\"title\":\"HTML5 Rocks article\"},{\"url\":\"http://thenittygritty.co/css-masking\",\"title\":\"Detailed blog post\"},{\"url\":\"http://docs.webplatform.org/wiki/css/properties/mask\",\"title\":\"WebPlatform Docs\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"a x\"},\"and_chr\":{\"36\":\"a x\"},\"and_ff\":{\"31\":\"a\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Partial support in WebKit/Blink browsers refers to supporting the mask-image and mask-box-image properties, but lacks support for othe 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\":71.95,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg\",\"title\":\"has.js test\"},{\"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\":\"http://www.alistapart.com/articles/using-svg-for-flexible-scalable-and-fun-backgrounds-part-i\",\"title\":\"A List Apart article\"},{\"url\":\"http://en.wikipedia.org/wiki/Scalable_Vector_Graphics\",\"title\":\"Wikipedia\"},{\"url\":\"http://svg-wow.org/\",\"title\":\"SVG showcase site\"}],\"categories\":[\"SVG\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":87.46,\"usage_perc_a\":0.01,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":[\"SVG\",\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"a\",\"4\":\"a\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"a\",\"11\":\"a\",\"11.1\":\"a\",\"11.5\":\"a\",\"12\":\"a\",\"12.1\":\"a\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":82.39,\"usage_perc_a\":4.82,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"svg-in-css,svgincss,css-svg\"},\"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\":\"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg-smil\",\"title\":\"has.js test\"},{\"url\":\"https://developer.mozilla.org/en/SVG/SVG_animation_with_SMIL\",\"title\":\"MDN article\"},{\"url\":\"http://svg-wow.org/blog/category/animation/\",\"title\":\"Examples on SVG WOW\"},{\"url\":\"https://github.com/madsgraphics/SVGEventListener\",\"title\":\"Polyfill for SMIL animate events on SVG\"},{\"url\":\"http://leunen.me/fakesmile/\",\"title\":\"JS library to support SMIL in SVG\"}],\"categories\":[\"SVG\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"p\",\"10\":\"p\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"p\"}},\"notes\":\"Partial support in Safari refers to not working in HTML files.\",\"notes_by_num\":{},\"usage_perc_y\":69.63,\"usage_perc_a\":1.56,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"svg-fonts\":{\"title\":\"SVG fonts\",\"description\":\"Method of using fonts defined as SVG shapes\",\"spec\":\"http://www.w3.org/TR/SVG/fonts.html\",\"status\":\"rec\",\"links\":[{\"url\":\"http://opentype.info/blog/2010/04/13/the-ipad-and-svg-fonts-in-mobile-safari/\",\"title\":\"Blog post on usage for iPad\"},{\"url\":\"http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different\",\"title\":\"Blog post\"}],\"categories\":[\"SVG\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Supported in Opera Mini in SVG images only, not in HTML.\",\"notes_by_num\":{},\"usage_perc_y\":57.28,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"fontface\",\"keywords\":\"\"},\"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://docs.webplatform.org/wiki/svg/elements/filter\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://svg-wow.org/blog/category/filters/\",\"title\":\"SVG filter demos\"},{\"url\":\"http://electricbeach.org/?p=950\",\"title\":\"Experiments with filter effects\"}],\"categories\":[\"SVG\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":78.54,\"usage_perc_a\":0.05,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html\",\"title\":\"Filter Effects draft\"}],\"categories\":[\"SVG\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"a\",\"10\":\"a\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"a\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"a\",\"11\":\"a\",\"11.1\":\"a\",\"11.5\":\"a\",\"12\":\"a\",\"12.1\":\"a\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Partial support refers to lack of filter support or buggy result from effects. A [CSS Filter Effects](https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html) specification is in the works that would replace this method.\",\"notes_by_num\":{},\"usage_perc_y\":14.08,\"usage_perc_a\":64.74,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"svg-html5\":{\"title\":\"Inline SVG in HTML5\",\"description\":\"Method of using SVG tags directly in HTML documents. Requires HTML5 parser.\",\"spec\":\"http://www.w3.org/TR/html5/embedded-content-0.html#svg-0\",\"status\":\"cr\",\"links\":[{\"url\":\"http://samples.msdn.microsoft.com/ietestcenter/html5/svghtml_harness.htm?url=SVG_HTML_Elements_001\",\"title\":\"Test suite\"},{\"url\":\"http://hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more/\",\"title\":\"Mozilla Hacks blog post\"}],\"categories\":[\"SVG\",\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"p\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":83.53,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"canvas\":{\"title\":\"Canvas (basic support)\",\"description\":\"Method of generating fast, dynamic graphics using JavaScript\",\"spec\":\"http://www.w3.org/TR/html5/embedded-content-0.html#the-canvas-element\",\"status\":\"cr\",\"links\":[{\"url\":\"https://developer.mozilla.org/en/Canvas_tutorial\",\"title\":\"Tutorial by Mozilla\"},{\"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\"},{\"url\":\"http://www.diveinto.org/html5/canvas.html\",\"title\":\"Another tutorial\"},{\"url\":\"http://www.canvasdemos.com/\",\"title\":\"Showcase site\"},{\"url\":\"http://glimr.rubyforge.org/cake/canvas.html\",\"title\":\"Animation kit \"}],\"categories\":[\"HTML5\",\"Canvas\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":84.27,\"usage_perc_a\":4.3,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"canvas-text\":{\"title\":\"Text API for Canvas\",\"description\":\"Method of displaying text on Canvas elements\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#text-0\",\"status\":\"wd\",\"links\":[{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas-text\",\"title\":\"has.js test\"},{\"url\":\"http://code.google.com/p/canvas-text/\",\"title\":\"Support library\"},{\"url\":\"https://developer.mozilla.org/en/Drawing_text_using_a_canvas#Additional_examples\",\"title\":\"Examples by Mozilla\"},{\"url\":\"http://docs.webplatform.org/wiki/apis/canvas/CanvasRenderingContext2D/fillText\",\"title\":\"WebPlatform Docs\"}],\"categories\":[\"HTML5\",\"Canvas\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"p\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":85.26,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"canvas\",\"keywords\":\"\"},\"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://raw.github.com/phiggins42/has.js/master/detect/features.js#native-localstorage;native-sessionstorage\",\"title\":\"has.js test\"},{\"url\":\"http://html5demos.com/storage\",\"title\":\"Simple demo\"},{\"url\":\"http://code.google.com/p/sessionstorage/\",\"title\":\"Support library\"},{\"url\":\"http://docs.webplatform.org/wiki/apis/web-storage/Storage/localStorage\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://developer.mozilla.org/En/DOM/Storage\",\"title\":\"Gecko reference\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":89.72,\"usage_perc_a\":0.09,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"webstorage,local storage\"},\"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\":\"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-sql-db\",\"title\":\"has.js test\"},{\"url\":\"http://html5doctor.com/introducing-web-sql-databases/\",\"title\":\"HTML5 Doctor article\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":58.36,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"db-storage,websql\"},\"indexeddb\":{\"title\":\"IndexedDB\",\"description\":\"Method of storing data client-side, allows indexed database queries. Previously known as WebSimpleDB API.\",\"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\",\"11\":\"a\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"p\",\"6\":\"p\",\"6.1\":\"p\",\"7\":\"p\",\"8\":\"y\"},\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"p\",\"10\":\"a x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"p\",\"12.1\":\"p\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Partial support in IE 10 & 11 refers to a number of subfeatures [not being supported](http://codepen.io/cemerick/pen/Itymi). Partial support in BB10 refers to an [outdated specification](http://www.w3.org/TR/2011/WD-IndexedDB-20110419/) being implemented. Code targeting the [current state of the specification](http://www.w3.org/TR/IndexedDB/) might not work.\",\"notes_by_num\":{},\"usage_perc_y\":54.64,\"usage_perc_a\":10.93,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"indexdb\"},\"eventsource\":{\"title\":\"Server-sent DOM 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\":\"cr\",\"links\":[{\"url\":\"http://www.html5rocks.com/tutorials/eventsource/basics/\",\"title\":\"HTML5 Rocks tutorial\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-eventsource\",\"title\":\"has.js test\"},{\"url\":\"http://samshull.blogspot.com/2010/10/ajax-push-in-ios-safari-and-chrome-with.html\",\"title\":\"Blog post with demo\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"a\",\"11\":\"a\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":66.03,\"usage_perc_a\":0.05,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"serversent,s-sent-events\"},\"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\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\",\"status\":\"wd\",\"links\":[{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-crosswindowmessaging\",\"title\":\"has.js test\"},{\"url\":\"https://developer.mozilla.org/en/DOM/window.postMessage\",\"title\":\"MDN article\"},{\"url\":\"http://html5demos.com/postmessage2\",\"title\":\"Simple demo\"},{\"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\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a\"}},\"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.91,\"usage_perc_a\":10.1,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://en.wikipedia.org/wiki/data_URI_scheme\",\"title\":\"Wikipedia\"},{\"url\":\"http://css-tricks.com/5970-data-uris/\",\"title\":\"Information page\"},{\"url\":\"http://www.websiteoptimization.com/speed/tweak/inline-images/\",\"title\":\"Data URL converter\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"a\",\"9\":\"a\",\"10\":\"a\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a\"}},\"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\":75.75,\"usage_perc_a\":17.28,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"data url,datauris,data uri,dataurl,dataurls,base64\"},\"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\":\"https://developer.mozilla.org/en/MathML/Element\",\"title\":\"MDN element reference\"},{\"url\":\"http://www.mozilla.org/projects/mathml/demo/\",\"title\":\"MathML demos\"},{\"url\":\"http://en.wikipedia.org/wiki/MathML\",\"title\":\"Wikipedia\"},{\"url\":\"http://www.mathjax.org\",\"title\":\"Cross-browser support script\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"p\"},\"bb\":{\"7\":\"p\",\"10\":\"y\"},\"op_mob\":{\"10\":\"p\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"p\",\"12.1\":\"p\",\"22\":\"p\"},\"and_chr\":{\"36\":\"p\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":24.05,\"usage_perc_a\":0.43,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":52.6,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"supports,conditional\"},\"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://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\"},{\"url\":\"http://en.wikipedia.org/wiki/XHTML\",\"title\":\"Wikipedia\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":88.57,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"xhtml+xml\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"p\",\"6\":\"p\",\"6.1\":\"p\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"p\"},\"bb\":{\"7\":\"p\",\"10\":\"p\"},\"op_mob\":{\"10\":\"p\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"p\",\"12.1\":\"p\",\"22\":\"p\"},\"and_chr\":{\"36\":\"p\"},\"and_ff\":{\"31\":\"p\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":4.88,\"ucprefix\":false,\"parent\":\"xhtml\",\"keywords\":\"\"},\"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://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\"},{\"url\":\"http://www.paciellogroup.com/blog/2011/10/browser-assistive-technology-tests-redux/\",\"title\":\"Links to various test results\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"a\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"a\",\"11\":\"a\",\"11.1\":\"a\",\"11.5\":\"a\",\"12\":\"a\",\"12.1\":\"a\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":31.44,\"usage_perc_a\":55.44,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"wai,aria\"},\"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://docs.webplatform.org/wiki/apis/geolocation\",\"title\":\"WebPlatform Docs\"},{\"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\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"p\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":85.11,\"usage_perc_a\":0.02,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"flexbox\":{\"title\":\"Flexible Box Layout Module\",\"description\":\"Method of positioning elements in horizontal or vertical stacks.\",\"spec\":\"http://www.w3.org/TR/css3-flexbox/\",\"status\":\"cr\",\"links\":[{\"url\":\"http://bennettfeely.com/flexplorer/\",\"title\":\"Flexbox CSS generator\"},{\"url\":\"http://dev.opera.com/articles/view/advanced-cross-browser-flexbox/\",\"title\":\"Tutorial on cross-browser support\"},{\"url\":\"http://www.adobe.com/devnet/html5/articles/working-with-flexbox-the-new-spec.html\",\"title\":\"Article on using the latest spec\"},{\"url\":\"http://philipwalton.github.io/solved-by-flexbox/\",\"title\":\"Examples on how to solve common layout problems with flexbox\"},{\"url\":\"http://the-echoplex.net/flexyboxes/\",\"title\":\"Flexbox playground and code generator\"},{\"url\":\"http://css-tricks.com/snippets/css/a-guide-to-flexbox/\",\"title\":\"A Complete Guide to Flexbox\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"a x #2\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"a x #1\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a x #2\"}},\"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</a>\",\"2\":\"Only supports the [2012 syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)</a>\",\"3\":\"Does not support flex-wrap or flex-flow properties\"},\"usage_perc_y\":68.36,\"usage_perc_a\":14.29,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"flex\"},\"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://iewebgl.com/\",\"title\":\"Polyfill for IE\"},{\"url\":\"http://www.khronos.org/webgl/wiki/Tutorial\",\"title\":\"Tutorial\"},{\"url\":\"http://webkit.org/blog/603/webgl-now-available-in-webkit-nightlies/\",\"title\":\"Webkit blog post\"},{\"url\":\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\",\"title\":\"Instructions on enabling WebGL\"},{\"url\":\"http://hacks.mozilla.org/2009/12/webgl-draft-released-today/\",\"title\":\"Firefox blog post\"}],\"categories\":[\"Canvas\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"p\",\"10\":\"p\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"a\",\"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\":\"a\",\"12.1\":\"a\",\"15\":\"y\",\"16\":\"y\",\"17\":\"y\",\"18\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"a\",\"12.1\":\"a\",\"22\":\"y\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"a\"},\"ie_mob\":{\"10\":\"p\"}},\"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](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\":41.84,\"usage_perc_a\":23.44,\"ucprefix\":false,\"parent\":\"canvas\",\"keywords\":\"web gl\"},\"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\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"a\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"a\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Partial support in older Safari and other WebKit browsers refers to lacking FileReader support. \",\"notes_by_num\":{},\"usage_perc_y\":74.57,\"usage_perc_a\":5.95,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"FileReader\"},\"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://www.html5rocks.com/tutorials/webcomponents/shadowdom/\",\"title\":\"HTML5Rocks - Shadow DOM 101 article\"},{\"url\":\"http://html5-demos.appspot.com/static/shadowdom-visualizer/index.html\",\"title\":\"Shadow DOM Visualizer\"}],\"categories\":[\"HTML5\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y x\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":40.43,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"web components\"},\"websockets\":{\"title\":\"Web Sockets\",\"description\":\"Bidirectional communication technology for web apps\",\"spec\":\"http://www.w3.org/TR/websockets/\",\"status\":\"cr\",\"links\":[{\"url\":\"http://docs.webplatform.org/wiki/apis/websocket\",\"title\":\"WebPlatform Docs\"},{\"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\":\"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-websockets\",\"title\":\"has.js test\"},{\"url\":\"http://en.wikipedia.org/wiki/WebSocket\",\"title\":\"Wikipedia\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"y\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"a\",\"5\":\"a\",\"6\":\"y x\",\"7\":\"y x\",\"8\":\"y x\",\"9\":\"y x\",\"10\":\"y x\",\"11\":\"y\",\"12\":\"y\",\"13\":\"y\",\"14\":\"y\",\"15\":\"y\",\"16\":\"y\",\"17\":\"y\",\"18\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"y\",\"25\":\"y\",\"26\":\"y\",\"27\":\"y\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"y\"},\"chrome\":{\"4\":\"a\",\"5\":\"a\",\"6\":\"a\",\"7\":\"a\",\"8\":\"a\",\"9\":\"a\",\"10\":\"a\",\"11\":\"a\",\"12\":\"a\",\"13\":\"a\",\"14\":\"y\",\"15\":\"y\",\"16\":\"y\",\"17\":\"y\",\"18\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"y\",\"25\":\"y\",\"26\":\"y\",\"27\":\"y\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-4.1\":\"n\",\"4.2-4.3\":\"a\",\"5.0-5.1\":\"a\",\"6.0-6.1\":\"y\",\"7.0-7.1\":\"y\",\"8\":\"y\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"a\",\"11.1\":\"a\",\"11.5\":\"a\",\"12\":\"a\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"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).\",\"notes_by_num\":{},\"usage_perc_y\":74.78,\"usage_perc_a\":1.56,\"ucprefix\":true,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"http://www.w3.org/TR/html5/scripting-1.html#attr-script-async\",\"status\":\"cr\",\"links\":[{\"url\":\"http://ie.microsoft.com/testdrive/Performance/AsyncScripts/Default.html\",\"title\":\"Demo\"},{\"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-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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"a\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":80.62,\"usage_perc_a\":0.19,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://raw.github.com/phiggins42/has.js/master/detect/features.js#native-cors-xhr\",\"title\":\"has.js test\"},{\"url\":\"http://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/\",\"title\":\"DOM access using CORS\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"a\",\"9\":\"a\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":82.6,\"usage_perc_a\":7.06,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://docs.webplatform.org/wiki/css/functions/calc\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://developer.mozilla.org/en/CSS/-moz-calc\",\"title\":\"MDN article\"},{\"url\":\"http://hacks.mozilla.org/2010/06/css3-calc/\",\"title\":\"Mozilla Hacks article\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"a\",\"10\":\"y\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y x\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"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.\",\"notes_by_num\":{\"0\":\"\"},\"usage_perc_y\":74.17,\"usage_perc_a\":2.6,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"ruby\":{\"title\":\"Ruby annotation\",\"description\":\"Method of adding pronunciation or other annotations using ruby elements (primarily used in East Asian typography)\",\"spec\":\"http://www.w3.org/TR/html-markup/ruby.html\",\"status\":\"wd\",\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"a\"},\"bb\":{\"7\":\"p\",\"10\":\"a\"},\"op_mob\":{\"10\":\"p\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"p\",\"12.1\":\"p\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"p\"},\"ie_mob\":{\"10\":\"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\":74.18,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":88.57,\"usage_perc_a\":4.89,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"transparent,transparency,alpha\"},\"form-validation\":{\"title\":\"Form validation\",\"description\":\"Method of setting required fields and field types without requiring JavaScript\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#client-side-form-validation\",\"status\":\"wd\",\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a\"}},\"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\":64.74,\"usage_perc_a\":3.81,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"\"},\"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\":\"http://www.w3.org/TR/html5/browsers.html#history-1\",\"status\":\"cr\",\"links\":[{\"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\"},{\"url\":\"http://html5demos.com/history\",\"title\":\"Demo page\"},{\"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\":\"https://github.com/browserstate/history.js\",\"title\":\"History.js polyfill \"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"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\":\"y\",\"11.6\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"15\":\"y\",\"16\":\"y\",\"17\":\"y\",\"18\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Older iOS versions and Android 4.0.4 claim support, but implementation is too buggy to be useful. Partial support in other Safari browsers refers to other buggy behavior.\",\"notes_by_num\":{},\"usage_perc_y\":75.98,\"usage_perc_a\":3.44,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"onpushstate,onreplacestate\"},\"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\":\"http://docs.webplatform.org/wiki/apis/json\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://developer.mozilla.org/En/Using_native_JSON\",\"title\":\"MDN article\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/json.js#json\",\"title\":\"has.js test\"},{\"url\":\"http://www.json.org/js.html\",\"title\":\"JSON in JS (includes script w/support)\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Requires document to be in IE8+ [standards mode](http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx) to work in IE8.\",\"notes_by_num\":{},\"usage_perc_y\":92.91,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://www.sitepoint.com/exploring-classlist-api/\",\"title\":\"SitePoint article\"},{\"url\":\"http://aurelio.audero.it/demo/classlist-api-demo.html\",\"title\":\"Demo using classList\"},{\"url\":\"http://hacks.mozilla.org/2010/01/classlist-in-firefox-3-6/\",\"title\":\"Mozilla Hacks article\"},{\"url\":\"http://docs.webplatform.org/wiki/dom/Element/classList\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://github.com/eligrey/classList.js\",\"title\":\"Polyfill script\"}],\"categories\":[\"HTML5\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"p\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"p\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"p\",\"11\":\"p\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":81.07,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://raw.github.com/phiggins42/has.js/master/detect/css.js#css-text-overflow\",\"title\":\"has.js test\"},{\"url\":\"https://github.com/rmorse/AutoEllipsis\",\"title\":\"jQuery polyfill for Firefox\"},{\"url\":\"http://www.css3files.com/text/\",\"title\":\"Information page\"},{\"url\":\"https://developer.mozilla.org/En/CSS/Text-overflow\",\"title\":\"MDN article\"},{\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"y x\"},\"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\":\"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\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":93.11,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"textoverflow,ellipsis\"},\"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\":\"http://perian.org/\",\"title\":\"Perian :Mac OSX Webm Codec install\"},{\"url\":\"https://tools.google.com/dlpage/webmmf\",\"title\":\"Codec for IE9 support\"},{\"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://www.broken-links.com/2010/09/01/playing-webm-in-safari-with-plugins/\",\"title\":\"Info on supporting WebM in Safari\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"p\",\"10\":\"p\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"p\",\"6\":\"p\",\"6.1\":\"p\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.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\":\"a\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"a\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"p\"}},\"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\":51.32,\"usage_perc_a\":10.47,\"ucprefix\":false,\"parent\":\"video\",\"keywords\":\"matroska\"},\"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://www.interoperabilitybridges.com/html5-extension-for-wmp-plugin\",\"title\":\"Firefox extension allowing support in Win7\"},{\"url\":\"http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC\",\"title\":\"Wikipedia article\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"a\"},\"ie_mob\":{\"10\":\"y\"}},\"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. Firefox [will include support](http://blog.lizardwrangler.com/2012/03/18/video-user-experience-and-our-mission/) on some platforms in upcoming versions. Firefox 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. Partial 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\":64.15,\"usage_perc_a\":18.98,\"ucprefix\":false,\"parent\":\"video\",\"keywords\":\"avc,mp4,mpv,mov,aac\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"p\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":49.58,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"video\",\"keywords\":\"xiph\"},\"wordwrap\":{\"title\":\"CSS3 Overflow-wrap\",\"description\":\"Allows lines to be broken within words if an otherwise unbreakable string is too long to fit.\",\"spec\":\"http://www.w3.org/TR/css3-text/#overflow-wrap\",\"status\":\"wd\",\"links\":[{\"url\":\"http://www.css3files.com/text/#wordwrap\",\"title\":\"Information page\"},{\"url\":\"http://docs.webplatform.org/wiki/css/properties/word-wrap\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://developer.mozilla.org/En/CSS/Word-wrap\",\"title\":\"MDN article\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"a\",\"6\":\"a\",\"7\":\"a\",\"8\":\"a\",\"9\":\"a\",\"10\":\"a\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"a\",\"10\":\"y\"},\"op_mob\":{\"10\":\"a\",\"11\":\"a\",\"11.1\":\"a\",\"11.5\":\"a\",\"12\":\"a\",\"12.1\":\"a\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"a\"},\"ie_mob\":{\"10\":\"a\"}},\"notes\":\"Partial support refers to requiring the legacy name \\\"word-wrap\\\" (rather than overflow-wrap) to work.\",\"notes_by_num\":{},\"usage_perc_y\":48.74,\"usage_perc_a\":44.61,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"wordwrap,word-wrap\"},\"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\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-progress-element\",\"status\":\"wd\",\"links\":[{\"url\":\"http://dev.opera.com/articles/view/new-form-features-in-HTML5/#newoutput\",\"title\":\"Dev.Opera article\"},{\"url\":\"http://docs.webplatform.org/wiki/html/elements/progress\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://peter.sh/examples/?/html/meter-progress.html\",\"title\":\"Examples of progress and meter elements\"},{\"url\":\"http://html5doctor.com/measure-up-with-the-meter-tag/\",\"title\":\"HTML5 Doctor on meter element \"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"a\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a\"}},\"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.\",\"notes_by_num\":{},\"usage_perc_y\":57.92,\"usage_perc_a\":16.47,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"\"},\"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://github.com/anselmh/object-fit\",\"title\":\"object-fit JavaScript-Polyfill\"},{\"url\":\"http://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\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\":\"u\",\"33\":\"u\",\"34\":\"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\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"n\",\"8\":\"n\"},\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"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\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":38.46,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"objectfit,objectposition\"},\"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\":\"http://www.w3.org/TR/XMLHttpRequest2/\",\"status\":\"wd\",\"links\":[{\"url\":\"http://docs.webplatform.org/wiki/apis/xhr/XMLHttpRequest\",\"title\":\"WebPlatform Docs\"},{\"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\"}],\"categories\":[\"DOM\",\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":81.11,\"usage_perc_a\":0.16,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"formdata\"},\"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://www.impressivewebs.com/min-max-width-height-css/\",\"title\":\"CSS Basics post\"},{\"url\":\"http://docs.webplatform.org/wiki/css/properties/min-width\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://code.google.com/p/ie7-js/\",\"title\":\"JS library with support\"}],\"categories\":[\"CSS2\"],\"stats\":{\"ie\":{\"5.5\":\"p\",\"6\":\"p\",\"7\":\"y\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":93.17,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"min-width,min-height,max-width,max-height\"},\"details\":{\"title\":\"Details & Summary elements\",\"description\":\"The &lt;details> element generates a simple no-JavaScript widget to show/hide element contents, optionally by clicking on its child &lt;summary> element.\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-details-element\",\"status\":\"wd\",\"links\":[{\"url\":\"http://mathiasbynens.be/notes/html5-details-jquery\",\"title\":\"jQuery fallback script\"},{\"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\"},{\"url\":\"http://html5doctor.com/summary-figcaption-element/\",\"title\":\"HTML5 Doctor article\"},{\"url\":\"https://gist.github.com/370590\",\"title\":\"Fallback script\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"p\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"p\",\"10\":\"y\"},\"op_mob\":{\"10\":\"p\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"p\",\"12.1\":\"p\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":55.2,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://www.westciv.com/tools/textStroke/\",\"title\":\"Live editor\"},{\"url\":\"http://css-tricks.com/7405-adding-stroke-to-web-text/\",\"title\":\"Information & workarounds\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\":\"u\",\"33\":\"u\",\"34\":\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"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\":57.88,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"textstroke,stroke-color,stroke-width,fill-color\"},\"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://docs.webplatform.org/wiki/css/properties/display\",\"title\":\"WebPlatform Docs\"},{\"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\"}],\"categories\":[\"CSS2\"],\"stats\":{\"ie\":{\"5.5\":\"a\",\"6\":\"a\",\"7\":\"a\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":93.03,\"usage_perc_a\":0.43,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"inlineblock\"},\"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.chromium.org/developers/design-documents/desktop-notifications/api-specification\",\"title\":\"Chromium API\"},{\"url\":\"http://www.html5rocks.com/tutorials/notifications/quick/\",\"title\":\"HTML5 Rocks tutorial\"},{\"url\":\"http://aurelio.audero.it/demo/web-notifications-api-demo.html\",\"title\":\"Demo\"},{\"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\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"a x\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"a x\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":48.79,\"usage_perc_a\":1.85,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"stream\":{\"title\":\"getUserMedia/Stream API\",\"description\":\"Method of accessing external device data (such as a webcam video stream). Formerly this was envisioned as the &lt;device> element.\",\"spec\":\"http://www.w3.org/TR/mediacapture-streams/\",\"status\":\"wd\",\"links\":[{\"url\":\"http://docs.webplatform.org/wiki/dom/Navigator/getUserMedia\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://my.opera.com/core/blog/2011/03/23/webcam-orientation-preview\",\"title\":\"Technology preview from Opera\"}],\"categories\":[\"JS API\",\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":53.69,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"camera,device,getUserMedia,media stream,Media Capture API\"},\"svg-img\":{\"title\":\"SVG in HTML img element\",\"description\":\"Method of displaying SVG images in HTML using &lt;img>\",\"spec\":\"http://www.w3.org/TR/html5/dom.html#embedded-content\",\"status\":\"cr\",\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"a\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":87.2,\"usage_perc_a\":0.01,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"svg-as-img,svg-in-img\"},\"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\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-datalist-element\",\"status\":\"wd\",\"links\":[{\"url\":\"http://github.com/thgreasi/datalist-polyfill\",\"title\":\"Minimal Datalist polyfill w/tutorial\"},{\"url\":\"https://developer.mozilla.org/en/HTML/Element/datalist\",\"title\":\"MDN reference\"},{\"url\":\"http://hacks.mozilla.org/2010/11/firefox-4-html5-forms/\",\"title\":\"Mozilla Hacks article\"},{\"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://afarkas.github.com/webshim/demos/\",\"title\":\"HTML5 Library including datalist support\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"p\",\"10\":\"a\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"p\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"p\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"p\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"p\"}},\"notes\":\"Partial support in IE10 refers to [significantly buggy behavior](http://playground.onereason.eu/2013/04/ie10s-lousy-support-for-datalists/).\",\"notes_by_num\":{},\"usage_perc_y\":54.54,\"usage_perc_a\":9.81,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"list attribute\"},\"dataset\":{\"title\":\"dataset & data-* attributes\",\"description\":\"Method of applying and accessing custom data to elements.\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#embedding-custom-non-visible-data-with-the-data-*-attributes\",\"status\":\"wd\",\"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\":\"https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes\",\"title\":\"MDN Guide - Using data-* attributes\"},{\"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\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"a\",\"6\":\"a\",\"7\":\"a\",\"8\":\"a\",\"9\":\"a\",\"10\":\"a\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"a\",\"11\":\"a\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a\"}},\"notes\":\"All browsers can already use data-* attributes and access them using getAttribute. \\\"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\":77.85,\"usage_perc_a\":15.61,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"DOMStringMap\"},\"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\":\"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\":\"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://github.com/codler/Grid-Layout-Polyfill\",\"title\":\"Grid Layout Polyfill\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"p\",\"10\":\"y x\",\"11\":\"y 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\":\"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\":\"u\",\"33\":\"u\",\"34\":\"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\",\"30\":\"p\",\"31\":\"p\",\"32\":\"p\",\"33\":\"p\",\"34\":\"p\",\"35\":\"p\",\"36\":\"p\",\"37\":\"u\",\"38\":\"u\",\"39\":\"u\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"p\",\"6.1\":\"p\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"p\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"p\"},\"and_chr\":{\"36\":\"p\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"y x\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":10.22,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"grids,grid-row,grid-column\"},\"menu\":{\"title\":\"Toolbar/context menu\",\"description\":\"Method of defining a toolbar menu, a context menu or a list of (interactive) options using the &lt;menu> element.\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-menuitem-element\",\"status\":\"cr\",\"links\":[{\"url\":\"http://addyosmani.github.com/jQuery-contextMenu/\",\"title\":\"jQuery polyfill\"},{\"url\":\"https://bug617528.bugzilla.mozilla.org/attachment.cgi?id=554309\",\"title\":\"Demo\"},{\"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\"},\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"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\":13.68,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"contextmenu,menuitem,command\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":85.05,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"rems\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"u\"}},\"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\":72.43,\"usage_perc_a\":12.41,\"ucprefix\":false,\"parent\":\"fontface\",\"keywords\":\"\"},\"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/m/tests/drag2.html\",\"title\":\"Multi-touch demo\"},{\"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\"},{\"url\":\"http://schepers.cc/getintouch\",\"title\":\"Information on the spec development\"},{\"url\":\"http://www.quirksmode.org/mobile/tableTouch.html\",\"title\":\"Detailed support tables\"}],\"categories\":[\"DOM\",\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"p\",\"11\":\"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\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"y\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\":\"y\",\"23\":\"y\",\"24\":\"y\",\"25\":\"y\",\"26\":\"y\",\"27\":\"y\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"p\"}},\"notes\":\"Internet Explorer implements Pointer Events specification which supports more input devices than Touch Events one.\\r\\n\\r\\nRemoved support in Firefox refers to desktop Firefox only.\",\"notes_by_num\":{},\"usage_perc_y\":54.45,\"usage_perc_a\":0.79,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"touchstart,touchend,touchmove,touchenter,touchleave,touchcancel\"},\"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\":\"http://www.w3.org/TR/selectors-api2/\",\"status\":\"wd\",\"links\":[{\"url\":\"http://docs.webplatform.org/wiki/dom/HTMLElement/matchesSelector\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://developer.mozilla.org/en/DOM/Element.mozMatchesSelector\",\"title\":\"MDN article\"}],\"categories\":[\"DOM\",\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"a x\",\"10\":\"a x\",\"11\":\"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\":\"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\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"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\",\"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\":\"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\"},\"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\":\"a x\"},\"op_mini\":{\"5.0-7.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\":\"a x\"},\"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\",\"22\":\"a x\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"a x\"},\"ie_mob\":{\"10\":\"a x\"}},\"notes\":\"Partial support refers to supporting the older specification's \\\"matchesSelector\\\" name rather than just \\\"matches\\\".\",\"notes_by_num\":{},\"usage_perc_y\":36,\"usage_perc_a\":49.08,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\" matchesSelector\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":79.12,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"pointerevents\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"a x\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Partial support refers to only supporting the now deprecated BlobBuilder to create blobs.\",\"notes_by_num\":{},\"usage_perc_y\":73.15,\"usage_perc_a\":6.68,\"ucprefix\":true,\"parent\":\"fileapi\",\"keywords\":\"\"},\"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\":\"http://docs.webplatform.org/wiki/apis/file/FileReader\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://developer.mozilla.org/en/DOM/FileReader\",\"title\":\"FileReader API\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":80.14,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"fileapi\",\"keywords\":\"\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"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\":40.33,\"usage_perc_a\":0.21,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"filewriter\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y x\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":79.1,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"fileapi\",\"keywords\":\"createobjecturl\"},\"rellist\":{\"title\":\"relList (DOMTokenList)\",\"description\":\"Method of easily manipulating rel attribute values on elements, using the DOMTokenList object (similar to classList).\",\"spec\":\"http://www.w3.org/TR/html5/text-level-semantics.html#the-a-element\",\"status\":\"wd\",\"links\":[{\"url\":\"https://developer.mozilla.org/en-US/docs/DOM/DOMTokenList\",\"title\":\"MDN - DOMTokenList\"}],\"categories\":[\"HTML5\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":5.02,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":80.86,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"float64array,dataview,uint8array\"},\"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://html5labs.interoperabilitybridges.com/prototypes/device-orientation-events/device-orientation-events/info\",\"title\":\"DeviceOrientation implementation prototype for IE10\"},{\"url\":\"http://www.html5rocks.com/en/tutorials/device/orientation/\",\"title\":\"HTML5 Rocks tutorial\"},{\"url\":\"http://aurelio.audero.it/demo/device-orientation-api-demo.html\",\"title\":\"Demo\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-orientation\",\"title\":\"has.js test\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"a\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"a\"},\"bb\":{\"7\":\"n\",\"10\":\"a\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"a\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":{},\"usage_perc_y\":0.08,\"usage_perc_a\":74.12,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"http://www.w3.org/TR/html5/the-script-element.html#attr-script-defer\",\"status\":\"cr\",\"links\":[{\"url\":\"https://developer.mozilla.org/en/HTML/Element/script#Attributes\",\"title\":\"MDN article\"},{\"url\":\"http://docs.webplatform.org/wiki/html/attributes/defer\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-defer\",\"title\":\"has.js test\"}],\"categories\":[\"DOM\",\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"a\",\"6\":\"a\",\"7\":\"a\",\"8\":\"a\",\"9\":\"a\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Partial support refers to a buggy implementation in IE<10\",\"notes_by_num\":{},\"usage_perc_y\":80.84,\"usage_perc_a\":7.49,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"cr\",\"links\":[{\"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\"},{\"url\":\"https://developer.mozilla.org/en/API/navigationTiming\",\"title\":\"MDN article\"}],\"categories\":[\"JS API\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":73.09,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"performance,performance.timing\"},\"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\":\"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/corbanbrook/audionode.js\",\"title\":\"Polyfill to support Web Audio API in Firefox\"},{\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y x\",\"6.1\":\"y x\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Firefox versions < 25 support an alternative, deprecated audio API.\",\"notes_by_num\":{},\"usage_perc_y\":61.8,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"web-audio\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"y x\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"a 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\":7.91,\"usage_perc_a\":10.36,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://docs.webplatform.org/wiki/dom/methods/requestFullscreen\",\"title\":\"WebPlatform Docs\"},{\"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\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"y 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\":\"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\"},\"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\"},\"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\",\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"a\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"a x\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Partial support refers to supporting an earlier draft of the spec.\",\"notes_by_num\":{},\"usage_perc_y\":50.15,\"usage_perc_a\":14.55,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"full-screen\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y x\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":74.57,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"input-range\":{\"title\":\"Range input type\",\"description\":\"Form field type that allows the user to select a value using a slider widget.\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#range-state-(type=range)\",\"status\":\"wd\",\"links\":[{\"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\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-range\",\"title\":\"has.js test\"},{\"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\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":77.16,\"usage_perc_a\":3.98,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"\"},\"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\":\"http://docs.webplatform.org/wiki/css/media_queries/apis/matchMedia\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://github.com/paulirish/matchMedia.js/\",\"title\":\"matchMedia.js polyfill\"},{\"url\":\"https://developer.mozilla.org/en/CSS/Using_media_queries_from_code\",\"title\":\"MDN tutorial\"},{\"url\":\"https://developer.mozilla.org/en/DOM/window.matchMedia\",\"title\":\"MDN article\"}],\"categories\":[\"JS API\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":80.68,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"mediaquerylist\"},\"input-datetime\":{\"title\":\"Date/time input types\",\"description\":\"Form field widget to easily allow users to enter dates and/or times, generally by using a calendar widget.\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#date-state-(type=date)\",\"status\":\"wd\",\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"u\",\"7\":\"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\":\"a\",\"16\":\"a\",\"17\":\"a\",\"18\":\"a\",\"19\":\"a\",\"20\":\"a\",\"21\":\"a\",\"22\":\"a\",\"23\":\"a\",\"24\":\"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\":\"y\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"a\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Safari provides date-formatted text fields, but no real calendar widget. Partial support in Chrome refers to a missing calendar widget for the \\\"datetime\\\" type (and other types in older versions). Some modified versions of the Android 4.x browser do have support for date/time fields. Partial support in iOS refers to a lack of support for attributes like step, min, or max.\",\"notes_by_num\":{},\"usage_perc_y\":6.98,\"usage_perc_a\":41.2,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"datepicker,timepicker\"},\"input-color\":{\"title\":\"Color input type\",\"description\":\"Form field allowing the user to select a color.\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#color-state-(type=color)\",\"status\":\"wd\",\"links\":[{\"url\":\"http://docs.webplatform.org/wiki/html/elements/input/type/color\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://github.com/jonstipe/color-polyfill\",\"title\":\"Polyfill\"},{\"url\":\"http://www.html5tutorial.info/html5-color.php\",\"title\":\"Tutorial\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"n\",\"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\":\"n\",\"16\":\"n\",\"17\":\"y\",\"18\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":53.17,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"colour\"},\"input-number\":{\"title\":\"Number input type\",\"description\":\"Form field type for numbers.\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#number-state-(type=number)\",\"status\":\"wd\",\"links\":[{\"url\":\"http://docs.webplatform.org/wiki/html/elements/input/type/number\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://github.com/jonstipe/number-polyfill\",\"title\":\"Polyfill\"},{\"url\":\"http://www.html5tutorial.info/html5-number.php\",\"title\":\"Tutorial\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-number\",\"title\":\"has.js test\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"a\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"a\"},\"bb\":{\"7\":\"n\",\"10\":\"a\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"a\"},\"ie_mob\":{\"10\":\"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.\",\"notes_by_num\":{},\"usage_perc_y\":50.41,\"usage_perc_a\":28.39,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"spinner\"},\"iframe-sandbox\":{\"title\":\"sandbox attribute for iframes\",\"description\":\"Method of running external site pages with reduced privileges (e.g. no JavaScript) in iframes\",\"spec\":\"http://www.w3.org/TR/html5/embedded-content-0.html#attr-iframe-sandbox\",\"status\":\"cr\",\"links\":[{\"url\":\"http://docs.webplatform.org/wiki/html/attributes/sandbox\",\"title\":\"WebPlatform Docs\"},{\"url\":\"http://msdn.microsoft.com/en-us/hh563496\",\"title\":\"MSDN article\"},{\"url\":\"http://blog.chromium.org/2010/05/security-in-depth-html5s-sandbox.html\",\"title\":\"Chromium blog article\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":79.82,\"usage_perc_a\":1.34,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":93.04,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://davidwalsh.name/textarea-resize\",\"title\":\"On textarea resizing\"},{\"url\":\"http://css-tricks.com/almanac/properties/r/resize/\",\"title\":\"CSS Tricks info\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Opera 12.10+ currently only supports the resize property for textarea elements.\",\"notes_by_num\":{},\"usage_perc_y\":58.05,\"usage_perc_a\":0.32,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"horizontal,vertical\"},\"input-placeholder\":{\"title\":\"input placeholder attribute\",\"description\":\"Method of setting placeholder text for text-like input fields, to suggest the expected inserted information.\",\"spec\":\"http://dev.w3.org/html5/spec/Overview.html#attr-input-placeholder\",\"status\":\"cr\",\"links\":[{\"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=\"},{\"url\":\"http://www.zachleat.com/web/placeholder/\",\"title\":\"Article on usage\"},{\"url\":\"https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-attr-placeholder\",\"title\":\"has.js test\"},{\"url\":\"https://github.com/mathiasbynens/jquery-placeholder\",\"title\":\"Polyfill\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"a\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\":\"a\",\"11.6\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"15\":\"y\",\"16\":\"y\",\"17\":\"y\",\"18\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Partial support in older Safari and Opera versions refers to lacking placeholder support on textarea elements. \",\"notes_by_num\":{},\"usage_perc_y\":79.47,\"usage_perc_a\":3.02,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"\"},\"spdy\":{\"title\":\"SPDY networking protocol\",\"description\":\"Networking protocol for low-latency transport of content over the web.\",\"spec\":\"http://tools.ietf.org/html/draft-mbelshe-httpbis-spdy-00\",\"status\":\"unoff\",\"links\":[{\"url\":\"http://dev.chromium.org/spdy/spdy-whitepaper\",\"title\":\"SPDY whitepaper\"},{\"url\":\"http://en.wikipedia.org/wiki/SPDY\",\"title\":\"Wikipedia\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\":\"y\",\"14\":\"y\",\"15\":\"y\",\"16\":\"y\",\"17\":\"y\",\"18\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"y\",\"25\":\"y\",\"26\":\"y\",\"27\":\"y\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":60.33,\"usage_perc_a\":7.18,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"http://docs.webplatform.org/wiki/css/repeating-linear-gradient\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://developer.mozilla.org/en/CSS/repeating-linear-gradient\",\"title\":\"MDN article\"},{\"url\":\"http://www.css3files.com/gradient/#repeatinglineargradient\",\"title\":\"Information page\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"y x\",\"6\":\"y x\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"a x\",\"11.5\":\"a x\",\"12\":\"y x\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Firefox 10+, Chrome 26+ and Opera 11.6+ also support the new \\\"to (side)\\\" syntax.\",\"notes_by_num\":{},\"usage_perc_y\":80.92,\"usage_perc_a\":0.02,\"ucprefix\":false,\"parent\":\"css-gradients\",\"keywords\":\"\"},\"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://dl.dropbox.com/u/3260327/angular/CSS3ImageManipulation.html\",\"title\":\"Filter editor\"},{\"url\":\"http://html5-demos.appspot.com/static/css/filters/index.html\",\"title\":\"Demo file for WebKit browsers\"},{\"url\":\"http://bennettfeely.com/filters/\",\"title\":\"Filter Playground\"},{\"url\":\"http://www.html5rocks.com/en/tutorials/filters/understanding-css/\",\"title\":\"HTML5Rocks article\"}],\"categories\":[\"CSS3\",\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y x\",\"6.1\":\"y x\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"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 31 [only with url() version](https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Browser_compatibility)\",\"notes_by_num\":{},\"usage_perc_y\":50.09,\"usage_perc_a\":13.94,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"sepia,hue-rotate,invert,saturate\"},\"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\":\"http://snipplr.com/view/13523/\",\"title\":\"Polyfill for IE\"},{\"url\":\"https://developer.mozilla.org/en/DOM/window.getComputedStyle\",\"title\":\"MDN article\"},{\"url\":\"http://ie.microsoft.com/testdrive/HTML5/getComputedStyle/\",\"title\":\"Demo\"},{\"url\":\"http://docs.webplatform.org/wiki/css/cssom/methods/getComputedStyle\",\"title\":\"WebPlatform Docs\"}],\"categories\":[\"DOM\",\"JS API\",\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"a\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"a\",\"10\":\"y\"},\"op_mob\":{\"10\":\"a\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":83.58,\"usage_perc_a\":4.99,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"a\"},\"bb\":{\"7\":\"a\",\"10\":\"a\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Partial support refers to supporting the \\\"break-all\\\" value, but not the \\\"keep-all\\\" value.\",\"notes_by_num\":{},\"usage_perc_y\":31.08,\"usage_perc_a\":57.88,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"break-all,keep-all\"},\"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://blog.rodneyrehm.de/archives/34-iOS7-Mobile-Safari-And-Viewport-Units.html\",\"title\":\"Back-Forward issue 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://css-tricks.com/viewport-sized-typography/\",\"title\":\"Blog post\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"a #2\",\"10\":\"a #1\",\"11\":\"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\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"y\",\"25\":\"y\",\"26\":\"y\",\"27\":\"y\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"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 #1\",\"21\":\"a #1\",\"22\":\"a #1\",\"23\":\"a #1\",\"24\":\"a #1\",\"25\":\"a #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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"a #1\",\"6.1\":\"y\",\"7\":\"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\"},\"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 #1\",\"7.0-7.1\":\"a #3\",\"8\":\"a #3\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"a #1\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a #1\"}},\"notes\":\"Partial support in IE9 refers to supporting \\\"vm\\\" instead of \\\"vmin\\\". Partial support in IE10 refers to lack of \\\"vmax\\\" support. Partial support in iOS7 is due to buggy behavior of the \\\"vh\\\" unit. All other partial support refers to not supporting the \\\"vmax\\\" unit. \",\"notes_by_num\":{},\"usage_perc_y\":55.64,\"usage_perc_a\":20.28,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"vm,viewport-percentage\"},\"contentsecuritypolicy\":{\"title\":\"Content Security Policy\",\"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://content-security-policy.com/\",\"title\":\"CSP Examples & Quick Reference\"},{\"url\":\"http://html5rocks.com/en/tutorials/security/content-security-policy/\",\"title\":\"HTML5Rocks article\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"a x\",\"11\":\"a x\"},\"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\"},\"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\",\"26\":\"y\",\"27\":\"y\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"a x\",\"6\":\"y x\",\"6.1\":\"y x\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-4.1\":\"n\",\"4.2-4.3\":\"n\",\"5.0-5.1\":\"a x\",\"6.0-6.1\":\"y x\",\"7.0-7.1\":\"y\",\"8\":\"y\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"a x\"}},\"notes\":\"The HTTP header is 'X-Content-Security-Policy' for Firefox until version 23 and IE10&11, and 'X-Webkit-CSP' for Chrome until version 25 and Safari until version 7. 'Content-Security-Policy' is the official W3C defined header, used by Chrome version 25 and later, Firefox version 23 and later, and Safari 7 and later.\",\"notes_by_num\":{},\"usage_perc_y\":64.12,\"usage_perc_a\":11.08,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"csp,security,header\"},\"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\":\"http://docs.webplatform.org/wiki/apis/timing/properties/visibilityState\",\"title\":\"WebPlatform Docs\"},{\"url\":\"https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API\",\"title\":\"MDN article\"},{\"url\":\"http://aurelio.audero.it/demo/page-visibility-api-demo.html\",\"title\":\"Demo\"},{\"url\":\"http://www.sitepoint.com/introduction-to-page-visibility-api/\",\"title\":\"SitePoint article\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\",\"39\":\"y\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y x\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":73.47,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"visibilitystate\"},\"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\":\"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\"},{\"url\":\"http://dev.chromium.org/sts\",\"title\":\"Chromium article\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"The HTTP header is 'Strict-Transport-Security'.\",\"notes_by_num\":{\"0\":\"\"},\"usage_perc_y\":57.46,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"sts,hsts,security,header\"},\"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\":\"http://www.w3.org/TR/html5/document-metadata.html#attr-style-scoped\",\"status\":\"cr\",\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"u\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{\"1\":\"Enabled in Chrome though the \\\"experimental Web Platform features\\\" flag in chrome://flags\"},\"usage_perc_y\":12.95,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"scope\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"n\",\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"u\",\"22\":\"n\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"Partial support in Safari refers to supporting viewBox dimensions but not a view ID.\",\"notes_by_num\":{},\"usage_perc_y\":29.38,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"fragments,sprite\"},\"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\":\"https://developer.mozilla.org/en-US/docs/CSS/outline\",\"title\":\"Mozilla Developer Network: outline\"},{\"url\":\"http://dev.w3.org/csswg/css3-ui/#outline\",\"title\":\"CSS Basic User Interface Module Level 3\"}],\"categories\":[\"CSS2\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"y\",\"9\":\"y\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":89.84,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"-moz-outline,outline-width,outline-style,outline-color\"},\"download\":{\"title\":\"Download attribute\",\"description\":\"When used on an anchor, this attribute signifies that the resource it points to should be downloaded by the browser rather than navigate to it.\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#downloading-resources\",\"status\":\"wd\",\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":54.26,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"download,a.download,a[download],download attribute\"},\"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\":\"cr\",\"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\"},\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"u\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"p\"},\"bb\":{\"7\":\"p\",\"10\":\"p\"},\"op_mob\":{\"10\":\"n\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"p\",\"12.1\":\"p\",\"22\":\"p\"},\"and_chr\":{\"36\":\"p\"},\"and_ff\":{\"31\":\"p\"},\"ie_mob\":{\"10\":\"a x\"}},\"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\":7.18,\"usage_perc_a\":3.04,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"pointerdown,pointermove,pointerup,pointercancel,pointerover,pointerout,pointerenter,pointerleave\"},\"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\":\"http://msdn.microsoft.com/en-us/library/ie/hh781492(v=vs.85).aspx\",\"title\":\"MSDN Documentation\"},{\"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\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y x\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"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\":82.23,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"http://antimatter15.github.io/weppy/demo.html\",\"title\":\"Polyfill for browsers with WebM support\"},{\"url\":\"http://libwebpjs.appspot.com/\",\"title\":\"Decoder in JS\"},{\"url\":\"https://developers.google.com/speed/webp/\",\"title\":\"Official website\"},{\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"a\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":42.98,\"usage_perc_a\":3.87,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"y x\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"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\":62.45,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"fill-available,max-content,min-content,fit-content,contain-floats\"},\"template\":{\"title\":\"HTML templates\",\"description\":\"Method of declaring a portion of reusable markup that is parsed but not rendered until cloned.\",\"spec\":\"http://www.w3.org/TR/html5/scripting-1.html#the-template-element\",\"status\":\"wd\",\"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\":[\"HTML5\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":53.04,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"web components, template\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":44.75,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"audio\",\"keywords\":\"\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":12.82,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"http://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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"u\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":62.39,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"x-doc-messaging\",\"keywords\":\"\"},\"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\"},\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"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\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":63.43,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"tab-size,tab-width\"},\"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://github.com/Polymer/MutationObservers\",\"title\":\"Polyfill\"},{\"url\":\"https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\",\"title\":\"MutationObserver from MDN\"}],\"categories\":[\"DOM\",\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"p\",\"10\":\"p\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y x\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y x\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"p\"}},\"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\":70.7,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"MutationObserver\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"u\",\"11\":\"u\",\"11.1\":\"u\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":72.46,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"::selection,selection\"},\"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://dev.w3.org/csswg/selectors/#placeholder\",\"status\":\"unoff\",\"links\":[{\"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\"},{\"url\":\"http://msdn.microsoft.com/en-us/library/ie/hh772745(v=vs.85).aspx\",\"title\":\"MSDN article\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"a x\",\"11\":\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"a x\"},\"and_chr\":{\"36\":\"a x\"},\"and_ff\":{\"31\":\"a x\"},\"ie_mob\":{\"10\":\"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\":81.79,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"::placeholder,placeholder\"},\"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\":\"wd\",\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":60.08,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"canvas\",\"keywords\":\"\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"u\",\"3.2\":\"u\",\"4\":\"a\",\"5\":\"a\",\"5.1\":\"a\",\"6\":\"a\",\"6.1\":\"a\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"a\"},\"bb\":{\"7\":\"n\",\"10\":\"a\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"a\"},\"and_chr\":{\"36\":\"a\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":12.69,\"usage_perc_a\":68.69,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"cut,copy,paste,clipboarddata\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"BlackBerry 10 recognizes RTCPeerConnection but real support is unconfirmed.\",\"notes_by_num\":{},\"usage_perc_y\":52.23,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"a\",\"10\":\"a\",\"11\":\"a\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"a\",\"3.2\":\"a\",\"4\":\"a\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"u\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Internet Explorer does not support 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\":52.27,\"usage_perc_a\":18.12,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"cursors, pointers\"},\"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\":\"http://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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"WebVTT must be used with the &lt;track> element.\\r\\n\\r\\nFirefox currently lacks support for the for ::cue pseudoelement.\",\"notes_by_num\":{},\"usage_perc_y\":59.51,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"video\",\"keywords\":\"captions,track\"},\"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.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\"},{\"url\":\"http://www.chromestatus.com/features/5681726336532480\",\"title\":\"Chromium dashboard - ES6 Promises\"}],\"categories\":[\"DOM\",\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"p\",\"6\":\"p\",\"7\":\"p\",\"8\":\"p\",\"9\":\"p\",\"10\":\"p\",\"11\":\"p\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"p\",\"3.2\":\"p\",\"4\":\"p\",\"5\":\"p\",\"5.1\":\"p\",\"6\":\"p\",\"6.1\":\"p\",\"7\":\"p\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"p\"},\"bb\":{\"7\":\"p\",\"10\":\"p\"},\"op_mob\":{\"10\":\"p\",\"11\":\"p\",\"11.1\":\"p\",\"11.5\":\"p\",\"12\":\"p\",\"12.1\":\"p\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"p\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":48.46,\"usage_perc_a\":0.98,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"futures\"},\"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\":\"https://github.com/filamentgroup/fixed-sticky\",\"title\":\"Polyfill\"},{\"url\":\"https://developer.mozilla.org/en-US/docs/Web/CSS/position\",\"title\":\"MDN article\"},{\"url\":\"http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit\",\"title\":\"HTML5Rocks\"},{\"url\":\"http://docs.webplatform.org/wiki/css/properties/position\",\"title\":\"WebPlatform Docs\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"y x\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{\"2\":\"Enabled in Chrome though the \\\"experimental Web Platform features\\\" flag in chrome://flags\",\"1\":\"Can be enabled in Firefox by setting the about:config preference layout.css.sticky.enabled to true\"},\"usage_perc_y\":8.66,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":0.33,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"css variables\"},\"vibration\":{\"title\":\"Vibration API\",\"description\":\"Method to access the vibration mechanism of the hosting device.\",\"spec\":\"http://www.w3.org/TR/vibration/\",\"status\":\"wd\",\"links\":[{\"url\":\"http://davidwalsh.name/vibration-api\",\"title\":\"Vibration API sample code & demo\"},{\"url\":\"http://aurelio.audero.it/demo/vibration-api-demo.html\",\"title\":\"Demo\"},{\"url\":\"http://code.tutsplus.com/tutorials/html5-vibration-api--mobile-22585\",\"title\":\"Tuts+ article\"},{\"url\":\"https://developer.mozilla.org/en-US/docs/Web/Guide/API/Vibration\",\"title\":\"MDN article\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":52.81,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"vibration,mobile,device\"},\"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\":\"https://medium.com/web-design-technique/6b51bf53743a\",\"title\":\"Blog post\"},{\"url\":\"http://bennettfeely.com/gradients\",\"title\":\"Demo\"},{\"url\":\"http://codepen.io/bennettfeely/pen/rxoAc\",\"title\":\"codepen example\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"y\",\"23\":\"y\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":39.57,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"css blend modes,css blending modes,blending,multiply,screen,background\"},\"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://css-tricks.com/basics-css-blend-modes/\",\"title\":\"Blog post\"},{\"url\":\"http://codepen.io/bennettfeely/pen/csjzd\",\"title\":\"codepen example\"}],\"categories\":[\"CSS\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{\"1\":\"Enabled in Chrome though the \\\"experimental Web Platform features\\\" flag in chrome://flags\"},\"usage_perc_y\":0.02,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"css blend modes,css blending modes\"},\"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://aurelio.audero.it/demo/web-speech-api-demo.html\",\"title\":\"Demo\"},{\"url\":\"http://zenorocha.github.io/voice-elements/\",\"title\":\"Advanced demo and resource\"},{\"url\":\"http://www.sitepoint.com/introducing-web-speech-api/\",\"title\":\"SitePoint article\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"a x\",\"7\":\"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\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"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\":\"a x\",\"8\":\"a x\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"a x\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"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\":46.77,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"speech,recognition,ASR\"},\"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\":\"http://aurelio.audero.it/demo/high-resolution-time-api-demo.html\",\"title\":\"Demo\"},{\"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\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":64.65,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"performance,now,testing\"},\"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\"},\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Support has already landed in Webkit but it is yet to make into Android and Chrome [android issue](https://code.google.com/p/chromium/issues/detail?id=135863)  [chrome issue](https://code.google.com/p/chromium/issues/detail?id=122593)\",\"notes_by_num\":{},\"usage_perc_y\":13.72,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"text-decoration\":{\"title\":\"text-decoration styling\",\"description\":\"Method of defining the type, style and color of lines in the text-decoration property.\",\"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-line\",\"title\":\"MDN Documentation for text-decoration-line\"},{\"url\":\"https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color\",\"title\":\"MDN Documentation for text-decoration-color\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{\"1\":\"Enabled in Chrome though the \\\"experimental Web Platform features\\\" flag in chrome://flags\"},\"usage_perc_y\":13.86,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"text-decoration-line,text-decoration-style,text-decoration-color\"},\"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://aurelio.audero.it/demo/speech-synthesis-api-demo.html\",\"title\":\"Demo\"},{\"url\":\"http://www.sitepoint.com/talking-web-pages-and-the-speech-synthesis-api/\",\"title\":\"SitePoint article\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":43.69,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"web-speech\",\"keywords\":\"speech,synthesis,speechSynthesis,TTS,SpeechSynthesisUtterance,\"},\"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://aurelio.audero.it/demo/user-timing-api-demo.html\",\"title\":\"Demo\"},{\"url\":\"http://www.sitepoint.com/discovering-user-timing-api/\",\"title\":\"SitePoint article\"},{\"url\":\"https://gist.github.com/pmeenan/5902672\",\"title\":\"Polyfill\"},{\"url\":\"http://www.html5rocks.com/en/tutorials/webperformance/usertiming/\",\"title\":\"HTML5Rocks article\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":50.63,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"performance,testing,mark,measure\"},\"srcset\":{\"title\":\"Srcset attribute\",\"description\":\"Allows authors to specify alternate high-resolution sources on <img> elements\",\"spec\":\"http://picture.responsiveimages.org/#relationship-to-srcset\",\"status\":\"other\",\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"This covers the stand-alone `srcset` syntax for resolution switching, not the expanded syntax to be used in concert with `sizes`.\",\"notes_by_num\":{},\"usage_perc_y\":36.02,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://flippinawesome.org/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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"a\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"Partial support in Firefox refers to the fact that only the <code>devicelight</code> event is supported. In addition, 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\":0,\"usage_perc_a\":12.69,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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://alistapart.com/article/css-shapes-101\",\"title\":\"A List Apart article\"},{\"url\":\"http://html.adobe.com/webplatform/layout/shapes/browser-support/\",\"title\":\"CSS shapes support test by Adobe\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"n\",\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{\"1\":\"Enabled in Chrome though the \\\"experimental Web Platform features\\\" flag in chrome://flags\"},\"usage_perc_y\":0.15,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"circle,ellipse,polygon,inset,shape-outside,shape-inside\"},\"domcontentloaded\":{\"title\":\"DOMContentLoaded\",\"description\":\"JavaScript event, fired when the dom is loaded, but not yet stylesheets or images\",\"spec\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html\",\"status\":\"other\",\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"y\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":88.57,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"dom,domready,onload,contentloaded,document\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":13.37,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\"},\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"y\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":70.7,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"optimizeLegibility,optimizeSpeed,geometricPrecision\"},\"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\":\"http://whatwg.org/html#attr-iframe-seamless\",\"status\":\"cr\",\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"u\",\"33\":\"u\",\"34\":\"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\":\"u\",\"38\":\"u\",\"39\":\"u\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"n\",\"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\":\"u\",\"24\":\"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\":\"u\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"u\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"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\":0,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"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\":\"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)\"},{\"url\":\"https://developer.mozilla.org/en-US/docs/Web/CSS/image-orientation\",\"title\":\"MDN article\"}],\"categories\":[\"CSS3\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"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\":12.22,\"usage_perc_a\":6.66,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"image-orientation,from-image,flip\"},\"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\":\"http://www.w3.org/TR/html-picture-element/\",\"status\":\"wd\",\"links\":[{\"url\":\"http://responsiveimages.org/\",\"title\":\"General information about Responsive Images\"},{\"url\":\"http://usecases.responsiveimages.org/\",\"title\":\"Read about the use cases\"},{\"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://www.w3.org/TR/html-picture-element/\",\"title\":\"Latest RICG &lt;picture> specification\"}],\"categories\":[\"HTML5\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\":\"y\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\":\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{\"1\":\"Enabled in Chrome though the \\\"experimental Web Platform features\\\" flag in chrome://flags\"},\"usage_perc_y\":0.01,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"woff2\":{\"title\":\"WOFF 2.0 - A better web font compression 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\"}],\"categories\":[\"Other\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":5.79,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"fontface\",\"keywords\":\"woff, fontface, webfonts\"},\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"n\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"y x\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":7.14,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"},\"web-animation\":{\"title\":\"Web Animations API\",\"description\":\"This function lets you create an animation purely in JavaScript and have it run as efficiently as any CSS Animation or Transition.\",\"spec\":\"http://dev.w3.org/fxtf/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\"}],\"categories\":[\"DOM\",\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"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\"},\"chrome\":{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"n\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":5.79,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"js,animation,animate\"},\"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://googledevelopers.blogspot.com/2013/12/measuring-network-performance-with.html\",\"title\":\"Blog post\"},{\"url\":\"http://aurelio.audero.it/demo/resource-timing-api-demo.html\",\"title\":\"Demo\"},{\"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\"},\"firefox\":{\"2\":\"n\",\"3\":\"n\",\"3.5\":\"n\",\"3.6\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"n\",\"6.1\":\"n\",\"7\":\"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\"},\"ios_saf\":{\"3.2\":\"n\",\"4.0-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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"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\":\"y\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"n\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{\"0\":\"\"},\"usage_perc_y\":50.63,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"performance,testing,resource\"},\"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\":\"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\"},{\"url\":\"http://www.html5rocks.com/tutorials/webcomponents/customelements/\",\"title\":\"HTML5Rocks - Custom Elements: defining new elements in HTML\"},{\"url\":\"http://www.polymer-project.org/platform/custom-elements.html\",\"title\":\"Polymer project (polyfill & web components framework)\"}],\"categories\":[\"HTML5\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"p\",\"11\":\"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\":\"p\",\"30\":\"p\",\"31\":\"p\",\"32\":\"p\",\"33\":\"p\",\"34\":\"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\":\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"p\",\"6.1\":\"p\",\"7\":\"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\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"u\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":37.02,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"web components\"},\"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://status.modern.ie/htmlimports\",\"title\":\"IE Web Platform Status and Roadmap: HTML Imports\"},{\"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://www.polymer-project.org/platform/html-imports.html\",\"title\":\"Polymer project (polyfill & web components framework)\"}],\"categories\":[\"HTML5\",\"DOM\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"p\",\"11\":\"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\":\"p\",\"30\":\"p\",\"31\":\"p\",\"32\":\"p\",\"33\":\"p\",\"34\":\"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\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"n\",\"29\":\"n\",\"30\":\"n\",\"31\":\"n\",\"32\":\"n\",\"33\":\"n\",\"34\":\"p\",\"35\":\"p\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"n\",\"5\":\"n\",\"5.1\":\"n\",\"6\":\"p\",\"6.1\":\"p\",\"7\":\"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\":\"p\",\"22\":\"p\",\"23\":\"y\",\"24\":\"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\"},\"op_mini\":{\"5.0-7.0\":\"n\"},\"android\":{\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"3\":\"n\",\"4\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\",\"4.4\":\"n\",\"4.4.3\":\"u\"},\"bb\":{\"7\":\"n\",\"10\":\"n\"},\"op_mob\":{\"10\":\"n\",\"11\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"12\":\"n\",\"12.1\":\"n\",\"22\":\"n\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"p\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":5.79,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"web components\"},\"input-file-multiple\":{\"title\":\"Multiple file selection\",\"description\":\"Allows users to select multiple files in the file picker.\",\"spec\":\"http://www.w3.org/TR/html5/forms.html#attr-input-multiple\",\"status\":\"wd\",\"links\":[{\"url\":\"http://www.raymondcamden.com/2012/2/28/Working-with-HTML5s-multiple-file-upload-support\",\"title\":\"Article\"},{\"url\":\"https://code.google.com/p/chromium/issues/detail?id=348912\",\"title\":\"Chrome bug (for Android)\"}],\"categories\":[\"HTML5\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"n\",\"3.2\":\"n\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"n #1\"},\"and_chr\":{\"36\":\"n #1\"},\"and_ff\":{\"31\":\"n #1\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"\",\"notes_by_num\":{\"1\":\"Not supported when tested on Android, presumably an OS limitation. \"},\"usage_perc_y\":69.16,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"forms\",\"keywords\":\"\"},\"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\":\"http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#atob\",\"status\":\"other\",\"links\":[{\"url\":\"https://github.com/davidchambers/Base64.js\",\"title\":\"Polyfill\"},{\"url\":\"https://developer.mozilla.org/en-US/docs/Web/API/Window.atob\",\"title\":\"MDN article on atob()\"},{\"url\":\"https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa\",\"title\":\"MDN article on btoa()\"}],\"categories\":[\"JS API\"],\"stats\":{\"ie\":{\"5.5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"y\",\"11\":\"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\"},\"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\"},\"safari\":{\"3.1\":\"y\",\"3.2\":\"y\",\"4\":\"y\",\"5\":\"y\",\"5.1\":\"y\",\"6\":\"y\",\"6.1\":\"y\",\"7\":\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"y\"},\"bb\":{\"7\":\"y\",\"10\":\"y\"},\"op_mob\":{\"10\":\"u\",\"11\":\"y\",\"11.1\":\"y\",\"11.5\":\"y\",\"12\":\"y\",\"12.1\":\"y\",\"22\":\"y\"},\"and_chr\":{\"36\":\"y\"},\"and_ff\":{\"31\":\"y\"},\"ie_mob\":{\"10\":\"y\"}},\"notes\":\"\",\"notes_by_num\":{},\"usage_perc_y\":85.94,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"atob,btoa\"},\"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\"},\"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\"},\"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\"},\"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\",\"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\"},\"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\"},\"op_mini\":{\"5.0-7.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\":\"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\",\"22\":\"y x\"},\"and_chr\":{\"36\":\"y x\"},\"and_ff\":{\"31\":\"y x\"},\"ie_mob\":{\"10\":\"n\"}},\"notes\":\"The `appearance` property currently does not appear in any CSS specification so there is no specifically correct usage.\",\"notes_by_num\":{},\"usage_perc_y\":72.05,\"usage_perc_a\":0,\"ucprefix\":false,\"parent\":\"\",\"keywords\":\"\"}}}\n"
  },
  {
    "path": "core/data/caniuse_extras/css-placeholder.json",
    "content": "{\n  \"title\":\"::placeholder CSS pseudo-element\",\n  \"description\":\"The ::placeholder pseudo-element represents any form element displaying placeholder text.\",\n  \"spec\":\"https://developer.mozilla.org/en-US/docs/Web/CSS/::-moz-placeholder\",\n  \"status\":\"unoff\",\n  \"links\":[\n    {\n      \"url\":\"http://css-tricks.com/snippets/css/style-placeholder-text/\",\n      \"title\":\"CSS-Tricks article with all prefixes\"\n    },\n    {\n      \"url\":\"http://wiki.csswg.org/ideas/placeholder-styling\",\n      \"title\":\"CSSWG discussion\"\n    },\n    {\n      \"url\":\"http://msdn.microsoft.com/en-us/library/ie/hh772745(v=vs.85).aspx\",\n      \"title\":\"MSDN article\"\n    }\n  ],\n  \"bugs\":[\n    \n  ],\n  \"categories\":[\n    \"CSS\"\n  ],\n  \"stats\":{\n    \"ie\":{\n      \"5.5\":\"n\",\n      \"6\":\"n\",\n      \"7\":\"n\",\n      \"8\":\"n\",\n      \"9\":\"n\",\n      \"10\":\"y x\",\n      \"11\":\"y x\"\n    },\n    \"firefox\":{\n      \"2\":\"n\",\n      \"3\":\"n\",\n      \"3.5\":\"n\",\n      \"3.6\":\"n\",\n      \"4\":\"y x\",\n      \"5\":\"y x\",\n      \"6\":\"y x\",\n      \"7\":\"y x\",\n      \"8\":\"y x\",\n      \"9\":\"y x\",\n      \"10\":\"y x\",\n      \"11\":\"y x\",\n      \"12\":\"y x\",\n      \"13\":\"y x\",\n      \"14\":\"y x\",\n      \"15\":\"y x\",\n      \"16\":\"y x\",\n      \"17\":\"y x\",\n      \"18\":\"y x\",\n      \"19\":\"y x\",\n      \"20\":\"y x\",\n      \"21\":\"y x\",\n      \"22\":\"y x\",\n      \"23\":\"y x\",\n      \"24\":\"y x\",\n      \"25\":\"y x\",\n      \"26\":\"y x\"\n    },\n    \"chrome\":{\n      \"4\":\"y x\",\n      \"5\":\"y x\",\n      \"6\":\"y x\",\n      \"7\":\"y x\",\n      \"8\":\"y x\",\n      \"9\":\"y x\",\n      \"10\":\"y x\",\n      \"11\":\"y x\",\n      \"12\":\"y x\",\n      \"13\":\"y x\",\n      \"14\":\"y x\",\n      \"15\":\"y x\",\n      \"16\":\"y x\",\n      \"17\":\"y x\",\n      \"18\":\"y x\",\n      \"19\":\"y x\",\n      \"20\":\"y x\",\n      \"21\":\"y x\",\n      \"22\":\"y x\",\n      \"23\":\"y x\",\n      \"24\":\"y x\",\n      \"25\":\"y x\",\n      \"26\":\"y x\",\n      \"27\":\"y x\",\n      \"28\":\"y x\",\n      \"29\":\"y x\",\n      \"30\":\"y x\",\n      \"31\":\"y x\",\n      \"32\":\"y x\"\n    },\n    \"safari\":{\n      \"3.1\":\"n\",\n      \"3.2\":\"n\",\n      \"4\":\"n\",\n      \"5\":\"y x\",\n      \"5.1\":\"y x\",\n      \"6\":\"y x\",\n      \"7\":\"y x\"\n    },\n    \"opera\":{\n      \"9\":\"n\",\n      \"9.5-9.6\":\"n\",\n      \"10.0-10.1\":\"n\",\n      \"10.5\":\"n\",\n      \"10.6\":\"n\",\n      \"11\":\"n\",\n      \"11.1\":\"n\",\n      \"11.5\":\"n\",\n      \"11.6\":\"n\",\n      \"12\":\"n\",\n      \"12.1\":\"n\",\n      \"15\":\"y x\",\n      \"16\":\"a\",\n      \"17\":\"a\"\n    },\n    \"ios_saf\":{\n      \"3.2\":\"n\",\n      \"4.0-4.1\":\"n\",\n      \"4.2-4.3\":\"y x\",\n      \"5.0-5.1\":\"y x\",\n      \"6.0-6.1\":\"y x\",\n      \"7.0\":\"y x\"\n    },\n    \"op_mini\":{\n      \"5.0-7.0\":\"n\"\n    },\n    \"android\":{\n      \"2.1\":\"u\",\n      \"2.2\":\"u\",\n      \"2.3\":\"u\",\n      \"3\":\"u\",\n      \"4\":\"u\",\n      \"4.1\":\"u\",\n      \"4.2\":\"u\"\n    },\n    \"bb\":{\n      \"7\":\"u\",\n      \"10\":\"u\"\n    },\n    \"op_mob\":{\n      \"10\":\"n\",\n      \"11\":\"n\",\n      \"11.1\":\"n\",\n      \"11.5\":\"n\",\n      \"12\":\"n\",\n      \"12.1\":\"n\",\n      \"14\":\"y x\"\n    },\n    \"and_chr\":{\n      \"0\":\"y x\"\n    },\n    \"and_ff\":{\n      \"0\":\"n\"\n    },\n    \"ie_mob\":{\n      \"10\":\"y x\"\n    }\n  },\n  \"notes\":\"\",\n  \"usage_perc_y\":70.21,\n  \"usage_perc_a\":0.18,\n  \"ucprefix\":false,\n  \"parent\":\"\",\n  \"keywords\":\"::placeholder,placeholder\",\n  \"shown\":false\n}"
  },
  {
    "path": "core/lib/compass/browser_support.rb",
    "content": "module Compass\n  module BrowserSupport\n    extend self\n\n    ASPECTS = %w(webkit moz o ms svg css2)\n\n    SIMPLE_FUNCTIONS = {\n           \"image\" => %w(webkit),\n      \"cross-fade\" => %w(webkit),\n      \"repeating-linear-gradient\" => %w(webkit moz), # Hacky implementation\n      \"repeating-radial-gradient\" => %w(webkit moz)  # Hacky implementation\n    }\n\n    # Adds support for one or more aspects for the given simple function\n    # Example:\n    #\n    #   Compass::BrowserSupport.add_support(\"image\", \"moz\", \"webkit\")\n    #   # => Adds support for moz and webkit to the image() function.\n    #\n    # This function can be called one or more times in a compass configuration\n    # file in order to add support for new, simple browser functions without\n    # waiting for a new compass release.\n    def add_support(function, *aspects)\n      aspects.each do |aspect|\n        unless ASPECTS.include?(aspect)\n          Compass::Util.compass_warn \"Unknown support aspect: #{aspect}\"\n          next\n        end\n        unless supports?(function, aspect)\n          SIMPLE_FUNCTIONS[function.to_s] ||= []\n          SIMPLE_FUNCTIONS[function.to_s] << aspect.to_s\n        end\n      end\n    end\n\n    # Removes support for one or more aspects for the given simple function\n    # Example:\n    #\n    #   Compass::BrowserSupport.remove_support(\"image\", \"o\", \"ms\")\n    #   # => Adds support for moz and webkit to the image() function.\n    #\n    # This function can be called one or more times in a compass configuration\n    # file in order to remove support for simple functions that no longer need to\n    # a prefix without waiting for a new compass release.\n    def remove_support(function, *aspects)\n      aspects.each do |aspect|\n        unless ASPECTS.include?(aspect)\n          Compass::Util.compass_warn \"Unknown support aspect: #{aspect}\"\n          next\n        end\n        SIMPLE_FUNCTIONS[function.to_s].reject!{|a| a == aspect.to_s}\n      end\n    end\n\n    def supports?(function, aspect)\n      SIMPLE_FUNCTIONS.has_key?(function.to_s) && SIMPLE_FUNCTIONS[function.to_s].include?(aspect.to_s)\n    end\n\n    def has_aspect?(function)\n      SIMPLE_FUNCTIONS.has_key?(function.to_s) && SIMPLE_FUNCTIONS[function.to_s].size > 0\n    end\n\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/configuration/adapters.rb",
    "content": "module Compass\n  module Configuration\n    # The adapters module provides methods that make configuration data from a compass project\n    # adapt to various consumers of configuration data\n    module Adapters\n      def to_compiler_arguments(additional_options = {})\n        engine_opts = to_sass_engine_options.merge(additional_options)\n        # we have to pass the quiet option in the nested :sass hash to disambiguate it from the compass compiler's own quiet option.\n        if engine_opts.has_key?(:quiet)\n          engine_opts[:sass] ||= {}\n          engine_opts[:sass][:quiet] = engine_opts.delete(:quiet)\n        end\n        [project_path, sass_path, css_path, engine_opts]\n      end\n\n      def to_sass_plugin_options\n        locations = []\n        locations << [sass_path, css_path] if sass_path && css_path\n        Compass::Frameworks::ALL.each do |framework|\n          locations << [framework.stylesheets_directory, File.join(css_path || css_dir || \".\", framework.name)]\n        end\n        plugin_opts = {:template_location => locations}\n        plugin_opts[:style] = output_style if output_style\n        plugin_opts[:line_comments] = line_comments\n        if sass_3_4?\n          plugin_opts[:sourcemap] = sourcemap ? :auto : :none\n        else\n          plugin_opts[:sourcemap] = sourcemap\n        end\n        plugin_opts[:cache] = cache unless cache.nil?\n        plugin_opts[:cache_location] = cache_path unless cache_path.nil?\n        plugin_opts[:quiet] = disable_warnings if disable_warnings\n        plugin_opts[:compass] = {}\n        plugin_opts[:compass][:environment] = environment\n        plugin_opts.merge!(sass_options || {})\n        plugin_opts[:load_paths] ||= []\n        plugin_opts[:load_paths] += resolve_additional_import_paths\n        # TODO: When sprites are extracted to their own plugin, this\n        # TODO: will need to be extracted to there.\n        if defined?(Compass::SpriteImporter.new)\n          plugin_opts[:load_paths] << Compass::SpriteImporter.new\n        end\n        plugin_opts[:full_exception] = (environment == :development)\n        plugin_opts\n      end\n\n      def resolve_additional_import_paths\n        (additional_import_paths || []).map do |path|\n          if path.is_a?(String) && project_path && !absolute_path?(path)\n            File.join(project_path, path)\n          else\n            path\n          end\n        end\n      end\n\n      def absolute_path?(path)\n        # Pretty basic implementation\n        path.index(File::SEPARATOR) == 0 || path.index(':') == 1\n      end\n\n      def to_sass_engine_options\n        engine_opts = {:load_paths => sass_load_paths}\n        engine_opts[:style] = output_style if output_style\n        engine_opts[:line_comments] = line_comments\n        if sass_3_4?\n          engine_opts[:sourcemap] = sourcemap ? :auto : :none\n        else\n          engine_opts[:sourcemap] = sourcemap\n        end\n        engine_opts[:cache] = cache\n        engine_opts[:cache_location] = cache_path\n        engine_opts[:quiet] = disable_warnings if disable_warnings\n        engine_opts[:compass] = {}\n        engine_opts[:compass][:environment] = environment\n        engine_opts[:full_exception] = (environment == :development)\n        engine_opts.merge!(sass_options || {})\n      end\n\n      def sass_load_paths\n        load_paths = []\n        load_paths << sass_path if sass_path && File.directory?(sass_path)\n        Compass::Frameworks::ALL.each do |f|\n          load_paths << f.stylesheets_directory if File.directory?(f.stylesheets_directory)\n        end\n        importer = sass_options[:filesystem_importer] if sass_options && sass_options[:filesystem_importer]\n        importer ||= Sass::Importers::Filesystem\n        load_paths += resolve_additional_import_paths\n        load_paths.map! do |p|\n          next p if p.respond_to?(:find_relative)\n          importer.new(p.to_s)\n        end\n        # TODO: When sprites are extracted to their own plugin, this\n        # TODO: will need to be extracted to there.\n        if defined?(Compass::SpriteImporter.new)\n          load_paths << Compass::SpriteImporter.new\n        end\n        load_paths\n      end\n\n      def sass_3_4?\n        Sass.version[:major] == 3 && Sass.version[:minor] == 4\n      end\n    end\n    class Data\n      include Adapters\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/configuration/data.rb",
    "content": "module Compass\n  module Configuration\n    # The Compass configuration data storage class manages configuration data that comes from a variety of\n    # different sources and aggregates them together into a consistent API\n    # Some of the possible sources of configuration data:\n    #   * Compass default project structure for stand alone projects\n    #   * App framework specific project structures for rails, etc.\n    #   * User supplied explicit configuration\n    #   * Configuration data provided via the command line interface\n    #\n    # There are two kinds of configuration data that doesn't come from the user:\n    #\n    # 1. Configuration data that is defaulted as if the user had provided it themselves.\n    #    This is useful for providing defaults that the user is likely to want to edit\n    #    but shouldn't have to provide explicitly when getting started\n    # 2. Configuration data that is defaulted behind the scenes because _some_ value is\n    #    required.\n    class Data\n\n      attr_reader :name\n      extend Sass::Callbacks\n\n\n      include Compass::Configuration::Inheritance\n      extend  Compass::Configuration::Paths\n\n      # on_sprite_saved\n      # yields the filename\n      # usage: on_sprite_saved {|filename| do_something(filename) }\n      define_callback :sprite_saved\n      chained_method :run_sprite_saved\n\n      # on_sprite_generated\n      # yields 'ChunkyPNG::Image'\n      # usage: on_sprite_generated {|sprite_data| do_something(sprite_data) }\n      define_callback :sprite_generated\n      chained_method :run_sprite_generated\n\n      # on_sprite_removed\n      # yields the filename\n      # usage: on_sprite_removed {|filename| do_something(filename) }\n      define_callback :sprite_removed\n      chained_method :run_sprite_removed\n\n      # on_stylesheet_saved\n      # yields the filename\n      # usage: on_stylesheet_saved {|filename| do_something(filename) }\n      define_callback :stylesheet_saved\n      chained_method :run_stylesheet_saved\n\n      # on_sourcemap_saved\n      # yields the filename\n      # usage: on_sourcemap_saved {|filename| do_something(filename) }\n      define_callback :sourcemap_saved\n      chained_method :run_sourcemap_saved\n\n      # on_stylesheet_removed\n      # yields the filename\n      # usage: on_stylesheet_removed {|filename| do_something(filename) }\n      define_callback :stylesheet_removed\n      chained_method :run_stylesheet_removed\n\n      # on_sourcemap_removed\n      # yields the filename\n      # usage: on_sourcemap_removed {|filename| do_something(filename) }\n      define_callback :sourcemap_removed\n      chained_method :run_sourcemap_removed\n\n      # on_stylesheet_error\n      # yields the filename & message\n      # usage: on_stylesheet_error {|filename, message| do_something(filename, message) }\n      define_callback :stylesheet_error\n      chained_method :run_stylesheet_error\n\n      inherited_accessor(*ATTRIBUTES)\n\n      strip_trailing_separator(*ATTRIBUTES.select{|a| a.to_s =~ /dir|path/})\n\n      ARRAY_ATTRIBUTES.each do |array_attr|\n        inherited_array(array_attr, ARRAY_ATTRIBUTE_OPTIONS.fetch(array_attr, {}))\n      end\n\n      def initialize(name, attr_hash = nil)\n        raise \"I need a name!\" unless name\n        @name = name\n        set_all(attr_hash) if attr_hash\n        self.top_level = self\n      end\n\n      def set_all(attr_hash)\n        attr_hash.each do |a, v|\n          if self.respond_to?(\"#{a}=\")\n            self.send(\"#{a}=\", v)\n          end\n        end\n      end\n\n      def add_import_path(*paths)\n        paths.map!{|p| defined?(Pathname) && Pathname === p ? p.to_s : p}\n        # The @added_import_paths variable works around an issue where\n        # the additional_import_paths gets overwritten during parse\n        @added_import_paths ||= []\n        @added_import_paths += paths\n        paths.each do |p|\n          self.additional_import_paths << p unless additional_import_paths.include?(p)\n        end\n      end\n\n      # When called with a block, defines the asset host url to be used.\n      # The block must return a string that starts with a protocol (E.g. http).\n      # The block will be passed the root-relative url of the asset.\n      # When called without a block, returns the block that was previously set.\n      def asset_host(&block)\n        @set_attributes ||= {}\n        if block_given?\n          @set_attributes[:asset_host] = true\n          @asset_host = block\n        else\n          if @asset_host\n            @asset_host\n          elsif inherited_data.respond_to?(:asset_host)\n            inherited_data.asset_host\n          end\n        end\n      end\n\n      # When called with a block, defines the cache buster strategy to be used.\n      # If the block returns nil or a string, then it is appended to the url as a query parameter.\n      # In this case, the returned string must not include the starting '?'.\n      # The block may also return a hash with :path and/or :query values and it\n      # will replace the original path and query string with the busted values returned.\n      # The block will be passed the root-relative url of the asset.\n      # If the block accepts two arguments, it will also be passed a File object\n      # that points to the asset on disk -- which may or may not exist.\n      # When called without a block, returns the block that was previously set.\n      #\n      # To disable the asset cache buster:\n      #\n      #     asset_cache_buster :none\n      def asset_cache_buster(simple = nil, &block)\n        @set_attributes ||= {}\n        if block_given?\n          @set_attributes[:asset_cache_buster] = true\n          @asset_cache_buster = block\n        elsif !simple.nil?\n          if simple == :none\n            @set_attributes[:asset_cache_buster] = true\n            @asset_cache_buster = Proc.new {|_,_| nil}\n          else\n            raise ArgumentError, \"Unexpected argument: #{simple.inspect}\"\n          end\n        else\n          if set?(:asset_cache_buster)\n            @asset_cache_buster\n          elsif inherited_data.respond_to?(:asset_cache_buster)\n            inherited_data.asset_cache_buster\n          end\n        end\n      end\n\n      def watch(glob, &block)\n        @watches ||= []\n        @watches << Watch.new(glob, &block)\n      end\n\n      def watches\n        if defined?(@watches)\n          @watches\n        elsif inherited_data.respond_to?(:watches)\n          inherited_data.watches\n        else\n          []\n        end\n      end\n\n      # Require a compass plugin and capture that it occured so that the configuration serialization works next time.\n      def require(lib)\n        (self.required_libraries ||= []) << lib\n        super\n      end\n\n      def load(framework_dir)\n        (self.loaded_frameworks ||= []) << framework_dir\n        Compass::Frameworks.register_directory framework_dir\n      end\n\n      # Finds all extensions within a directory and registers them.\n      def discover(frameworks_dir)\n        (self.framework_path ||= []) << frameworks_dir\n        Compass::Frameworks.discover frameworks_dir\n      end\n\n      def relative_assets?\n        # the http_images_path is deprecated, but here for backwards compatibility.\n        relative_assets || http_images_path == :relative\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/configuration/defaults.rb",
    "content": "module Compass\n  module Configuration\n    module Defaults\n      def default_project_path\n        \".\"\n      end\n\n      def default_project_type\n        :stand_alone\n      end\n\n      def default_http_path\n        \"/\"\n      end\n\n      def default_extensions_dir\n        \"extensions\"\n      end\n\n      def default_css_dir\n        \"stylesheets\"\n      end\n\n      def default_sass_dir\n        \"sass\"\n      end\n\n      def default_fonts_dir\n        \"fonts\"\n      end\n\n      def default_images_dir\n        \"images\"\n      end\n\n      def default_environment\n        :development\n      end\n\n      def default_output_style\n        if top_level.environment == :development\n          :expanded\n        else\n          :compressed\n        end\n      end\n\n      def default_line_comments\n        top_level.environment == :development\n      end\n\n      def default_color_output\n        true\n      end\n\n      def default_sass_path\n        if (pp = top_level.project_path) && (dir = top_level.sass_dir)\n          Compass.projectize(dir, pp)\n        end\n      end\n\n      def default_css_path\n        if (pp = top_level.project_path) && (dir = top_level.css_dir)\n          Compass.projectize(dir, pp)\n        end\n      end\n\n      def default_images_path\n        if (pp = top_level.project_path) && (dir = top_level.images_dir)\n          Compass.projectize(dir, pp)\n        end\n      end\n\n      def default_generated_images_path\n        if (pp = top_level.project_path) && (dir = top_level.generated_images_dir)\n          Compass.projectize(dir, pp)\n        else\n          top_level.images_path\n        end\n      end\n\n      def default_javascripts_path\n        if (pp = top_level.project_path) && (dir = top_level.javascripts_dir)\n          Compass.projectize(dir, pp)\n        end\n      end\n\n      def default_extensions_path\n        if (pp = top_level.project_path) && (dir = top_level.extensions_dir)\n          Compass.projectize(dir, pp)\n        end\n      end\n\n      def default_fonts_path\n        if (pp = top_level.project_path) && (dir = top_level.fonts_dir)\n          Compass.projectize(dir, pp)\n        end\n      end\n\n      def default_cache_dir\n        \".sass-cache\"\n      end\n\n      def default_cache_path\n        if (pp = top_level.project_path) && (dir = top_level.cache_dir_without_default)\n          Compass.projectize(dir, pp)\n        # TODO We should make Sass::Plugin.options a configuration source instead of\n        # TODO one-offing it like this.\n        elsif defined?(Sass::Plugin) && Sass::Plugin.options[:cache_location]\n          File.expand_path(Sass::Plugin.options[:cache_location])\n        elsif (pp = top_level.project_path) && (dir = top_level.cache_dir)\n          Compass.projectize(dir, pp)\n        end\n      end\n\n      def default_generated_images_dir\n        top_level.images_dir\n      end\n\n      def default_http_generated_images_dir\n        top_level.http_images_dir\n      end\n\n      def default_http_images_dir\n        top_level.images_dir\n      end\n\n      def default_sprite_load_path\n        [top_level.images_path]\n      end\n\n      def default_http_images_path\n        http_root_relative top_level.http_images_dir\n      end\n\n      def default_http_stylesheets_dir\n        top_level.css_dir\n      end\n\n      def default_http_stylesheets_path\n        http_root_relative top_level.http_stylesheets_dir\n      end\n\n      def default_http_generated_images_path\n        http_root_relative top_level.http_generated_images_dir\n      end\n\n      def default_http_fonts_dir\n        top_level.fonts_dir\n      end\n\n      def default_http_fonts_path\n        http_root_relative top_level.http_fonts_dir\n      end\n\n      def default_http_javascripts_dir\n        top_level.javascripts_dir\n      end\n\n      def default_http_javascripts_path\n        http_root_relative top_level.http_javascripts_dir\n      end\n\n      def default_cache\n        true\n      end\n\n      def default_preferred_syntax\n        :scss\n      end\n\n      def default_sprite_engine\n        :chunky_png\n      end\n\n      def default_chunky_png_options\n        if defined?(::Zlib)\n          {:compression => Zlib::BEST_COMPRESSION}\n        else\n          {}\n        end\n      end\n\n      # helper functions\n\n      def http_join(*segments)\n        segments.map do |segment|\n          next unless segment\n          segment = http_pathify(segment)\n          segment[-1..-1] == \"/\" ? segment[0..-2] : segment\n        end.join(\"/\")\n      end\n\n      def http_pathify(path)\n        if File::SEPARATOR == \"/\"\n          path\n        else\n          path.gsub(File::SEPARATOR, \"/\")\n        end\n      end\n\n      def http_root_relative(path)\n        http_join top_level.http_path, path\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/configuration/inheritance.rb",
    "content": "module Compass\n  module Configuration\n    # The inheritance module makes it easy for configuration data to inherit from\n    # other instances of configuration data. This makes it easier for external code to layer\n    # bits of configuration from various sources.\n    module Inheritance\n\n      def self.included(base)\n        # inherited_data stores configuration data that this configuration object will\n        # inherit if not provided explicitly.\n        base.send :attr_accessor, :inherited_data, :set_attributes, :top_level\n\n        base.send(:include, InstanceMethods)\n        base.extend(ClassMethods)\n      end\n\n      module ClassMethods\n        def inherited_writer(*attributes)\n          attributes.each do |attribute|\n            line = __LINE__ + 1\n            class_eval %Q{\n              def #{attribute}=(value)                        # def css_dir=(value)\n                @set_attributes ||= {}                        #   @set_attributes ||= {}\n                @set_attributes[#{attribute.inspect}] = true  #   @set_attributes[:css_dir] = true\n                @#{attribute} = value                         #   @css_dir = value\n              end                                             # end\n\n              def unset_#{attribute}!                         # def unset_css_dir!\n                unset!(#{attribute.inspect})                  #   unset!(:css_dir)\n              end                                             # end\n\n              def #{attribute}_set?                           # def css_dir_set?\n                set?(#{attribute.inspect})                    #   set?(:css_dir)\n              end                                             # end\n            }, __FILE__, line\n          end\n        end\n\n        # Defines the default reader to be an inherited_reader that will look at the inherited_data for its\n        # value when not set. The inherited reader calls to a raw reader that acts like a normal attribute\n        # reader but prefixes the attribute name with \"raw_\".\n        def inherited_reader(*attributes)\n          attributes.each do |attribute|\n            line = __LINE__ + 1\n            class_eval %Q{\n              def raw_#{attribute}                         # def raw_css_dir\n                @#{attribute}                              #   @css_dir\n              end                                          # end\n              def #{attribute}_without_default             # def css_dir_without_default\n                read_without_default(#{attribute.inspect}) #  read_without_default(:css_dir)\n              end                                          # end\n              def #{attribute}                             # def css_dir\n                read(#{attribute.inspect})                 #  read(:css_dir)\n              end                                          # end\n            }, __FILE__, line\n          end\n        end\n\n        def inherited_accessor(*attributes)\n          inherited_reader(*attributes)\n          inherited_writer(*attributes)\n        end\n\n        class ArrayProxy\n          def initialize(data, attr)\n            @data, @attr = data, attr\n          end\n          def to_ary\n            @data.send(:\"read_inherited_#{@attr}_array\")\n          end\n          def to_a\n            to_ary\n          end\n          def <<(v)\n            @data.send(:\"add_to_#{@attr}\", v)\n          end\n          def >>(v)\n            @data.send(:\"remove_from_#{@attr}\", v)\n          end\n          def serialize_to_config(prop)\n            if v = @data.raw(prop)\n              \"#{prop} = #{v.inspect}\"\n            else\n              s = \"\"\n              if added = @data.instance_variable_get(\"@added_to_#{@attr}\")\n                added.each do |a|\n                  s << \"#{prop} << #{a.inspect}\\n\"\n                end\n              end\n              if removed = @data.instance_variable_get(\"@removed_from_#{@attr}\")\n                removed.each do |r|\n                  s << \"#{prop} >> #{r.inspect}\\n\"\n                end\n              end\n              if s[-1..-1] == \"\\n\"\n                s[0..-2]\n              else\n                s\n              end\n            end\n          end\n          def method_missing(m, *args, &block)\n            a = to_ary\n            if a.respond_to?(m)\n              a.send(m,*args, &block)\n            else\n              super\n            end\n          end\n        end\n\n        def inherited_array(*attributes)\n          options = attributes.last.is_a?(Hash) ? attributes.pop : {}\n          inherited_reader(*attributes)\n          inherited_writer(*attributes)\n          attributes.each do |attr|\n            line = __LINE__ + 1\n            class_eval %Q{\n              def #{attr}                                          # def sprite_load_paths\n                ArrayProxy.new(self, #{attr.inspect})              #   ArrayProxy.new(self, :sprite_load_paths)\n              end                                                  # end\n              def #{attr}=(value)                                  # def sprite_load_paths=(value)\n                @set_attributes ||= {}                             #   @set_attributes ||= {}\n                @set_attributes[#{attr.inspect}] = true            #   @set_attributes[:sprite_load_paths] = true\n                @#{attr} = Array(value)                            #   @sprite_load_paths = Array(value)\n                @added_to_#{attr} = []                             #   @added_to_sprite_load_paths = []\n                @removed_from_#{attr} = []                         #   @removed_from_sprite_load_paths = []\n              end                                                  # end\n              def read_inherited_#{attr}_array                     # def read_inherited_sprite_load_paths_array\n                value = if inherited_data                          #   value = if inherited_data\n                  if #{!!options[:clobbers]} && #{attr}_set?\n                    Array(@#{attr})                                #     Array(@#{attr})\n                  else\n                    Array(@#{attr}) + inherited_data.read_inherited_#{attr}_array  #      inherited_data.read_inherited_sprite_load_paths_array + Array(@sprite_load_paths)\n                  end\n                elsif #{attr}_set?                                 #   elsif sprite_load_paths_set?\n                  Array(@#{attr})                                  #     Array(@#{attr})\n                else                                               #   else\n                  top_level.default_for(#{attr.inspect}) || []     #     top_level.default_for(:sprite_load_paths) || []\n                end                                                #   end\n                value -= Array(@removed_from_#{attr})              #   value -= Array(@removed_from_sprite_load_paths)\n                Array(@added_to_#{attr}) + value                   #   Array(@added_to_sprite_load_paths) + value\n              end                                                  # end\n              def add_to_#{attr}(v)                                # def add_to_sprite_load_paths(v)\n                if #{attr}_set?                                    #   if sprite_load_paths_set?\n                  raw_#{attr} << v                                 #     raw_sprite_load_paths << v\n                else                                               #   else\n                  (@added_to_#{attr} ||= []) << v                  #     (@added_to_sprite_load_paths ||= []) << v\n                end                                                #   end\n              end                                                  # end\n              def remove_from_#{attr}(v)                           # def remove_from_sprite_load_paths(v)\n                if #{attr}_set?                                    #   if sprite_load_paths_set?\n                  raw_#{attr}.reject!{|e| e == v}                  #     raw_sprite_load_path.reject!{|e| e == v}s\n                else                                               #   else\n                  (@removed_from_#{attr} ||= []) << v              #     (@removed_from_sprite_load_paths ||= []) << v\n                end                                                #   end\n              end                                                  # end\n            }, __FILE__, line\n          end\n        end\n\n        def chained_method(method)\n          line = __LINE__ + 1\n          class_eval %Q{\n            alias_method :_chained_#{method}, method\n            def #{method}(*args, &block)\n              _chained_#{method}(*args, &block)\n              if inherited_data\n                inherited_data.#{method}(*args, &block)\n              end\n            end\n          }, __FILE__, line\n        end\n\n        \n      end\n\n      module InstanceMethods\n\n        def on_top!\n          self.set_top_level(self)\n        end\n\n        def set_top_level(new_top)\n          self.top_level = new_top\n          if self.inherited_data.respond_to?(:set_top_level)\n            self.inherited_data.set_top_level(new_top)\n          end\n        end\n\n\n        def inherit_from!(data)\n          if self.inherited_data\n            self.inherited_data.inherit_from!(data)\n          else\n            self.inherited_data = data\n          end\n          self\n        end\n\n        def reset_inheritance!\n          self.inherited_data = nil\n        end\n\n        def with_defaults(data)\n          inherit_from!(data)\n          yield\n          reset_inheritance!\n        end\n\n        def unset!(attribute)\n          @set_attributes ||= {}\n          send(\"#{attribute}=\", nil)\n          @set_attributes.delete(attribute)\n          nil\n        end\n\n        def set?(attribute)\n          @set_attributes ||= {}\n          @set_attributes[attribute]\n        end\n\n        def any_attributes_set?\n          @set_attributes && @set_attributes.size > 0\n        end\n\n        def default_for(attribute)\n          method = \"default_#{attribute}\".to_sym\n          if respond_to?(method)\n            send(method)\n          end\n        end\n\n        # Read an explicitly set value that is either inherited or set on this instance\n        def read_without_default(attribute)\n          if set?(attribute)\n            send(\"raw_#{attribute}\")\n          elsif inherited_data.nil?\n            nil\n          elsif inherited_data.respond_to?(\"#{attribute}_without_default\")\n            inherited_data.send(\"#{attribute}_without_default\")\n          elsif inherited_data.respond_to?(attribute)\n            inherited_data.send(attribute)\n          end\n        end\n\n        # Reads the raw value that was set on this object.\n        # you generally should call raw_<attribute>() instead.\n        def raw(attribute)\n          instance_variable_get(\"@#{attribute}\")\n        end\n\n        # Read a value that is either inherited or set on this instance, if we get to the bottom-most configuration instance,\n        # we ask for the default starting at the top level.\n        def read(attribute)\n          if !(v = send(\"#{attribute}_without_default\")).nil?\n            v\n          else\n            top_level.default_for(attribute)\n          end\n        end\n\n        def method_missing(meth, *args, &block)\n          if inherited_data\n            inherited_data.send(meth, *args, &block)\n          else\n            raise NoMethodError, meth.to_s\n          end\n        end\n\n        def respond_to?(meth)\n          if super\n            true\n          elsif inherited_data\n            inherited_data.respond_to?(meth)\n          else\n            false\n          end\n        end\n\n        def chain\n          instances = [self]\n          instances << instances.last.inherited_data while instances.last.inherited_data\n          instances\n        end\n\n        def debug\n          normalized_attrs = {}\n          (ATTRIBUTES + ARRAY_ATTRIBUTES).each do |prop|\n            values = []\n            chain.each do |instance|\n              values << {\n                :raw => (instance.send(\"raw_#{prop}\") rescue nil),\n                :value => (instance.send(\"#{prop}_without_default\") rescue nil),\n                :default => (instance.send(\"default_#{prop}\") rescue nil),\n                :resolved => instance.send(prop)\n              }\n            end\n            normalized_attrs[prop] = values\n          end\n          normalized_attrs\n        end\n\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/configuration/paths.rb",
    "content": "module Compass::Configuration::Paths\n\n  TRAILING_SEPARATOR = %r{.(/|#{Regexp.escape(File::SEPARATOR)})$}\n\n  def strip_trailing_separator(*attributes)\n    attributes.each do |attr|\n      alias_method \"#{attr}_with_trailing_separator\".to_sym, attr\n      class_eval %Q{\n        def #{attr}                                # def css_dir\n          path = #{attr}_with_trailing_separator   #   path = css_dir_with_trailing_separator\n          if path.to_s =~ TRAILING_SEPARATOR       #   if path =~ TRAILING_SEPARATOR\n            path = path[0..-($1.length+1)]         #     path = path[0..-($1.length+1)]\n          end                                      #   end\n          path                                     #   path\n        end                                        # end\n      }\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/configuration/watch.rb",
    "content": "module Compass\n  module Configuration\n    class Watch\n      attr_reader :callback\n      attr_reader :glob\n      attr_reader :full_glob\n\n      def initialize(glob, &block)\n        unless block\n          raise ArgumentError, \"A Block must be supplied in order to be watched\"\n        end\n        @callback = block\n        unless glob\n          raise ArgumentErrorn, \"A glob must be supplied in order to be watched\"\n        end\n        @glob = glob\n\n        if Pathname.new(glob).absolute?\n          @full_glob = glob\n        else\n          @full_glob = File.join(Compass.configuration.project_path, glob)\n        end\n      end\n\n      def run_callback(base, relative, action)\n        callback.call(base, relative, action)\n      end\n\n      def run_once_per_changeset?\n        false\n      end\n\n      def match?(changed_path)\n        File.fnmatch(full_glob, changed_path, File::FNM_PATHNAME)\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/configuration.rb",
    "content": "module Compass\n  module Configuration\n\n    class << self\n      def attributes_for_directory(dir_name, http_dir_name = dir_name)\n        [\n          \"#{dir_name}_dir\",\n          \"#{dir_name}_path\",\n          (\"http_#{http_dir_name}_dir\" if http_dir_name),\n          (\"http_#{http_dir_name}_path\" if http_dir_name)\n        ].compact.map{|a| a.to_sym}\n      end\n\n      # Registers a new configuration property.\n      # Extensions can use this to add new configuration options to compass.\n      #\n      # @param [Symbol] name The name of the property.\n      # @param [String] comment A comment for the property.\n      # @param [Proc] default A method to calculate the default value for the property.\n      #                       The proc is executed in the context of the project's configuration data.\n      def add_configuration_property(name, comment = nil, &default)\n        ATTRIBUTES << name\n        if comment.is_a?(String)\n          unless comment[0..0] == \"#\"\n            comment = \"# #{comment}\"\n          end\n          unless comment[-1..-1] == \"\\n\"\n            comment = comment + \"\\n\"\n          end\n          Data.class_eval <<-COMMENT\n          def comment_for_#{name}\n          #{comment.inspect}\n          end\n          COMMENT\n        end\n        Data.send(:define_method, :\"default_#{name}\", &default) if default\n        Data.inherited_accessor(name)\n        if name.to_s =~ /dir|path/\n          Data.strip_trailing_separator(name)\n        end\n      end\n\n      # For testing purposes\n      def remove_configuration_property(name)\n        ATTRIBUTES.delete(name)\n      end\n\n    end\n\n    ATTRIBUTES = [\n      # What kind of project?\n      :project_type,\n      # Where is the project?\n      :project_path,\n      :http_path,\n      # Where are the various bits of the project\n      attributes_for_directory(:css, :stylesheets),\n      attributes_for_directory(:sass, nil),\n      attributes_for_directory(:images),\n      attributes_for_directory(:generated_images),\n      attributes_for_directory(:javascripts),\n      attributes_for_directory(:fonts),\n      attributes_for_directory(:extensions, nil),\n      # Compilation options\n      :output_style,\n      :sourcemap,\n      :environment,\n      :relative_assets,\n      :sass_options,\n      attributes_for_directory(:cache, nil),\n      :cache,\n      # Helper configuration\n      :asset_host,\n      :asset_cache_buster,\n      :line_comments,\n      :color_output,\n      :preferred_syntax,\n      :disable_warnings,\n      :sprite_engine,\n      :chunky_png_options\n    ].flatten\n\n    ARRAY_ATTRIBUTES = [\n      :additional_import_paths,\n      :sprite_load_path,\n      :required_libraries,\n      :loaded_frameworks,\n      :framework_path\n    ]\n\n    ARRAY_ATTRIBUTE_OPTIONS = {\n      :sprite_load_path => { :clobbers => true }\n    }\n\n    RUNTIME_READONLY_ATTRIBUTES = [\n      :cache,\n      attributes_for_directory(:cache, nil),\n      :chunky_png_options,\n      :color_output,\n      attributes_for_directory(:css, :stylesheets),\n      :environment,\n      attributes_for_directory(:extensions, nil),\n      :framework_path,\n      attributes_for_directory(:javascripts),\n      :line_comments,\n      :loaded_frameworks,\n      :output_style,\n      :preferred_syntax,\n      :project_path,\n      :project_type,\n      :required_libraries,\n      attributes_for_directory(:sass, nil),\n      :sass_options,\n      :sourcemap,\n      :sprite_engine,\n    ].flatten\n\n  end\n\n  class << self\n    # The Compass configuration singleton.\n    def configuration\n      @configuration ||= default_configuration\n      if block_given?\n        yield @configuration\n      end\n      @configuration\n    end\n\n    def default_configuration\n      Compass::Configuration::Data.new('defaults').extend(Compass::Configuration::Defaults)\n    end\n\n    def add_configuration(data, filename = nil)\n      return if data.nil?\n\n\n      unless data.is_a?(Compass::Configuration::Data)\n        # XXX HAX Need to properly factor this apart from the main compass project\n        if respond_to?(:configuration_for)\n          data = configuration_for(data, filename)\n        else\n          raise ArgumentError, \"Invalid argument: #{data.inspect}\"\n        end\n      end\n\n      data.inherit_from!(configuration) if configuration\n      data.on_top!\n      @configuration = data\n    end\n\n    def reset_configuration!\n      @configuration = nil\n    end\n\n    # Returns a full path to the relative path to the project directory\n    def projectize(path, project_path = nil)\n      project_path ||= configuration.project_path\n      File.join(project_path, *path.split('/'))\n    end\n\n    def deprojectize(path, project_path = nil)\n      project_path ||= configuration.project_path\n      if path[0..(project_path.size - 1)] == project_path\n        path[(project_path.size + 1)..-1]\n      else\n        path\n      end\n    end\n  end\nend\n\n%w(defaults inheritance paths data watch adapters).each do |lib|\n  require \"compass/configuration/#{lib}\"\nend\n"
  },
  {
    "path": "core/lib/compass/core/caniuse.rb",
    "content": "require 'multi_json'\nrequire 'singleton'\nclass Compass::Core::CanIUse\n  include Singleton\n\n  DATA_FILE_NAME = File.join(Compass::Core.base_directory, \"data\", \"caniuse.json\")\n  DATA_FEATURE_FILES = Dir.glob(File.join(Compass::Core.base_directory, \"data\", \"caniuse_extras\", \"**\", \"*.json\"))\n\n  def initialize\n    @data = MultiJson.load(File.read(DATA_FILE_NAME))\n    # support ad-hoc features\n    DATA_FEATURE_FILES.each do |feature_file|\n      feature_name = File.basename(feature_file, \".json\")\n      # if the feature doesn't exist in the master `caniuse.json`\n      if @data[\"data\"][feature_name].nil?\n        @data[\"data\"][feature_name] = MultiJson.load(File.read(feature_file))\n      end\n    end\n  end\n\n  # The browser names from caniuse are ugly.\n  PUBLIC_BROWSER_NAMES = Hash.new {|h, k| k}\n  PUBLIC_BROWSER_NAMES.update(\n    \"and_chr\" => \"android-chrome\",\n    \"and_ff\"  => \"android-firefox\",\n    \"android\" => \"android\",\n    \"bb\"      => \"blackberry\",\n    \"chrome\"  => \"chrome\",\n    \"firefox\" => \"firefox\",\n    \"ie\"      => \"ie\",\n    \"ie_mob\"  => \"ie-mobile\",\n    \"ios_saf\" => \"ios-safari\",\n    \"op_mini\" => \"opera-mini\",\n    \"op_mob\"  => \"opera-mobile\",\n    \"opera\"   => \"opera\",\n    \"safari\"  => \"safari\"\n  )\n  CAN_I_USE_NAMES = Hash.new {|h, k| k}\n  CAN_I_USE_NAMES.update(PUBLIC_BROWSER_NAMES.invert)\n\n  # Returns all the known browsers according to caniuse\n  def browsers\n    @browsers ||= @data[\"agents\"].keys.map{|b| PUBLIC_BROWSER_NAMES[b] }.sort\n  end\n\n  # Returns the prefix corresponding to a particular browser\n  def prefix(browser, version = nil)\n    version = caniuse_version(browser, version)\n    assert_valid_browser browser\n    assert_valid_version browser, version if version\n    data = browser_data(browser)\n    p = if data[\"prefix_exceptions\"] && data[\"prefix_exceptions\"][version]\n          data[\"prefix_exceptions\"][version]\n        else\n          data[\"prefix\"]\n        end\n    \"-#{p}\"\n  end\n\n  # returns all possible prefixes a browser might use.\n  def all_prefixes(browser)\n    assert_valid_browser browser\n    data = browser_data(browser)\n    prefixes = [\"-#{data[\"prefix\"]}\"]\n    if data[\"prefix_exceptions\"]\n      prefixes += data[\"prefix_exceptions\"].values.uniq.map{|p| \"-#{p}\"}\n    end\n    prefixes\n  end\n\n  # returns the prefixes needed by the list of browsers given\n  def prefixes(browsers = browsers())\n    result = browsers.map{|b| all_prefixes(b) }\n    result.flatten!\n    result.uniq!\n    result.sort!\n    result\n  end\n\n  def browser_ranges(capability, prefix = nil, include_unprefixed_versions = true)\n    assert_valid_capability capability\n    browsers = prefix.nil? ? browsers() : browsers_with_prefix(prefix)\n    browsers.inject({}) do |m, browser|\n      browser_versions = versions(browser)\n      min_version = find_first_prefixed_version(browser, browser_versions, capability, prefix)\n      if min_version\n        max_version = if include_unprefixed_versions\n                        browser_versions.last\n                      else\n                        find_first_prefixed_version(browser, browser_versions.reverse, capability, prefix)\n                      end\n        m.update(browser => [min_version, max_version])\n      end\n      m\n    end\n  end\n\n  def find_first_prefixed_version(browser, versions, capability, prefix)\n    versions.find do |version|\n      support = browser_support(browser, version, capability)\n      if prefix.nil?\n        support !~ /\\b(n|p)\\b/ && support !~ /\\bx\\b/\n      else\n        actual_prefix = prefix(browser, version)\n        support !~ /\\b(n|p)\\b/ && support =~ /\\bx\\b/ && prefix == actual_prefix\n      end\n    end\n  end\n\n  # @overload omitted_usage(browser, min_supported_version)\n  #   How many users would be omitted if support for the given browser starts\n  #   with the given version.\n  #\n  # @overload omitted_usage(browser, min_unsupported_version, max_unsupported_version)\n  #   How many users would be omitted if the browsers with version\n  def omitted_usage(browser, min_version, max_version = nil)\n    versions = versions(browser)\n    min_version = caniuse_version(browser, min_version)\n    max_version = caniuse_version(browser, max_version)\n    if max_version.nil?\n      assert_valid_version browser, min_version\n    else\n      assert_valid_version browser, min_version, max_version\n    end\n    usage = 0\n    in_range = max_version.nil?\n    versions.each do |version|\n      break if max_version.nil? && version == min_version\n      in_range = true if (!max_version.nil? && version == min_version)\n      usage += usage(browser, version) if in_range\n      break if !max_version.nil? && version == max_version\n    end\n    return usage\n  end\n\n  # returns the list of browsers that use the given prefix\n  def browsers_with_prefix(prefix)\n    assert_valid_prefix prefix\n    prefix = \"-\" + prefix unless prefix.start_with?(\"-\")\n    browsers.select {|b| all_prefixes(b).include?(prefix) }\n  end\n\n  SPEC_VERSION_MATCHERS = Hash.new do |h, k|\n    h[k] = /##{k}\\b/\n  end\n\n  CAPABILITY_MATCHERS = {\n    :full_support => lambda {|support, capability| !support ^ (capability =~ /\\by\\b/) },\n    :partial_support => lambda {|support, capability| !support ^ (capability =~ /\\ba\\b/) },\n    :prefixed => lambda {|support, capability| !support ^ (capability =~ /\\bx\\b/) },\n    :spec_versions => lambda {|versions, capability| versions.any? {|v| capability =~ SPEC_VERSION_MATCHERS[v] } }\n  }\n\n  # Return whether the capability matcher the options specified.\n  # For each capability option in the options the capability will need to match it.\n  def capability_matches(support, capability_options_list)\n    capability_options_list.any? do |capability_options|\n      capability_options.all? {|c, v| CAPABILITY_MATCHERS[c].call(v, support)}\n    end\n  end\n\n  # returns the percentage of users (0-100) that would be affected if the prefix\n  # was not used with the given capability.\n  def prefixed_usage(prefix, capability, capability_options_list)\n    assert_valid_prefix prefix\n    assert_valid_capability capability\n    usage = 0\n    browsers_with_prefix(prefix).each do |browser|\n      versions(browser).each do |version|\n        next unless prefix == prefix(browser, version)\n        support = browser_support(browser, version, capability)\n        if capability_matches(support, capability_options_list) and support =~ /\\bx\\b/\n          usage += usage(browser, version)\n        end\n      end\n    end\n    usage\n  end\n\n  def next_version(browser, version)\n    version = caniuse_version(browser, version)\n    versions = versions(browser)\n    index = versions.index(version)\n    index < versions.length - 1 ? versions[index + 1] : nil\n  end\n\n  def previous_version(browser, version)\n    version = caniuse_version(browser, version)\n    versions = versions(browser)\n    index = versions.index(version)\n    index > 0 ? versions[index - 1] : nil\n  end\n\n  # Returns whether the given minimum version of a browser\n  # requires the use of a prefix for the stated capability.\n  def requires_prefix(browser, min_version, capability, capability_options_list)\n    min_version = caniuse_version(browser, min_version)\n    assert_valid_browser browser\n    assert_valid_capability capability\n    found_version = false\n    versions(browser).each do |version|\n      found_version ||= version == min_version\n      next unless found_version\n      support = browser_support(browser, version, capability)\n      if capability_matches(support, capability_options_list) and support =~ /\\bx\\b/\n        return prefix(browser, version)\n      end\n    end\n    raise ArgumentError, \"#{min_version} is not a version for #{browser}\" unless found_version\n    nil\n  end\n\n  # These are versions that users might reasonably type\n  # mapped to the caniuse version.\n  ALTERNATE_VERSIONS = {\n    \"android\" => {\n      \"4.2\" => \"4.2-4.3\",\n      \"4.3\" => \"4.2-4.3\"\n    },\n    \"opera\" => {\n      \"9.5\" => \"9.5-9.6\",\n      \"9.6\" => \"9.5-9.6\",\n      \"10.0\" => \"10.0-10.1\",\n      \"10.1\" => \"10.0-10.1\",\n    },\n    \"opera-mobile\" => {\n      \"14\" => \"0\"\n    }\n  }\n\n  # Returns the versions of a browser. If the min_usage parameter is provided,\n  # only those versions having met the threshold of user percentage.\n  #\n  # @param min_usage a decimal number betwee 0 and 100\n  def versions(browser, min_usage = 0)\n    assert_valid_browser browser\n    versions = browser_data(browser)[\"versions\"].compact\n    return versions if min_usage == 0\n    versions.select {|v| browser_data(browser)[\"usage_global\"][v] > min_usage }\n  end\n\n  # The list of capabilities tracked by caniuse.\n  def capabilities\n    @capabilities ||= @data[\"data\"].keys.select do |cap|\n      cats = @data[\"data\"][cap][\"categories\"]\n      cats.any?{|cat| cat =~ /CSS/ }\n    end.sort\n  end\n\n  # the usage % for a given browser version.\n  def usage(browser, version)\n    browser_data(browser)[\"usage_global\"][version]\n  end\n\n  # returns a valid version given the version provided by the user\n  # This is used to maintain API compatibility when caniuse removes\n  # a version from their data (which seems to be replaced with a semantic equivalent).\n  def caniuse_version(browser, version)\n    return unless version\n    ALTERNATE_VERSIONS[browser] && ALTERNATE_VERSIONS[browser][version] || version\n  end\n\n  def inspect\n    \"#{self.class.name}(#{browsers.join(\", \")})\"\n  end\n\n  # the browser data assocated with a given capability\n  def capability_data(capability)\n    @data[\"data\"][capability]\n  end\n\n  def browser_support(browser, version, capability)\n    version = caniuse_version(browser, version)\n    capability_data(capability)[\"stats\"][CAN_I_USE_NAMES[browser]][version]\n  end\n\n  # the metadata assocated with a given browser\n  def browser_data(browser)\n    @data[\"agents\"][CAN_I_USE_NAMES[browser]]\n  end\n\n  # efficiently checks if a prefix is valid\n  def assert_valid_prefix(prefix)\n    @known_prefixes ||= Set.new(prefixes(browsers))\n    unless @known_prefixes.include?(prefix)\n      raise ArgumentError, \"#{prefix} is not known browser prefix.\"\n    end\n  end\n\n  # efficiently checks if a browser is valid\n  def assert_valid_browser(browser)\n    @known_browsers ||= Set.new(browsers)\n    unless @known_browsers.include?(browser)\n      raise ArgumentError, \"#{browser} is not known browser.\"\n    end\n  end\n\n  # efficiently checks if a capability is valid\n  def assert_valid_capability(capability)\n    @known_capabilities ||= Set.new(capabilities)\n    unless @known_capabilities.include?(capability)\n      raise ArgumentError, \"#{capability} is not known browser capability.\"\n    end\n    nil\n  end\n\n  def assert_valid_version(browser, *versions)\n    versions.each do |v|\n      unless versions(browser).include?(v)\n        raise ArgumentError, \"#{v} is not known version for #{browser}.\"\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/generated_version.rb",
    "content": "module Compass\n  module Core\n    # This file intentionally does nothing.\n    # The build process will generate a VERSION constant here.\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/colors.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Colors\n\n  # a genericized version of lighten/darken so that negative values can be used.\n  def adjust_lightness(color, amount)\n    assert_type color, :Color\n    assert_type amount, :Number\n    color.with(:lightness => Sass::Util.restrict(color.lightness + amount.value, 0..100))\n  end\n\n  # Scales a color's lightness by some percentage.\n  # If the amount is negative, the color is scaled darker, if positive, it is scaled lighter.\n  # This will never return a pure light or dark color unless the amount is 100%.\n  def scale_lightness(color, amount)\n    assert_type color, :Color\n    assert_type amount, :Number\n    color.with(:lightness => scale_color_value(color.lightness, amount.value))\n  end\n\n  # a genericized version of saturation/desaturate so that negative values can be used.\n  def adjust_saturation(color, amount)\n    assert_type color, :Color\n    assert_type amount, :Number\n    color.with(:saturation => Sass::Util.restrict(color.saturation + amount.value, 0..100))\n  end\n\n  # Scales a color's saturation by some percentage.\n  # If the amount is negative, the color is desaturated, if positive, it is saturated.\n  # This will never return a pure saturated or desaturated color unless the amount is 100%.\n  def scale_saturation(color, amount)\n    assert_type color, :Color\n    assert_type amount, :Number\n    color.with(:saturation => scale_color_value(color.saturation, amount.value))\n  end\n\n  def shade(color, percentage)\n    assert_type color, :Color\n    assert_type percentage, :Number\n    black = rgb_color(0, 0, 0)\n    mix(black, color, percentage)\n  end\n\n  def tint(color, percentage)\n    assert_type color, :Color\n    assert_type percentage, :Number\n    white = rgb_color(255, 255, 255)\n    mix(white, color, percentage)\n  end\n\n  # returns an IE hex string for a color with an alpha channel\n  # suitable for passing to IE filters.\n  def ie_hex_str(color)\n    assert_type color, :Color\n    alpha = (color.alpha * 255).round\n    alphastr = alpha.to_s(16).rjust(2, '0')\n    identifier(\"##{alphastr}#{color.send(:hex_str)[1..-1]}\".upcase)\n  end\n  \n  private\n  def scale_color_value(value, amount)\n    if amount > 0\n      value += (100 - value) * (amount / 100.0)\n    elsif amount < 0\n      value += value * amount / 100.0\n    end\n    value\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/configuration.rb",
    "content": "require 'pathname'\nmodule Compass::Core::SassExtensions::Functions::Configuration\n  extend Compass::Core::SassExtensions::Functions::SassDeclarationHelper\n\n  # Users who need to support windows and unix paths in their configuration\n  # should construct them with this helper function.\n  def join_file_segments(*segments)\n    quoted_string(File.join(*segments.map{|s| assert_type s, :String; s.value}))\n  end\n  declare :absolute_path, [], :var_args => true\n\n  # Returns an absolute path for the path relative to the sass file it was called from.\n  def absolute_path(relative_path)\n    quoted_string(File.expand_path(File.join(File.dirname(options[:filename]), relative_path.value)))\n  end\n  declare :absolute_path, [:relative_path]\n\n  # split a file into directory, basename, and extension\n  def split_filename(path)\n    pathname = Pathname.new(path.value)\n    list(quoted_string(pathname.dirname.to_s),\n         quoted_string(pathname.basename(pathname.extname).to_s),\n         quoted_string(pathname.extname.to_s),\n         :space)\n  end\n  declare :split_filename, [:path]\n\n  # Returns true if the compass compiler is compiling this stylesheet.\n  def using_compass_compiler\n    bool(options[:compass] && options[:compass][:compiler_in_use])\n  end\n  declare :using_compass_compiler, []\n\n  def reset_configuration()\n    Compass.reset_configuration!\n    null()\n  end\n  declare :reset_configuration, []\n\n  def add_sass_configuration(project_path)\n    css_location = template_location = nil\n    if options[:template_location] && options[:template_location].is_a?(Array)\n      css_location = File.expand_path(options[:template_location].first.last)\n      template_location = File.expand_path(options[:template_location].first.first)\n    else\n      css_location = File.expand_path(options[:css_location]) if options[:css_location]\n      template_location = File.expand_path(options[:template_location]) if options[:template_location]\n    end\n    original_filename = File.expand_path(options[:original_filename]) if options[:original_filename]\n    project_path = if project_path.value.nil?\n                     if css_location && template_location\n                       common_parent_directory(css_location, template_location)\n                     end\n                   else\n                     project_path.value\n                   end\n    config = {\n      :project_path => project_path,\n      :cache => options[:cache],\n      :additional_import_paths => options[:load_paths],\n      :line_comments => options[:line_comments]\n    }\n    unless options[:quiet].nil?\n      config.update(:disable_warnings => options[:quiet])\n    end\n    if project_path && css_location && (css_dir = relative_path_from(css_location, project_path))\n      config.update(:css_dir => css_dir)\n    elsif css_location\n      config.update(:css_path => css_location)\n    end\n    if project_path && template_location && (sass_dir = relative_path_from(template_location, project_path))\n      config.update(:sass_dir => sass_dir)\n    elsif template_location\n      config.update(:css_path => template_location)\n    end\n    config_name = \"Sass Defaults: #{project_path ? relative_path_from(original_filename, project_path) : original_filename}\"\n    Compass.add_configuration(Compass::Configuration::Data.new(config_name, config))\n    update_sass_options!\n    null\n  rescue => e\n    puts e.backtrace.join(\"\\n\")\n    raise\n  end\n  declare :add_sass_configuration, [:project_path]\n\n  OPTION_TRANSFORMER = Hash.new() {|h, k| proc {|v, ctx| v.value } }\n  OPTION_TRANSFORMER[:asset_cache_buster] = proc do |v, ctx|\n    proc do |url, file|\n      if ctx.environment.function(v.value) || Sass::Script::Functions.callable?(v.value.tr('-', '_'))\n        result = ctx.call(v, ctx.quoted_string(url),\n                             file.nil? ? ctx.null() : ctx.quoted_string(file.path))\n        case result\n        when Sass::Script::Value::String, Sass::Script::Value::Null\n          result.value\n        else\n          ctx.assert_type(result, :Map) \n          result.value.keys.inject({}) do |r, k|\n            ctx.assert_type k, :String\n            ctx.assert_type(result.value[k], :String) unless result.value[k].value.nil?\n            if k.value == \"path\" || k.value == \"query\"\n              r[k.value.to_sym] = result.value[k].value\n            end\n            r\n          end\n        end\n      else\n        raise ArgumentError, \"#{v.value} is not a function.\"\n      end\n    end\n  end\n  OPTION_TRANSFORMER[:asset_host] = proc do |v, ctx|\n    proc do |file|\n      if ctx.environment.function(v.value) || Sass::Script::Functions.callable?(v.value.tr('-', '_'))\n        result = ctx.call(v, ctx.quoted_string(file))\n        case result\n        when Sass::Script::Value::String, Sass::Script::Value::Null\n          result.value\n        else\n          ctx.assert_type(result, :String)\n        end\n      else\n        raise ArgumentError, \"#{v.value} is not a function.\"\n      end\n    end\n  end\n\n  def add_configuration(options)\n    attributes = {}\n    options.value.keys.each do |key|\n      underscored = key.value.to_s.tr(\"-\", \"_\")\n      unless runtime_writable_attributes.find{|a| a.to_s == underscored}\n        raise ArgumentError, \"#{key} is not a valid configuration option.\"\n      end\n      underscored = underscored.to_sym\n      attributes[underscored] = OPTION_TRANSFORMER[underscored].call(options.value[key], self)\n    end\n    name = \"#{options.source_range.file}:#{options.source_range.start_pos.line}\"\n    Compass.add_configuration(Compass::Configuration::Data.new(name, attributes))\n    update_sass_options!\n    null\n  end\n  declare :add_configuration, [:options]\n\n  private\n\n  def runtime_writable_attributes\n    Compass::Configuration::ATTRIBUTES - Compass::Configuration::RUNTIME_READONLY_ATTRIBUTES\n  end\n\n  def common_parent_directory(directory1, directory2)\n    relative = Pathname.new(directory1).relative_path_from(Pathname.new(directory2))\n    File.expand_path(directory2, relative.to_s.scan(\"..#{File::SEPARATOR}\").join)\n  end\n\n  def relative_path_from(directory1, directory2)\n    Pathname.new(directory1).relative_path_from(Pathname.new(directory2)).to_s\n  end\n\n  def update_sass_options!\n    Compass.configuration.additional_import_paths.each do |lp|\n      options[:load_paths] << lp unless options[:load_paths].include?(lp)\n    end\n    if Compass.configuration.disable_warnings\n      Sass.logger.log_level = :error\n    else\n      Sass.logger.log_level = :warn\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/constants.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Constants\n  POSITIONS = /top|bottom|left|right|center/\n  def is_position(position)\n    bool(position.is_a?(Sass::Script::Value::String) && !!(position.value =~ POSITIONS))\n  end\n  def is_position_list(position_list)\n    bool(position_list.is_a?(Sass::Script::Value::List) && position_list.value.all?{|p| is_position(p).to_bool})\n  end\n  # returns the opposite position of a side or corner.\n  def opposite_position(position)\n    position = unless position.is_a?(Sass::Script::Value::List)\n      list(position, :space)\n    else\n      list(position.value.dup, position.separator)\n    end\n    position = list(position.value.map do |pos|\n      if pos.is_a? Sass::Script::Value::String\n        opposite = case pos.value\n        when \"top\" then \"bottom\"\n        when \"bottom\" then \"top\"\n        when \"left\" then \"right\"\n        when \"right\" then \"left\"\n        when \"center\" then \"center\"\n        else\n          Compass::Util.compass_warn(\"Cannot determine the opposite position of: #{pos}\")\n          pos.value\n        end\n        identifier(opposite)\n      elsif pos.is_a? Sass::Script::Value::Number\n        if pos.numerator_units == [\"%\"] && pos.denominator_units == []\n          number(100-pos.value, \"%\")\n        else\n          Compass::Util.compass_warn(\"Cannot determine the opposite position of: #{pos}\")\n          pos\n        end\n      else\n        Compass::Util.compass_warn(\"Cannot determine the opposite position of: #{pos}\")\n        pos\n      end\n    end, position.separator)\n    if position.value.size == 1\n      position.value.first\n    else\n      position\n    end\n  end\n\n  def is_url(string)\n    if string.is_a?(Sass::Script::Value::String)\n      is_url = !!(string.value =~ /^url\\(.*\\)$/)\n      bool(is_url)\n    else\n      bool(false)\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/cross_browser_support.rb",
    "content": "module Compass::Core::SassExtensions::Functions::CrossBrowserSupport\n  extend Compass::Core::SassExtensions::Functions::SassDeclarationHelper\n\n  class CSS2FallbackValue < Sass::Script::Value::Base\n    attr_accessor :value, :css2_value\n    def children\n      [value, css2_value]\n    end\n    def initialize(value, css2_value)\n      self.value = value\n      self.css2_value = css2_value\n    end\n    def inspect\n      to_s\n    end\n    def to_s(options = self.options)\n      value.to_s(options)\n    end\n    def supports?(aspect)\n      aspect == \"css2\"\n    end\n    def has_aspect?\n      true\n    end\n    def to_css2(options = self.options)\n      css2_value\n    end\n  end\n\n  # Check if any of the arguments passed require a vendor prefix.\n  def prefixed(prefix, *args)\n    assert_type prefix, :String\n    aspect = prefix.value.sub(/^-/,\"\")\n    needed = args.any?{|a| a.respond_to?(:supports?) && a.supports?(aspect)}\n    bool(needed)\n  end\n\n  %w(webkit moz o ms svg css2 owg).each do |prefix|\n    class_eval <<-RUBY, __FILE__, __LINE__ + 1\n      # Syntactic sugar to apply the given prefix\n      # -moz($arg) is the same as calling prefix(-moz, $arg)\n      def _#{prefix}(*args)\n        prefix(\"#{prefix}\", *args)\n      end\n    RUBY\n  end\n\n  def prefix(prefix, *objects)\n    assert_type prefix, :String if prefix.is_a?(Sass::Script::Value::Base)\n    prefix = prefix.value if prefix.is_a?(Sass::Script::Value::String)\n    prefix = prefix[1..-1] if prefix[0] == ?-\n    if objects.size > 1\n      self.prefix(prefix, list(objects, :comma))\n    else\n      object = objects.first\n      if object.is_a?(Sass::Script::Value::List)\n        list(object.value.map{|e|\n          self.prefix(prefix, e)\n        }, object.separator)\n      elsif object.respond_to?(:supports?) && object.supports?(prefix) && object.respond_to?(:\"to_#{prefix}\")\n        object.options = options\n        object.send(:\"to_#{prefix}\")\n      else\n        object\n      end\n    end\n  end\n\n  def css2_fallback(value, css2_value)\n    CSS2FallbackValue.new(value, css2_value)\n  end\n\n  # The known browsers.\n  #\n  # If prefix is given, limits the returned browsers to those using the specified prefix.\n  def browsers(prefix = nil)\n    browsers = if prefix\n                 assert_type prefix, :String\n                 Compass::Core::CanIUse.instance.browsers_with_prefix(prefix.value)\n               else\n                 Compass::Core::CanIUse.instance.browsers\n               end\n    list(browsers.map{|b| identifier(b)}, :comma)\n  end\n  declare(:browsers, [])\n  declare(:browsers, [:prefix])\n\n  # The known capabilities of browsers.\n  def browser_capabilities\n    list(Compass::Core::CanIUse.instance.capabilities.map{|c| identifier(c)}, :comma)\n  end\n  declare(:browser_capabilities, [])\n\n  # The versions for the given browser.\n  def browser_versions(browser)\n    assert_type browser, :String\n    list(Compass::Core::CanIUse.instance.versions(browser.value).map{|v| quoted_string(v)}, :comma)\n  rescue ArgumentError => e\n    raise Sass::SyntaxError.new(e.message)\n  end\n  declare(:browser_versions, [:browser])\n\n  # whether the browser uses a prefix for the given capability at the version\n  # specified or a later version. Returns the prefix it requires, or null.\n  def browser_requires_prefix(browser, version, capability, capability_options)\n    assert_type browser, :String\n    assert_type version, :String\n    assert_type capability, :String\n    p = Compass::Core::CanIUse.instance.requires_prefix(browser.value,\n                                                  version.value,\n                                                  capability.value,\n                                                  unbox_capability_options_list(capability_options))\n    p ? identifier(p) : null()\n  rescue ArgumentError => e\n    raise Sass::SyntaxError.new(e.message)\n  end\n  declare(:browser_requires_prefix, [:browser, :version, :capability])\n\n  # the prefix for the given browser.\n  def browser_prefix(browser, version = nil)\n    assert_type browser, :String\n    identifier(Compass::Core::CanIUse.instance.prefix(browser.value))\n  rescue ArgumentError => e\n    raise Sass::SyntaxError.new(e.message)\n  end\n  declare(:browser_prefix, [:browser])\n  declare(:browser_prefix, [:browser, :version])\n\n  # The prefixes used by the given browsers.\n  def browser_prefixes(browsers)\n    browsers = list(browsers, :comma) if browsers.is_a?(Sass::Script::Value::String)\n    assert_type browsers, :List\n    browser_strings = browsers.value.map {|b| assert_type(b, :String); b.value }\n    prefix_strings = Compass::Core::CanIUse.instance.prefixes(browser_strings)\n    list(prefix_strings.map {|p| identifier(p)}, :comma)\n  rescue ArgumentError => e\n    raise Sass::SyntaxError.new(e.message)\n  end\n  declare(:browser_prefixes, [:browsers])\n\n  # The percent of users that are omitted by setting the min_version of browser\n  # as specified.\n  def omitted_usage(browser, min_version, max_version = nil)\n    assert_type browser, :String\n    assert_type min_version, :String, :min_version\n    assert_type(max_version, :String, :max_version) if max_version\n    versions = [min_version.value]\n    versions << max_version.value if max_version\n    number(Compass::Core::CanIUse.instance.omitted_usage(browser.value, *versions))\n  end\n  declare(:omitted_usage, [:browser, :min_version])\n  declare(:omitted_usage, [:browser, :min_version, :max_version])\n\n  # The version before the version for the browser specified\n  def previous_version(browser, version)\n    assert_type browser, :String\n    assert_type version, :String\n    previous = Compass::Core::CanIUse.instance.previous_version(browser.value, version.value)\n    previous.nil? ? null() : quoted_string(previous)\n  end\n  declare(:previous_version, [:browser, :version])\n\n  # The version before the version for the browser specified\n  def next_version(browser, version)\n    assert_type browser, :String\n    assert_type version, :String\n    next_version = Compass::Core::CanIUse.instance.next_version(browser.value, version.value)\n    next_version.nil? ? null() : quoted_string(next_version)\n  end\n  declare(:next_version, [:browser, :version])\n\n  # The percent of users relying on a particular prefix\n  def prefix_usage(prefix, capability, capability_options)\n    assert_type prefix, :String\n    assert_type capability, :String\n    number(Compass::Core::CanIUse.instance.prefixed_usage(prefix.value,\n                                                    capability.value,\n                                                    unbox_capability_options_list(capability_options)))\n  rescue ArgumentError => e\n    raise Sass::SyntaxError.new(e.message)\n  end\n  declare(:prefix_usage, [:prefix, :capability])\n\n  # Compares two browser versions. Returning:\n  #\n  # * 0 if they are the same\n  # * <0 if the first version is less than the second\n  # * >0 if the first version is more than the second\n  def compare_browser_versions(browser, version1, version2)\n    assert_type browser, :String, :browser\n    assert_type version1, :String, :version1\n    assert_type version2, :String, :version2\n    index1 = index2 = nil\n    Compass::Core::CanIUse.instance.versions(browser.value).each_with_index do |v, i|\n      index1 = i if v == version1.value\n      index2 = i if v == version2.value\n      break if index1 && index2\n    end\n    unless index1\n      raise Sass::SyntaxError.new(\"#{version1} is not a version for #{browser}\")\n    end\n    unless index2\n      raise Sass::SyntaxError.new(\"#{version2} is not a version for #{browser}\")\n    end\n    number(index1 <=> index2)\n  end\n  declare(:compare_browser_versions, [:browser, :version1, :version2])\n\n  # Returns a map of browsers to the first version the capability became available\n  # without a prefix.\n  #\n  # If a prefix is provided, only those browsers using that prefix will be returned\n  # and the minimum version will be when it first became available as a prefix or\n  # without a prefix.\n  #\n  # If a browser does not have the capability, it will not included in the map.\n  def browser_ranges(capability, prefix = null(), include_unprefixed_versions = bool(true))\n    assert_type capability, :String\n    assert_type(prefix, :String) unless prefix == null()\n    mins = Compass::Core::CanIUse.instance.browser_ranges(capability.value,\n                                                          prefix.value,\n                                                          include_unprefixed_versions.to_bool)\n    Sass::Script::Value::Map.new(mins.inject({}) do |m, (h, range)|\n      m[identifier(h)] = list(range.map{|version| quoted_string(version)}, :space)\n      m\n    end)\n  end\n  declare(:browser_minimums, [:capability])\n  declare(:browser_minimums, [:capability, :prefix])\n\n  private\n\n  def unbox_capability_options_list(capability_options_list)\n    if capability_options_list.is_a?(Sass::Script::Value::Map)\n      [unbox_capability_options(capability_options_list)]\n    elsif capability_options_list.is_a?(Sass::Script::Value::List)\n      capability_options_list.to_a.map{|opts| unbox_capability_options(opts) }\n    else\n      assert_type capability_options_list, :List\n    end\n  end\n\n  CAPABILITY_OPTION_KEYS = {\n    \"full-support\" => :full_support,\n    \"partial-support\" => :partial_support,\n    \"prefixed\" => :prefixed,\n    \"spec-versions\" => :spec_versions,\n  }\n\n  CAPABILITY_OPTION_UNBOXER = {\n    :full_support => lambda {|v| v.to_bool },\n    :partial_support => lambda {|v| v.to_bool },\n    :prefixed => lambda {|v| v.to_bool },\n    :spec_versions => lambda {|versions| versions.to_a.map {|v| v.value } }\n  }\n\n  def unbox_capability_options(capability_options)\n    assert_type capability_options, :Map\n    result = {}\n    capability_options.value.each do |k, v|\n      assert_type k, :String\n      key = CAPABILITY_OPTION_KEYS[k.value]\n      unless key\n        raise Sass::SyntaxError, \"#{k} is not valid capability option\"\n      end\n      result[key] = CAPABILITY_OPTION_UNBOXER[key].call(v)\n    end\n    result\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/display.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Display\n  DEFAULT_DISPLAY = {\n                 \"block\" => %w{address article aside blockquote center dir div dd details dl dt fieldset\n                               figcaption figure form footer frameset h1 h2 h3 h4 h5 h6 hr header hgroup\n                               isindex main menu nav noframes noscript ol p pre section summary ul},\n                \"inline\" => %w{a abbr acronym audio b basefont bdo big br canvas cite code command\n                               datalist dfn em embed font i img input keygen kbd label mark meter output\n                               progress q rp rt ruby s samp select small span strike strong sub\n                               sup textarea time tt u var video wbr},\n          \"inline-block\" => %w{img},\n                 \"table\" => %w{table},\n             \"list-item\" => %w{li},\n       \"table-row-group\" => %w{tbody},\n    \"table-header-group\" => %w{thead},\n    \"table-footer-group\" => %w{tfoot},\n             \"table-row\" => %w{tr},\n            \"table-cell\" => %w{th td},\n           \"html5-block\" => %w{article aside details figcaption figure footer header hgroup main menu nav\n                               section summary},\n          \"html5-inline\" => %w{audio canvas command datalist embed keygen mark meter output progress rp\n                               rt ruby time video wbr},\n            \"text-input\" => %w{input textarea}\n  }\n\n  DEFAULT_DISPLAY[\"html5\"] = (DEFAULT_DISPLAY[\"html5-block\"] + DEFAULT_DISPLAY[\"html5-inline\"]).sort.uniq\n\n  # returns a comma delimited string for all the\n  # elements according to their default css3 display value.\n  def elements_of_type(display)\n    identifier(DEFAULT_DISPLAY.fetch(display.value.to_s).join(\", \"))\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/enumerate.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Enumerate\n  def enumerate(prefix, from, through, separator = nil)\n    separator ||= identifier(\"-\")\n    selectors = (from.value..through.value).map{|i| \"#{prefix.value}#{separator.value}#{i}\"}.join(\", \")\n    identifier(selectors)\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/env.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Env\n  extend Compass::Core::SassExtensions::Functions::SassDeclarationHelper\n  extend Sass::Script::Value::Helpers\n\n  def compass_env\n    compass_opts = options[:compass] || {}\n    identifier((compass_opts[:environment] || \"development\").to_s)\n  end\n  declare :compass_env, []\n\n  DEFAULT_TIME = identifier(\"%T%:z\")\n  def current_time(format = DEFAULT_TIME)\n    assert_type format, :String\n    identifier(Time.now.strftime(format.value))\n  end\n  declare :current_time, []\n  declare :current_time, [:format]\n\n  DEFAULT_DATE = identifier(\"%F\")\n  def current_date(format = DEFAULT_DATE)\n    current_time(format)\n  end\n  declare :current_date, []\n  declare :current_date, [:format]\n\n  NOT_ABSOLUTE = bool(false)\n  def current_source_file(absolute = NOT_ABSOLUTE)\n    if absolute.to_bool\n      identifier(options[:original_filename].to_s)\n    else\n      filename = Pathname.new(options[:original_filename].to_s)\n      sass_path = Pathname.new(Compass.configuration.sass_path)\n      relative_filename = filename.relative_path_from(sass_path).to_s rescue filename\n      identifier(relative_filename.to_s)\n    end\n  end\n  declare :current_source_file, []\n  declare :current_source_file, [:absolute]\n\n  def current_output_file(absolute = NOT_ABSOLUTE)\n    if absolute.to_bool\n      identifier(options[:css_filename].to_s)\n    else\n      filename = Pathname.new(options[:css_filename].to_s)\n      css_path = Pathname.new(Compass.configuration.css_path)\n      relative_filename = filename.relative_path_from(css_path).to_s rescue filename\n      identifier(relative_filename.to_s)\n    end\n  end\n  declare :current_output_file, []\n  declare :current_output_file, [:absolute]\n\n  def compass_extensions\n    exts = Sass::Util.ordered_hash(identifier(\"compass\") => quoted_string(Compass::Core::VERSION))\n    if defined?(Compass::Frameworks::ALL)\n      Compass::Frameworks::ALL.each do |framework|\n        next if framework.name == \"compass\"\n        exts[identifier(framework.name)] =\n          framework.version ? quoted_string(framework.version) : bool(true);\n      end\n    end\n    map(exts)\n  end\n  declare :compass_extensions, []\n\n  def at_stylesheet_root\n    bool(environment.selector.nil?)\n  end\n  declare :at_stylesheet_root, []\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/files.rb",
    "content": "require 'digest/md5'\n\nmodule Compass::Core::SassExtensions::Functions::Files\n  extend Compass::Core::SassExtensions::Functions::SassDeclarationHelper\n  extend Sass::Script::Value::Helpers\n\n  def md5sum(file, format = nil)\n    assert_type file, :String\n    filename = nil\n    if options[:css_filename] && File.exists?(options[:css_filename])\n      filename = File.expand_path(file.value, File.dirname(options[:css_filename]))\n    elsif Pathname.new(file.value).absolute?\n      filename = file.value\n    end\n    if filename && File.exist?(filename)\n      assert_type file, :String if format\n      digest = Digest::MD5.new()\n      digest << File.read(filename)\n      if !format || format.value == \"hex\"\n        unquoted_string(digest.hexdigest)\n      elsif format && format.value == \"integer\"\n        number(digest.hexdigest.hex)\n      elsif format\n        raise Sass::SyntaxError, \"Unknown format '#{format}' for md5sum\"\n      end\n    else\n      raise Sass::SyntaxError, \"File not found: #{file}\"\n    end\n  end\n  declare :md5sum, [:file]\n  declare :md5sum, [:file, :format]\nend\n\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/font_files.rb",
    "content": "module Compass::Core::SassExtensions::Functions::FontFiles\n  FONT_TYPES = {\n    :woff => 'woff',\n    :woff2 => 'woff2',\n    :otf => 'opentype',\n    :opentype => 'opentype',\n    :ttf => 'truetype',\n    :truetype => 'truetype',\n    :svg => 'svg',\n    :eot => 'embedded-opentype'\n  }\n\n  def font_formats(*args)\n    formats = []\n    with_each_font_file(*args) do |path, type|\n      formats << identifier(type)\n    end\n    return list(formats, :comma)\n  end\n\n  def font_files(*args)\n    return null unless args.any?\n    files = []\n    with_each_font_file(*args) do |path, type|\n      files << list(font_url(path), identifier(\"format('#{type}')\"), :space)\n    end\n    list(files, :comma)\n  end\n\nprotected\n  def with_each_font_file(*args)\n    skip_next = false\n\n    args.each_with_index do |path, index|\n      assert_type path, :String\n      path = unquote(path)\n      # if we were told to skip this iteration, do so...\n      if skip_next\n        skip_next = false\n        next\n      end\n\n      # back-compat support for passing the font type e.g.\n      # font-files('path/to/file.ttf', truetype, 'path/to/file.otf', opentype);\n      type = args[index + 1]\n      type = type.nil? ? :wrong : type.value.to_sym\n\n      # if the type is valid, keep it, and skip the next index (as it was the type)\n      if FONT_TYPES.key? type\n        skip_next = true\n      # otherwise, we need to look at the file extension to derive the type...\n      else\n        # let pass url like font.type?thing#stuff\n        type = path.to_s.split('.').last.gsub(/(\\?(.*))?(#(.*))?\\\"?/, '').to_sym\n      end\n\n      if FONT_TYPES.key? type\n        yield(path, FONT_TYPES[type]) if block_given?\n      else\n        raise Sass::SyntaxError, \"Could not determine font type for #{path}\"\n      end\n    end\n  end\n\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/gradient_support.rb",
    "content": "module Compass::Core::SassExtensions::Functions::GradientSupport\n\n  GRADIENT_ASPECTS = %w(webkit moz svg css2 o owg).freeze\n\n  class CSS3AngleToSVGConverter\n    include Math\n\n    def initialize(angle)\n      @original_angle = angle\n      @angle = handle_keywords(angle)\n      @angle = in_radians(@angle) % (2 * PI)\n      @quadrant = (@angle * 2 / PI).to_i\n      @angle = case @quadrant\n               when 0\n                 @angle\n               when 1\n                 PI - @angle\n               when 2\n                 @angle - PI\n               when 3\n                 2 * PI  - @angle\n               end\n    end\n\n    TOP    = 1\n    BOTTOM = 2\n    RIGHT  = 4\n    LEFT   = 8\n\n    DIR_KEYWORDS_TO_ANGLE = {\n      TOP            => 0,\n      TOP    | RIGHT => 45,\n               RIGHT => 90,\n      BOTTOM | RIGHT => 135,\n      BOTTOM         => 180,\n      BOTTOM | LEFT  => 225,\n               LEFT  => 270,\n      TOP    | LEFT  => 315,\n    }\n\n    def handle_keywords(angle)\n      if angle.is_a?(Sass::Script::Value::List) || angle.is_a?(Sass::Script::Value::String)\n        direction = angle.to_sass\n        is_end_point = !!/\\bto\\b/i.match(direction)\n        dir = 0\n        dir |= TOP if /\\btop\\b/i.match(direction)\n        dir |= BOTTOM if /\\bbottom\\b/i.match(direction)\n        dir |= RIGHT if /\\bright\\b/i.match(direction)\n        dir |= LEFT if /\\bleft\\b/i.match(direction)\n        if (r = DIR_KEYWORDS_TO_ANGLE[dir])\n          r += 180 unless is_end_point\n          Sass::Script::Value::Number.new(r, %w(deg), [])\n        else\n          raise Sass::SyntaxError, \"Unknown direction: #{angle.to_sass}\"\n        end\n      else\n        angle\n      end\n    end\n\n    def in_radians(angle)\n      case angle.unit_str\n      when \"deg\"\n        angle.value * PI / 180.0\n      when \"grad\"\n        angle.value * PI / 200.0\n      when \"rad\"\n        angle.value\n      when \"turn\"\n        angle.value * PI * 2\n      else\n        raise Sass::SyntaxError.new(\"#{angle.unit_str} is not an angle\")\n      end\n    end\n\n    def sin2(a)\n      v = sin(a)\n      v * v\n    end\n\n    def x\n      @x ||= if @angle > 1.570621793869697\n               1.0 # avoid floating point rounding error at the asymptote\n             else\n               tan(@angle) + (1 - tan(@angle)) * sin2(@angle)\n             end\n    end\n\n    def y\n      @y ||= if @angle < 0.0001\n               1.0 # the limit of the expression as we approach 0 is 1.\n             else\n               x / tan(@angle)\n             end\n    end\n\n    def x1\n      result case @quadrant\n             when 0, 1\n               -x\n             when 2, 3\n               x\n             end\n    end\n\n    def y1\n      result case @quadrant\n             when 0, 3\n               y\n             when 1, 2\n               -y\n             end\n    end\n\n    def x2\n      result case @quadrant\n             when 0, 1\n               x\n             when 2, 3\n               -x\n             end\n    end\n\n    def y2\n      result case @quadrant\n             when 0, 3\n               -y\n             when 1, 2\n               y\n             end\n    end\n\n    def scale(p)\n      (p + 1) / 2.0\n    end\n\n    def round6(v)\n      (v * 1_000_000).round / 1_000_000.0\n    end\n\n    def result(v)\n      round6(scale(v))\n    end\n  end\n\n  class ColorStop < Sass::Script::Value::Base\n    include Sass::Script::Value::Helpers\n    attr_accessor :color, :stop\n    def children\n      [color, stop].compact\n    end\n    def initialize(color, stop = nil)\n      assert_legal_color! color\n      assert_legal_color_stop! stop if stop\n      self.color, self.stop = color, stop\n    end\n    def inspect\n      to_s\n    end\n\n    def assert_legal_color!(color)\n      unless Sass::Script::Value::Color === color ||\n             Sass::Script::Tree::Funcall === color ||\n             (Sass::Script::Value::String === color && color.value == \"currentColor\")||\n             (Sass::Script::Value::String === color && color.value == \"transparent\")\n        raise Sass::SyntaxError, \"Expected a color. Got: #{color}\"\n      end\n    end\n    def assert_legal_color_stop!(stop)\n      case stop\n      when Sass::Script::Value::String\n        return stop.value.start_with?(\"calc(\")\n      when Sass::Script::Value::Number\n        return true\n      end\n      raise Sass::SyntaxError, \"Expected a number or numerical expression. Got: #{stop.inspect}\"\n    end\n\n    def self.color_to_svg_s(c)\n      # svg doesn't support the \"transparent\" keyword; we need to manually\n      # refactor it into \"transparent black\"\n      if c.is_a?(Sass::Script::Value::String) && c.value == \"transparent\"\n        \"black\"\n      elsif c.is_a?(Sass::Script::Value::String)\n        c.value.dup\n      else\n        self.color_to_s(c.with(:alpha => 1))\n      end\n    end\n\n    def self.color_to_svg_alpha(c)\n      # svg doesn't support the \"transparent\" keyword; we need to manually\n      # refactor it into \"transparent black\"\n      if c.is_a?(Sass::Script::Value::String) && c.value == \"transparent\"\n        0\n      elsif c.is_a?(Sass::Script::Value::String) && c.value == \"currentColor\"\n        1\n      else\n        c.alpha\n      end\n    end\n\n    def self.color_to_s(c)\n      if c.is_a?(Sass::Script::Value::String)\n        c.value.dup\n      else\n        c.inspect.dup\n      end\n    end\n\n    def to_s(options = self.options)\n      s = self.class.color_to_s(color)\n      if stop\n        s << \" \"\n        if stop.respond_to?(:unitless?) && stop.unitless?\n          s << stop.times(number(100, \"%\")).inspect\n        else\n          s << stop.to_s\n        end\n      end\n      s\n    end\n\n    def to_sass(options = nil)\n      identifier(\"color-stop(#{color.to_sass rescue nil}, #{stop.to_sass rescue nil})\")\n    end\n  end\n\n  module Gradient\n    include Sass::Script::Value::Helpers\n\n    def self.included(base)\n      base.extend ClassMethods\n    end\n\n    module ClassMethods\n      def standardized_prefix(prefix)\n        class_eval %Q<\n          def to_#{prefix}(options = self.options)\n            identifier(\"-#{prefix}-\\#{to_s_prefixed(options)}\")\n          end\n        >\n      end\n    end\n\n    def inspect\n      to_s\n    end\n\n    def supports?(aspect)\n      GRADIENT_ASPECTS.include?(aspect)\n    end\n\n    def has_aspect?\n      true\n    end\n\n    def is_position(pos)\n      pos.value =~ Compass::Core::SassExtensions::Functions::Constants::POSITIONS\n    end\n\n    def angle?(value)\n      value.is_a?(Sass::Script::Value::Number) &&\n      value.numerator_units.size == 1 &&\n      value.numerator_units.first == \"deg\" &&\n      value.denominator_units.empty?\n    end\n\n  end\n\n  class RadialGradient < Sass::Script::Value::Base\n    include Gradient\n\n    attr_accessor :position, :shape_and_size, :color_stops\n\n    def children\n      [color_stops, position, shape_and_size].compact\n    end\n\n    def initialize(position, shape_and_size, color_stops)\n      unless color_stops.value.size >= 2\n        raise Sass::SyntaxError, \"At least two color stops are required for a radial-gradient\"\n      end\n      if angle?(position)\n        raise Sass::SyntaxError, \"CSS no longer allows angles in radial-gradients.\"\n      end\n      self.position = position\n      self.shape_and_size = shape_and_size\n      self.color_stops = color_stops\n    end\n\n    def to_s(options = self.options)\n      to_official.to_s\n    end\n\n    def to_s_prefixed(options = self.options)\n      to_s(options)\n    end\n\n    def supports?(aspect)\n      # I don't know how to support radial old webkit gradients (owg)\n      if %w(owg).include?(aspect)\n        false\n      else\n        super\n      end\n    end\n\n    standardized_prefix :webkit\n    standardized_prefix :moz\n\n    def to_webkit(options = self.options)\n      s = \"-webkit-radial-gradient(\"\n      s << old_standard_arguments(options)\n      s << \")\"\n      identifier(s)\n    end\n\n    def to_moz(options = self.options)\n      s = \"-moz-radial-gradient(\"\n      s << old_standard_arguments(options)\n      s << \")\"\n      identifier(s)\n    end\n\n    def to_official\n      s = \"radial-gradient(\"\n      s << new_standard_arguments(options)\n      s << \")\"\n      identifier(s)\n    end\n\n    def new_standard_arguments(options = self.options)\n      if shape_and_size\n        \"#{array_to_s(shape_and_size, options)} at #{array_to_s(position, options)}, #{array_to_s(color_stops, options)}\"\n      elsif position\n        \"#{array_to_s(position, options)}, #{array_to_s(color_stops, options)}\"\n      else\n        array_to_s(color_stops, options)\n      end\n    end\n\n    def old_standard_arguments(options = self.options)\n      if shape_and_size\n        \"#{array_to_s(position, options)}, #{array_to_s(shape_and_size, options)}, #{array_to_s(color_stops, options)}\"\n      elsif position\n        \"#{array_to_s(position, options)}, #{array_to_s(color_stops, options)}\"\n      else\n        array_to_s(color_stops, options)\n      end\n    end\n\n    def to_svg(options = self.options)\n      # XXX Add shape support if possible\n      radial_svg_gradient(color_stops, position || _center_position)\n    end\n\n    def to_css2(options = self.options)\n      null\n    end\n\n    def array_to_s(array, opts)\n      if array.is_a?(Sass::Script::Value::List)\n        array.to_s\n      else\n        l = list(array, :space)\n        l.options = opts\n        l.to_s\n      end\n    end\n  end\n\n  class LinearGradient < Sass::Script::Value::Base\n    include Gradient\n\n    attr_accessor :color_stops, :position_or_angle, :legacy\n\n    def children\n      [color_stops, position_or_angle].compact\n    end\n\n    def initialize(position_or_angle, color_stops, legacy=false)\n      unless color_stops.value.size >= 2\n        raise Sass::SyntaxError, \"At least two color stops are required for a linear-gradient\"\n      end\n      self.position_or_angle = position_or_angle\n      self.color_stops = color_stops\n      self.legacy = legacy\n    end\n\n    def to_s_prefixed(options = self.options)\n      s = \"linear-gradient(\"\n      if legacy\n        s << position_or_angle.to_s(options) << \", \" if position_or_angle\n      else\n        s << convert_to_or_from_legacy(position_or_angle, options) << \", \" if position_or_angle\n      end\n      s << color_stops.to_s(options)\n      s << \")\"\n    end\n\n    def convert_to_or_from_legacy(position_or_angle, options = self.options)\n      input = if position_or_angle.is_a?(Sass::Script::Value::Number)\n          position_or_angle\n        else\n          opts(list(position_or_angle.to_s.split(' ').map {|s| identifier(s) }, :space))\n        end\n      return convert_angle_from_offical(input).to_s(options)\n    end\n\n    def to_s(options = self.options)\n      s = 'linear-gradient('\n      if legacy\n        s << convert_to_or_from_legacy(position_or_angle, options) << \", \" if position_or_angle\n      else\n        s << position_or_angle.to_s(options) << \", \" if position_or_angle\n      end\n      s << color_stops.to_s(options)\n      s << \")\"\n    end\n\n    standardized_prefix :webkit\n    standardized_prefix :moz\n    standardized_prefix :o\n\n    def supports?(aspect)\n      # I don't know how to support degree-based gradients in old webkit gradients (owg) or svg so we just disable them.\n      if %w(owg).include?(aspect) && position_or_angle.is_a?(Sass::Script::Value::Number) && position_or_angle.numerator_units.include?(\"deg\")\n        false\n      elsif %w(owg svg).include?(aspect) && color_stops.value.any?{|cs| cs.stop.is_a?(Sass::Script::Value::String) }\n        # calc expressions cannot be represented in svg or owg\n        false\n      else\n        super\n      end\n    end\n\n    # Output the original webkit gradient syntax\n    def to_owg(options = self.options)\n      position_list = reverse_side_or_corner(position_or_angle)\n\n      start_point = grad_point(position_list)\n      args = []\n      args << start_point\n      args << linear_end_position(position_list, start_point, color_stops.value.last.stop)\n      args << grad_color_stops(color_stops)\n      args.each{|a| a.options = options}\n      Sass::Script::String.new(\"-webkit-gradient(linear, #{args.join(', ')})\")\n    end\n\n    def to_svg(options = self.options)\n      linear_svg_gradient(color_stops, position_or_angle || identifier(\"top\"))\n    end\n\n    def to_css2(options = self.options)\n      null\n    end\n  end\n\n  module Functions\n    include Sass::Script::Value::Helpers\n\n    def reverse_side_or_corner(position)\n      position_array = position.nil? ? [identifier('top')] : position.value.dup\n      if position_array.first == identifier('to')\n        # Remove the 'to' element from the array\n        position_array.shift\n\n        # Reverse all the positions\n        reversed_position = position_array.map do |pos|\n          opposite_position(pos)\n        end\n      else\n        # When the position does not have the 'to' element we don't need to\n        # reverse the direction of the gradient\n        reversed_position = position_array\n      end\n      opts(list(reversed_position, :space))\n    end\n\n    def convert_angle_from_offical(deg)\n      if deg.is_a?(Sass::Script::Value::Number)\n        return number((deg.value.to_f - 450).abs % 360, 'deg')\n      else\n        args = deg.value\n        direction = []\n        if args[0] == identifier('to')\n          if args.size < 2\n            direction = args\n          else\n            direction << opposite_position(args[1])\n          end\n        else\n          direction << identifier('to')\n          args.each do |pos|\n            direction << opposite_position(pos)\n          end\n        end\n        return opts(list(direction, :space))\n      end\n    end\n\n    # given a position list, return a corresponding position in percents\n    # otherwise, returns the original argument\n    def grad_point(position)\n      original_value = position\n      position = unless position.is_a?(Sass::Script::Value::List)\n        opts(list([position], :space))\n      else\n        opts(list(position.value.dup, position.separator))\n      end\n      # Handle unknown arguments by passing them along untouched.\n      unless position.value.all?{|p| is_position(p) }\n        return original_value\n      end\n      if (position.value.first.value =~ /top|bottom/) or (position.value.last.value =~ /left|right/)\n        # browsers are pretty forgiving of reversed positions so we are too.\n        position = opts(list(position.value.reverse, position.separator))\n      end\n      if position.value.size == 1\n        if position.value.first.value =~ /top|bottom/\n          position = opts(list(identifier(\"center\"), position.value.first, position.separator))\n        elsif position.value.first.value =~ /left|right/\n          position = opts(list(position.value.first, identifier(\"center\"), position.separator))\n        end\n      end\n      position = opts(list(position.value.map do |p|\n        case p.value\n        when /top|left/\n          number(0, \"%\")\n        when /bottom|right/\n          number(100, \"%\")\n        when /center/\n          number(50, \"%\")\n        else\n          p\n        end\n      end, position.separator))\n      position\n    end\n\n    def color_stops(*args)\n      opts(list(args.map do |arg|\n        if ColorStop === arg\n          arg\n        elsif Sass::Script::Value::Color === arg\n          ColorStop.new(arg)\n        elsif Sass::Script::Value::List === arg\n          ColorStop.new(*arg.value)\n        elsif Sass::Script::Value::String === arg && arg.value == \"transparent\"\n          ColorStop.new(arg)\n        elsif Sass::Script::Value::String === arg && arg.value == \"currentColor\"\n          ColorStop.new(arg)\n        else\n          raise Sass::SyntaxError, \"Not a valid color stop: #{arg.class.name}: #{arg}\"\n        end\n      end, :comma))\n    end\n\n    def radial_gradient(position_or_angle, shape_and_size, *color_stops)\n      # Have to deal with variable length/meaning arguments.\n      if color_stop?(shape_and_size)\n        color_stops.unshift(shape_and_size)\n        shape_and_size = nil\n      elsif list_of_color_stops?(shape_and_size)\n        # Support legacy use of the color-stops() function\n        color_stops = shape_and_size.value + color_stops\n        shape_and_size = nil\n      end\n      shape_and_size = nil if shape_and_size && !shape_and_size.to_bool # nil out explictly passed falses\n      # ditto for position_or_angle\n      if color_stop?(position_or_angle)\n        color_stops.unshift(position_or_angle)\n        position_or_angle = nil\n      elsif list_of_color_stops?(position_or_angle)\n        color_stops = position_or_angle.value + color_stops\n        position_or_angle = nil\n      end\n      position_or_angle = nil if position_or_angle && !position_or_angle.to_bool\n\n      # Support legacy use of the color-stops() function\n      if color_stops.size == 1 && list_of_color_stops?(color_stops.first)\n        color_stops = color_stops.first.value\n      end\n      if position_or_angle.is_a?(Sass::Script::Value::List) &&\n         (i = position_or_angle.value.index {|word| word.is_a?(Sass::Script::Value::String) && word.value == \"at\"})\n        shape_and_size = list(position_or_angle.value[0..(i-1)], :space)\n        shape_and_size.options = options\n        position_or_angle = list(position_or_angle.value[(i+1)..-1], :space)\n        position_or_angle.options = options\n      end\n      RadialGradient.new(position_or_angle, shape_and_size, send(:color_stops, *color_stops))\n    end\n\n    def _build_linear_gradient(position_or_angle, *color_stops)\n      if color_stop?(position_or_angle)\n        color_stops.unshift(position_or_angle)\n        position_or_angle = nil\n      elsif list_of_color_stops?(position_or_angle)\n        color_stops = position_or_angle.value + color_stops\n        position_or_angle = nil\n      end\n      position_or_angle = nil if position_or_angle && !position_or_angle.to_bool\n\n      # Support legacy use of the color-stops() function\n      if color_stops.size == 1 && (stops = list_of_color_stops?(color_stops.first))\n        color_stops = stops\n      end\n      return [position_or_angle, color_stops]\n    end\n\n    def _linear_gradient(position_or_angle, *color_stops)\n      position_or_angle, color_stops = _build_linear_gradient(position_or_angle, *color_stops)\n      LinearGradient.new(position_or_angle, send(:color_stops, *color_stops))\n    end\n\n    def _linear_gradient_legacy(position_or_angle, *color_stops)\n      position_or_angle, color_stops = _build_linear_gradient(position_or_angle, *color_stops)\n      LinearGradient.new(position_or_angle, send(:color_stops, *color_stops), true)\n    end\n\n    # returns color-stop() calls for use in webkit.\n    def grad_color_stops(color_list)\n      stops = color_stops_in_percentages(color_list).map do |stop, color|\n        Sass::Script::String.new(\"color-stop(#{stop.to_s}, #{ColorStop.color_to_s(color)})\")\n      end\n      opts(list(stops, :comma))\n    end\n\n    def color_stops_in_percentages(color_list)\n      assert_type color_list, :List\n      color_list = normalize_stops(color_list)\n      max = color_list.value.last.stop\n      last_value = nil\n      color_list.value.map do |pos|\n        next [pos.stop, pos.color] if pos.stop.is_a?(Sass::Script::Value::String)\n        # have to convert absolute units to percentages for use in color stop functions.\n        stop = pos.stop\n        stop = stop.div(max).times(number(100, \"%\")) if stop.numerator_units == max.numerator_units && max.numerator_units != [\"%\"]\n        # Make sure the color stops are specified in the right order.\n        if last_value && stop.numerator_units == last_value.numerator_units && stop.denominator_units == last_value.denominator_units && (stop.value * 1000).round < (last_value.value * 1000).round\n          raise Sass::SyntaxError.new(\"Color stops must be specified in increasing order. #{stop.value} came after #{last_value.value}.\")\n        end\n        last_value = stop\n        [stop, pos.color]\n      end\n    end\n\n    # only used for webkit\n    def linear_end_position(position_or_angle, start_point, end_target)\n      end_point = grad_point(opposite_position(position_or_angle))\n\n      if end_target && end_target.numerator_units == [\"px\"]\n        if start_point.value.first == end_point.value.first && start_point.value.last.value == 0\n          # this means top-to-bottom\n          new_end_point = end_point.value.dup\n          new_end_point[1] = number(end_target.value)\n\n          end_point = opts(list(new_end_point, end_point.separator))\n        elsif start_point.value.last == end_point.value.last && start_point.value.first.value == 0\n          # this implies left-to-right\n\n          new_end_point = end_point.value.dup\n          new_end_point[0] = number(end_target.value)\n\n          end_point = opts(list(new_end_point, end_point.separator))\n        end\n      end\n      end_point\n    end\n\n    # returns the end position of the gradient from the color stop\n    def grad_end_position(color_list, radial = bool(false))\n      assert_type color_list, :List\n      default = number(100)\n      grad_position(color_list, number(color_list.value.size), default, radial)\n    end\n\n    def grad_position(color_list, index, default, radial = bool(false))\n      assert_type color_list, :List\n      stop = color_list.value[index.value - 1].stop\n      if stop && radial.to_bool\n        orig_stop = stop\n        if stop.unitless?\n          if stop.value <= 1\n            # A unitless number is assumed to be a percentage when it's between 0 and 1\n            stop = stop.times(number(100, \"%\"))\n          else\n            # Otherwise, a unitless number is assumed to be in pixels\n            stop = stop.times(number(1, \"px\"))\n          end\n        end\n        if stop.numerator_units == [\"%\"] && color_list.value.last.stop && color_list.value.last.stop.numerator_units == [\"px\"]\n          stop = stop.times(color_list.value.last.stop).div(number(100, \"%\"))\n        end\n        Compass::Logger.new.record(:warning, \"Webkit only supports pixels for the start and end stops for radial gradients. Got: #{orig_stop}\") if stop.numerator_units != [\"px\"]\n        stop.div(Sass::Script::Value::Number.new(1, stop.numerator_units, stop.denominator_units))\n      elsif stop\n        stop\n      else\n        default\n      end\n    end\n\n    def linear_svg_gradient(color_stops, start)\n      converter = CSS3AngleToSVGConverter.new(start)\n      stops = color_stops_in_percentages(color_stops)\n\n      svg = linear_svg(stops, converter.x1, converter.y1, converter.x2, converter.y2)\n      inline_image_string(svg.gsub(/\\s+/, ' '), 'image/svg+xml')\n    end\n\n    def radial_svg_gradient(color_stops, center)\n      cx, cy = *grad_point(center).value\n      r = grad_end_position(color_stops,  bool(true))\n      stops = color_stops_in_percentages(color_stops)\n\n      svg = radial_svg(stops, cx, cy, r)\n      inline_image_string(svg.gsub(/\\s+/, ' '), 'image/svg+xml')\n    end\n\n    private\n\n    def color_stop?(arg)\n      arg.is_a?(ColorStop) ||\n      (arg.is_a?(Sass::Script::Value::List) && ColorStop.new(*arg.value)) ||\n      ColorStop.new(arg)\n    rescue\n      nil\n    end\n\n    def normalize_stops(color_list)\n      positions = color_list.value.map{|obj| obj.dup}\n      # fill in the start and end positions, if unspecified\n      positions.first.stop = number(0) unless positions.first.stop\n      positions.last.stop = number(100, \"%\") unless positions.last.stop\n      # fill in empty values\n      for i in 0...positions.size\n        if positions[i].stop.nil?\n          num = 2.0\n          for j in (i+1)...positions.size\n            if positions[j].stop\n              positions[i].stop = positions[i-1].stop.plus((positions[j].stop.minus(positions[i-1].stop)).div(number(num)))\n              break\n            else\n              num += 1\n            end\n          end\n        end\n      end\n      # normalize unitless numbers\n      positions.each do |pos|\n        next pos if pos.stop.is_a?(Sass::Script::Value::String)\n        if pos.stop.unitless? && pos.stop.value <= 1\n          pos.stop = pos.stop.times(number(100, \"%\"))\n        elsif pos.stop.unitless?\n          pos.stop = pos.stop.times(number(1, \"px\"))\n        end\n      end\n      if (positions.last.stop.eq(number(0, \"px\")).to_bool ||\n         positions.last.stop.eq(number(0, \"%\")).to_bool)\n         raise Sass::SyntaxError.new(\"Color stops must be specified in increasing order\")\n       end\n       opts(list(positions, color_list.separator))\n    end\n\n    def parse_color_stop(arg)\n      return ColorStop.new(arg) if arg.is_a?(Sass::Script::Value::Color)\n      return nil unless arg.is_a?(Sass::Script::Value::String)\n      color = stop = nil\n      expr = Sass::Script::Parser.parse(arg.value, 0, 0)\n      case expr\n      when Sass::Script::Value::Color\n        color = expr\n      when Sass::Script::Tree::Funcall\n        color = expr\n      when Sass::Script::Tree::Operation\n        unless [:concat, :space].include?(expr.instance_variable_get(\"@operator\"))\n          # This should never happen.\n          raise Sass::SyntaxError, \"Couldn't parse a color stop from: #{arg.value}\"\n        end\n        color = expr.instance_variable_get(\"@operand1\")\n        stop = expr.instance_variable_get(\"@operand2\")\n      else\n        raise Sass::SyntaxError, \"Couldn't parse a color stop from: #{arg.value}\"\n      end\n      ColorStop.new(color, stop)\n    end\n\n    def list_of_color_stops?(arg)\n      if arg.respond_to?(:value)\n        arg.value.is_a?(Array) && arg.value.all?{|a| color_stop?(a)} ? arg.value : nil\n      elsif arg.is_a?(Array)\n        arg.all?{|a| color_stop?(a)} ? arg : nil\n      end\n    end\n\n    def linear_svg(color_stops, x1, y1, x2, y2)\n      gradient = %Q{<linearGradient id=\"grad\" gradientUnits=\"objectBoundingBox\" x1=\"#{x1}\" y1=\"#{y1}\" x2=\"#{x2}\" y2=\"#{y2}\">#{color_stops_svg(color_stops)}</linearGradient>}\n      svg(gradient)\n    end\n\n    def radial_svg(color_stops, cx, cy, r)\n      gradient = %Q{<radialGradient id=\"grad\" gradientUnits=\"userSpaceOnUse\" cx=\"#{cx}\" cy=\"#{cy}\" r=\"#{r}%\">#{color_stops_svg(color_stops)}</radialGradient>}\n      svg(gradient)\n    end\n\n    # color_stops = array of: [stop, color]\n    def color_stops_svg(color_stops)\n      color_stops.each.map{ |stop, color|\n        s = %{<stop offset=\"#{stop.to_s}\"}\n        s << %{ stop-color=\"#{ColorStop.color_to_svg_s(color)}\"}\n        alpha = ColorStop.color_to_svg_alpha(color)\n        s << %{ stop-opacity=\"#{alpha}\"} if alpha != 1\n        s << \"/>\"\n      }.join\n    end\n\n    def svg(gradient)\n      svg = <<-EOS\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><defs>#{gradient}</defs><rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"url(#grad)\" /></svg>\nEOS\n    end\n\n    def _center_position\n      opts(list(identifier(\"center\"), identifier(\"center\"), :space))\n    end\n\n    def opts(v)\n      v.options = options\n      v\n    end\n\n  end\n\n  module Assertions\n    def assert_type(value, type, name = nil)\n      return if value.is_a?(Sass::Script.const_get(type))\n      err = \"#{value.inspect} is not a #{type.to_s.downcase}\"\n      err = \"$#{name}: \" + err if name\n      raise ArgumentError.new(err)\n    end\n  end\n\n  class LinearGradient < Sass::Script::Value::Base\n    include Assertions\n    include Functions\n    include Compass::Core::SassExtensions::Functions::Constants\n    include Compass::Core::SassExtensions::Functions::InlineImage\n  end\n\n  class RadialGradient < Sass::Script::Value::Base\n    include Assertions\n    include Functions\n    include Compass::Core::SassExtensions::Functions::Constants\n    include Compass::Core::SassExtensions::Functions::InlineImage\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/image_size.rb",
    "content": "module Compass::Core::SassExtensions::Functions::ImageSize\n  KNOWN_TYPES = %w(png gif jpg jpeg)\n\n  # Returns the width of the image relative to the images directory\n  def image_width(image_file)\n    width, _ = image_dimensions(image_file)\n    number(width, \"px\")\n  end\n  \n  # Returns the height of the image relative to the images directory\n  def image_height(image_file)\n    _, height = image_dimensions(image_file)\n    number(height, \"px\")\n  end\n\n  class ImageProperties\n    def initialize(file)\n      @file = (file.respond_to?(:to_path) ? file.to_path : file)\n      @file_type = File.extname(@file)[1..-1].downcase\n      unless KNOWN_TYPES.include?(@file_type)\n        raise Sass::SyntaxError, \"Unrecognized file type: #{@file_type}\"\n      end\n    end\n\n    def size\n      @dimensions ||= send(:\"get_size_for_#{@file_type}\")\n    end\n\n  private\n    def get_size_for_png\n      File.open(@file, \"rb\") {|io| io.read}[0x10..0x18].unpack('NN')\n    end\n\n    def get_size_for_gif\n      File.open(@file, \"rb\") {|io| io.read}[6..10].unpack('SS')\n    end\n\n    def get_size_for_jpg\n      get_size_for_jpeg\n    end\n\n    def get_size_for_jpeg\n      jpeg = JPEG.new(@file)\n      [jpeg.width, jpeg.height]\n    end\n  end\n\nprivate\n\n  def image_dimensions(image_file)\n    image_file = image_file.respond_to?(:value) ? image_file.value : image_file\n    options[:compass] ||= {}\n    options[:compass][:image_dimensions] ||= {}\n    options[:compass][:image_dimensions][image_file] = ImageProperties.new(image_path_for_size(image_file)).size\n  end\n  \n  def image_path_for_size(image_file)\n    if File.exists?(image_file)\n      return image_file \n    end\n    real_path(image_file)\n  end\n\n  def real_path(image_file)\n    # Compute the real path to the image on the file stystem if the images_dir is set.\n    if Compass.configuration.images_path\n      File.join(Compass.configuration.images_path, image_file)\n    else\n      File.join(Compass.configuration.project_path, image_file)\n    end\n  end\n\n  class JPEG\n    attr_reader :width, :height, :bits\n\n    def initialize(file)\n      if file.kind_of? IO\n        examine(file)\n      else\n        File.open(file, 'rb') { |io| examine(io) }\n      end\n    end\n\n  private\n    def examine(io)\n      class << io\n        unless method_defined?(:readbyte)\n          def readbyte\n            getc\n          end\n        end\n        def readint; (readbyte << 8) + readbyte; end\n        def readframe; read(readint - 2); end\n        def readsof; [readint, readbyte, readint, readint, readbyte]; end\n        def next\n          c = readbyte while c != 0xFF\n          c = readbyte while c == 0xFF\n          c\n        end\n      end\n\n      raise 'malformed JPEG!' unless io.readbyte == 0xFF && io.readbyte == 0xD8 # SOI\n\n      while marker = io.next\n        case marker\n          when 0xC0..0xC3, 0xC5..0xC7, 0xC9..0xCB, 0xCD..0xCF # SOF markers\n            length, @bits, @height, @width, components = io.readsof\n            raise 'malformed JPEG' unless length == 8 + components * 3\n          when 0xD9, 0xDA then  break # EOI, SOS\n          when 0xFE then @comment = io.readframe # COM\n          when 0xE1 then io.readframe # APP1, contains EXIF tag\n          else io.readframe # ignore frame\n        end\n      end\n    end\nend\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/inline_image.rb",
    "content": "module Compass::Core::SassExtensions::Functions::InlineImage\n\n  def inline_image(path, mime_type = nil)\n    path = path.value\n    real_path = File.join(Compass.configuration.images_path, path)\n    inline_image_string(data(real_path), compute_mime_type(path, mime_type))\n  end\n\n  def inline_font_files(*args)\n    files = []\n    with_each_font_file(*args) do |path, type|\n      path = path.value\n      real_path = File.join(Compass.configuration.fonts_path, path)\n      data = inline_image_string(data(real_path), compute_mime_type(path))\n      files << list(data, unquoted_string(\"format('#{type}')\"), :space)\n    end\n    list(files, :comma)\n  end\n\nprotected\n  def inline_image_string(data, mime_type)\n    data = [data].flatten.pack('m').gsub(\"\\n\",\"\")\n    url = \"url('data:#{mime_type};base64,#{data}')\"\n    unquoted_string(url)\n  end\n\nprivate\n  def compute_mime_type(path, mime_type = nil)\n    return mime_type.value if mime_type\n    case path\n    when /\\.png$/i\n      'image/png'\n    when /\\.jpe?g$/i\n      'image/jpeg'\n    when /\\.gif$/i\n      'image/gif'\n    when /\\.svg$/i\n      'image/svg+xml'\n    when /\\.otf$/i\n      'font/opentype'\n    when /\\.eot$/i\n      'application/vnd.ms-fontobject'\n    when /\\.ttf$/i\n      'font/truetype'\n    when /\\.woff$/i\n      'application/font-woff'\n    when /\\.off$/i\n      'font/openfont'\n    when /\\.([a-zA-Z]+)$/\n      \"image/#{Regexp.last_match(1).downcase}\"\n    else\n      raise Compass::Error, \"A mime type could not be determined for #{path}, please specify one explicitly.\"\n    end\n  end\n\n  def data(real_path)\n    if File.readable?(real_path)\n      File.open(real_path, \"rb\") {|io| io.read}\n    else\n      raise Compass::Error, \"File not found or cannot be read: #{real_path}\"\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/lists.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Lists\n\n  # Returns true when the object is false, an empty string, or an empty list\n  def blank(obj)\n    case obj\n    when Sass::Script::Value::Bool, Sass::Script::Value::Null\n      bool(!obj.to_bool)\n    when Sass::Script::Value::String\n      bool(obj.value.strip.size == 0)\n    when Sass::Script::Value::List\n      bool(obj.value.size == 0 || obj.value.all?{|el| blank(el).to_bool})\n    else\n      bool(false)\n    end\n  end\n\n  # Returns a new list after removing any non-true values\n  def compact(*args)\n    sep = :comma\n    if args.size == 1 && args.first.is_a?(Sass::Script::Value::List)\n      list = args.first\n      args = list.value\n      sep = list.separator\n    end\n    list(args.reject{|a| !a.to_bool}, sep)\n  end\n\n  # Get the nth value from a list\n  def _compass_nth(list, place)\n    assert_type list, :List\n    if place.value == \"first\"\n      list.value.first\n    elsif place.value == \"last\"\n      list.value.last\n    else\n      list.value[place.value - 1]\n    end\n  end\n\n  # Returns a list object from a value that was passed.\n  # This can be used to unpack a space separated list that got turned\n  # into a string by sass before it was passed to a mixin.\n  def _compass_list(arg)\n    if arg.is_a?(Sass::Script::Value::List)\n      list(arg.value.dup, arg.separator)\n    else\n      list(arg, :space)\n    end\n  end\n\n  # If the argument is a list, it will return a new list that is space delimited\n  # Otherwise it returns a new, single element, space-delimited list.\n  def _compass_space_list(list)\n    if list.is_a?(Sass::Script::Value::List)\n      list(list.value.dup, :space)\n    else\n      list(list, :space)\n    end\n  end\n\n  # Returns the size of the list.\n  def _compass_list_size(list)\n    assert_list list\n    number(list.value.size)\n  end\n\n  # slice a sublist from a list\n  def _compass_slice(list, start_index, end_index = nil)\n    end_index ||= number(-1)\n    start_index = start_index.value\n    end_index = end_index.value\n    start_index -= 1 unless start_index < 0\n    end_index -= 1 unless end_index < 0\n    list(list.values[start_index..end_index], list.separator)\n  end\n\n  # removes the given values from the list.\n  def reject(list, *values)\n    list(list.value.reject{|v| values.any?{|o| v == o}}, list.separator)\n  end\n\n  # returns the first value of a space delimited list.\n  def first_value_of(list)\n    if list.is_a?(Sass::Script::Value::String)\n      r = list.value.split(/\\s+/).first\n      list.type == :identifier ? identifier(r) : quoted_string(r)\n    elsif list.is_a?(Sass::Script::Value::List)\n      list.value.first\n    else\n      list\n    end\n  end\n\n  protected\n\n  def assert_list(value)\n    unless value.is_a?(Sass::Script::Value::List)\n      raise ArgumentError.new(\"#{value.inspect} is not a list\")\n    end\n  end\n\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/math.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Math\n  extend Compass::Core::SassExtensions::Functions::SassDeclarationHelper\n  extend Sass::Script::Value::Helpers\n\n  def self.included(base)\n    if base == Sass::Script::Functions\n      base.send :alias_method, :sass_random, :random\n      base.send :alias_method, :random, :deprecated_random\n    end\n  end\n\n  PI = number(Math::PI)\n  E = number(Math::E)\n\n  def pi()\n    PI\n  end\n  declare :pi, []\n\n  def deprecated_random(*args)\n    if args.length == 2\n      Compass::Util.compass_warn <<WARNING\nWARNING: The $start value for random(#{args.first}, #{args.last}) is not supported by Sass and is now\n  deprecated in Compass and will be removed in a future release.\n  Use `#{args.first} + random(#{args.last.minus(args.first)})` instead.\nWARNING\n      range = (args.first.value..args.last.value).to_a\n      number(range[rand(range.length)])\n    else\n      sass_random(*args)\n    end\n  end\n  declare :random, [:start, :limit]\n\n  def sin(number)\n    trig(:sin, number)\n  end\n  declare :sin, [:number]\n\n  def asin(number)\n    trig(:asin, number)\n  end\n  declare :asin, [:number]\n\n  def cos(number)\n    trig(:cos, number)\n  end\n  declare :cos, [:number]\n\n  def acos(number)\n    trig(:acos, number)\n  end\n  declare :acos, [:number]\n\n  def tan(number)\n    trig(:tan, number)\n  end\n  declare :tan, [:number]\n\n  def atan(number)\n    trig(:atan, number)\n  end\n  declare :atan, [:number]\n\n  def e\n    E\n  end\n  declare :e, []\n\n  def logarithm(number, base = e )\n    assert_type number, :Number\n    assert_type base, :Number\n    raise Sass::SyntaxError, \"base to logarithm must be unitless.\" unless base.unitless?\n\n    result = Math.log(number.value, base.value) rescue Math.log(number.value) / Math.log(base.value)\n    number(result, number.unit_str)\n  end\n  declare :logarithm, [:number]\n  declare :logarithm, [:number, :base]\n\n  def sqrt(number)\n    numeric_transformation(number) { |n| Math.sqrt(n) }\n  end\n  declare :sqrt, [:number]\n\n  alias square_root sqrt\n  declare :square_root, [:number]\n\n  def pow(number, exponent)\n    assert_type number, :Number\n    assert_type exponent, :Number\n    raise Sass::SyntaxError, \"exponent to pow must be unitless.\" unless exponent.unitless?\n    number(number.value**exponent.value, number.unit_str)\n  end\n  declare :pow, [:number, :exponent]\n\n  private\n  def trig(operation, number)\n    if number.unit_str == \"deg\"\n      number(Math.send(operation, Math::PI * number.value / 180))\n    else\n      number(Math.send(operation, number.value), number.unit_str)\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/selectors.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Selectors\n  COMMA_SEPARATOR = /\\s*,\\s*/\n\n  # Permute multiple selectors each of which may be comma delimited, the end result is\n  # a new selector that is the equivalent of nesting each under the previous selector.\n  # To illustrate, the following mixins are equivalent:\n  #\n  #     @include mixin-a($selector1, $selector2, $selector3) {\n  #       #{$selector1} {\n  #         #{$selector2} {\n  #           #{$selector3} {\n  #             width: 2px\n  #           }\n  #         }\n  #       }\n  #     }\n  #     @include mixin-b($selector1, $selector2, $selector3) {\n  #       #{nest($selector, $selector2, $selector3)} {\n  #         width: 2px\n  #       }\n  #     }\n  def nest(*arguments)\n    nested = arguments.map{|a| a.value}.inject do |memo,arg|\n      ancestors = memo.split(COMMA_SEPARATOR)\n      descendants = arg.split(COMMA_SEPARATOR)\n      ancestors.map{|a| descendants.map{|d| \"#{a} #{d}\"}.join(\", \")}.join(\", \")\n    end\n    unquoted_string(nested)\n  end\n\n  # Permute two selectors, the first may be comma delimited.\n  # The end result is a new selector that is the equivalent of nesting the second\n  # selector under the first one in a sass file and preceding it with an &.\n  # To illustrate, the following mixins are equivalent, except the second\n  # mixin handles:\n  #\n  #     @include mixin-a($selector, $to-append) {\n  #       #{$selector} {\n  #         &#{$to-append} {\n  #           width: 2px\n  #         }\n  #       }\n  #     }\n  #     \n  #     @include mixin-b($selector, $to-append) {\n  #       #{append_selector($selector, $to-append)} {\n  #         width: 2px\n  #       }\n  #     }\n  def append_selector(selector, to_append)\n    ancestors = selector.value.split(COMMA_SEPARATOR)\n    descendants = to_append.value.split(COMMA_SEPARATOR)\n    nested = ancestors.map{|a| descendants.map{|d| \"#{a}#{d}\"}.join(\", \")}.join(\", \")\n    unquoted_string(nested)\n  end\n\n  # Return the header selectors for the levels indicated\n  # Defaults to all headers h1 through h6\n  # For example:\n  # headers(all) => h1, h2, h3, h4, h5, h6\n  # headers(4) => h1, h2, h3, h4\n  # headers(2,4) => h2, h3, h4\n  def headers(from = nil, to = nil)\n    if from && !to\n      if from.is_a?(Sass::Script::Value::String) && from.value == \"all\"\n        from = number(1)\n        to = number(6)\n      else\n        to = from\n        from = number(1)\n      end\n    else\n      from ||= number(1)\n      to ||= number(6)\n    end\n    list((from.value..to.value).map{|n| identifier(\"h#{n}\")}, :comma)\n  end\n  alias headings headers\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions/urls.rb",
    "content": "module Compass::Core::SassExtensions::Functions::Urls\n\n\n  def self.has?(base, instance_method)\n    Sass::Util.has?(:instance_method, base, instance_method)\n  end\n\n  def self.included(base)\n    base.send(:include, StylesheetUrl) unless has?(base, :stylesheet_url)\n    base.send(:include, FontUrl) unless has?(base, :font_url)\n    base.send(:include, ImageUrl) unless has?(base, :image_url)\n    base.send(:include, GeneratedImageUrl) unless has?(base, :generated_image_url)\n  end\n\n  module StylesheetUrl\n    def self.included(base)\n      if base.respond_to?(:declare)\n        base.declare :stylesheet_url, [:path]\n        base.declare :stylesheet_url, [:path, :only_path]\n      end\n    end\n    def stylesheet_url(path, only_path = bool(false))\n      # Compute the path to the stylesheet, either root relative or stylesheet relative\n      # or nil if the http_images_path is not set in the configuration.\n      http_stylesheets_path = if relative?\n        compute_relative_path(Compass.configuration.css_path)\n      elsif Compass.configuration.http_stylesheets_path\n        Compass.configuration.http_stylesheets_path\n      else\n        Compass.configuration.http_root_relative(Compass.configuration.css_dir)\n      end\n\n      path = \"#{http_stylesheets_path}/#{path.value}\"\n      if only_path.to_bool\n        unquoted_string(clean_path(path))\n      else\n        clean_url(path)\n      end\n    end\n  end\n\n  module FontUrl\n    def self.included(base)\n      if base.respond_to?(:declare)\n        base.declare :font_url,       [:path]\n        base.declare :font_url,       [:path, :only_path]\n        base.declare :font_url,       [:path, :only_path, :cache_buster]\n      end\n    end\n    def font_url(path, only_path = bool(false), cache_buster = bool(true))\n      path = path.value # get to the string value of the literal.\n\n      # Short curcuit if they have provided an absolute url.\n      if absolute_path?(path)\n        return unquoted_string(\"url(#{path})\")\n      end\n\n      # Compute the path to the font file, either root relative or stylesheet relative\n      # or nil if the http_fonts_path cannot be determined from the configuration.\n      http_fonts_path = if relative?\n                          compute_relative_path(Compass.configuration.fonts_path)\n                        else\n                          Compass.configuration.http_fonts_path\n                        end\n\n      # Compute the real path to the font on the file system if the fonts_dir is set.\n      real_path = if Compass.configuration.fonts_dir\n        File.join(Compass.configuration.fonts_path, path.gsub(/[?#].*$/,\"\"))\n      end\n\n      # prepend the path to the font if there's one\n      if http_fonts_path\n        http_fonts_path = \"#{http_fonts_path}/\" unless http_fonts_path[-1..-1] == \"/\"\n        path = \"#{http_fonts_path}#{path}\"\n      end\n\n      # Compute the asset host unless in relative mode.\n      asset_host = if !relative? && Compass.configuration.asset_host\n        Compass.configuration.asset_host.call(path)\n      end\n\n      # Compute and append the cache buster if there is one.\n      if cache_buster.to_bool\n        path, anchor = path.split(\"#\", 2)\n        if cache_buster.is_a?(Sass::Script::Value::String)\n          path += \"#{path[\"?\"] ? \"&\" : \"?\"}#{cache_buster.value}\"\n        else\n          path = cache_busted_path(path, real_path)\n        end\n        path = \"#{path}#{\"#\" if anchor}#{anchor}\"\n      end\n\n      # prepend the asset host if there is one.\n      path = \"#{asset_host}#{'/' unless path[0..0] == \"/\"}#{path}\" if asset_host\n\n      if only_path.to_bool\n        unquoted_string(clean_path(path))\n      else\n        clean_url(path)\n      end\n    end\n  end\n\n  module ImageUrl\n    def self.included(base)\n      if base.respond_to?(:declare)\n        base.declare :image_url,      [:path]\n        base.declare :image_url,      [:path, :only_path]\n        base.declare :image_url,      [:path, :only_path, :cache_buster]\n      end\n    end\n    def image_url(path, only_path = bool(false), cache_buster = bool(true))\n      path = path.value # get to the string value of the literal.\n\n      if path =~ %r{^#{Regexp.escape(Compass.configuration.http_images_path)}/(.*)}\n        # Treat root relative urls (without a protocol) like normal if they start with\n        # the images path.\n        path = $1\n      elsif absolute_path?(path)\n        # Short curcuit if they have provided an absolute url.\n        return unquoted_string(\"url(#{path})\")\n      end\n\n      # Compute the path to the image, either root relative or stylesheet relative\n      # or nil if the http_images_path is not set in the configuration.\n      http_images_path = if relative?\n        compute_relative_path(Compass.configuration.images_path)\n      elsif Compass.configuration.http_images_path\n        Compass.configuration.http_images_path\n      else\n        Compass.configuration.http_root_relative(Compass.configuration.images_dir)\n      end\n\n      # Compute the real path to the image on the file stystem if the images_dir is set.\n      real_path = if Compass.configuration.images_path\n        File.join(Compass.configuration.images_path, path.gsub(/#.*$/,\"\"))\n      else\n        File.join(Compass.configuration.project_path, path.gsub(/#.*$/,\"\"))\n      end\n\n      # prepend the path to the image if there's one\n      if http_images_path\n        http_images_path = \"#{http_images_path}/\" unless http_images_path[-1..-1] == \"/\"\n        path = \"#{http_images_path}#{path}\"\n      end\n\n      # Compute the asset host unless in relative mode.\n      asset_host = if !relative? && Compass.configuration.asset_host\n        Compass.configuration.asset_host.call(path)\n      end\n\n      # Compute and append the cache buster if there is one.\n      if cache_buster.to_bool\n        path, anchor = path.split(\"#\", 2)\n        if cache_buster.is_a?(Sass::Script::Value::String)\n          path += \"#{path[\"?\"] ? \"&\" : \"?\"}#{cache_buster.value}\"\n        else\n          path = cache_busted_path(path, real_path)\n        end\n        path = \"#{path}#{\"#\" if anchor}#{anchor}\"\n      end\n\n      # prepend the asset host if there is one.\n      path = \"#{asset_host}#{'/' unless path[0..0] == \"/\"}#{path}\" if asset_host\n\n      if only_path.to_bool\n        unquoted_string(clean_path(path))\n      else\n        clean_url(path)\n      end\n    end\n  end\n\n  module GeneratedImageUrl\n    def self.included(base)\n      if base.respond_to?(:declare)\n        base.declare :generated_image_url, [:path]\n        base.declare :generated_image_url, [:path, :cache_buster]\n      end\n    end\n    def generated_image_url(path, cache_buster = bool(false))\n      path = path.value # get to the string value of the literal.\n\n      if path =~ %r{^#{Regexp.escape(Compass.configuration.http_generated_images_path)}/(.*)}\n        # Treat root relative urls (without a protocol) like normal if they start with\n        # the generated_images path.\n        path = $1\n      elsif absolute_path?(path)\n        # Short curcuit if they have provided an absolute url.\n        return unquoted_string(\"url(#{path})\")\n      end\n\n      # Compute the path to the image, either root relative or stylesheet relative\n      # or nil if the http_generated_images_path is not set in the configuration.\n      http_generated_images_path = if relative?\n        compute_relative_path(Compass.configuration.generated_images_path)\n      elsif Compass.configuration.http_generated_images_path\n        Compass.configuration.http_generated_images_path\n      else\n        Compass.configuration.http_root_relative(Compass.configuration.generated_images_dir)\n      end\n\n      # Compute the real path to the image on the file stystem if the generated_images_dir is set.\n      real_path = if Compass.configuration.generated_images_path\n        File.join(Compass.configuration.generated_images_path, path.gsub(/#.*$/,\"\"))\n      else\n        File.join(Compass.configuration.project_path, path.gsub(/#.*$/,\"\"))\n      end\n\n      # prepend the path to the image if there's one\n      if http_generated_images_path\n        http_generated_images_path = \"#{http_generated_images_path}/\" unless http_generated_images_path[-1..-1] == \"/\"\n        path = \"#{http_generated_images_path}#{path}\"\n      end\n\n      # Compute the asset host unless in relative mode.\n      asset_host = if !relative? && Compass.configuration.asset_host\n        Compass.configuration.asset_host.call(path)\n      end\n\n      # Compute and append the cache buster if there is one.\n      if cache_buster.to_bool\n        path, anchor = path.split(\"#\", 2)\n        if cache_buster.is_a?(Sass::Script::Value::String)\n          path += \"#{path[\"?\"] ? \"&\" : \"?\"}#{cache_buster.value}\"\n        else\n          path = cache_busted_path(path, real_path)\n        end\n        path = \"#{path}#{\"#\" if anchor}#{anchor}\"\n      end\n\n      # prepend the asset host if there is one.\n      path = \"#{asset_host}#{'/' unless path[0..0] == \"/\"}#{path}\" if asset_host\n\n      clean_url(path)\n    end\n  end\n\n  private\n\n  # Emits a path, taking off any leading \"./\"\n  def clean_path(url)\n    url = url.to_s\n    url = url[0..1] == \"./\" ? url[2..-1] : url\n  end\n\n  # Emits a url, taking off any leading \"./\"\n  def clean_url(url)\n    unquoted_string(\"url('#{clean_path(url)}')\")\n  end\n\n  def relative?\n    Compass.configuration.relative_assets?\n  end\n\n  def absolute_path?(path)\n    path[0..0] == \"/\" || path[0..3] == \"http\"\n  end\n\n  def compute_relative_path(path)\n    if (target_css_file = options[:css_filename])\n      target_path = Pathname.new(File.expand_path(path))\n      source_path = Pathname.new(File.dirname(File.expand_path(target_css_file)))\n      target_path.relative_path_from(source_path).to_s\n    end\n  end\n\n  def cache_busted_path(path, real_path)\n    cache_buster = compute_cache_buster(path, real_path)\n    if cache_buster.nil?\n      return path\n    elsif cache_buster.is_a?(String)\n      cache_buster = {:query => cache_buster}\n    else\n      path = cache_buster[:path] if cache_buster[:path]\n    end\n    \n    if cache_buster[:query]\n      \"#{path}#{path[\"?\"] ? \"&\" : \"?\"}#{cache_buster[:query]}\"\n    else\n      path\n    end\n  end\n\n  def compute_cache_buster(path, real_path)\n    file = nil\n    if Compass.configuration.asset_cache_buster\n      args = [path]\n      if Compass.configuration.asset_cache_buster.arity > 1\n        begin\n          file = File.new(real_path) if real_path\n        rescue Errno::ENOENT\n          # pass\n        end\n        args << file\n      end\n      Compass.configuration.asset_cache_buster.call(*args)\n    elsif real_path\n      default_cache_buster(path, real_path)\n    end\n  ensure\n    file.close if file\n  end\n\n  def default_cache_buster(path, real_path)\n    if File.readable?(real_path)\n      File.mtime(real_path).to_i.to_s\n    else\n      $stderr.puts \"WARNING: '#{File.basename(path)}' was not found (or cannot be read) in #{File.dirname(real_path)}\"\n    end\n  end\n\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/functions.rb",
    "content": "module Compass::Core::SassExtensions::Functions\n  module SassDeclarationHelper\n    def declare(*args)\n      Sass::Script::Functions.declare(*args)\n    end\n  end\nend\n\n%w(\n  selectors    enumerate  urls      display\n  inline_image image_size constants gradient_support\n  font_files   lists      colors    math\n  env          cross_browser_support configuration\n  files\n).each do |func|\n  require \"compass/core/sass_extensions/functions/#{func}\"\nend\n\nmodule Sass::Script::Functions\n  include Compass::Core::SassExtensions::Functions::Configuration\n  include Compass::Core::SassExtensions::Functions::Selectors\n  include Compass::Core::SassExtensions::Functions::Enumerate\n  include Compass::Core::SassExtensions::Functions::Urls\n  include Compass::Core::SassExtensions::Functions::Display\n  include Compass::Core::SassExtensions::Functions::InlineImage\n  include Compass::Core::SassExtensions::Functions::ImageSize\n  include Compass::Core::SassExtensions::Functions::GradientSupport::Functions\n  include Compass::Core::SassExtensions::Functions::FontFiles\n  include Compass::Core::SassExtensions::Functions::Files\n  include Compass::Core::SassExtensions::Functions::Constants\n  include Compass::Core::SassExtensions::Functions::Lists\n  include Compass::Core::SassExtensions::Functions::Colors\n  include Compass::Core::SassExtensions::Functions::Math\n  include Compass::Core::SassExtensions::Functions::CrossBrowserSupport\n  include Compass::Core::SassExtensions::Functions::Env\nend\n\n# Wierd that this has to be re-included to pick up sub-modules. Ruby bug?\nclass Sass::Script::Functions::EvaluationContext\n  include Sass::Script::Functions\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/monkey_patches/browser_support.rb",
    "content": "require 'sass/script'\n\nmodule Sass::Script\n  module Value\n    class Base\n      NO_CHILDREN = []\n      def children\n        NO_CHILDREN\n      end\n\n      def opts(value)\n        value.options = options\n        value\n      end\n    end\n\n    class List < Base\n      def children\n        value\n      end\n    end\n\n    class ArgList < List\n      def children\n        super + @keywords.values\n      end\n    end\n\n    class Map < Base\n      def children\n        to_a\n      end\n    end\n  end\n  module HasSimpleCrossBrowserFunctionSupport\n    def supports?(aspect)\n      return true if Compass::BrowserSupport.supports?(name, aspect)\n      children.any? {|child| child.respond_to?(:supports?) && child.supports?(aspect) }\n    end\n\n    def has_aspect?(children = nil)\n      children ||= self.children\n      return true if Compass::BrowserSupport.has_aspect?(name)\n      children.any? {|child| child.respond_to?(:has_aspect?) && child.has_aspect? }\n    end\n  end\n\n  class CrossBrowserFunctionCall < Literal\n\n    attr_accessor :name, :args\n\n    include HasSimpleCrossBrowserFunctionSupport\n    include Sass::Script::Value::Helpers\n\n    def initialize(name, args)\n      self.name = name\n      self.args = args\n    end\n\n    def children\n      args\n    end\n\n    def inspect\n      to_s\n    end\n\n    def to_s(options = self.options)\n      \"#{name}(#{args.map{|a| a.to_s(options)}.join(\", \")})\"\n    end\n\n    %w(webkit moz o ms svg css2 owg).each do |prefix|\n      class_eval <<-RUBY, __FILE__, __LINE__ + 1\n        def to_#{prefix}(options = self.options)\n          prefixed_args = args.map do |arg|\n            arg.respond_to?(:to_#{prefix}) ? arg.to_#{prefix}(options) : arg\n          end\n          prefixed_name = if Compass::BrowserSupport.supports?(name, \"#{prefix}\")\n            \"-#{prefix}-\\#{name}\"\n          else\n            name\n          end\n          contents = prefixed_args.join(', ')\n          if contents.size > 0\n            opts(identifier(\"\\#{prefixed_name}(\\#{contents})\"))\n          else\n            opts(null)\n          end\n        end\n      RUBY\n    end\n\n  end\n\n  class Funcall < Node\n    include HasSimpleCrossBrowserFunctionSupport\n\n    alias sass_to_value to_value \n\n    def to_value(args)\n      if has_aspect?(args)\n        CrossBrowserFunctionCall.new(name, args)\n      else\n        sass_to_value(args)\n      end\n    end\n  end\n\n  class List < Literal\n    def supports?(aspect)\n      children.any? {|child| child.respond_to?(:supports?) && child.supports?(aspect) }\n    end\n\n    def has_aspect?\n      children.any? {|child| child.respond_to?(:has_aspect?) && child.has_aspect? }\n    end\n  end\n\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/monkey_patches/traversal.rb",
    "content": "module Sass\n  module Tree\n    class Node\n      unless method_defined?(:visit_depth_first)\n        def visit_depth_first(visitor)\n          visitor.visit(self)\n          visitor.down(self) if children.any? and visitor.respond_to?(:down)\n          if is_a?(ImportNode) && visitor.import?(self)\n            root = Sass::Engine.for_file(import, @options).to_tree\n            imported_children = root.children\n          end\n\n          (imported_children || children).each do |child|\n            break if visitor.respond_to?(:stop?) && visitor.stop?\n            child.visit_depth_first(visitor)\n          end\n          visitor.up(self) if children.any?\n        end\n      end\n    end\n  end\nend\n\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions/monkey_patches.rb",
    "content": "%w(traversal browser_support).each do |patch|\n  require \"compass/core/sass_extensions/monkey_patches/#{patch}\"\nend\n"
  },
  {
    "path": "core/lib/compass/core/sass_extensions.rb",
    "content": "require 'sass'\nunless Sass::Script::Functions.methods.grep(/\\Adeclare\\Z/).any?\n  raise LoadError, \"It looks like you've got an incompatible version of Sass. This often happens when you have an old haml gem installed. Please upgrade Haml to v3.1 or above.\"\nend\n\nmodule Compass::Core::SassExtensions\nend\n\nrequire 'compass/core/sass_extensions/functions'\nrequire 'compass/core/sass_extensions/monkey_patches'\n"
  },
  {
    "path": "core/lib/compass/core/version.rb",
    "content": "require 'compass/core/generated_version'\n\nmodule Compass\n  module Core\n    unless defined?(::Compass::Core::VERSION)\n      def self.scope(file)\n        File.expand_path(File.join(File.dirname(__FILE__), \"..\", \"..\", \"..\", file))\n      end\n\n      VERSION = File.read(scope(\"VERSION\")).strip\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/core.rb",
    "content": "require \"compass/core/version\"\n\nmodule Compass\n  module Core\n    class << self\n      attr_accessor :module_deprecation_warning_issued\n    end\n    def base_directory(*subdirs)\n      File.expand_path(File.join(File.dirname(__FILE__), '..', \"..\", *subdirs))\n    end\n    def lib_directory(*subdirs)\n      File.expand_path(File.join(File.dirname(__FILE__), \"..\", *subdirs))\n    end\n\n    module_function :base_directory, :lib_directory\n  end\n\n  module HasDeprecatedConstantsFromCore\n    def self.extended(base)\n      new_base = base.name.sub(/^Compass/,\"Compass::Core\")\n      base.class_eval <<-RUBY\n        def self.const_missing(const_name)\n          puts \"cannot find \\#{const_name}\"\n          if #{new_base}.const_defined?(const_name)\n            unless Compass::Core.module_deprecation_warning_issued\n              Compass::Core.module_deprecation_warning_issued = true\n              Compass::Util.compass_warn(\n                \"DEPRECATED: #{base.name}::\\#{const_name} has been moved to \" +\n                \"#{new_base}::\\#{const_name}.\\\\n\" +\n                \"Please update \\#{caller[0]}\")\n            end\n            #{new_base}.const_get(const_name)\n          end\n        end\n      RUBY\n    end\n  end\n\n  extend HasDeprecatedConstantsFromCore\n\n  module SassExtensions\n    extend HasDeprecatedConstantsFromCore\n\n    module Functions\n      extend HasDeprecatedConstantsFromCore\n    end\n  end\n\n  def shared_extension_paths\n    @shared_extension_paths ||= begin\n      if ENV[\"HOME\"] && File.directory?(ENV[\"HOME\"])\n        [File.join(ENV[\"HOME\"], \".compass\", \"extensions\")]\n      else\n        []\n      end\n    rescue ArgumentError # If HOME is relative\n      []\n    end\n  end\n  module_function :shared_extension_paths\nend\n\nrequire \"sass\"\nrequire \"sass/plugin\"\nrequire 'compass/util'\nrequire \"compass/frameworks\"\nrequire \"compass/core/caniuse\"\nrequire 'compass/core/sass_extensions'\nrequire 'compass/error'\nrequire 'compass/browser_support'\nrequire 'compass/configuration'\n\nCompass::Frameworks.register(\n  \"compass\",\n  :stylesheets_directory => Compass::Core.base_directory(\"stylesheets\"),\n  :templates_directory => Compass::Core.base_directory(\"templates\"),\n  :version => Compass::Core::VERSION\n)\n"
  },
  {
    "path": "core/lib/compass/error.rb",
    "content": "module Compass\n  class Error < Sass::SyntaxError\n  end\nend\n\n"
  },
  {
    "path": "core/lib/compass/frameworks.rb",
    "content": "module Compass\n  module Frameworks\n    extend self\n\n    ALL = []\n\n    class Framework\n      attr_accessor :name\n      attr_accessor :path\n      attr_accessor :version\n      attr_accessor :templates_directory, :stylesheets_directory\n      def initialize(name, *arguments)\n        options = arguments.last.is_a?(Hash) ? arguments.pop : {}\n        self.path = path = options[:path] || arguments.shift\n        @name = name\n        @templates_directory = options[:templates_directory]\n        @templates_directory ||= File.join(path, 'templates') if path\n        @stylesheets_directory = options[:stylesheets_directory]\n        @stylesheets_directory ||= File.join(path, 'stylesheets') if path\n        @version = options[:version]\n      end\n\n      def template_directories\n        if templates_directory\n          Dir.glob(File.join(templates_directory, \"*\")).map{|f| File.basename(f)}\n        else\n          []\n        end\n      end\n\n      def manifest_file(pattern)\n        File.join(templates_directory, pattern.to_s, \"manifest.rb\")\n      end\n\n      def manifest(pattern, options = {})\n        options[:pattern_name] ||= pattern\n        Compass::Installers::Manifest.new(manifest_file(pattern), options)\n      end\n    end\n\n    def detect_registration\n      @registered = nil\n      yield\n      @registered\n    ensure\n      @registered = nil\n    end\n\n    def register(name, *arguments)\n      opts = if arguments.last.is_a?(Hash)\n               arguments.last\n             else\n               o = {}\n               arguments << o\n               o\n             end\n      opts[:version] ||= guess_gem_version(caller[0])\n      @registered = Framework.new(name, *arguments)\n      if idx = ALL.index(self[name])\n        ALL[idx] = @registered\n      else\n        ALL << @registered\n      end\n    end\n\n    def [](name)\n      ALL.detect{|f| f.name.to_s == name.to_s}\n    end\n\n    def guess_gem_version(line_reference)\n      if line_reference =~ %r{/gems/([^/]*-[^/]*)/}\n        split_at = $1.rindex(\"-\")\n        name = $1[1...split_at]\n        version = $1[(split_at + 1)..-1]\n        version unless name == \"compass\"\n      end\n    end\n\n    def discover(frameworks_directory)\n      if frameworks_directory == :defaults\n        warn(\"The :defaults argument to Compass::Frameworks.discover is no longer necessary\")\n        return\n      end\n      frameworks_directory = Dir.new(frameworks_directory) unless frameworks_directory.is_a?(Dir)\n      dirs = frameworks_directory.entries.reject{|e| e =~ /^\\./}.sort_by{|n| n =~ /^_/ ? n[1..-1] : n}\n      dirs.each do |framework|\n        register_directory File.join(frameworks_directory.path, framework)\n      end\n    end\n\n    def register_directory(directory)\n      loaders = [\n        File.join(directory, \"compass_init.rb\"),\n        File.join(directory, 'lib', File.basename(directory)+\".rb\"),\n        File.join(directory, File.basename(directory)+\".rb\")\n      ]\n      loader = loaders.detect{|l| File.exists?(l)}\n      registered_framework = detect_registration do\n        require loader if loader\n      end\n      unless registered_framework\n        register File.basename(directory), directory\n      end\n    end\n\n    def template_exists?(template)\n      framework_name, template = template.split(%r{/}, 2)\n      template ||= \"project\"\n      if (framework = self[framework_name]) && framework.templates_directory\n        return File.directory?(File.join(framework.templates_directory, template))\n      end\n      false\n    end\n\n    def template_usage(template)\n      framework_name, template = template.split(%r{/}, 2)\n      framework = self[framework_name]\n      template ||= \"project\"\n      usage_file = File.join(framework.templates_directory, template, \"USAGE.markdown\")\n      if File.exists?(usage_file)\n        File.read(usage_file)\n      elsif help = framework.manifest(template).help\n        help\n      else\n        <<-END.gsub(/^ {8}/, '')\n          No Usage!\n        END\n      end\n    end\n\n    def pretty_print(skip_patterns = false)\n      result = \"\"\n      max = Compass::Frameworks::ALL.inject(0) do |gm, framework|\n        fm = framework.template_directories.inject(0) do |lm,pattern|\n          [lm, 7 + framework.name.size + pattern.size].max\n        end\n        [gm, fm].max\n      end\n      Compass::Frameworks::ALL.each do |framework|\n        next if framework.name =~ /^_/\n        result << \"  * #{framework.name}\\n\"\n        unless skip_patterns\n          framework.template_directories.each do |pattern|\n            result << \"    - #{framework.name}/#{pattern}\".ljust(max)\n            if description = framework.manifest(pattern).description\n              result << \" - #{description}\"\n            end\n            result << \"\\n\"\n          end\n        end\n      end\n      result\n    end\n  end\n\n  class << self\n    def discover_gem_extensions!\n      if defined?(Gem)\n        Gem.find_files(\"compass-*\").map{|f| File.basename(f, \".rb\")}.each do |compass_extension|\n          begin\n            require compass_extension\n          rescue Gem::LoadError, LoadError\n            Compass::Util.compass_warn \"Unable to load extension: #{compass_extension}\"\n          end\n        end\n      end\n    end\n\n    def discover_extensions!\n      Compass.shared_extension_paths.each do |extensions_path|\n        if File.directory?(extensions_path)\n          Compass::Frameworks.discover(extensions_path)\n        end\n      end\n      if File.directory?(configuration.extensions_path)\n        Compass::Frameworks.discover(configuration.extensions_path)\n      end\n      discover_gem_extensions!\n    end\n  end\nend\n"
  },
  {
    "path": "core/lib/compass/util.rb",
    "content": "module Compass::Util\n  extend self\n\n  def compass_warn(*args)\n    Sass::Util.sass_warn(*args)\n  end\n\n  def blank?(value)\n    case value\n    when NilClass, FalseClass\n      true\n    when String, Array\n      value.length.zero?\n    else\n      false\n    end\n  end\n\nend\n"
  },
  {
    "path": "core/lib/compass-core.rb",
    "content": "require 'compass/core'\n"
  },
  {
    "path": "core/stylesheets/_compass.scss",
    "content": "@import \"compass/utilities\";\n@import \"compass/typography\";\n@import \"compass/css3\";\n"
  },
  {
    "path": "core/stylesheets/_lemonade.scss",
    "content": "@mixin image-dimensions($file) {\n  height: image-height($file);\n  width: image-width($file);\n}\n\n@mixin sprite-image($file) {\n  background: sprite-image($file) $repeat;\n}\n\n@mixin sized-sprite-image($file) {\n  background: sprite-image($file);  \n  @include image-dimensions($file);\n}\n\n@mixin sprite-folder($folder, $image-dimensions: false) {\n  .#{$folder} {\n    @if $image-dimensions {\n      background: sprite-url($folder);\n    }\n    @else {\n      background: sprite-url($folder) no-repeat;\n    }\n  }\n  @for $i from 0 to sprite-files-in-folder($folder) {\n    $file: sprite-file-from-folder($folder, $i);\n    .#{$folder}-#{image-basename($file)} {\n      @extend .#{$folder};\n      background-position: sprite-position(sprite-file-from-folder($folder, $i));\n      @if $image-dimensions {\n        @include image-dimensions($file);\n      }\n    }\n  }\n}\n\n@mixin sized-sprite-folder($folder) {\n  @include sprite-folder($folder, true);\n}"
  },
  {
    "path": "core/stylesheets/compass/_configuration.scss",
    "content": "$project-path: null !default;\n$debug-configuration: false !default;\n$compass-initialized: false !default;\n$compass-configured: false !default;\n\n@mixin debug-compass-configuration {\n  @if $debug-configuration {\n    /* Compass Configuration: */\n    @each $setting, $value in compass-configuration() {\n      /* #{$setting}: #{inspect($value)} */\n    }\n  }\n}\n\n// This mixin resets the compass configuration\n// and then initializes it with the sass options\n// set in the environment. It is immediately called during import.\n// It's unlikely you'll need to call this mixin yourself.\n@mixin compass-initializer($project-path: $project-path) {\n  @if not $compass-initialized and not using-compass-compiler() {\n    $default-configuration: reset-configuration();\n    $default-configuration: add-sass-configuration($project-path);\n  }\n  $compass-initialized: true !global;\n  @include debug-compass-configuration;\n}\n@include compass-initializer;\n\n//  `$options`:\n//    A map of compass configuration options.\n//    E.g. @include compass-configuration((asset-host: \n// Keywords style ar\n// `$reconfigure`:\n//    When unset, if compass-configuration is called more than once, a warning will\n//    be issued and all calls after the first will be ignored.\n//    When set to `false`, all subsequent calls will be ignored without a warning.\n//    When set to `true`, the configuration will be added to any existing configuration.\n@mixin compass-configuration($options: (), $reconfigure: null, $arguments...) {\n  @if not at-stylesheet-root() {\n    // this should be @error once that exists.\n    @warn \"include compass-configuration from the root level of your stylesheet.\"\n  }\n  @if not $compass-configured or $reconfigure {\n    $options: map-merge($options, keywords($arguments));\n    @if length($arguments) > 0 {\n      @warn \"compass-configuration accepts keyword arguments or a single map of options. Got: #{inspect($arguments)}.\"\n    }\n    $invoke: add-configuration($options);\n    @include debug-compass-configuration;\n    $compass-configured: true !global;\n  } @else if $reconfigure == null {\n    @warn \"Compass was already configured for this stylesheet.\"\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/_css3.scss",
    "content": "@import \"css3/border-radius\";\n@import \"css3/inline-block\";\n@import \"css3/opacity\";\n@import \"css3/box-shadow\";\n@import \"css3/text-shadow\";\n@import \"css3/columns\";\n@import \"css3/box-sizing\";\n@import \"css3/flexbox\";\n@import \"css3/images\";\n@import \"css3/background-clip\";\n@import \"css3/background-origin\";\n@import \"css3/background-size\";\n@import \"css3/font-face\";\n@import \"css3/transform\";\n@import \"css3/transition\";\n@import \"css3/appearance\";\n@import \"css3/animation\";\n@import \"css3/regions\";\n@import \"css3/hyphenation\";\n@import \"css3/filter\";\n@import \"css3/user-interface\";\n"
  },
  {
    "path": "core/stylesheets/compass/_layout.scss",
    "content": "@import \"layout/grid-background\";\n@import \"layout/sticky-footer\";\n@import \"layout/stretching\";\n"
  },
  {
    "path": "core/stylesheets/compass/_reset-legacy.scss",
    "content": "@import \"reset/utilities-legacy\";\n\n@include global-reset;\n"
  },
  {
    "path": "core/stylesheets/compass/_reset.scss",
    "content": "@import \"reset/utilities\";\n\n@include global-reset;\n"
  },
  {
    "path": "core/stylesheets/compass/_support.scss",
    "content": "// Map of compass extensions that are loaded. The value will either be\n// the version of the extension or `true` if the version is unknown.\n$compass-extensions: compass-extensions() !default;\n\n// The list of browsers you want to support.\n// Defaults to all.\n$supported-browsers: browsers() !default;\n\n// The browser usage threshold for features that gracefully degrade\n// Defaults to 1 user in 1,000.\n$graceful-usage-threshold: 0.1 !default;\n\n// The browser usage threshold for features that cannot degrade gracefully\n// Defaults to 1 user in 10,000.\n$critical-usage-threshold: 0.01 !default;\n\n// Set this to true to generate comments that will explain why a prefix was included or omitted.\n$debug-browser-support: false !default;\n\n// Minimum browser versions that must be supported.\n// The keys of this map are any valid browser according to `browsers()`.\n// The values of this map are the min version that is valid for that browser\n// according to `browser-versions($browser)`\n$browser-minimum-versions: (\n  'chrome':  null,\n  'firefox': null,\n  'ie':      null,\n  'safari':  null,\n  'opera':   null\n) !default;\n\n\n// @private\n$default-capability-options: (\n  (full-support: true),\n  (partial-support: true)\n);\n\n// When a prefix in in context, but there is no current prefix\n// That context is recorded here so other prefixes can be avoided.\n$prefix-context: null;\n\n// When a prefix is in a selector or directive scope, this is set to the\n// current prefix value.  When `null`, either there is no prefix in scope\n// or the official prefix is being rendered. The `$prefix-context`\n// variable can be used to make that distinction.\n$current-prefix: null;\n\n// When in a context that only exists in a particular version\n// this variable is set to those versions.\n$current-browser-versions: ();\n\n// The legacy support CSS 2.1 Selectors.\n// Defaults to the $critical-usage-threshold.\n$css-sel2-support-threshold: $critical-usage-threshold !default;\n\n// Check if the browser is in scope given the browser support and current prefix minimums.\n@function browser-out-of-scope($browser, $version: null) {\n  @if not index($supported-browsers, $browser) {\n    @if $debug-browser-support {\n      @return \"#{$browser} is not listed as a supported browser.\"\n    } @else {\n      @return true;\n    }\n  } @else if not ($current-prefix == null or $current-prefix == browser-prefix($browser)) {\n    @if $debug-browser-support {\n      @return \"#{$browser} #{$version} is incompatible with #{$current-prefix}.\"\n    } @else {\n      @return true;\n    }\n  }\n  $current-range: map-get($current-browser-versions, $browser);\n  $current-min: if($current-range, nth($current-range, 1), null);\n  $current-max: if($current-range, nth($current-range, 2), null);\n  @if not ($version and $current-max) {\n    // We don't have any versions to compare\n    @return false;\n  } @else {\n    // If the version is less than the current min, it is not supported\n    $too-old: compare-browser-versions($browser, $version, $current-min) < 0;\n    $too-new: compare-browser-versions($browser, $version, $current-max) > 0;\n    @if $too-old or $too-new {\n      @if $debug-browser-support {\n        @return \"The current scope only works with #{display-browser-range($browser, $current-min, $current-max)}.\";\n      } @else {\n        @return true;\n      }\n    } @else {\n      @return false;\n    }\n  }\n}\n\n// Check whether the browser is supported according to the supported browsers,\n// declared minimum support and usage thresholds.\n@function support-legacy-browser($browser, $min-version, $max-version: null, $threshold: $critical-usage-threshold) {\n  @if not index($supported-browsers, $browser) {\n    @return false;\n  }\n  // Check agaist usage stats and declared minimums\n  $min-required-version: map-get($browser-minimum-versions, $browser);\n  $usage: if($max-version,\n             omitted-usage($browser, $min-version, $max-version),\n             omitted-usage($browser, $min-version));\n  @return $usage > $threshold or\n          ($min-required-version and\n           compare-browser-versions($browser, $max-version or $min-version, $min-required-version) >= 0);\n}\n\n// Include content for a legacy browser\n// Version can be a single version string or a list of versions ordered from oldest to newest.\n@mixin for-legacy-browser($browser, $min-version, $max-version: $min-version,\n                          $threshold: $critical-usage-threshold,\n                          $ranges: ($browser: $min-version $max-version)) {\n  @if not browser-out-of-scope($browser, $max-version) and\n      support-legacy-browser($browser, $min-version, $max-version, $threshold)\n  {\n    @if $debug-browser-support {\n      /* Content for #{display-browser-range($browser, $min-version, $max-version)}.\n      Min version: #{map-get($browser-minimum-versions, $browser) or unspecified}.\n      User threshold to keep: #{$threshold}%. If #{display-browser-range($browser, $min-version, $max-version)} are omitted: #{omitted-usage($browser, $min-version, $max-version)}%. */\n    }\n    @include with-browser-ranges(intersect-browser-ranges($current-browser-versions, $ranges)) {\n      @content;\n    }\n  } @else if $debug-browser-support and browser-out-of-scope($browser, $max-version) {\n    /* Content for #{display-browser-range($browser, $min-version, $max-version)} omitted.\n       Not allowed in the current scope: #{browser-out-of-scope($browser, $max-version)} */\n  } @else if $debug-browser-support and not\n             support-legacy-browser($browser, $min-version, $max-version, $threshold) {\n    @if omitted-usage($browser, $min-version, $max-version) > $threshold {\n      /* Content for #{display-browser-range($browser, $min-version, $max-version)} omitted.\n         User threshold to keep: #{$threshold}%. If #{display-browser-range($browser, $min-version, $max-version)} and below are omitted: #{omitted-usage($browser, $min-version, $max-version)}%. */\n    } @else {\n      /* Content for #{display-browser-range($browser, $min-version, $max-version)} omitted.\n         Minimum support is #{map-get($browser-minimum-versions, $browser)}. */\n    }\n  }\n}\n\n@function display-browser-range($browser, $min-version, $max-version: $min-version) {\n  @return \"#{unquote($browser)} #{unquote($min-version)}#{if($max-version != $min-version, unquote(' -') unquote($max-version), null)}\";\n}\n\n\n// Renders the content once if any of the legacy browsers are supported.\n// $browsers is a map of browser name to version ranges\n@mixin for-legacy-browsers($browsers, $threshold: $critical-usage-threshold) {\n  $rendered: false;\n  @each $browser, $range in $browsers {\n    @if not $rendered {\n      @include for-legacy-browser($browser, $range..., $threshold: $threshold, $ranges: $browsers) {\n        $rendered: true;\n        @content;\n      }\n    }\n  }\n}\n\n// If there's a prefix context in scope, this will only output the content if the prefix matches.\n// Otherwise, sets the current prefix scope and outputs the content.\n@mixin with-prefix($prefix) {\n  @if $current-prefix or $prefix-context {\n    @if $current-prefix == $prefix or $prefix-context == $prefix {\n      @if $debug-browser-support {\n        @if $prefix {\n          /* content for #{$prefix} because #{$current-prefix or $prefix-context} is already in scope. */\n        } @else {\n          /* unprefixed content. #{$current-prefix or $prefix-context} is already in scope. */\n        }\n      }\n      $old-prefix-context: $prefix-context;\n      $old-prefix: $current-prefix;\n      $prefix-context: $prefix-context or $current-prefix !global;\n      $current-prefix: $prefix !global;\n      @content;\n      $prefix-context: $old-prefix-context !global;\n      $current-prefix: $old-prefix !global;\n    } @else if $prefix == null {\n      $old-prefix-context: $prefix-context;\n      $prefix-context: $prefix-context or $current-prefix !global;\n      $current-prefix: null !global;\n      @if $debug-browser-support {\n        /* Content for official syntax. Prefix context is still #{$prefix-context}. */\n      }\n      @content;\n      $current-prefix: $prefix-context !global;\n      $prefix-context: $old-prefix-context !global;\n    } @else if $debug-browser-support {\n      /* Omitting content for #{$prefix} because #{$current-prefix} is already in scope. */\n    }\n  } @else {\n    @if $debug-browser-support and $prefix {\n      /* Creating new #{$prefix} context. */\n    }\n    $prefix-context: $prefix !global;\n    $current-prefix: $prefix !global;\n    @content;\n    $current-prefix: null !global;\n    $prefix-context: null !global;\n  }\n}\n\n@function prefixes-for-capability($capability, $threshold, $capability-options: $default-capability-options) {\n  $result: ();\n  @each $prefix in browser-prefixes($supported-browsers) {\n    $result: map-merge($result,\n                      ($prefix: use-prefix($prefix, $capability, $threshold, $capability-options)));\n  }\n  @return $result;\n}\n\n// Yields to the mixin content once for each prefix required.\n// The current prefix is set to the $current-prefix global for use by the included content.\n// Also yields to the content once with $current-prefix set to null for the official version\n// as long as there's not already a prefix in scope.\n@mixin with-each-prefix($capability, $threshold, $capability-options: $default-capability-options) {\n  @each $prefix, $should-use-prefix in prefixes-for-capability($capability, $threshold, $capability-options) {\n    @if $should-use-prefix {\n      @if $debug-browser-support and type-of($should-use-prefix) == list {\n        /* Capability #{$capability} is prefixed with #{$prefix} because #{$should-use-prefix} is required. */\n      } @else if $debug-browser-support and type-of($should-use-prefix) == number {\n        /* Capability #{$capability} is prefixed with #{$prefix} because #{$should-use-prefix}% of users need it which is more than the threshold of #{$threshold}%. */\n      }\n      @include with-prefix($prefix) {\n        @include with-browser-ranges($capability) {\n          @content;\n        }\n      }\n    } @else if $debug-browser-support {\n      /* Capability #{$capability} is not prefixed with #{$prefix} because #{prefix-usage($prefix, $capability, $capability-options)}% of users are affected which is less than the threshold of #{$threshold}. */\n    }\n  }\n  @include with-prefix(null) {\n    @include with-browser-ranges($capability) {\n      @content;\n    }\n  }\n}\n\n// Returns true if at least one browser-version pair in $subset-ranges\n// is a higher (or same) version than the browser-version pairs in\n// $ranges.\n@function has-browser-subset($ranges, $subset-ranges) {\n  $found-mismatch: false;\n  @each $browser, $subset-range in $subset-ranges {\n    $range: map-get($ranges, $browser);\n    @if $range {\n      $min-1: nth($subset-range, 1);\n      $max-1: nth($subset-range, 2);\n      $min-2: nth($range, 1);\n      $max-2: nth($range, 2);\n      @if (compare-browser-versions($browser, $min-2, $min-1) <= 0 and\n           compare-browser-versions($browser, $min-1, $max-2) <= 0) or\n          (compare-browser-versions($browser, $min-2, $max-1) <= 0 and\n           compare-browser-versions($browser, $max-1, $max-2) <= 0) or\n          (compare-browser-versions($browser, $min-1, $min-2) <= 0 and\n           compare-browser-versions($browser, $max-1, $max-2) >= 0) or\n          (compare-browser-versions($browser, $min-1, $min-2) >= 0 and\n           compare-browser-versions($browser, $max-1, $max-2) <= 0) {\n        @return true;\n      } @else {\n        $found-mismatch: true\n      }\n    }\n  }\n  @return not $found-mismatch;\n}\n\n// When the same browser is in both maps, then the minimum will be set\n// to the maximum of the two minimum versions, and the maximum will be\n// set to the minmum of the two maximum versions.\n@function intersect-browser-ranges($ranges, $new-ranges) {\n  @each $browser, $new-range in $new-ranges {\n    $old-range: map-get($ranges, $browser);\n    @if $old-range {\n      $old-min: nth($old-range, 1);\n      $old-max: if(length($old-range) == 1, $old-min, nth($old-range, 2));\n      $new-min: nth($new-range, 1);\n      $new-max: if(length($new-range) == 1, $new-min, nth($new-range, 2));\n      $maximin: if(compare-browser-versions($browser, $old-min, $new-min) > 0,\n                   $old-min, $new-min);\n      $minimax: if(compare-browser-versions($browser, $old-max, $new-max) < 0,\n                   $old-max, $new-max);\n      $ranges: map-merge($ranges, ($browser: $maximin $minimax));\n    } @else {\n      $ranges: map-merge($ranges, ($browser: $new-range));\n    }\n  }\n  @return $ranges;\n}\n\n// If passed a map, that will be the new browser ranges.\n// Otherwise a range map will be created based on the given capability and prefix\n// using the `browser-ranges($capability, $prefix)` function.\n//\n// If there are current ranges in scope and the new ranges have some overlap\n// with the current, \n//\n// If there is no overlap, then the content will not be rendered.\n@mixin with-browser-ranges($capability, $prefix: $current-prefix) {\n  $new-ranges: null;\n  @if type-of($capability) == map {\n    $new-ranges: $capability;\n  } @else {\n    $new-ranges: browser-ranges($capability, $prefix);\n  }\n\n  @if has-browser-subset($current-browser-versions, $new-ranges) {\n    $old-ranges: $current-browser-versions;\n    $current-browser-versions: intersect-browser-ranges($old-ranges, $new-ranges) !global;\n    @content;\n    $current-browser-versions: $old-ranges !global;\n  } @else if $debug-browser-support {\n    /* Excluding content because #{inspect($new-ranges)} is not included within\n       #{inspect($current-browser-versions)} */\n  }\n}\n\n// Returns true if the prefixed usage stats for the capability exceed the threshold\n// or if the minimum version for a supported browser would require a prefix for the capability.\n@function use-prefix($prefix, $capability, $threshold, $capability-options: $default-capability-options) {\n  $usage: prefix-usage($prefix, $capability, $capability-options);\n  @if $usage > $threshold {\n    @return $usage;\n  } @else {\n    @each $browser in browsers($prefix) {\n      @if index($supported-browsers, $browser) {\n        $min-version: map-get($browser-minimum-versions, $browser);\n        @if $min-version {\n          $actual-prefix: browser-requires-prefix($browser, $min-version, $capability, $capability-options);\n          @if $actual-prefix and $prefix == $actual-prefix {\n            @return $browser $min-version;\n          }\n        }\n      }\n    }\n  }\n  @return false;\n}\n\n@function prefix-identifier($ident, $prefix: $current-prefix) {\n  @return unquote(\"#{$prefix}#{if($prefix, '-', null)}#{$ident}\");\n}\n\n// Output a property and value using the current prefix.\n// It will be unprefixed if $current-prefix is null.\n@mixin prefix-prop($property, $value, $prefix: $current-prefix) {\n  #{prefix-identifier($property, $prefix)}: $value;\n}\n\n// Emit a set of properties with the prefix governed by the capability and usage threshold given.\n//\n// Example:\n//\n//     @include prefixed-properties(css-animation, $animation-support-threshold,\n//       (animation-name: foo, animation-duration: 2s)\n//     );\n@mixin prefixed-properties($capability, $threshold, $properties, $capability-options: $default-capability-options) {\n  @include with-each-prefix($capability, $threshold, $capability-options) {\n    @each $prop, $value in $properties {\n      @include prefix-prop($prop, $value);\n    }\n  }\n}\n\n\n// @private\n@function warn-about-old-variables() {\n  $old-variables-in-use: ();\n  @each $old-variable-name in\n        (legacy-support-for-ie, legacy-support-for-ie6, legacy-support-for-ie7,\n         legacy-support-for-ie8, legacy-support-for-mozilla, legacy-support-for-webkit,\n         experimental-support-for-mozilla, experimental-support-for-webkit,\n         experimental-support-for-opera, experimental-support-for-microsoft,\n         experimental-support-for-khtml, experimental-support-for-svg)\n  {\n    @if global-variable-exists($old-variable-name) {\n      $old-variables-in-use: append($old-variables-in-use,\n                                    unquote(\"$#{$old-variable-name}\"), comma);\n    }\n  }\n  @if length($old-variables-in-use) > 0 {\n    @warn \"Compass has changed how browser support is configured. \" +\n          \"The following configuration variables \" +\n          \"are no longer supported: #{$old-variables-in-use}.\" +\n          \"Details: http://compass-style.org/help/documentation/tuning-vendor-prefixes/\"\n  }\n  @return $old-variables-in-use;\n}\n\n// @private\n@function warn-about-pie-removal() {\n  @if global-variable-exists(experimental-support-for-pie) {\n    @warn \"Compass no longer supports css3pie.\";\n  }\n  @return true;\n}\n\n// Enable browser support debugging within the content block.\n// Or you can enable it for the whole stylesheet by setting `$debug-browser-support` to true.\n@mixin with-browser-support-debugging {\n  $current-status: $debug-browser-support;\n  $debug-browser-support: true !global;\n  @content;\n  $debug-browser-support: $current-status !global;\n}\n\n// Set a default value if the given arglist is empty\n@function set-arglist-default($arglist, $default) {\n  $default-index: index($arglist, default);\n  @if $default-index {\n    $arglist: set-nth($arglist, $default-index, $default)\n  }\n  @return if(length($arglist) > 0, $arglist, $default);\n}\n\n\n// @private\n$old-variable-warnings-issued: warn-about-old-variables() !default;\n\n// @private\n$pie-removal-warning-issued: warn-about-pie-removal() !default;\n\n// @private\n@function warn-about-useless-prefix-arguments($moz: null, $webkit: null, $o: null, $khtml: null, $official: null) {\n  @if $moz != null or $webkit != null or $o != null or $khtml != null or $official != null {\n    @warn \"Browser prefix arguments to this mixin are no longer used and \" +\n          \"will be removed in the next release.\";\n  }\n  @return true;\n}\n\n// coerce a list to be comma delimited or make a new, empty comma delimited list.\n@function comma-list($list: ()) {\n  @return join((), $list, comma);\n}\n\n// @private Returns the legacy value for a given box-model\n// - Used by background-clip and -origin.\n@function legacy-box($box) {\n  $box: unquote($box);\n  @if $box == padding-box { $box: padding; }\n  @if $box == border-box { $box: border; }\n  @if $box == content-box { $box: content; }\n  @return $box;\n}\n"
  },
  {
    "path": "core/stylesheets/compass/_typography.scss",
    "content": "@import \"typography/links\";\n@import \"typography/lists\";\n@import \"typography/text\";\n@import \"typography/vertical_rhythm\";\n"
  },
  {
    "path": "core/stylesheets/compass/_utilities.scss",
    "content": "@import \"utilities/color\";\n@import \"utilities/general\";\n@import \"utilities/sprites\";\n@import \"utilities/tables\";\n\n// deprecated\n@import \"typography/links\";\n@import \"typography/lists\";\n@import \"typography/text\";\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_animation.scss",
    "content": "@import \"compass/support\";\n\n// The prefixed support threshold for animation.\n// Defaults to the $graceful-usage-threshold.\n$animation-support-threshold: $graceful-usage-threshold !default;\n\n\n// Name of any animation as a string.\n$default-animation-name             : null !default;\n\n// Duration of the entire animation in seconds.\n$default-animation-duration         : null !default;\n\n// Delay for start of animation in seconds.\n$default-animation-delay            : null !default;\n\n// The timing function(s) to be used between keyframes. [ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier($number, $number, $number, $number)]\n$default-animation-timing-function  : null !default;\n\n// The number of times an animation cycle is played. [infinite | $number]\n$default-animation-iteration-count  : null !default;\n\n// Whether or not the animation should play in reverse on alternate cycles. [normal | alternate]\n$default-animation-direction        : null !default;\n\n// What values are applied by the animation outside the time it is executing. [none | forwards | backwards | both]\n$default-animation-fill-mode        : null !default;\n\n// Whether the animation is running or paused. [running | paused]\n$default-animation-play-state       : null !default;\n\n\n// Create a named animation sequence that can be applied to elements later.\n//\n//     $name    - The name of your animation.\n//     @content - The keyframes of the animation.\n@mixin keyframes($name, $deprecated-prefixes...) {\n  $warned: warn-about-useless-prefix-arguments($deprecated-prefixes...);\n\n  @include with-each-prefix(css-animation, $animation-support-threshold) {\n    // It would be nice if we could dynamically construct directive names.\n    @if $current-prefix == -moz    { @-moz-keyframes    #{$name} { @content; } }\n    @if $current-prefix == -webkit { @-webkit-keyframes #{$name} { @content; } }\n    @if $current-prefix == -o      { @-o-keyframes      #{$name} { @content; } }\n    @if $current-prefix == -ms     { @-ms-keyframes     #{$name} { @content; } }\n    @if $current-prefix == null    { @keyframes         #{$name} { @content; } }\n  }\n}\n\n// @private\n@mixin animation-properties($properties) {\n  @include prefixed-properties(css-animation, $animation-support-threshold, $properties);\n}\n\n\n// Apply any number of animation names.\n@mixin animation-name($name...) {\n  $name: set-arglist-default($name, $default-animation-name);\n  @include animation-properties((animation-name: $name));\n}\n\n// Apply any number of animation durations.\n@mixin animation-duration($duration...) {\n  $duration: set-arglist-default($duration, $default-animation-duration);\n  @include animation-properties((animation-duration: $duration));\n}\n\n// Apply any number of animation delays.\n@mixin animation-delay($delay...) {\n  $delay: set-arglist-default($delay, $default-animation-delay);\n  @include animation-properties((animation-delay: $delay));\n}\n\n// Apply any number of animation timing functions.\n@mixin animation-timing-function($function...) {\n  $function: set-arglist-default($function, $default-animation-timing-function);\n  @include animation-properties((animation-timing-function: $function));\n}\n\n// Apply any number of animation iteration counts.\n@mixin animation-iteration-count($count...) {\n  $count: set-arglist-default($count, $default-animation-iteration-count);\n  @include animation-properties((animation-iteration-count: $count));\n}\n\n// Apply any number of animation directions.\n@mixin animation-direction($direction...) {\n  $direction: set-arglist-default($direction, $default-animation-direction);\n  @include animation-properties((animation-direction: $direction));\n}\n\n// Apply any number of animation fill modes.\n@mixin animation-fill-mode($mode...) {\n  $mode: set-arglist-default($mode, $default-animation-fill-mode);\n  @include animation-properties((animation-fill-mode: $mode));\n}\n\n// Apply any number of animation play states.\n@mixin animation-play-state($state...) {\n  $state: set-arglist-default($state, $default-animation-play-state);\n  @include animation-properties((animation-play-state: $state));\n}\n\n// @private\n@function default-animation() {\n  @return compact($default-animation-name\n                  $default-animation-duration\n                  $default-animation-timing-function\n                  $default-animation-delay\n                  $default-animation-iteration-count\n                  $default-animation-direction\n                  $default-animation-fill-mode\n                  $default-animation-play-state);\n}\n\n// Shortcut to apply any number of animations to an element, with all the settings.\n//\n//     $animation... : Name and settings. [<values> | default]\n@mixin animation($animation...) {\n  $animation: if(length($animation) > 0, $animation, default-animation());\n  @include animation-properties((animation: $animation));\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_appearance.scss",
    "content": "// Appearance\n@import \"compass/support\";\n\n// Change the appearance for Mozilla, Webkit and possibly the future.\n// The appearance property is currently not present in any newer CSS specification.\n//\n// There is no official list of accepted values, but you might check these source:\n//\n//   * [Mozilla](https://developer.mozilla.org/en/CSS/-moz-appearance)\n//   * [Webkit](http://code.google.com/p/webkit-mirror/source/browse/Source/WebCore/css/CSSValueKeywords.in?spec=svnf1aea559dcd025a8946aa7da6e4e8306f5c1b604&r=63c7d1af44430b314233fea342c3ddb2a052e365)\n//     (search for 'appearance' within the page)\n@mixin appearance($appearance) {\n  // There is no caniuse tracking for appearance.\n  $appearance: unquote($appearance);\n  @include with-prefix(-moz)    {    -moz-appearance: $appearance; }\n  @include with-prefix(-webkit) { -webkit-appearance: $appearance; }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_background-clip.scss",
    "content": "// Background Clip\n@import \"compass/support\";\n\n// The the user threshold for background-clip support. Defaults to `$critical-usage-threshold`\n$background-clip-support-threshold: $critical-usage-threshold !default;\n\n// The default border-box model: [border-box | padding-box | content-box]\n$default-background-clip: padding-box !default;\n\n\n// Clip the background (image and color) at the edge of the padding, border, or content.\n//   $clip... : [padding-box | border-box | content-box]\n@mixin background-clip($clip...) {\n  $output: ();\n  $deprecated: ();\n\n  @if (length($clip) > 0) {\n    @each $layer in $clip {\n      $output: append($output, unquote($layer), comma);\n      $deprecated: append($deprecated, legacy-box($layer), comma);\n    }\n  } @else {\n    $output: $default-background-clip;\n    $deprecated: legacy-box($default-background-clip);\n  }\n\n  @include with-each-prefix(background-img-opts, $background-clip-support-threshold) {\n    @if $current-prefix == -moz or $current-prefix == -webkit {\n      // Legacy versions of Mozilla support a different syntax, prefixed.\n      @include prefix-prop(background-clip, $deprecated);\n    } @else {\n      @include prefix-prop(background-clip, $output);\n    }\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_background-origin.scss",
    "content": "// Background Origin\n@import \"compass/support\";\n\n// The the user threshold for background-origin support. Defaults to `$critical-usage-threshold`\n$background-origin-threshold: $critical-usage-threshold !default;\n\n\n// The default background-origin: [border-box | padding-box | content-box]\n$default-background-origin: content-box !default;\n\n\n// Set the origin of the background (image and color) at the edge of the padding, border, or content.\n//\n//     $origin... : [padding-box | border-box | content-box]\n@mixin background-origin($origin...) {\n  $output: ();\n  $deprecated: ();\n\n  @if (length($origin) > 0) {\n    @each $layer in $origin {\n      $output: append($output, unquote($layer), comma);\n      $deprecated: append($deprecated, legacy-box($layer), comma);\n    }\n  } @else {\n    $output: $default-background-origin;\n    $deprecated: legacy-box($default-background-origin);\n  }\n\n  @include with-each-prefix(background-img-opts, $background-origin-threshold) {\n    @if $current-prefix == -moz or $current-prefix == -webkit {\n      // Legacy versions of Mozilla support a different syntax, prefixed.\n      @include prefix-prop(background-origin, $deprecated)\n    } @else {\n      @include prefix-prop(background-origin, $output)\n    }\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_background-size.scss",
    "content": "// Background Size\n@import \"compass/support\";\n\n// The the user threshold for background-clip support. Defaults to `$critical-usage-threshold`\n$background-size-threshold: $critical-usage-threshold !default;\n\n//  override to change the default\n$default-background-size: 100% auto !default;\n\n\n// Set the size of background images using px, width and height, or percentages.\n// Currently supported in: Opera, Gecko, Webkit.\n//\n// * percentages are relative to the background-origin (default = padding-box)\n// * mixin defaults to: `$default-background-size`\n@mixin background-size($size...) {\n  $size: set-arglist-default($size, $default-background-size);\n  @include prefixed-properties(background-img-opts, $background-size-threshold, (background-size: $size));\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_border-radius.scss",
    "content": "// Border Radius\n\n@import \"compass/support\";\n\n\n// The the user threshold for border-radius support. Defaults to `$graceful-usage-threshold`\n$border-radius-threshold: $graceful-usage-threshold !default;\n\n// The length of a border-radius to be used by default.\n$default-border-radius: 5px !default;\n\n\n// Round all corners by a specific amount, defaults to value of `$default-border-radius`.\n//\n// When two values are passed, the first is the horizontal radius\n// and the second is the vertical radius.\n//\n// Note: webkit does not support shorthand syntax for several corners at once.\n// So in the case where you pass several values only the first will be passed to webkit.\n//\n// Examples:\n//\n//     .simple   { @include border-radius(4px, 4px); }\n//     .compound { @include border-radius(2px 5px, 3px 6px); }\n//     .crazy    { @include border-radius(1px 3px 5px 7px, 2px 4px 6px 8px)}\n//\n// Which generates:\n//\n//     .simple {\n//       -moz-border-radius: 4px / 4px;\n//       -webkit-border-radius: 4px 4px;\n//       border-radius: 4px / 4px; }\n//     \n//     .compound {\n//       -moz-border-radius: 2px 5px / 3px 6px;\n//       -webkit-border-radius: 2px 3px;\n//       border-radius: 2px 5px / 3px 6px; }\n//     \n//     .crazy {\n//       -moz-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px;\n//       -webkit-border-radius: 1px 2px;\n//       border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px; }\n@mixin border-radius($radius: $default-border-radius, $vertical-radius: false) {\n  @include with-each-prefix(border-radius, $border-radius-threshold) {\n    @if $current-prefix == -webkit {\n      // Legacy Webkit didn't understand the official shorthand syntax for specifying a vertical radius.\n      $legacy-webkit-radius: first-value-of($radius);\n      @if $vertical-radius { $legacy-webkit-radius: append($legacy-webkit-radius, first-value-of($vertical-radius)); }\n      @include prefix-prop(border-radius, $legacy-webkit-radius);\n    } @else {\n      // Official syntax for everyone else\n      @include prefix-prop(border-radius, if($vertical-radius, #{$radius} / #{$vertical-radius}, $radius));\n    }\n  }\n}\n\n// Round radius at position by amount.\n//\n// * legal values for `$vert`: `top`, `bottom`\n// * legal values for `$horz`: `left`, `right`\n@mixin border-corner-radius($vert, $horz, $radius: $default-border-radius) {\n  @include with-each-prefix(border-radius, $border-radius-threshold) {\n    @if $current-prefix == -moz {\n      // Support for mozilla's syntax for specifying a corner\n      @include prefix-prop(\"border-radius-#{$vert}#{$horz}\", $radius);\n    } @else {\n      // Official syntax for everyone else\n      @include prefix-prop(\"border-#{$vert}-#{$horz}-radius\", $radius);\n    }\n  }\n}\n\n// Round top-left corner only\n@mixin border-top-left-radius($radius: $default-border-radius) {\n  @include border-corner-radius(top, left, $radius); }\n\n// Round top-right corner only\n@mixin border-top-right-radius($radius: $default-border-radius) {\n  @include border-corner-radius(top, right, $radius); }\n\n// Round bottom-left corner only\n@mixin border-bottom-left-radius($radius: $default-border-radius) {\n  @include border-corner-radius(bottom, left, $radius); }\n\n// Round bottom-right corner only\n@mixin border-bottom-right-radius($radius: $default-border-radius) {\n  @include border-corner-radius(bottom, right, $radius); }\n\n// Round both top corners by amount\n@mixin border-top-radius($radius: $default-border-radius) {\n  @include border-top-left-radius($radius);\n  @include border-top-right-radius($radius); }\n\n// Round both right corners by amount\n@mixin border-right-radius($radius: $default-border-radius) {\n  @include border-top-right-radius($radius);\n  @include border-bottom-right-radius($radius); }\n\n// Round both bottom corners by amount\n@mixin border-bottom-radius($radius: $default-border-radius) {\n  @include border-bottom-left-radius($radius);\n  @include border-bottom-right-radius($radius); }\n\n// Round both left corners by amount\n@mixin border-left-radius($radius: $default-border-radius) {\n  @include border-top-left-radius($radius);\n  @include border-bottom-left-radius($radius); }\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_box-shadow.scss",
    "content": "// Box Shadow\n\n@import \"compass/support\";\n\n// The prefixed support threshold for box-shadow.\n// Defaults to the $graceful-usage-threshold.\n$box-shadow-support-threshold: $graceful-usage-threshold !default;\n\n\n// The default color for box shadows\n$default-box-shadow-color: #333333 !default;\n\n// The default horizontal offset. Positive is to the right.\n$default-box-shadow-h-offset: 0px !default;\n\n// The default vertical offset. Positive is down.\n$default-box-shadow-v-offset: 0px !default;\n\n// The default blur length.\n$default-box-shadow-blur: 5px !default;\n\n// The default spread length.\n$default-box-shadow-spread: null !default;\n\n// The default shadow inset: inset or null (for standard shadow).\n$default-box-shadow-inset: null !default;\n\n@function default-box-shadow() {\n  @return compact(if($default-box-shadow-inset, inset, null)\n                  $default-box-shadow-h-offset\n                  $default-box-shadow-v-offset\n                  $default-box-shadow-blur\n                  $default-box-shadow-spread\n                  $default-box-shadow-color);\n}\n\n// Provides cross-browser for Webkit, Gecko, and CSS3 box shadows\n// when one or more box shadows are needed.\n// Each shadow argument should adhere to the standard css3 syntax\n// for the box-shadow property.\n@mixin box-shadow($shadow...) {\n  $shadow: set-arglist-default($shadow, default-box-shadow());\n  @include prefixed-properties(css-boxshadow, $box-shadow-support-threshold, (box-shadow: $shadow));\n}\n\n// Provides a single cross-browser CSS box shadow for Webkit, Gecko, and CSS3.\n// Includes default arguments for color, horizontal offset, vertical offset, blur length, spread length, and inset.\n@mixin single-box-shadow(\n  $hoff   : null,\n  $voff   : null,\n  $blur   : null,\n  $spread : null,\n  $color  : null,\n  $inset  : $default-box-shadow-inset\n) {\n  // Handle legacy argument order\n  @if not ($hoff == none or $hoff == null) and type-of($hoff) != number {\n    @warn \"The $color argument for single-box-shadow is now the 5th argument instead of the 1st.\";\n    $tmp-color: $color;\n    $color: $hoff;\n    $hoff: $voff;\n    $voff: $blur;\n    $blur: $spread;\n    $spread: $tmp-color\n  }\n\n  // Need to set these defaults here instead of the arglist to support the above backwards compat handling\n  @if $hoff   == null { $hoff:   $default-box-shadow-h-offset; }\n  @if $voff   == null { $hoff:   $default-box-shadow-v-offset; }\n  @if $blur   == null { $blur:   $default-box-shadow-blur;     }\n  @if $spread == null { $spread: $default-box-shadow-spread;   }\n  @if $color  == null { $color:  $default-box-shadow-color;    }\n\n  @if not ($inset == true or $inset == false or $inset == null or $inset == inset) {\n    @warn \"$inset expected to be true or the inset keyword. Got #{$inset} instead. Using: inset\";\n  }\n\n  @if $hoff == none {\n    @include box-shadow(none);\n  } @else {\n    $full   : $hoff $voff;\n    @if $blur   { $full: $full $blur;   }\n    @if $spread { $full: $full $spread; }\n    @if $color  { $full: $full $color;  }\n    @if $inset  { $full: inset $full;   }\n    @include box-shadow($full);\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_box-sizing.scss",
    "content": "// Box Sizing\n\n@import \"compass/support\";\n\n// The prefixed support threshold for box-sizing.\n// Defaults to the $graceful-usage-threshold.\n$box-sizing-support-threshold: $critical-usage-threshold !default;\n\n// The default box-sizing model when no argument is provided to the box-sizing mixin: [ content-box | border-box | padding-box ]\n//\n// The browser default is content-box, compass defaults to border-box.\n$default-box-sizing: border-box !default;\n\n\n// Change the box model for Mozilla, Webkit, IE8 and the future\n//\n//     $box-model: [ content-box | border-box | padding-box ]\n@mixin box-sizing($box-model: $default-box-sizing) {\n  $box-model: unquote($box-model);\n  @include prefixed-properties(css3-boxsizing, $box-sizing-support-threshold, (box-sizing: $box-model));\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_box.scss",
    "content": "// Flexible Box\n@import \"deprecated-support\";\n\n@warn \"The compass/css3/box module is DEPRECATED and will be removed in the next release. Please use compass/css3/flexbox instead.\";\n\n// @private css3-feature-support variables must always include a list of five boolean values\n$legacy-box-support: -moz, -webkit, not -o, -ms, not -khtml;\n\n// Default box orientation, assuming that the user wants something less block-like\n$default-box-orient         : horizontal      !default;\n\n// Default box-align\n$default-box-align          : stretch         !default;\n\n// Default box flex\n$default-box-flex           : 0               !default;\n\n// Default flex group\n$default-box-flex-group     : 1               !default;\n\n// Box direction default value\n$default-box-direction      : normal          !default;\n\n// Default ordinal group\n$default-box-ordinal-group  : 1               !default;\n\n// Default box lines\n$default-box-lines          : single          !default;\n\n// Default box pack\n$default-box-pack           : start           !default;\n\n\n// Apply 'display:box;' to an element.\n// - must be used for any of the other flexbox mixins to work properly\n@mixin display-box {\n  @include experimental-value(display, box, $legacy-box-support...);\n}\n\n// Box orientation [ horizontal | vertical | inline-axis | block-axis | inherit ]\n@mixin box-orient($orientation: $default-box-orient) {\n  $orientation : unquote($orientation);\n  @include experimental(box-orient, $orientation, $legacy-box-support...);\n}\n\n// Box align [ start | end | center | baseline | stretch ]\n@mixin box-align($alignment: $default-box-align) {\n  $alignment : unquote($alignment);\n  @include experimental(box-align, $alignment, $legacy-box-support...);\n}\n\n// Takes an int argument for box flex. Apply this to the children inside the box.\n//\n// For example: \"div.display-box > div.child-box\" would get the box flex mixin.\n@mixin box-flex($flex: $default-box-flex) {\n  @include experimental(box-flex, $flex, $legacy-box-support...);\n}\n\n// Takes an int argument for flexible grouping\n@mixin box-flex-group($group: $default-box-flex-group) {\n  @include experimental(box-flex-group, $group, $legacy-box-support...);\n}\n\n// Takes an int argument for ordinal grouping and rearranging the order\n@mixin box-ordinal-group($group: $default-box-ordinal-group) {\n  @include experimental(box-ordinal-group, $group, $legacy-box-support...);\n}\n\n// Box direction [ normal | reverse | inherit ]\n@mixin box-direction($direction: $default-box-direction) {\n  $direction: unquote($direction);\n  @include experimental(box-direction, $direction, $legacy-box-support...);\n}\n\n// Box lines [ single | multiple ]\n@mixin box-lines($lines: $default-box-lines) {\n  $lines: unquote($lines);\n  @include experimental(box-lines, $lines, $legacy-box-support...);\n}\n\n// Box pack [ start | end | center | justify ]\n@mixin box-pack($pack: $default-box-pack) {\n  $pack: unquote($pack);\n  @include experimental(box-pack, $pack, $legacy-box-support...);\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_columns.scss",
    "content": "// Columns\n@import \"compass/support\";\n\n// The prefixed support threshold for columns.\n// Defaults to the $critical-usage-threshold.\n$multicolumn-support-threshold: $critical-usage-threshold !default;\n\n\n// Specify the shorthand `columns` property.\n//\n// Example:\n//\n//     @include columns(20em 2);\n@mixin columns($width-and-count) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    columns: $width-and-count\n  ));\n}\n\n// Specify the number of columns\n@mixin column-count($count) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    column-count: $count\n  ));\n}\n\n// Specify the gap between columns e.g. `20px`\n@mixin column-gap($width) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    column-gap: $width\n  ));\n}\n\n// Specify the width of columns e.g. `100px`\n@mixin column-width($width) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    column-width: $width\n  ));\n}\n\n// Specify how many columns an element should span across.\n//\n// * legal values are 1, all\n@mixin column-span($columns) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    column-span: $columns\n  ));\n}\n\n// Specify the width of the rule between columns e.g. `1px`\n@mixin column-rule-width($width) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    rule-width: $width\n  ));\n}\n\n// Specify the style of the rule between columns e.g. `dotted`.\n// This works like border-style.\n@mixin column-rule-style($style) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    rule-style: $style\n  ));\n}\n\n// Specify the color of the rule between columns e.g. `blue`.\n// This works like border-color.\n@mixin column-rule-color($color) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    rule-color: $color\n  ));\n}\n\n// Mixin encompassing all column rule properties\n// For example:\n//\n//     @include column-rule(1px, solid, #c00)\n//\n// Or the values can be space separated:\n//\n//     @include column-rule(1px solid #c00)\n@mixin column-rule($width, $style: null, $color: null) {\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    column-rule: $width $style $color\n  ));\n}\n\n// All-purpose mixin for setting column breaks.\n//\n// * legal values for $type : before, after, inside\n// * legal values for '$value' are dependent on $type\n//    * when $type = before, legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n//    * when $type = after, legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n//    * when $type = inside, legal values are auto, avoid, avoid-page, avoid-column\n//\n//  Examples:\n//    h2.before {@include column-break(before, always);}\n//    h2.after {@include column-break(after, always); }\n//    h2.inside {@include column-break(inside); }\n//\n//  Which generates:\n//  h2.before {\n//    -webkit-column-break-before: always;\n//    break-before: always;}\n//\n//  h2.after {\n//    -webkit-column-break-after: always;\n//    break-after: always; }\n//\n//  h2.inside {\n//    -webkit-column-break-inside: auto;\n//    break-inside: auto;}\n\n@mixin column-break($type: before, $value: auto){\n  @include with-each-prefix(multicolumn, $multicolumn-support-threshold) {\n    @if $current-prefix == -webkit {\n      // Webkit uses non-standard syntax\n      -webkit-column-break-#{$type}: $value;\n    } @else if $current-prefix == -moz {\n      // Moz uses a different non-standard syntax\n      -moz-page-break-#{$type}: $value;\n    } @else {\n      @include prefix-prop(break-#{$type}, $value);\n    }\n  }\n}\n\n// Mixin for setting break-before\n//\n// * legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n//\n//  Example:\n//    h2.before {@include break-before(always);}\n//\n//  Which generates:\n//\n//  h2.before {\n//    -webkit-column-break-before: always;\n//    break-before: always;}\n@mixin break-before($value: auto){\n  @include column-break(before, $value);\n}\n\n@mixin column-break-before($value: auto){\n  @include column-break(before, $value);\n  @warn '\"column-break-before\" has been deprecated in favor of the official syntax: \"break-before\".';\n}\n\n// Mixin for setting break-after\n//\n// * legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n//\n//  Example:\n//    h2.after {@include break-after(always); }\n//\n//  Which generates:\n//\n//  h2.after {\n//    -webkit-column-break-after: always;\n//    break-after: always; }\n@mixin break-after($value: auto){\n  @include column-break(after, $value);\n}\n\n@mixin column-break-after($value: auto){\n  @include column-break(after, $value);\n  @warn '\"column-break-after\" has been deprecated in favor of the official syntax: \"break-after\".';\n}\n\n// Mixin for setting break-inside\n//\n// * legal values are auto, avoid, avoid-page, avoid-column\n//\n//  Example:\n//    h2.inside {@include break-inside();}\n//\n//  Which generates:\n//\n//  h2.inside {\n//    -webkit-column-break-inside: auto;\n//    break-inside: auto;}\n@mixin break-inside($value: auto){\n  @include column-break(inside, $value);\n}\n\n@mixin column-break-inside($value: auto){\n  @include column-break(inside, $value);\n  @warn '\"column-break-inside\" has been deprecated in favor of the official syntax: \"break-inside\".';\n}\n\n// Mixin for setting column-span\n//\n// * legal values: none, all\n//\n//  Example:\n//    h2.span {@include column-span();}\n@mixin column-span($span: all){\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    column-span: $span\n  ));\n}\n\n// Mixin for setting column-fill\n//\n// * legal values: auto, balance\n//\n//  Example:\n//    h2.fill {@include column-fill();}\n@mixin column-fill($fill: balance){\n  @include prefixed-properties(multicolumn, $multicolumn-support-threshold,(\n    column-fill: $fill\n  ));\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_deprecated-support.scss",
    "content": "@import \"compass/support\";\n\n// XXX Remove these\n$experimental-support-for-mozilla: true !default;\n$experimental-support-for-webkit: true !default;\n$experimental-support-for-opera: true !default;\n$experimental-support-for-microsoft: true !default;\n$experimental-support-for-khtml: false !default;\n$experimental-support-for-svg: false !default;\n$legacy-support-for-ie6: true !default;\n$legacy-support-for-ie7: true !default;\n$legacy-support-for-ie8: true !default;\n$legacy-support-for-mozilla: true !default;\n$legacy-support-for-webkit: true !default;\n\n// This mixin provides basic support for CSS3 properties and\n// their corresponding experimental CSS2 properties when\n// the implementations are identical except for the property\n// prefix.\n@mixin experimental($property, $value,\n  $moz      : $experimental-support-for-mozilla,\n  $webkit   : $experimental-support-for-webkit,\n  $o        : $experimental-support-for-opera,\n  $ms       : $experimental-support-for-microsoft,\n  $khtml    : $experimental-support-for-khtml,\n  $official : true\n) {\n  @if $webkit  and $experimental-support-for-webkit    { -webkit-#{$property} : $value; }\n  @if $khtml   and $experimental-support-for-khtml     {  -khtml-#{$property} : $value; }\n  @if $moz     and $experimental-support-for-mozilla   {    -moz-#{$property} : $value; }\n  @if $ms      and $experimental-support-for-microsoft {     -ms-#{$property} : $value; }\n  @if $o       and $experimental-support-for-opera     {      -o-#{$property} : $value; }\n  @if $official                                        {         #{$property} : $value; }\n}\n\n// This mixin is a shortcut for applying only a single experimental value\n@mixin experimental-only-for($property, $value,\n  $moz      : false,\n  $webkit   : false,\n  $o        : false,\n  $ms       : false,\n  $khtml    : false,\n  $official : false\n) {\n  @include experimental($property, $value, $moz, $webkit, $o, $ms, $khtml, $official);\n}\n\n// Same as experimental(), but for cases when the property is the same and the value is vendorized\n@mixin experimental-value($property, $value,\n  $moz      : $experimental-support-for-mozilla,\n  $webkit   : $experimental-support-for-webkit,\n  $o        : $experimental-support-for-opera,\n  $ms       : $experimental-support-for-microsoft,\n  $khtml    : $experimental-support-for-khtml,\n  $official : true\n) {\n  @if $webkit  and $experimental-support-for-webkit    { #{$property} : -webkit-#{$value}; }\n  @if $khtml   and $experimental-support-for-khtml     { #{$property} :  -khtml-#{$value}; }\n  @if $moz     and $experimental-support-for-mozilla   { #{$property} :    -moz-#{$value}; }\n  @if $ms      and $experimental-support-for-microsoft { #{$property} :     -ms-#{$value}; }\n  @if $o       and $experimental-support-for-opera     { #{$property} :      -o-#{$value}; }\n  @if $official                                        { #{$property} :         #{$value}; }\n}\n\n// @private\n// Check a given support list for support of a particular browser\n@function supported(\n  $prefix,\n  $support-list\n) {\n  $keys: moz, webkit, o, ms, khtml, official;\n  $index: index($keys, $prefix);\n\n  @if $index {\n    @if $index == 6 and length($support-list) == 5 {\n      @return official;\n    } @else {\n      @return nth($support-list, $index);\n    }\n  } @else {\n    @warn 'Please pass a valid browser for $prefix: moz, webkit, o, ms, khtml, or official.';\n  }\n}\n\n// A debug tool for checking browser support\n@mixin debug-support-matrix($experimental: true, $ie: true) {\n  @debug  #{'$moz-'}$experimental-support-for-mozilla\n          #{'$webkit-'}$experimental-support-for-webkit\n          #{'$opera-'}$experimental-support-for-opera\n          #{'$microsoft-'}$experimental-support-for-microsoft\n          #{'$khtml-'}$experimental-support-for-khtml;\n  @debug  #{'$ie6-'}$legacy-support-for-ie6\n          #{'$ie7-'}$legacy-support-for-ie7\n          #{'$ie8-'}$legacy-support-for-ie8;\n}\n\n// Capture the current exerimental support settings\n@function capture-experimental-matrix() {\n  @return $experimental-support-for-mozilla\n          $experimental-support-for-webkit\n          $experimental-support-for-opera\n          $experimental-support-for-microsoft\n          $experimental-support-for-khtml;\n}\n\n// Capture the current legacy-ie support settings\n@function capture-legacy-ie-matrix() {\n  @return $legacy-support-for-ie6\n          $legacy-support-for-ie7\n          $legacy-support-for-ie8;\n}\n\n// Capture and store support\n$experimental-matrix: capture-experimental-matrix();\n$legacy-ie-matrix: capture-legacy-ie-matrix();\n\n@mixin capture-experimental-matrix {\n  $experimental-matrix: capture-experimental-matrix();\n}\n\n@mixin capture-legacy-ie-matrix {\n  $legacy-ie-matrix: capture-legacy-ie-matrix();\n}\n\n@mixin capture-support-matrix {\n  @include capture-experimental-matrix;\n  @include capture-legacy-ie-matrix;\n}\n\n// Change the experimental-support settings in specific contexts.\n@mixin set-experimental-support(\n  $moz    : false,\n  $webkit : false,\n  $o      : false,\n  $ms     : false,\n  $khtml  : false\n) {\n  $experimental-support-for-mozilla   : $moz;\n  $experimental-support-for-webkit    : $webkit;\n  $experimental-support-for-opera     : $o;\n  $experimental-support-for-microsoft : $ms;\n  $experimental-support-for-khtml     : $khtml;\n}\n\n@mixin capture-and-set-experimental(\n  $moz    : false,\n  $webkit : false,\n  $o      : false,\n  $ms     : false,\n  $khtml  : false\n) {\n  @include capture-experimental-matrix;\n  @include set-experimental-support($moz, $webkit, $o, $ms, $khtml);\n}\n\n@mixin capture-and-adjust-experimental(\n  $moz    : $experimental-support-for-mozilla,\n  $webkit : $experimental-support-for-webkit,\n  $o      : $experimental-support-for-opera,\n  $ms     : $experimental-support-for-microsoft,\n  $khtml  : $experimental-support-for-khtml\n) {\n  @include capture-experimental-matrix;\n  @include set-experimental-support($moz, $webkit, $o, $ms, $khtml);\n}\n\n// Change the legacy-support-for-ie* settings in specific contexts.\n@mixin set-legacy-ie-support(\n  $ie6: false,\n  $ie7: false,\n  $ie8: false\n) {\n  $legacy-support-for-ie6: $ie6;\n  $legacy-support-for-ie7: $ie7;\n  $legacy-support-for-ie8: $ie8;\n}\n\n@mixin capture-and-set-legacy-ie(\n  $ie6: false,\n  $ie7: false,\n  $ie8: false\n) {\n  @include capture-legacy-ie-matrix;\n  @include set-legacy-ie-support($ie6, $ie7, $ie8);\n}\n\n@mixin capture-and-adjust-legacy-ie(\n  $ie6: $legacy-support-for-ie6,\n  $ie7: $legacy-support-for-ie7,\n  $ie8: $legacy-support-for-ie8\n) {\n  @include capture-and-set-legacy-ie($ie6, $ie7, $ie8);\n}\n\n// Capture current browser support matrix, and set a new matrix of support.\n@mixin capture-and-set-support(\n  $moz    : false,\n  $webkit : false,\n  $o      : false,\n  $ms     : false,\n  $khtml  : false,\n  $ie6    : false,\n  $ie7    : false,\n  $ie8    : false\n) {\n  // Capture the current state\n  @include capture-support-matrix;\n\n  // Change support settings\n  @include set-experimental-support($moz, $webkit, $o, $ms, $khtml);\n  @include set-legacy-ie-support($ie6, $ie7, $ie8);\n}\n\n// Capture current browser support matrix, and set a new matrix of support.\n@mixin capture-and-adjust-support(\n  $moz        : $experimental-support-for-mozilla,\n  $webkit     : $experimental-support-for-webkit,\n  $o          : $experimental-support-for-opera,\n  $ms         : $experimental-support-for-microsoft,\n  $khtml      : $experimental-support-for-khtml,\n  $ie6        : $legacy-support-for-ie6,\n  $ie7        : $legacy-support-for-ie7,\n  $ie8        : $legacy-support-for-ie8\n) {\n  @include capture-and-set-support($moz, $webkit, $o, $ms, $khtml, $ie6, $ie7, $ie8);\n}\n\n\n// This mixin allows you to change the experimental support settings for\n// child (@content) styles.\n@mixin with-only-support-for(\n  $moz    : false,\n  $webkit : false,\n  $o      : false,\n  $ms     : false,\n  $khtml  : false,\n  $ie6    : false,\n  $ie7    : false,\n  $ie8    : false\n) {\n  // Capture current state\n  $wo-experimental-matrix : capture-experimental-matrix();\n  $wo-legacy-ie-matrix    : capture-legacy-ie-matrix();\n\n  // Set new states\n  @include set-experimental-support($moz, $webkit, $o, $ms, $khtml);\n  @include set-legacy-ie-support($ie6, $ie7, $ie8);\n\n  // Apply styles\n  @content;\n\n  // Return to original support settings\n  @include set-experimental-support($wo-experimental-matrix...);\n  @include set-legacy-ie-support($wo-legacy-ie-matrix...);\n}\n\n// This mixin is a shortcut for making slight adjustments to browser support\n// for child (@content) styles\n@mixin adjust-support-for(\n    $moz        : $experimental-support-for-mozilla,\n    $webkit     : $experimental-support-for-webkit,\n    $o          : $experimental-support-for-opera,\n    $ms         : $experimental-support-for-microsoft,\n    $khtml      : $experimental-support-for-khtml,\n    $ie6        : $legacy-support-for-ie6,\n    $ie7        : $legacy-support-for-ie7,\n    $ie8        : $legacy-support-for-ie8\n) {\n  @include with-only-support-for($moz, $webkit, $o, $ms, $khtml, $ie6, $ie7, $ie8) {\n    @content;\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_filter.scss",
    "content": "// Filter\n@import \"compass/support\";\n\n// The prefixed support threshold for css filter effects.\n// Defaults to the $graceful-usage-threshold.\n$filter-support-threshold: $graceful-usage-threshold !default;\n\n\n// Provides cross-browser support for the upcoming (?) css3 filter property.\n//\n// The filter argument should adhere to the standard css3 syntax\n// for the filter property.\n@mixin filter($filters) {\n  @include prefixed-properties(css-filters, $filter-support-threshold,(\n    filter: $filters\n  ));\n}\n\n// @private Apply filter-margins\n@mixin apply-filter-margin($position, $width) {\n  @include prefixed-properties(css-filters, $filter-support-threshold,(\n    filter-margin-#{$position}: $width\n  ));\n}\n\n// filter-margin-top\n@mixin filter-margin-top($width) { @include apply-filter-margin(top, $width); }\n\n// filter-margin-right\n@mixin filter-margin-right($width) { @include apply-filter-margin(right, $width); }\n\n// filter-margin-bottom\n@mixin filter-margin-bottom($width) { @include apply-filter-margin(bottom, $width); }\n\n// filter-margin-left\n@mixin filter-margin-left($width) { @include apply-filter-margin(left, $width); }\n\n// filter-margin\n@mixin filter-margin($widths) {\n  @include prefixed-properties(css-filters, $filter-support-threshold,(\n    filter-margin: $widths\n  ));\n}\n\n// color-interpolation-filters (auto | sRGB | linearRGB )\n@mixin color-interpolation-filters($value) {\n  @include prefixed-properties(css-filters, $filter-support-threshold,(\n    color-interpolation-filters: $value\n  ));\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_flexbox.scss",
    "content": "// There are two ways to use the flexbox module.\n// If you're using the final version of the spec,\n// you can use the property mixins as elsewhere in\n// the css3 module.\n//\n// You can also use the flexbox prefixing mixin `flexbox`.\n// This mixin takes an optional `$version` argument which\n// allows you to specify which spec version the properties\n// are using so that they will be prefixed correctly.\n//\n// Example:\n//\n//     .flex-column {\n//       /* For flexbox spec v1 */\n//       @include flexbox((\n//         display: box,\n//         box-orient: vertical,\n//       ), $version: 1);\n//       \n//       /* For flexbox spec v2 */\n//       @include flexbox((\n//         display: flexbox,\n//         flex-direction: column,\n//       ), $version: 2);\n//       \n//       /* Latest Spec */\n//       @include flexbox((\n//         display: flex,\n//         flex-direction: column,\n//       ));\n//     }\n//\n// Which compiles to:\n//\n//     .flex-row {\n//       /* For flexbox spec v1 */\n//       display: -moz-box;\n//       -moz-box-orient: vertical;\n//       display: -webkit-box;\n//       -webkit-box-orient: vertical;\n//       \n//       /* For flexbox spec v2 */\n//       display: -ms-flexbox;\n//       -ms-flex-direction: column;\n//       \n//       /* Latest Spec */\n//       display: -webkit-flex;\n//       -webkit-flex-direction: column;\n//       display: flex;\n//       flex-direction: column;\n//     }\n\n@import \"compass/support\";\n\n$flexbox-support-threshold: $critical-usage-threshold !default;\n\n\n// @private\n$flexbox-capability-options: (\n  (full-support: true),\n  (partial-support: true, spec-versions: 3)\n);\n\n// This is the underlying implementation for all the other mixins in this module.\n// It is the only way to access prefix support for older versions of the spec.\n//\n// `$properties`: map of property-value pairs that should be prefixed\n\n// `$version1: the version of the spec to use when considering what prefix\n// to appply. Defaults to the most recent (spec version 3). Only the most\n// recent version of the spec outputs an unprefixed version.\n@mixin flexbox($properties, $version: null) {\n  $capability-options: $flexbox-capability-options;\n  @if $version {\n    $capability-options: (partial-support: true, spec-versions: $version);\n  }\n\n  @include with-each-prefix(flexbox, $flexbox-support-threshold, $capability-options) {\n    // Don't output unprefixed versions when the spec version is not the final version\n    @if $version and $current-prefix or not $version or $version == 3 {\n      @each $prop, $value in $properties {\n        @if $prop == display {\n          display: prefix-identifier($value);\n        } @else {\n          @include prefix-prop($prop, $value);\n        }\n      }\n    }\n  }\n}\n\n// Values for $display are: flex (default), inline-flex\n@mixin display-flex($display: flex) {\n  @include flexbox((display: $display));\n}\n\n// Values: row | row-reverse | column | column-reverse\n@mixin flex-direction($direction) {\n  @include flexbox((flex-direction: $direction));\n}\n\n// Values: nowrap | wrap | wrap-reverse\n@mixin flex-wrap($wrap) {\n  @include flexbox((flex-wrap: $wrap));\n}\n\n// Shorthand for flex-direction and flex-wrap.\n@mixin flex-flow($flow) {\n  @include flexbox((flex-flow: $flow));\n}\n\n// Accepts an integer\n@mixin order($order) {\n  @include flexbox((order: $order));\n}\n\n// Shorthand for flex-grow, flex-shrink and optionally flex-basis.\n// Space separated, in that order.\n@mixin flex($flex) {\n  @include flexbox((flex: $flex));\n}\n\n// Accepts a number.\n@mixin flex-grow($flex-grow) {\n  @include flexbox((flex-grow: $flex-grow));\n}\n\n// Accepts a number.\n@mixin flex-shrink($flex-shrink) {\n  @include flexbox((flex-shrink: $flex-shrink));\n}\n\n// Accepts any legal value for the width property.\n@mixin flex-basis($flex-basis) {\n  @include flexbox((flex-basis: $flex-basis));\n}\n\n// Legal values: flex-start | flex-end | center | space-between | space-around\n@mixin justify-content($justify-content) {\n  @include flexbox((justify-content: $justify-content));\n}\n\n// Legal values: flex-start | flex-end | center | baseline | stretch\n@mixin align-items($align-items) {\n  @include flexbox((align-items: $align-items));\n}\n\n// Legal values: auto | flex-start | flex-end | center | baseline | stretch\n@mixin align-self($align-self) {\n  @include flexbox((align-self: $align-self));\n}\n\n// Legal values: flex-start | flex-end | center | space-between | space-around | stretch\n@mixin align-content($align-content) {\n  @include flexbox((align-content: $align-content));\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_font-face.scss",
    "content": "@import \"compass/support\";\n\n// Cross-browser support for @font-face. Supports IE, Gecko, Webkit, Opera.\n//\n// * $name is required, arbitrary, and what you will use in font stacks.\n// * $font-files is required using font-files('relative/location', 'format').\n//   for best results use this order: woff, opentype/truetype, svg\n// * $eot is required by IE, and is a relative location of the eot file.\n// * $weight shows if the font is bold, defaults to normal\n// * $style defaults to normal, might be also italic\n// * For android 2.2 Compatiblity, please ensure that your web page has\n//   a meta viewport tag.\n// * To support iOS < 4.2, an SVG file must be provided\n//\n// If you need to generate other formats check out the Font Squirrel\n// [font generator](http://www.fontsquirrel.com/fontface/generator)\n//\n\n// In order to refer to a specific style of the font in your stylesheets as\n// e.g. \"font-style: italic;\",  you may add a couple of @font-face includes\n// containing the respective font files for each style and specying\n// respective the $style parameter.\n\n// Order of the includes matters, and it is: normal, bold, italic, bold+italic.\n\n@mixin font-face(\n  $name,\n  $font-files,\n  $eot: false,\n  $weight: false,\n  $style: false\n) {\n  $iefont: unquote(\"#{$eot}?#iefix\");\n  @font-face {\n    font-family: quote($name);\n    @if $eot {\n      src: font-url($eot);\n      $font-files: font-url($iefont) unquote(\"format('embedded-opentype')\"), $font-files;\n    }\n    src: $font-files;\n    @if $weight {\n      font-weight: $weight;\n    }\n    @if $style {\n      font-style: $style;\n    }\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_hyphenation.scss",
    "content": "// Mixins to support specific CSS Text Level 3 elements\n\n@import \"compass/support\";\n\n// The the user threshold for hyphens support.\n// Defaults to `$graceful-usage-threshold`.\n$hyphens-support-threshold: $graceful-usage-threshold !default;\n\n\n// Mixin for word-break properties\n// http://www.w3.org/css3-text/#word-break\n// * legal values for $type : normal, keep-all, break-all\n//\n// Example:\n//    p.wordBreak {@include word-break(break-all);}\n//\n// Which generates:\n//    p.wordBreak {\n//      word-break: break-all;\n//      word-break: break-word;}\n//\n@mixin word-break($value: normal){\n  word-break: $value;\n  @if $value == break-all {\n    //Webkit handles break-all differently... as break-word\n    @include with-prefix(-webkit) {\n      word-break: break-word;\n    }\n  }\n}\n\n// Mixin for the hyphens property\n//\n// W3C specification: http://www.w3.org/TR/css3-text/#hyphens\n// * legal values for $type : auto, manual, none\n//\n// Example:\n//  p {\n//    @include hyphens(auto);}\n// Which generates:\n//  p {\n//    -moz-hyphens: auto;\n//    -webkit-hyphens: auto;\n//    hyphens: auto;}\n//\n@mixin hyphens($value: auto){\n  @include prefixed-properties(css-hyphens, $hyphens-support-threshold, (\n    hyphens: $value\n  ));\n}\n\n// Mixin for x-browser hyphenation based on @auchenberg's post:\n// Removes the need for the <wbr/> HTML tag\n// http://blog.kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/\n//\n//  Example:\n//  div {@include hyphenation;}\n//\n//  Which generates:\n//    div {\n//      -ms-word-break: break-all;\n//      word-break: break-all;\n//      word-break: break-word;\n//      -moz-hyphens: auto;\n//      -webkit-hyphens: auto;\n//      hyphens: auto;}\n//\n@mixin hyphenation {\n  @include word-break(break-all);\n  @include hyphens;\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_images.scss",
    "content": "@import \"compass/support\";\n@import \"compass/utilities/general/hacks\";\n\n$gradient-support-threshold: $graceful-usage-threshold !default;\n$svg-gradient-shim-threshold: $graceful-usage-threshold !default;\n$border-image-support-threshold: $graceful-usage-threshold !default;\n$owg-threshold: $graceful-usage-threshold !default;\n\n// Compass assumes you will use the official gradient syntax,\n// unless otherwise instructed.\n$use-legacy-gradient-syntax: false !default;\n\n// Create a linear gradient using standard official or legacy syntax.\n// This function must be included in one of the following\n// image module mixins to work properly.\n@function linear-gradient($angle, $details...) {\n  $legacy-syntax: $use-legacy-gradient-syntax;\n\n  @if type-of($angle) != 'number' {\n    $angle: compact($angle);\n    $legacy-syntax: if(index($angle, 'to'), false, true);\n  }\n\n  @if $legacy-syntax {\n    @return _linear-gradient_legacy($angle, $details...);\n  } @else {\n    @return _linear-gradient($angle, $details...);\n  }\n}\n\n// These browsers support svg but not gradients\n// so we can shim the gradient with an inline svg file.\n$browsers-supporting-svg-but-not-gradients: (ie: \"9\", opera: \"9.5-9.6\");\n\n// These browsers require the old webkit gradient syntax\n$browsers-supporting-old-webkit-gradients: (android: (\"2.1\", \"3\"));\n\n@mixin each-gradient-prefix($values) {\n  @if prefixed(-svg, $values) {\n    @include for-legacy-browsers($browsers-supporting-svg-but-not-gradients,\n                                 $svg-gradient-shim-threshold)\n    {\n      @include with-prefix(-svg) {\n        @content;\n      }\n    }\n  }\n  @if prefixed(-owg, $values) {\n    @include for-legacy-browsers($browsers-supporting-old-webkit-gradients,\n                                 $owg-threshold)\n    {\n      @include with-prefix(-owg) {\n        @content;\n      }\n    }\n  }\n  @include with-each-prefix(css-gradients, $gradient-support-threshold) {\n    @if $current-prefix {\n      @if prefixed($current-prefix, $values) {\n        @content;\n      } @else if $debug-browser-support {\n        /* There is not a value that needs to be prefixed with #{$current-prefix} in: #{$values} */\n      }\n    } @else {\n      @content;\n    }\n  }\n}\n\n@mixin image-property($property, $values...) {\n  @include each-gradient-prefix($values) {\n    @if $current-prefix {\n      #{$property}: prefix($current-prefix, $values);\n    } @else {\n      #{$property}: $values;\n    }\n    @content;\n  }\n}\n\n// Background property support for vendor prefixing within values.\n@mixin background($backgrounds...) {\n  @include image-property(background, $backgrounds...);\n}\n\n// Set any number of background layers, along with a fallback.\n// The final argument will be output separately, first, as a css2 fallback.\n@mixin background-with-css2-fallback($backgrounds...) {\n  @if length($backgrounds) > 1 or prefixed(-css2, $backgrounds) {\n    background: -css2(nth($backgrounds, -1));\n  }\n  @include background($backgrounds...);\n}\n\n\n// Background image property support for vendor prefixing within values.\n@mixin background-image($images...) {\n  @include image-property(background-image, $images...) {\n    @if $current-prefix == -svg {\n      background-size: 100%;\n    }\n  }\n}\n\n// Emit a IE-Specific filters that renders a simple linear gradient.\n// For use in IE 6 - 8. Best practice would have you apply this via a\n// conditional IE stylesheet, but if you must, you should place this before\n// any background-image properties that you have specified.\n//\n// For the `$orientation` parameter, you can pass `vertical` or `horizontal`.\n@mixin filter-gradient(\n  $start-color,\n  $end-color,\n  $orientation: vertical\n) {\n  @include for-legacy-browsers((ie: \"8\"), $gradient-support-threshold) {\n    @include has-layout;\n    $gradient-type: if($orientation == vertical, 0, 1);\n    filter: progid:DXImageTransform.Microsoft.gradient(gradientType=#{$gradient-type}, startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}');\n  }\n}\n\n\n// Border image property support for vendor prefixing properties and values.\n@mixin border-image($value) {\n  @include with-each-prefix(border-image, $border-image-support-threshold) {\n    $border-prefix: $current-prefix;\n    @include each-gradient-prefix($value) {\n      @if $current-prefix and prefixed($current-prefix, $value) {\n        $legacy-value: reject($value, fill);\n        @include prefix-prop(border-image, prefix($current-prefix, $legacy-value), $prefix: $border-prefix);\n      } @else {\n        @include prefix-prop(border-image, $value, $prefix: $border-prefix);\n      }\n    }\n  }\n}\n\n// List style image property support for vendor prefixing within values.\n@mixin list-style-image($image) {\n  @include image-property(list-style-image, $image);\n}\n\n// List style property support for vendor prefixing within values.\n@mixin list-style($value) {\n  @include image-property(list-style, $value);\n}\n\n// content property support for vendor prefixing within values.\n@mixin content($value) {\n  @include image-property(content, $value);\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_inline-block.scss",
    "content": "@import \"compass/support\";\n\n// The legacy support for inline-block.\n// Defaults to the $graceful-usage-threshold.\n$inline-block-support-threshold: $graceful-usage-threshold !default;\n\n// Set `$inline-block-alignment` to `none` or `false` to disable the output\n// of a vertical-align property in the inline-block mixin.\n// Or set it to a legal value for `vertical-align` to change the default.\n$inline-block-alignment: middle !default;\n\n// Provides a cross-browser method to implement `display: inline-block;`\n@mixin inline-block($alignment: $inline-block-alignment, $ie-alignment: auto) {\n  // legacy support for VERY old firefox\n  @if support-legacy-browser(\"firefox\", \"2\", $threshold: $inline-block-support-threshold) {\n    display: -moz-inline-stack;\n  }\n  // standard\n  display: inline-block;\n  @if $alignment and $alignment != none {\n    vertical-align: $alignment;\n  }\n  // legacy IE support\n  @if support-legacy-browser(\"ie\", \"7\", $threshold: $inline-block-support-threshold) {\n    @if $ie-alignment and $ie-alignment != none {\n      *vertical-align: $ie-alignment;\n    }\n    *zoom: 1;\n    *display: inline;\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_opacity.scss",
    "content": "@import \"compass/support\";\n\n// The support usage threshold for opacity. Defaults to the global\n// threshold for graceful degradation.\n$opacity-usage-threshold: $graceful-usage-threshold !default;\n\n// Provides cross-browser CSS opacity. Takes a number between 0 and 1 as the argument, e.g. 0.5 for 50% opacity.\n//\n//     @param $opacity\n//         A number between 0 and 1, where 0 is transparent and 1 is opaque.\n\n@mixin opacity($opacity) {\n  @include for-legacy-browser(\"ie\", \"8\", $threshold: $opacity-usage-threshold) {\n    @if $opacity == 1 {\n      filter: unquote(\"progid:DXImageTransform.Microsoft.Alpha(enabled=false)\");\n    } @else {\n      filter: unquote(\"progid:DXImageTransform.Microsoft.Alpha(Opacity=#{round($opacity * 100)})\");\n    }\n  }\n  opacity: $opacity;\n}\n\n// Make an element completely transparent.\n@mixin transparent { @include opacity(0); }\n\n// Make an element completely opaque.\n@mixin opaque { @include opacity(1); }\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_pie.scss",
    "content": "@warn \"Support for CSS3Pie has been removed.\";\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_regions.scss",
    "content": "// Regions\n\n@import \"compass/support\";\n\n// The prefixed support threshold for css regions.\n// Defaults to the $graceful-usage-threshold.\n$regions-support-threshold: $graceful-usage-threshold !default;\n\n\n// Webkit, IE10 and future support for [CSS Regions](http://dev.w3.org/csswg/css3-regions/)\n//\n// $target is a value you use to link two regions of your css.\n// Give the source of your content the flow-into property,\n// and give your target container the flow-from property.\n//\n// For a visual explanation, see the diagrams at Chris Coyier's\n// [CSS-Tricks](http://css-tricks.com/content-folding/)\n\n@mixin flow-into($target) {\n  $target: unquote($target);\n  @include prefixed-properties(css-regions, $regions-support-threshold, (flow-into: $target));\n}\n\n@mixin flow-from($target) {\n  $target: unquote($target);\n  @include prefixed-properties(css-regions, $regions-support-threshold, (flow-from: $target));\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_selection.scss",
    "content": "@import \"compass/support\";\n@import \"compass/utilities/color\";\n\n// The prefixed support threshold for ::selection.\n// Defaults to the $graceful-usage-threshold.\n$selection-support-threshold: $graceful-usage-threshold !default;\n\n// Style selected text.\n//\n// At this time, only two CSS properties are supported in most browsers\n// during selection: color and background-color. Firefox supports the\n// text-shadow property.\n//\n// At the stylesheet root, include the mixin within the * selector.\n//\n//     * {\n//       @include selection(#fe57a1, #fff)\n//     }\n//\n// If a specific element or selector's selection is being styled\n// you can use that selector instead. For example:\n//\n//     .hot-pink {\n//       @include selection(#fe57a1, #fff)\n//     }\n//\n// These properties can be passed as arguments or you can set them via mixin\n// content.\n//\n// For future-forward compatibility with other properties and aesthetic freedom,\n// a mixin content block can be passed to this mixin in addition to or in place of\n// passing arguments.\n//\n//     .hot-pink {\n//       @include selection {\n//         background: #fe57a1;\n//         color: #fff;\n//       }\n//     }\n//\n// When `$background-color` is specified, but `$color` is not, this mixin\n// styles the foreground color like the [contrasted\n// mixin](/reference/compass/utilities/color/contrast/#mixin-contrasted).  To\n// specify only the background-color, you should pass an explicit `null` value\n// for `$color` or use mixin content.\n@mixin selection($background-color: null, $color: contrast-color($background-color)) {\n  @include with-each-prefix(css-selection, $selection-support-threshold) {\n    $selector: '';\n    @if $current-prefix != null {\n      $selector: $current-prefix + '-';\n    }\n    $selector: \"&::#{$selector}selection\";\n    #{$selector} {\n      color: $color;\n      background-color: $background-color;\n      @content;\n    }\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_shared.scss",
    "content": "@warn \"The compass/css3/shared module has been deprecated.\nYou can silence this warning by importing compass/css3/deprecated-support instead.\nPlease be aware that module will be removed in the next release.\";\n\n@import \"deprecated-support\";\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_text-shadow.scss",
    "content": "// Text Shadow\n\n@import \"compass/support\";\n\n\n// These defaults make the arguments optional for this mixin\n// If you like, set different defaults in your project\n\n$default-text-shadow-color      : #aaaaaa !default;\n$default-text-shadow-h-offset   : 0px     !default;\n$default-text-shadow-v-offset   : 0px     !default;\n$default-text-shadow-blur       : 1px     !default;\n$default-text-shadow-spread     : false   !default;\n\n\n// Provides cross-browser text shadows when one or more shadows are needed.\n// Each shadow argument should adhere to the standard css3 syntax for the\n// text-shadow property.\n//\n// Note: if any shadow has a spread parameter, this will cause the mixin\n// to emit the shadow declaration twice, first without the spread,\n// then with the spread included. This allows you to progressively\n// enhance the browsers that do support the spread parameter.\n@mixin text-shadow(\n  $shadow...\n) {\n  $shadow: if(length($shadow) > 0, $shadow, default);\n  $default: -compass-space-list(compact($default-text-shadow-h-offset $default-text-shadow-v-offset $default-text-shadow-blur $default-text-shadow-spread $default-text-shadow-color));\n  $shadows-without-spread: join((),(),comma);\n  $shadows: join((),(),comma);\n  $has-spread: false;\n\n  @each $layer in $shadow {\n    $layer: if($layer == 'default', $default, $layer);\n    @if length($layer) > 4 {\n      $has-spread: true;\n      $shadows-without-spread: append($shadows-without-spread, nth($layer,1) nth($layer,2) nth($layer,3) nth($layer,5));\n      $shadows: append($shadows, $layer);\n    } @else {\n      $shadows-without-spread: append($shadows-without-spread, $layer);\n      $shadows: append($shadows, $layer);\n    }\n  }\n  @if $has-spread {\n    text-shadow: $shadows-without-spread;\n  }\n  text-shadow: $shadows;\n}\n\n// Provides a single cross-browser CSS text shadow.\n//\n// Provides sensible defaults for the color, horizontal offset, vertical offset, blur, and spread\n// according to the configuration defaults above.\n@mixin single-text-shadow(\n  $hoff: false,\n  $voff: false,\n  $blur: false,\n  $spread: false,\n  $color: false\n) {\n  // A lot of people think the color comes first. It doesn't.\n  @if type-of($hoff) == color {\n    $temp-color: $hoff;\n    $hoff: $voff;\n    $voff: $blur;\n    $blur: $spread;\n    $spread: $color;\n    $color: $temp-color;\n  }\n  // Can't rely on default assignment with multiple supported argument orders.\n  $hoff:   if($hoff,   $hoff,   $default-text-shadow-h-offset);\n  $voff:   if($voff,   $voff,   $default-text-shadow-v-offset);\n  $blur:   if($blur,   $blur,   $default-text-shadow-blur    );\n  $spread: if($spread, $spread, $default-text-shadow-spread  );\n  $color:  if($color,  $color,  $default-text-shadow-color   );\n  // We don't need experimental support for this property.\n  @if $color == none or $hoff == none {\n    @include text-shadow(none);\n  } @else {\n    @include text-shadow(compact($hoff $voff $blur $spread $color));\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_transform.scss",
    "content": "@import \"compass/support\";\n\n// The the user threshold for transform support. Defaults to `$graceful-usage-threshold`\n$transform-support-threshold: $graceful-usage-threshold !default;\n\n// @doc off\n// Note ----------------------------------------------------------------------\n// Safari, Chrome, and Firefox all support 3D transforms. However,\n// only in the most recent builds. You should also provide fallback 2d support for\n// Opera and IE. IE10 is slated to have 3d enabled, but is currently unreleased.\n// To make that easy, all 2D transforms include an browser-targeting toggle ($only3d)\n// to switch between the two support lists. The toggle defaults to 'false' (2D),\n// and also accepts 'true' (3D). Currently the lists are as follows:\n// 2D: Mozilla, Webkit, Opera, Official\n// 3D: Webkit, Firefox.\n\n// Available Transforms ------------------------------------------------------\n// - Scale (2d and 3d)\n// - Rotate (2d and 3d)\n// - Translate (2d and 3d)\n// - Skew (2d only)\n\n// Transform Parameters ------------------------------------------------------\n// - Transform Origin (2d and 3d)\n// - Perspective (3d)\n// - Perspective Origin (3d)\n// - Transform Style (3d)\n// - Backface Visibility (3d)\n\n// Mixins --------------------------------------------------------------------\n// transform-origin\n//  - shortcuts:  transform-origin2d, transform-origin3d\n//  - helpers:    apply-origin\n// transform\n//  - shortcuts:  transform2d, transform3d\n//  - helpers:    simple-transform, create-transform\n// perspective\n//  - helpers:    perspective-origin\n// transform-style\n// backface-visibility\n// scale\n//  - shortcuts:  scaleX, scaleY, scaleZ, scale3d\n// rotate\n//  - shortcuts:  rotateX, rotateY, rotate3d\n// translate\n//  - shortcuts:  translateX, translateY, translateZ, translate3d\n// skew\n//  - shortcuts:  skewX, skewY\n\n// Defaults ------------------------------------------------------------------\n// @doc on\n\n// The default x-origin for transforms\n$default-origin-x    : 50%                   !default;\n// The default y-origin for transforms\n$default-origin-y    : 50%                   !default;\n// The default z-origin for transforms\n$default-origin-z    : 50%                   !default;\n\n\n// The default x-multiplier for scaling\n$default-scale-x     : 1.25                  !default;\n// The default y-multiplier for scaling\n$default-scale-y     : $default-scale-x      !default;\n// The default z-multiplier for scaling\n$default-scale-z     : $default-scale-x      !default;\n\n\n// The default angle for rotations\n$default-rotate      : 45deg                 !default;\n\n\n// The default x-vector for the axis of 3d rotations\n$default-vector-x    : 1                     !default;\n// The default y-vector for the axis of 3d rotations\n$default-vector-y    : 1                     !default;\n// The default z-vector for the axis of 3d rotations\n$default-vector-z    : 1                     !default;\n\n\n// The default x-length for translations\n$default-translate-x : 1em                   !default;\n// The default y-length for translations\n$default-translate-y : $default-translate-x  !default;\n// The default z-length for translations\n$default-translate-z : $default-translate-x  !default;\n\n\n// The default x-angle for skewing\n$default-skew-x      : 5deg                  !default;\n// The default y-angle for skewing\n$default-skew-y      : 5deg                  !default;\n\n\n// **Transform-origin**\n// Transform-origin sent as a complete string\n//\n//     @include apply-origin( origin [, 3D-only ] )\n//\n// where 'origin' is a space separated list containing 1-3 (x/y/z) coordinates\n// in percentages, absolute (px, cm, in, em etc..) or relative\n// (left, top, right, bottom, center) units\n//\n// @param only3d Set this to true to only apply this\n// mixin where browsers have 3D support.\n@mixin apply-origin($origin, $only3d) {\n  $capability: if($only3d or length($origin) > 2, transforms3d, transforms2d);\n  @include prefixed-properties($capability, $transform-support-threshold, (\n    transform-origin: $origin\n  ));\n}\n\n// Transform-origin sent as individual arguments:\n//\n//     @include transform-origin( [ origin-x, origin-y, origin-z, 3D-only ] )\n//\n// where the 3 'origin-' arguments represent x/y/z coordinates.\n//\n// **NOTE:** setting z coordinates triggers 3D support list, leave false for 2D support\n@mixin transform-origin(\n  $origin-x: $default-origin-x,\n  $origin-y: $default-origin-y,\n  $origin-z: false,\n  $only3d:   if($origin-z, true, false)\n) {\n  $origin: unquote('');\n  @if $origin-x or $origin-y or $origin-z {\n    @if $origin-x { $origin: $origin-x; } @else { $origin: 50%; }\n    @if $origin-y { $origin: $origin $origin-y; } @else { @if $origin-z { $origin: $origin 50%; }}\n    @if $origin-z { $origin: $origin $origin-z; }\n    @include apply-origin($origin, $only3d);\n  }\n}\n\n\n// Transform sent as a complete string:\n//\n//     @include transform( transforms [, 3D-only ] )\n//\n// where 'transforms' is a space separated list of all the transforms to be applied.\n@mixin transform(\n  $transform,\n  $only3d: false\n) {\n  $capability: if($only3d, transforms3d, transforms2d);\n  @include prefixed-properties($capability, $transform-support-threshold, (\n    transform: $transform\n  ));\n}\n\n// Shortcut to target all browsers with 2D transform support\n@mixin transform2d($trans) {\n  @include transform($trans, false);\n}\n\n// Shortcut to target only browsers with 3D transform support\n@mixin transform3d($trans) {\n  @include transform($trans, true);\n}\n\n// @doc off\n// 3D Parameters -------------------------------------------------------------\n// @doc on\n\n// Set the perspective of 3D transforms on the children of an element:\n//\n//      @include perspective( perspective )\n//\n// where 'perspective' is a unitless number representing the depth of the\n// z-axis. The higher the perspective, the more exaggerated the foreshortening.\n// values from 500 to 1000 are more-or-less \"normal\" - a good starting-point.\n@mixin perspective($p) {\n  @include prefixed-properties(transforms3d, $transform-support-threshold, (\n    perspective: $p\n  ));\n}\n\n// Set the origin position for the perspective\n//\n//      @include perspective-origin(origin-x [origin-y])\n//\n// where the two arguments represent x/y coordinates\n@mixin perspective-origin($origin: 50%) {\n  @include prefixed-properties(transforms3d, $transform-support-threshold, (\n    perspective-origin: $origin\n  ));\n}\n\n// Determine whether a 3D objects children also live in the given 3D space\n//\n//      @include transform-style( [ style ] )\n//\n// where `style` can be either `flat` or `preserve-3d`.\n// Browsers default to `flat`, mixin defaults to `preserve-3d`.\n@mixin transform-style($style: preserve-3d) {\n  @include prefixed-properties(transforms3d, $transform-support-threshold, (\n    transform-style: $style\n  ));\n}\n\n// Determine the visibility of an element when it's back is turned\n//\n//     @include backface-visibility( [ visibility ] )\n//\n// where `visibility` can be either `visible` or `hidden`.\n// Browsers default to visible, mixin defaults to hidden\n@mixin backface-visibility($visibility: hidden) {\n  @include prefixed-properties(transforms3d, $transform-support-threshold, (\n    backface-visibility: $visibility\n  ));\n}\n\n// @doc off\n// Transform Partials --------------------------------------------------------\n// These work well on their own, but they don't add to each other, they override.\n// Use along with transform parameter mixins to adjust origin, perspective and style\n// ---------------------------------------------------------------------------\n\n\n// Scale ---------------------------------------------------------------------\n// @doc on\n\n// Scale an object along the x and y axis:\n//\n//      @include scale( [ scale-x, scale-y, perspective, 3D-only ] )\n//\n// where the 'scale-' arguments are unitless multipliers of the x and y dimensions\n// and perspective, which works the same as the stand-alone perspective property/mixin\n// but applies to the individual element (multiplied with any parent perspective)\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scale(\n  $scale-x:     $default-scale-x,\n  $scale-y:     $scale-x,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: scale($scale-x, $scale-y);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Scale an object along the x axis\n// @include scaleX( [ scale-x, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleX(\n  $scale:       $default-scale-x,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: scaleX($scale);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Scale an object along the y axis\n// @include scaleY( [ scale-y, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleY(\n  $scale:       $default-scale-y,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: scaleY($scale);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Scale an object along the z axis\n// @include scaleZ( [ scale-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleZ(\n  $scale: $default-scale-z,\n  $perspective: false\n) {\n  $trans: scaleZ($scale);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// Scale and object along all three axis\n// @include scale3d( [ scale-x, scale-y, scale-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scale3d(\n  $scale-x:     $default-scale-x,\n  $scale-y:     $default-scale-y,\n  $scale-z:     $default-scale-z,\n  $perspective: false\n) {\n  $trans: scale3d($scale-x, $scale-y, $scale-z);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// @doc off\n// Rotate --------------------------------------------------------------------\n// @doc on\n\n// Rotate an object around the z axis  (2D)\n// @include rotate( [ rotation, perspective, 3D-only ] )\n// where 'rotation' is an angle set in degrees (deg) or radian (rad) units\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotate(\n  $rotate:      $default-rotate,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: rotate($rotate);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// A longcut for 'rotate' in case you forget that 'z' is implied\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateZ(\n  $rotate:      $default-rotate,\n  $perspective: false,\n  $only3d:      false\n) {\n  @include rotate($rotate, $perspective, $only3d);\n}\n\n// Rotate an object around the x axis (3D)\n// @include rotateX( [ rotation, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateX(\n  $rotate: $default-rotate,\n  $perspective: false\n) {\n  $trans: rotateX($rotate);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// Rotate an object around the y axis (3D)\n// @include rotate( [ rotation, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateY(\n  $rotate: $default-rotate,\n  $perspective: false\n) {\n  $trans: rotateY($rotate);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// Rotate an object around an arbitrary axis (3D)\n// @include rotate( [ vector-x, vector-y, vector-z, rotation, perspective ] )\n// where the 'vector-' arguments accept unitless numbers.\n// These numbers are not important on their own, but in relation to one another\n// creating an axis from your transform-origin, along the axis of Xx = Yy = Zz.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotate3d(\n  $vector-x: $default-vector-x,\n  $vector-y: $default-vector-y,\n  $vector-z: $default-vector-z,\n  $rotate: $default-rotate,\n  $perspective: false\n) {\n  $trans: rotate3d($vector-x, $vector-y, $vector-z, $rotate);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// @doc off\n// Translate -----------------------------------------------------------------\n// @doc on\n\n// Move an object along the x or y axis (2D)\n// @include translate( [ translate-x, translate-y, perspective, 3D-only ] )\n// where the 'translate-' arguments accept any distance in percentages or absolute (px, cm, in, em etc..) units.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translate(\n  $translate-x: $default-translate-x,\n  $translate-y: $default-translate-y,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: translate($translate-x, $translate-y);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Move an object along the x axis (2D)\n// @include translate( [ translate-x, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateX(\n  $trans-x:     $default-translate-x,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: translateX($trans-x);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Move an object along the y axis (2D)\n// @include translate( [ translate-y, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateY(\n  $trans-y:     $default-translate-y,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: translateY($trans-y);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Move an object along the z axis (3D)\n// @include translate( [ translate-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateZ(\n  $trans-z:     $default-translate-z,\n  $perspective: false\n) {\n  $trans: translateZ($trans-z);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// Move an object along the x, y and z axis (3D)\n// @include translate( [ translate-x, translate-y, translate-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translate3d(\n  $translate-x: $default-translate-x,\n  $translate-y: $default-translate-y,\n  $translate-z: $default-translate-z,\n  $perspective: false\n) {\n  $trans: translate3d($translate-x, $translate-y, $translate-z);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// @doc off\n// Skew ----------------------------------------------------------------------\n// @doc on\n\n// Skew an element:\n//\n//     @include skew( [ skew-x, skew-y, 3D-only ] )\n//\n// where the 'skew-' arguments accept css angles in degrees (deg) or radian (rad) units.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skew(\n  $skew-x: $default-skew-x,\n  $skew-y: $default-skew-y,\n  $only3d: false\n) {\n  $trans: skew($skew-x, $skew-y);\n  @include transform($trans, $only3d);\n}\n\n// Skew an element along the x axiz\n//\n//     @include skew( [ skew-x, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skewX(\n  $skew-x: $default-skew-x,\n  $only3d: false\n) {\n  $trans: skewX($skew-x);\n  @include transform($trans, $only3d);\n}\n\n// Skew an element along the y axis\n//\n//     @include skew( [ skew-y, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skewY(\n  $skew-y: $default-skew-y,\n  $only3d: false\n) {\n  $trans: skewY($skew-y);\n  @include transform($trans, $only3d);\n}\n\n\n// Full transform mixins\n// For settings any combination of transforms as arguments\n// These are complex and not highly recommended for daily use. They are mainly\n// here for backward-compatibility purposes.\n//\n// * they include origin adjustments\n// * scale takes a multiplier (unitless), rotate and skew take degrees (deg)\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin create-transform(\n  $perspective: false,\n  $scale-x:     false,\n  $scale-y:     false,\n  $scale-z:     false,\n  $rotate-x:    false,\n  $rotate-y:    false,\n  $rotate-z:    false,\n  $rotate3d:    false,\n  $trans-x:     false,\n  $trans-y:     false,\n  $trans-z:     false,\n  $skew-x:      false,\n  $skew-y:      false,\n  $origin-x:    false,\n  $origin-y:    false,\n  $origin-z:    false,\n  $only3d:      false\n) {\n  $trans: unquote(\"\");\n\n  // perspective\n  @if $perspective { $trans: perspective($perspective) ; }\n\n  // scale\n  @if $scale-x and $scale-y {\n    @if $scale-z { $trans: $trans scale3d($scale-x, $scale-y, $scale-z); }\n    @else { $trans: $trans scale($scale-x, $scale-y); }\n  } @else {\n    @if $scale-x { $trans: $trans scaleX($scale-x); }\n    @if $scale-y { $trans: $trans scaleY($scale-y); }\n    @if $scale-z { $trans: $trans scaleZ($scale-z); }\n  }\n\n  // rotate\n  @if $rotate-x { $trans: $trans rotateX($rotate-x); }\n  @if $rotate-y { $trans: $trans rotateY($rotate-y); }\n  @if $rotate-z { $trans: $trans rotateZ($rotate-z); }\n  @if $rotate3d { $trans: $trans rotate3d($rotate3d); }\n\n  // translate\n  @if $trans-x and $trans-y {\n    @if $trans-z { $trans: $trans translate3d($trans-x, $trans-y, $trans-z); }\n    @else { $trans: $trans translate($trans-x, $trans-y); }\n  } @else {\n    @if $trans-x { $trans: $trans translateX($trans-x); }\n    @if $trans-y { $trans: $trans translateY($trans-y); }\n    @if $trans-z { $trans: $trans translateZ($trans-z); }\n  }\n\n  // skew\n  @if $skew-x and $skew-y { $trans: $trans skew($skew-x, $skew-y); }\n  @else {\n    @if $skew-x { $trans: $trans skewX($skew-x); }\n    @if $skew-y { $trans: $trans skewY($skew-y); }\n  }\n\n  // apply it!\n  @include transform($trans, $only3d);\n  @include transform-origin($origin-x, $origin-y, $origin-z, $only3d);\n}\n\n\n// A simplified set of options\n// backwards-compatible with the previous version of the 'transform' mixin\n@mixin simple-transform(\n  $scale:    false,\n  $rotate:   false,\n  $trans-x:  false,\n  $trans-y:  false,\n  $skew-x:   false,\n  $skew-y:   false,\n  $origin-x: false,\n  $origin-y: false\n) {\n  @include create-transform(\n    false,\n    $scale, $scale, false,\n    false, false, $rotate, false,\n    $trans-x, $trans-y, false,\n    $skew-x, $skew-y,\n    $origin-x, $origin-y, false,\n    false\n  );\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_transition.scss",
    "content": "@import \"compass/support\";\n\n// The the user threshold for transition support. Defaults to `$graceful-usage-threshold`\n$transition-support-threshold: $graceful-usage-threshold !default;\n\n\n// CSS Transitions\n// Currently only works in Webkit.\n//\n// * expected in CSS3, FireFox 3.6/7 and Opera Presto 2.3\n// * We'll be prepared.\n//\n// Including this submodule sets following defaults for the mixins:\n//\n//     $default-transition-property : all\n//     $default-transition-duration : 1s\n//     $default-transition-function : false\n//     $default-transition-delay    : false\n//\n// Override them if you like. Timing-function and delay are set to false for browser defaults (ease, 0s).\n\n$default-transition-property: all !default;\n\n$default-transition-duration: 1s !default;\n\n$default-transition-function: null !default;\n\n$default-transition-delay: null !default;\n\n$transitionable-prefixed-values: transform, transform-origin !default;\n\n\n\n// Checks if the value given is a unit of time.\n@function is-time($value) {\n  @return if(type-of($value) == number, not not index(s ms, unit($value)), false);\n}\n\n// Returns `$property` with the given prefix if it is found in `$transitionable-prefixed-values`.\n@function prefixed-for-transition($prefix, $property) {\n  @if not $prefix {\n    @return $property;\n  }\n  @if type-of($property) == list or type-of($property) == arglist {\n    $new-list: comma-list();\n    @each $v in $property {\n      $new-list: append($new-list, prefixed-for-transition($prefix, $v));\n    }\n    @return $new-list;\n  } @else {\n    @if index($transitionable-prefixed-values, $property) {\n      @return #{$prefix}-#{$property};\n    } @else {\n      @return $property;\n    }\n  }\n}\n\n// Returns $transition-map which includes key and values that map to a transition declaration\n@function transition-map($transition) {\n  $transition-map: ();\n\n  @each $item in $transition {\n    @if is-time($item) {\n      @if map-has-key($transition-map, duration) {\n        $transition-map: map-merge($transition-map, (delay: $item));\n      } @else {\n        $transition-map: map-merge($transition-map, (duration: $item));\n      }\n    } @else if map-has-key($transition-map, property) {\n      $transition-map: map-merge($transition-map, (timing-function: $item));\n    } @else {\n      $transition-map: map-merge($transition-map, (property: $item));\n    }\n  }\n\n  @return $transition-map;\n}\n\n// One or more properties to transition\n//\n// * for multiple, use a comma-delimited list\n// * also accepts \"all\" or \"none\"\n\n@mixin transition-property($properties...) {\n  $properties: set-arglist-default($properties, $default-transition-property);\n  @include with-each-prefix(css-transitions, $transition-support-threshold) {\n    $props: if($current-prefix, prefixed-for-transition($current-prefix, $properties), $properties);\n    @include prefix-prop(transition-property, $props);\n  }\n}\n\n// One or more durations in seconds\n//\n// * for multiple, use a comma-delimited list\n// * these durations will affect the properties in the same list position\n\n@mixin transition-duration($durations...) {\n  $durations: set-arglist-default($durations, $default-transition-duration);\n  @include prefixed-properties(css-transitions, $transition-support-threshold, (\n    transition-duration: $durations\n  ));\n}\n\n// One or more timing functions\n//\n// * [ ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(x1, y1, x2, y2)]\n// * For multiple, use a comma-delimited list\n// * These functions will effect the properties in the same list position\n\n@mixin transition-timing-function($functions...) {\n  $functions: set-arglist-default($functions, $default-transition-function);\n  @include prefixed-properties(css-transitions, $transition-support-threshold, (\n    transition-timing-function: $functions\n  ));\n}\n\n// One or more transition-delays in seconds\n//\n// * for multiple, use a comma-delimited list\n// * these delays will effect the properties in the same list position\n\n@mixin transition-delay($delays...) {\n  $delays: set-arglist-default($delays, $default-transition-delay);\n  @include prefixed-properties(css-transitions, $transition-support-threshold, (\n    transition-delay: $delays\n  ));\n}\n\n// Transition all-in-one shorthand\n\n@mixin single-transition(\n  $property: $default-transition-property,\n  $duration: $default-transition-duration,\n  $function: $default-transition-function,\n  $delay: $default-transition-delay\n) {\n  @include transition(compact($property $duration $function $delay));\n}\n\n@mixin transition($transitions...) {\n  $default: (compact($default-transition-property $default-transition-duration $default-transition-function $default-transition-delay),);\n  $transitions: if(length($transitions) == 1 and type-of(nth($transitions, 1)) == list and list-separator(nth($transitions, 1)) == comma, nth($transitions, 1), $transitions);\n  $transitions: set-arglist-default($transitions, $default);\n\n\n  @include with-each-prefix(css-transitions, $transition-support-threshold) {\n    $delays: comma-list();\n    $transitions-without-delays: comma-list();\n    $transitions-with-delays: comma-list();\n    $has-delays: false;\n\n\n    // This block can be made considerably simpler at the point in time that\n    // we no longer need to deal with the differences in how delays are treated.\n    @each $transition in $transitions {\n      // Declare initial values for transition\n      $transition: transition-map($transition);\n\n      $property: map-get($transition, property);\n      $duration: map-get($transition, duration);\n      $timing-function: map-get($transition, timing-function);\n      $delay: map-get($transition, delay);\n\n      // Parse transition string to assign values into correct variables\n      $has-delays: $has-delays or $delay;\n\n      @if $current-prefix == -webkit {\n        // Keep a list of delays in case one is specified\n        $delays: append($delays, if($delay, $delay, 0s));\n        $transitions-without-delays: append($transitions-without-delays,\n          prefixed-for-transition($current-prefix, $property) $duration $timing-function);\n      } @else {\n        $transitions-with-delays: append($transitions-with-delays,\n          prefixed-for-transition($current-prefix, $property) $duration $timing-function $delay);\n      }\n    }\n\n    @if $current-prefix == -webkit {\n      @include prefix-prop(transition, $transitions-without-delays);\n      @if $has-delays {\n        @include prefix-prop(transition-delay, $delays);\n      }\n    } @else if $current-prefix {\n      @include prefix-prop(transition, $transitions-with-delays);\n    } @else {\n      transition: $transitions-with-delays;\n    }\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/css3/_user-interface.scss",
    "content": "// User Interface\n// This file can be expanded to handle all the user interface properties as\n// they become available in browsers:\n// http://www.w3.org/TR/2000/WD-css3-userint-20000216\n\n@import \"compass/support\";\n\n// The prefixed support threshold for user-select.\n// Defaults to the $graceful-usage-threshold.\n$userselect-support-threshold: $graceful-usage-threshold !default;\n\n// This property controls the selection model and granularity of an element.\n//\n// @param $select\n//   [ none | text | toggle | element | elements | all | inherit ]\n@mixin user-select($select) {\n  $select: unquote($select);\n\n  @include with-each-prefix(user-select-none, $userselect-support-threshold) {\n    // old Firefox used a proprietary `-moz-none` value, starting with Firefox 21 `none` behaves like `-moz-none`\n    // @link https://developer.mozilla.org/en-US/docs/Web/CSS/user-select\n    @include prefix-prop(user-select, if($current-prefix == -moz and $select == 'none', -moz-none, $select));\n  }\n}\n\n// The prefixed support threshold for input-placeholder.\n// Defaults to the $graceful-usage-threshold.\n$input-placeholder-support-threshold: $graceful-usage-threshold !default;\n\n// Style the html5 input placeholder in browsers that support it.\n//\n// The styles for the input placeholder are passed as mixin content\n// and the selector comes from the mixin's context.\n//\n// For example:\n//\n//     #{elements-of-type(text-input)} {\n//       @include input-placeholder {\n//         color: #bfbfbf;\n//         font-style: italic;\n//       }\n//     }\n//\n// if you want to apply the placeholder styles to all elements supporting\n// the `input-placeholder` pseudo class (beware of performance impacts):\n//\n//     * {\n//       @include input-placeholder {\n//         color: #bfbfbf;\n//         font-style: italic;\n//       }\n//     }\n@mixin input-placeholder {\n  @include with-each-prefix(css-placeholder, $input-placeholder-support-threshold) {\n    @if $current-prefix == -webkit {\n      &::-webkit-input-placeholder { @content; }\n    }\n    @elseif $current-prefix == -moz {\n      // for Firefox 19 and below\n      @if support-legacy-browser(\"firefox\", \"4\", \"19\", $threshold: $input-placeholder-support-threshold) {\n        &:-moz-placeholder { @content; }\n      }\n      // for Firefox 20 and above\n      &::-moz-placeholder { @content; }\n    }\n    @elseif $current-prefix == -ms {\n      &:-ms-input-placeholder { @content; }\n    }\n  }\n  // This is not standardized yet so no official selector is generated.\n}\n"
  },
  {
    "path": "core/stylesheets/compass/layout/_grid-background.scss",
    "content": "@import \"compass/css3/images\";\n@import \"compass/css3/background-size\";\n\n// Set the color of your columns\n$grid-background-column-color     : rgba(100, 100, 225, 0.25)   !default;\n// Set the color of your gutters\n$grid-background-gutter-color     : rgba(0, 0, 0, 0)            !default;\n\n// Set the total number of columns in your grid\n$grid-background-total-columns    : 24                          !default;\n// Set the width of your columns\n$grid-background-column-width     : 30px                        !default;\n// Set the width of your gutters\n$grid-background-gutter-width     : 10px                        !default;\n// Set the offset, if your columns are padded in from the container edge\n$grid-background-offset           : 0px                         !default;\n\n// Set the color of your baseline\n$grid-background-baseline-color   : rgba(0, 0, 0, 0.5)          !default;\n// Set the height of your baseline grid\n$grid-background-baseline-height  : 1.5em                       !default;\n\n// toggle your columns grids on and off\n$show-column-grid-backgrounds     : true                        !default;\n// toggle your vertical grids on and off\n$show-baseline-grid-backgrounds   : true                        !default;\n// toggle all your grids on and off\n$show-grid-backgrounds            : true                        !default;\n\n// optionally force your grid-image to remain fluid\n// no matter what units you used to declared your grid.\n$grid-background-force-fluid      : false                       !default;\n\n\n// Create the gradient needed for baseline grids\n@function get-baseline-gradient(\n  $color : $grid-background-baseline-color\n) {\n  $gradient: linear-gradient(to top, $color 5%, rgba($color,0) 5%);\n  @return $gradient;\n}\n\n// Create the color-stops needed for horizontal grids\n@function build-grid-background(\n  $total          : $grid-background-total-columns,\n  $column         : $grid-background-column-width,\n  $gutter         : $grid-background-gutter-width,\n  $offset         : $grid-background-offset,\n  $column-color   : $grid-background-column-color,\n  $gutter-color   : $grid-background-gutter-color\n) {\n  $grid: compact();\n  $grid: append($grid, $gutter-color $offset, comma);\n  @for $i from 0 to $total {\n\n    // $a represents the start of this column, initially equal to the offset\n    $a: $offset;\n    @if $i > 0 { $a: $a + (($column + $gutter) * $i); }\n\n    // $g represents the start of this gutter, equal to $a plus one column-width\n    $g: $a + $column;\n\n    // $z represents the end of a gutter, equal to $g plus one gutter-width\n    $z: $g + $gutter;\n\n    @if (unit($a) == \"%\") and ($i == ($total - 1)) {\n      $z: 100%;\n    }\n\n    // and we add this column/gutter pair to our grid\n    $grid: join($grid, (lighten($column-color, 5%) $a, darken($column-color, 5%) $g, $gutter-color $g, $gutter-color $z));\n  }\n\n  @return $grid;\n}\n\n// Return the gradient needed for horizontal grids\n@function get-column-gradient(\n  $total          : $grid-background-total-columns,\n  $column         : $grid-background-column-width,\n  $gutter         : $grid-background-gutter-width,\n  $offset         : $grid-background-offset,\n  $column-color   : $grid-background-column-color,\n  $gutter-color   : $grid-background-gutter-color,\n  $force-fluid    : $grid-background-force-fluid\n) {\n  $grid: unquote(\"\");\n\n  // don't force fluid grids when they are already fluid.\n  @if unit($column) == \"%\" { $force-fluid: false; }\n\n  @if $force-fluid {\n    $grid: get-column-fluid-grid($total,$column,$gutter,$offset,$column-color,$gutter-color);\n  } @else {\n    $grid: build-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color);\n  }\n\n  // return the horizontal grid as a gradient\n  $gradient: linear-gradient(left, $grid);\n  @return $gradient;\n}\n\n// Convert a grid from fixed units into percentages.\n@function get-column-fluid-grid(\n  $total          : $grid-background-total-columns,\n  $column         : $grid-background-column-width,\n  $gutter         : $grid-background-gutter-width,\n  $offset         : $grid-background-offset,\n  $column-color   : $grid-background-column-color,\n  $gutter-color   : $grid-background-gutter-color\n) {\n  $context: ($column * $total) + ($gutter * ($total - 1) + ($offset * 2));\n  $offset: $offset / $context * 100%;\n  $column: $column / $context * 100%;\n  $gutter: $gutter / $context * 100%;\n\n  // return the horizontal grid as a set of color-stops\n  $grid: build-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color);\n  @return $grid;\n}\n\n\n// Add just the baseline grid to an element's background\n@mixin baseline-grid-background(\n  $baseline : $grid-background-baseline-height,\n  $color    : $grid-background-baseline-color\n) {\n  @if $show-grid-backgrounds and $show-baseline-grid-backgrounds {\n    @include background-image(get-baseline-gradient($color));\n    @include background-size(100% $baseline);\n    background-position: left top;\n  }\n}\n\n// Add just the horizontal grid to an element's background\n@mixin column-grid-background(\n  $total          : $grid-background-total-columns,\n  $column         : $grid-background-column-width,\n  $gutter         : $grid-background-gutter-width,\n  $offset         : $grid-background-offset,\n  $column-color   : $grid-background-column-color,\n  $gutter-color   : $grid-background-gutter-color,\n  $force-fluid    : $grid-background-force-fluid\n) {\n  @if $show-grid-backgrounds and $show-column-grid-backgrounds {\n    @include background-image(\n      get-column-gradient($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid)\n    );\n    background-position: left top;\n  }\n}\n\n// Add both horizontal and baseline grids to an element's background\n@mixin grid-background(\n  $total          : $grid-background-total-columns,\n  $column         : $grid-background-column-width,\n  $gutter         : $grid-background-gutter-width,\n  $baseline       : $grid-background-baseline-height,\n  $offset         : $grid-background-offset,\n  $column-color   : $grid-background-column-color,\n  $gutter-color   : $grid-background-gutter-color,\n  $baseline-color : $grid-background-baseline-color,\n  $force-fluid    : $grid-background-force-fluid\n) {\n  @if $show-grid-backgrounds {\n    @if $show-baseline-grid-backgrounds and $show-column-grid-backgrounds {\n      @include background-image(\n        get-baseline-gradient($baseline-color),\n        get-column-gradient($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid)\n      );\n      @include background-size(100% $baseline, auto);\n      background-position: left top;\n    } @else {\n      @include baseline-grid-background($baseline, $baseline-color);\n      @include column-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid);\n    }\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/layout/_sticky-footer.scss",
    "content": "// Based on a [blog post by Ryan Fait](http://ryanfait.com/resources/footer-stick-to-bottom-of-page/).\n//\n// Must be mixed into the top level of your stylesheet.\n//\n// Footer element must be outside of root wrapper element.\n//\n// Footer must be a fixed height.\n\n@mixin sticky-footer($footer-height, $root-selector: unquote(\"#root\"), $root-footer-selector: unquote(\"#root_footer\"), $footer-selector: unquote(\"#footer\")) {\n  html, body {\n    height: 100%; }\n  #{$root-selector} {\n    clear: both;\n    min-height: 100%;\n    height: auto !important;\n    height: 100%;\n    margin-bottom: -$footer-height;\n    #{$root-footer-selector} {\n      height: $footer-height; } }\n  #{$footer-selector} {\n    clear: both;\n    position: relative;\n    height: $footer-height; } }\n"
  },
  {
    "path": "core/stylesheets/compass/layout/_stretching.scss",
    "content": "\n// stretch element height to specified top and bottom position\n\n@mixin stretch-y($offset-top:0, $offset-bottom:0) {\n  @include stretch($offset-top, false, $offset-bottom, false);\n}\n\n\n// stretch element width to specified left and right position\n\n@mixin stretch-x($offset-left:0, $offset-right:0) {\n  @include stretch(false, $offset-right, false, $offset-left);\n}\n\n\n// shorthand to stretch element height and width\n\n@mixin stretch($offset-top:0, $offset-right:0, $offset-bottom:0, $offset-left:0) {\n  position: absolute;\n  @if $offset-top { top: $offset-top; }\n  @if $offset-bottom { bottom: $offset-bottom; }\n  @if $offset-left { left: $offset-left; }\n  @if $offset-right { right: $offset-right; }\n}"
  },
  {
    "path": "core/stylesheets/compass/reset/_utilities-legacy.scss",
    "content": "// Based on [Eric Meyer's reset](http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/)\n// Global reset rules.\n// For more specific resets, use the reset mixins provided below\n//\n// *Please Note*: tables still need `cellspacing=\"0\"` in the markup.\n@mixin global-reset {\n  html, body, div, span, applet, object, iframe,\n  h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n  a, abbr, acronym, address, big, cite, code,\n  del, dfn, em, font, img, ins, kbd, q, s, samp,\n  small, strike, strong, sub, sup, tt, var,\n  dl, dt, dd, ol, ul, li,\n  fieldset, form, label, legend,\n  table, caption, tbody, tfoot, thead, tr, th, td {\n    @include reset-box-model;\n    @include reset-font; }\n  body {\n    @include reset-body; }\n  ol, ul {\n    @include reset-list-style; }\n  table {\n    @include reset-table; }\n  caption, th, td {\n    @include reset-table-cell; }\n  q, blockquote {\n    @include reset-quotation; }\n  a img {\n    @include reset-image-anchor-border; } }\n\n// Reset all elements within some selector scope. To reset the selector itself,\n// mixin the appropriate reset mixin for that element type as well. This could be\n// useful if you want to style a part of your page in a dramatically different way.\n//\n// *Please Note*: tables still need `cellspacing=\"0\"` in the markup.\n@mixin nested-reset {\n  div, span, object, iframe, h1, h2, h3, h4, h5, h6, p,\n  pre, a, abbr, acronym, address, code, del, dfn, em, img,\n  dl, dt, dd, ol, ul, li, fieldset, form, label, legend, caption, tbody, tfoot, thead, tr {\n    @include reset-box-model;\n    @include reset-font; }\n  table {\n    @include reset-table; }\n  caption, th, td {\n    @include reset-table-cell; }\n  q, blockquote {\n    @include reset-quotation; }\n  a img {\n    @include reset-image-anchor-border; } }\n\n// Reset the box model measurements.\n@mixin reset-box-model {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  outline: 0; }\n\n// Reset the font and vertical alignment.\n@mixin reset-font {\n  font: {\n    weight: inherit;\n    style: inherit;\n    size: 100%;\n    family: inherit; };\n  vertical-align: baseline; }\n\n// Resets the outline when focus.\n// For accessibility you need to apply some styling in its place.\n@mixin reset-focus {\n  outline: 0; }\n\n// Reset a body element.\n@mixin reset-body {\n  line-height: 1;\n  color: black;\n  background: white; }\n\n// Reset the list style of an element.\n@mixin reset-list-style {\n  list-style: none; }\n\n// Reset a table\n@mixin reset-table {\n  border-collapse: separate;\n  border-spacing: 0;\n  vertical-align: middle; }\n\n// Reset a table cell (`th`, `td`)\n@mixin reset-table-cell {\n  text-align: left;\n  font-weight: normal;\n  vertical-align: middle; }\n\n// Reset a quotation (`q`, `blockquote`)\n@mixin reset-quotation {\n  quotes: \"\" \"\";\n  &:before, &:after {\n    content: \"\"; } }\n\n// Resets the border.\n@mixin reset-image-anchor-border {\n  border: none; }\n\n// Unrecognized elements are displayed inline.\n// This reset provides a basic reset for html5 elements\n// so they are rendered correctly in browsers that don't recognize them\n// and reset in browsers that have default styles for them.\n@mixin reset-html5 {\n  #{elements-of-type(html5-block)} {\n    @include reset-box-model;\n    display: block; } }\n\n// Resets the display of inline and block elements to their default display\n// according to their tag type. Elements that have a default display that varies across\n// versions of html or browser are not handled here, but this covers the 90% use case.\n// Usage Example:\n//\n//     // Turn off the display for both of these classes\n//     .unregistered-only, .registered-only\n//       display: none\n//     // Now turn only one of them back on depending on some other context.\n//     body.registered\n//       +reset-display(\".registered-only\")\n//     body.unregistered\n//       +reset-display(\".unregistered-only\")\n@mixin reset-display($selector: \"\", $important: false) {\n  #{append-selector(elements-of-type(\"inline\"), $selector)} {\n    @if $important {\n      display: inline !important; }\n    @else {\n      display: inline; } }\n  #{append-selector(elements-of-type(\"block\"), $selector)} {\n    @if $important {\n      display: block !important; }\n    @else {\n      display: block; } } }\n"
  },
  {
    "path": "core/stylesheets/compass/reset/_utilities.scss",
    "content": "// Based on [Eric Meyer's reset 2.0](http://meyerweb.com/eric/tools/css/reset/index.html)\n// Global reset rules.\n// For more specific resets, use the reset mixins provided below\n@mixin global-reset {\n  html, body, div, span, applet, object, iframe,\n  h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n  a, abbr, acronym, address, big, cite, code,\n  del, dfn, em, img, ins, kbd, q, s, samp,\n  small, strike, strong, sub, sup, tt, var,\n  b, u, i, center,\n  dl, dt, dd, ol, ul, li,\n  fieldset, form, label, legend,\n  table, caption, tbody, tfoot, thead, tr, th, td,\n  article, aside, canvas, details, embed, \n  figure, figcaption, footer, header, hgroup, \n  menu, nav, output, ruby, section, summary,\n  time, mark, audio, video {\n    @include reset-box-model;\n    @include reset-font; }\n  // Unlike Eric's original reset, we reset the html element to be compatible\n  // with the vertical rhythm mixins.\n  html {\n    @include reset-body; }\n  ol, ul {\n    @include reset-list-style; }\n  table {\n    @include reset-table; }\n  caption, th, td {\n    @include reset-table-cell; }\n  q, blockquote {\n    @include reset-quotation; }\n  a img {\n    @include reset-image-anchor-border; }\n  @include reset-html5; }\n\n// Reset all elements within some selector scope. To reset the selector itself,\n// mixin the appropriate reset mixin for that element type as well. This could be\n// useful if you want to style a part of your page in a dramatically different way.\n@mixin nested-reset {\n  div, span, applet, object, iframe,\n  h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n  a, abbr, acronym, address, big, cite, code,\n  del, dfn, em, img, ins, kbd, q, s, samp,\n  small, strike, strong, sub, sup, tt, var,\n  b, u, i, center,\n  dl, dt, dd, ol, ul, li,\n  fieldset, form, label, legend,\n  table, caption, tbody, tfoot, thead, tr, th, td,\n  article, aside, canvas, details, embed, \n  figure, figcaption, footer, header, hgroup, \n  menu, nav, output, ruby, section, summary,\n  time, mark, audio, video {\n    @include reset-box-model;\n    @include reset-font; }\n  table {\n    @include reset-table; }\n  caption, th, td {\n    @include reset-table-cell; }\n  q, blockquote {\n    @include reset-quotation; }\n  a img {\n    @include reset-image-anchor-border; } }\n\n// Reset the box model measurements.\n@mixin reset-box-model {\n  margin: 0;\n  padding: 0;\n  border: 0; }\n\n// Reset the font and vertical alignment.\n@mixin reset-font {\n  font: inherit;\n  font-size: 100%;\n  vertical-align: baseline; }\n\n// Resets the outline when focus.\n// For accessibility you need to apply some styling in its place.\n@mixin reset-focus {\n  outline: 0; }\n\n// Reset a body element.\n@mixin reset-body {\n  line-height: 1; }\n\n// Reset the list style of an element.\n@mixin reset-list-style {\n  list-style: none; }\n\n// Reset a table\n@mixin reset-table {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n// Reset a table cell (`th`, `td`)\n@mixin reset-table-cell {\n  text-align: left;\n  font-weight: normal;\n  vertical-align: middle; }\n\n// Reset a quotation (`q`, `blockquote`)\n@mixin reset-quotation {\n  quotes: none;\n  &:before, &:after {\n    content: \"\"; \n    content: none; } }\n\n// Resets the border.\n@mixin reset-image-anchor-border {\n  border: none; }\n\n// Unrecognized elements are displayed inline.\n// This reset provides a basic reset for block html5 elements\n// so they are rendered correctly in browsers that don't recognize them\n// and reset in browsers that have default styles for them.\n@mixin reset-html5 {\n  #{elements-of-type(html5-block)} {\n    display: block; } }\n\n// Resets the display of inline and block elements to their default display\n// according to their tag type. Elements that have a default display that varies across\n// versions of html or browser are not handled here, but this covers the 90% use case.\n// Usage Example:\n//\n//     // Turn off the display for both of these classes\n//     .unregistered-only, .registered-only\n//       display: none\n//     // Now turn only one of them back on depending on some other context.\n//     body.registered\n//       +reset-display(\".registered-only\")\n//     body.unregistered\n//       +reset-display(\".unregistered-only\")\n@mixin reset-display($selector: \"\", $important: false) {\n  #{append-selector(elements-of-type(\"inline\"), $selector)} {\n    @if $important {\n      display: inline !important; }\n    @else {\n      display: inline; } }\n  #{append-selector(elements-of-type(\"block\"), $selector)} {\n    @if $important {\n      display: block !important; }\n    @else {\n      display: block; } } }\n"
  },
  {
    "path": "core/stylesheets/compass/typography/_links.scss",
    "content": "@import \"links/hover-link\";\n@import \"links/link-colors\";\n@import \"links/unstyled-link\";\n"
  },
  {
    "path": "core/stylesheets/compass/typography/_lists.scss",
    "content": "@import \"lists/horizontal-list\";\n@import \"lists/inline-list\";\n@import \"lists/inline-block-list\";\n@import \"lists/bullets\";\n"
  },
  {
    "path": "core/stylesheets/compass/typography/_text.scss",
    "content": "@import \"text/ellipsis\";\n@import \"text/nowrap\";\n@import \"text/replacement\";\n@import \"text/force-wrap\";\n"
  },
  {
    "path": "core/stylesheets/compass/typography/_units.scss",
    "content": "// @private Default font-size for all browsers\n$browser-default-font-size: 16px;\n\n// Base font size in pixels, if not already defined.\n// Should be the same as the font-size of the html element.\n$base-font-size: 16px !default;\n\n// Whether to output fallback values in px when outputting rems.\n$rem-with-px-fallback: true !default;\n\n\n// Convert any CSS <length> or <percentage> value to any another.\n//\n// @param $length\n//   A css <length> or <percentage> value\n//\n// @param $to-unit\n//   String matching a css unit keyword, e.g. 'em', '%', etc.\n//\n// @param $from-context\n//   When converting from relative units, the absolute length (in px) to\n//   which $length refers (e.g. for $lengths in em units, would normally be the\n//   font-size of the current element).\n//\n// @param $to-context\n//   For converting to relative units, the absolute length in px to which the\n//   output value will refer. Defaults to the same as $from-context, since it is\n//   rarely needed.\n@function convert-length(\n\t$length,\n\t$to-unit,\n\t$from-context: $base-font-size,\n\t$to-context: $from-context\n) {\n\n\t$from-unit: unit($length);\n\n\t// Optimize for cases where `from` and `to` units are accidentally the same.\n\t@if $from-unit == $to-unit { @return $length; }\n\n\t// Context values must be in px so we can determine a conversion ratio for\n\t// relative units.\n\t@if unit($from-context) != 'px' { @warn \"Paremeter $from-context must resolve to a value in pixel units.\"; }\n\t@if unit($to-context) != 'px' { @warn \"Parameter $to-context must resolve to a value in pixel units.\"; }\n\n\t// Convert input length to pixels\n\t$px-length: $length;\n\n\t@if $from-unit != 'px' {\n\t\t// Convert relative units using the from-context parameter.\n\t\t@if      $from-unit == 'em'  { $px-length: $length * $from-context / 1em }\n\t\t@else if $from-unit == 'rem' { $px-length: $length * $base-font-size / 1rem }\n\t\t@else if $from-unit == '%'   { $px-length: $length * $from-context / 100% }\n\t\t@else if $from-unit == 'ex'  { $px-length: $length * $from-context / 2ex }\n\t\t// Convert absolute units using Sass' conversion table.\n\t\t@else if $from-unit == 'in'  or\n\t\t\t\t\t\t $from-unit == 'mm'  or\n\t\t\t\t\t\t $from-unit == 'cm'  or\n\t\t\t\t\t\t $from-unit == 'pt'  or\n\t\t\t\t\t\t $from-unit == 'pc'  { $px-length: 0px + $length }\n\t\t// Certain units can't be converted.\n\t\t@else if $from-unit == 'ch'  or\n\t\t\t\t\t\t $from-unit == 'vw'  or\n\t\t\t\t\t\t $from-unit == 'vh'  or\n\t\t\t\t\t\t $from-unit == 'vmin' {\n\t\t\t@warn \"#{$from-unit} units can't be reliably converted; Returning original value.\";\n\t\t\t@return $length;\n\t\t}\n\t\t@else {\n\t\t\t@warn \"#{$from-unit} is an unknown length unit. Returning original value.\";\n\t\t\t@return $length;\n\t\t}\n\t}\n\n\t// Convert length in pixels to the output unit\n\t$output-length: $px-length;\n\t@if $to-unit != 'px' {\n\t\t// Relative units\n\t\t@if      $to-unit == 'em'  { $output-length: $px-length * 1em / $to-context }\n\t\t@else if $to-unit == 'rem' { $output-length: $px-length * 1rem / $base-font-size }\n\t\t@else if $to-unit == '%'   { $output-length: $px-length * 100% / $to-context }\n\t\t@else if $to-unit == 'ex'  { $output-length: $px-length * 2ex / $to-context }\n\t\t// Absolute units\n\t\t@else if $to-unit == 'in'  { $output-length: 0in + $px-length }\n\t\t@else if $to-unit == 'mm'  { $output-length: 0mm + $px-length }\n\t\t@else if $to-unit == 'cm'  { $output-length: 0cm + $px-length }\n\t\t@else if $to-unit == 'pt'  { $output-length: 0pt + $px-length }\n\t\t@else if $to-unit == 'pc'  { $output-length: 0pc + $px-length }\n\t\t// Non-convertible units\n\t\t@else if $to-unit == 'ch'  or\n\t\t\t\t\t\t $to-unit == 'vw'  or\n\t\t\t\t\t\t $to-unit == 'vh'  or\n\t\t\t\t\t\t $to-unit == 'vmin' {\n\t\t\t@warn \"#{$to-unit} units can't be reliably converted; Returning original value.\";\n\t\t\t@return $length;\n\t\t}\n\t\t@else {\n\t\t\t@warn \"#{$to-unit} is an unknown length unit. Returning original value.\";\n\t\t\t@return $length;\n\t\t}\n\t}\n\n\t@return $output-length;\n}\n\n\n// @private Get the px/rem versions of a value.\n@function rem-fallback-values($value) {\n  $_return: (\n    px: $value,\n    rem: $value,\n  );\n\n  @if type-of($value) == number and not unitless($value) {\n    @if unit($value) == rem {\n      $_return: map-merge($_return, (\n        px: round(convert-length($value, px)),\n      ));\n    } @else if unit($value) == px {\n      $_return: map-merge($_return, (\n        px: round($value),\n        rem: convert-length($value, rem),\n      ));\n    }\n  }\n\n  @return $_return;\n}\n\n// @private Get the px/rem versions of a list (or nested lists).\n@function list-convert-rems($value) {\n  $_empty: (\n    px: (),\n    rem: (),\n  );\n  $_return: $_empty;\n  $_sep: null;\n\n  @if type-of($value) == list {\n    $_sep: list-separator($value);\n    @each $sub in $value {\n      $_this: list-convert-rems($sub);\n      $_return: (\n        px: append(map-get($_return, px), map-get($_this, px), $_sep),\n        rem: append(map-get($_return, rem), map-get($_this, rem), $_sep),\n      );\n    }\n  } @else {\n    $_this: rem-fallback-values($value);\n    $_return: map-merge($_return, $_this);\n  }\n\n  @return $_return;\n}\n\n\n// Output a given style rule containing rem values along with an (optional)\n// fallback rule for older browsers (with rem values converted to px).\n//\n// @param $property\n//   The css property name.\n//\n// @param $values\n//   The value or list of values for the property.\n//\n// @param $use-px-fallback\n//   [ true | false ]\n//\n@mixin rem($property, $values, $use-px-fallback: $rem-with-px-fallback) {\n\n  // get converted values.\n  $values: list-convert-rems($values);\n  $px-values: map-get($values, px);\n  $values: map-get($values, rem);\n\n  // Use pixel fallback for browsers that don't understand rem units.\n  @if $use-px-fallback and $px-values != $values {\n    #{$property}: $px-values;\n  }\n\n  // Use rem values for everyone else (overrides pixel values).\n  #{$property}: $values;\n}\n"
  },
  {
    "path": "core/stylesheets/compass/typography/_vertical_rhythm.scss",
    "content": "@import \"compass/support\";\n@import \"compass/layout/grid-background\";\n@import \"compass/typography/units\";\n\n// The default font size for all text in pixels\n$base-font-size: 16px !default;\n\n// The distance between text baselines (vertical rhythm) in pixels.\n$base-line-height: 24px !default;\n\n// The length unit in which to output rhythm values.\n// Supported values: px, em, rem. Percent units can't be used since they\n// make calculating padding and margins impractical, and percentage borders are\n// not valid or supported in css.\n$rhythm-unit: 'em' !default;\n\n// Whether to output fallback values in px when using rem as the rhythm-unit.\n$rem-with-px-fallback: true !default;\n\n// Default values for rhythm borders properties.\n// Supports style alone eg. `solid` or list of style and color eg. `solid #aaa`;\n$default-rhythm-border-width: 1px !default;\n$default-rhythm-border-style: solid !default;\n\n// Allows the `adjust-font-size-to` mixin and the `lines-for-font-size` function\n// to round the line height to the nearest half line height instead of the\n// nearest integral line height to avoid large spacing between lines.\n$round-to-nearest-half-line: false !default;\n\n// Ensure there is at least this many pixels\n// of vertical padding above and below the text.\n$min-line-padding: 2px !default;\n\n// The leader is the amount of whitespace in a line.\n// It might be useful in your calculations.\n$base-leader: convert-length($base-line-height - $base-font-size, $rhythm-unit, $base-font-size);\n\n// The half-leader is the amount of whitespace above and below a line.\n// It might be useful in your calculations.\n$base-half-leader: $base-leader / 2;\n\n// @private Whether the rhythm output is in absolute units (px) or not (em, rem)\n$relative-font-sizing: if($rhythm-unit == px, false, true);\n\n// Validate units\n@if unit($base-font-size)   != 'px' { @warn \"$base-font-size must resolve to a pixel unit.\"; }\n@if unit($base-line-height) != 'px' { @warn \"$base-line-height must resolve to a pixel unit.\"; }\n@if $rhythm-unit != 'px' and $rhythm-unit != 'em' and $rhythm-unit != 'rem' {\n  @warn \"$rhythm-unit must be `px`, `em` or `rem`.\";\n}\n\n\n// Calculate rhythm units.\n@function rhythm($lines: 1, $font-size: $base-font-size, $offset: 0) {\n  $rhythm: convert-length($lines * $base-line-height - $offset, $rhythm-unit, $font-size);\n  @if unit($rhythm) == px {\n    $rhythm: floor($rhythm);\n  }\n  @return $rhythm;\n}\n\n// Calculate the minimum multiple of rhythm units needed to contain the font-size.\n@function lines-for-font-size($font-size) {\n  $lines: if($round-to-nearest-half-line,\n             ceil(2 * $font-size / $base-line-height) / 2,\n             ceil($font-size / $base-line-height));\n  // If lines are cramped include some extra lead.\n  @if ($lines * $base-line-height - $font-size) < ($min-line-padding * 2) {\n    $lines: $lines + if($round-to-nearest-half-line, 0.5, 1);\n  }\n  @return $lines;\n}\n\n\n// @private Outputs rhythm values. For rem units, outputs pixel fallbacks\n// by default.\n@mixin output-rhythm($property, $values) {\n  @if $rhythm-unit == rem and $rem-with-px-fallback {\n    @include rem($property, $values);\n  }\n  @else {\n    $output: ();\n    @each $value in $values {\n      @if unit($value) == px {\n        // Ensure all pixel values are rounded to the nearest pixel.\n        $output: join($output, round($value));\n      }\n      @else {\n        $output: join($output, $value);\n      }\n    }\n    #{$property}: $output;\n  }\n}\n\n// Establishes a font baseline for the given font-size.\n@mixin establish-baseline($font-size: $base-font-size) {\n  $relative-size: 100% * ($font-size / $browser-default-font-size);\n\n  @if support-legacy-browser(ie, \"6\") and (not $relative-font-sizing) {\n    // IE 6 refuses to resize fonts set in pixels and it weirdly resizes fonts\n    // whose root is set in ems. So we set the root font size in percentages of\n    // the default font size, even if we are using absolute sizes elsewhere.\n    * html { font-size: $relative-size; }\n  }\n  html {\n    font-size: if($relative-font-sizing, $relative-size, $font-size);\n\n    // Webkit has a bug that prevents line-height being set in rem on <html>;\n    // To work around this and simplify output, we can set initial line-height\n    // in ems for all relative rhythm units, even when $rhythm-unit is `rem`.\n    @if $relative-font-sizing {\n      line-height: convert-length($base-line-height, em);\n    }\n    @else {\n      line-height: round($base-line-height);\n    }\n  }\n}\n\n// Resets the baseline to 1 rhythm unit\n// Does not work on elements whose font-size is different from $base-font-size.\n//\n// @deprecated This mixin will be removed in the next release.\n// Please use `adjust-leading-to(1)` instead.\n@mixin reset-baseline($font-size: $base-font-size) {\n  @include adjust-leading-to(1, $font-size);\n}\n\n// Show a background image that can be used to debug your alignments.\n// As this is a development feature, this mixin never outputs pixel fallbacks\n// for rem output.\n// Include the $img argument if you would rather use your own image than the\n// Compass default gradient image.\n@mixin debug-vertical-alignment($img: false) {\n  @if $img {\n    background: image-url($img);\n  }\n  @else {\n    @include baseline-grid-background(if($round-to-nearest-half-line, rhythm(1/2), rhythm(1)));\n  }\n}\n\n// Adjust a block to have a different font size and line height to maintain the\n// rhythm. $lines specifies how many multiples of the baseline rhythm each line\n// of this font should use up. It does not have to be an integer, but it\n// defaults to the smallest integer that is large enough to fit the font.\n// Use $from-size to adjust from a font-size other than the base font-size.\n@mixin adjust-font-size-to($to-size, $lines: auto, $from-size: $base-font-size) {\n  $to-size: convert-length($to-size, px, $from-size);\n  @if $lines == auto {\n    $lines: lines-for-font-size($to-size);\n  }\n  @include output-rhythm(font-size, convert-length($to-size, $rhythm-unit, $from-size));\n  @include adjust-leading-to($lines, $to-size);\n}\n\n// Adjust a block to have different line height to maintain the rhythm.\n// $lines specifies how many multiples of the baseline rhythm each line of this\n// font should use up. It does not have to be an integer, but it defaults to the\n// smallest integer that is large enough to fit the font.\n@mixin adjust-leading-to($lines, $font-size: $base-font-size) {\n  @include output-rhythm(line-height, rhythm($lines, $font-size));\n}\n\n// Apply leading whitespace. The $property can be margin or padding.\n@mixin leader($lines: 1, $font-size: $base-font-size, $property: margin) {\n  @include output-rhythm(#{$property}-top, rhythm($lines, $font-size));\n}\n\n// Apply leading whitespace as padding.\n@mixin padding-leader($lines: 1, $font-size: $base-font-size) {\n  @include output-rhythm(padding-top, rhythm($lines, $font-size));\n}\n\n// Apply leading whitespace as margin.\n@mixin margin-leader($lines: 1, $font-size: $base-font-size) {\n  @include output-rhythm(margin-top, rhythm($lines, $font-size));\n}\n\n// Apply trailing whitespace. The $property can be margin or padding.\n@mixin trailer($lines: 1, $font-size: $base-font-size, $property: margin) {\n  @include output-rhythm(#{$property}-bottom, rhythm($lines, $font-size));\n}\n\n// Apply trailing whitespace as padding.\n@mixin padding-trailer($lines: 1, $font-size: $base-font-size) {\n  @include output-rhythm(padding-bottom, rhythm($lines, $font-size));\n}\n\n// Apply trailing whitespace as margin.\n@mixin margin-trailer($lines: 1, $font-size: $base-font-size) {\n  @include output-rhythm(margin-bottom, rhythm($lines, $font-size));\n}\n\n// Shorthand mixin to apply whitespace for top and bottom margins and padding.\n@mixin rhythm(\n  $leader: 1,\n  $padding-leader: 0,\n  $padding-trailer: $padding-leader,\n  $trailer: $leader,\n  $font-size: $base-font-size\n) {\n  @include leader($leader, $font-size);\n  @include padding-leader($padding-leader, $font-size);\n  @include padding-trailer($padding-trailer, $font-size);\n  @include trailer($trailer, $font-size);\n}\n\n// Shorthand mixin to apply whitespace for top and bottom margins.\n@mixin rhythm-margins(\n  $leader: 1,\n  $trailer: $leader,\n  $font-size: $base-font-size\n) {\n  @include leader($leader, $font-size);\n  @include trailer($trailer, $font-size);\n}\n\n// Shorthand mixin to apply whitespace for top and bottom padding.\n@mixin rhythm-padding(\n  $padding-leader: 1,\n  $padding-trailer: $padding-leader,\n  $font-size: $base-font-size\n) {\n  @include padding-leader($padding-leader, $font-size);\n  @include padding-trailer($padding-trailer, $font-size);\n}\n\n// Apply a border and whitespace to any side without destroying the vertical\n// rhythm. The whitespace must be greater than the width of the border.\n@mixin apply-side-rhythm-border(\n  $side,\n  $width: $default-rhythm-border-width,\n  $lines: 1,\n  $font-size: $base-font-size,\n  $border-style: $default-rhythm-border-style\n) {\n  // If applying borders to all sides, use shorthand properties\n  $border-prop: if($side == all, border, border-#{$side});\n  @include output-rhythm(#{$border-prop}-width, convert-length($width, $rhythm-unit, $font-size));\n  #{$border-prop}-style: nth($border-style, 1);\n  @if type-of($border-style) == list and length($border-style) > 1 {\n    #{$border-prop}-color: nth($border-style, 2);\n  }\n  $padding-prop: if($side == all, padding, padding-#{$side});\n  @include output-rhythm(#{$padding-prop}, rhythm($lines, $font-size, $offset: $width));\n}\n\n// Apply a leading border.\n// $border-style and $width are deprecated and will be removed in a future version of Compass.\n@mixin leading-border(\n  $width: $default-rhythm-border-width,\n  $lines: 1,\n  $font-size: $base-font-size,\n  $border-style: $default-rhythm-border-style\n) {\n  @include apply-side-rhythm-border(top, $width, $lines, $font-size, $border-style);\n}\n\n// Apply a trailing border.\n@mixin trailing-border(\n  $width: $default-rhythm-border-width,\n  $lines: 1,\n  $font-size: $base-font-size,\n  $border-style: $default-rhythm-border-style\n) {\n  @include apply-side-rhythm-border(bottom, $width, $lines, $font-size, $border-style);\n}\n\n// Apply both leading and trailing borders.\n@mixin horizontal-borders(\n  $width: $default-rhythm-border-width,\n  $lines: 1,\n  $font-size: $base-font-size,\n  $border-style: $default-rhythm-border-style\n) {\n  @include leading-border($width, $lines, $font-size, $border-style);\n  @include trailing-border($width, $lines, $font-size, $border-style);\n}\n\n// Alias for `horizontal-borders` mixin.\n@mixin h-borders(\n  $width: $default-rhythm-border-width,\n  $lines: 1,\n  $font-size: $base-font-size,\n  $border-style: $default-rhythm-border-style\n) {\n  @include horizontal-borders($width, $lines, $font-size, $border-style);\n}\n\n// Apply borders and whitespace equally to all sides.\n@mixin rhythm-borders(\n  $width: $default-rhythm-border-width,\n  $lines: 1,\n  $font-size: $base-font-size,\n  $border-style: $default-rhythm-border-style\n) {\n  @include apply-side-rhythm-border(all, $width, $lines, $font-size, $border-style);\n}\n"
  },
  {
    "path": "core/stylesheets/compass/typography/links/_hover-link.scss",
    "content": "// a link that only has an underline when you hover over it\n@mixin hover-link {\n  text-decoration: none;\n  &:hover, &:focus {\n    text-decoration: underline; } }\n"
  },
  {
    "path": "core/stylesheets/compass/typography/links/_link-colors.scss",
    "content": "// Set all the colors for a link with one mixin call.\n// Order of arguments is:\n//\n// 1. normal\n// 2. hover\n// 3. active\n// 4. visited\n// 5. focus\n//\n// Those states not specified will inherit.\n// Mixin to an anchor link like so:\n//     a\n//       +link-colors(#00c, #0cc, #c0c, #ccc, #cc0)\n\n@mixin link-colors($normal, $hover: false, $active: false, $visited: false, $focus: false) {\n  color: $normal;\n  @if $visited {\n    &:visited {\n      color: $visited; } }\n  @if $focus {\n    &:focus {\n      color: $focus; } }\n  @if $hover {\n    &:hover {\n      color: $hover; } }\n  @if $active {\n    &:active {\n      color: $active; } } }\n"
  },
  {
    "path": "core/stylesheets/compass/typography/links/_unstyled-link.scss",
    "content": "// A link that looks and acts like the text it is contained within\n@mixin unstyled-link {\n  color: inherit;\n  text-decoration: inherit;\n  cursor: inherit;\n  &:active, &:focus {\n    outline: none; } }\n"
  },
  {
    "path": "core/stylesheets/compass/typography/lists/_bullets.scss",
    "content": "// Turn off the bullet for an element of a list\n@mixin no-bullet {\n  list-style-image : none;\n  list-style-type  : none;\n  margin-left      : 0;\n}\n\n// turns off the bullets for an entire list\n@mixin no-bullets {\n  list-style: none;\n  li { @include no-bullet; }\n}\n\n// Make a list(ul/ol) have an image bullet.\n//\n// The mixin should be used like this for an icon that is 5x7:\n//\n//     ul.pretty\n//       +pretty-bullets(\"my-icon.png\", 5px, 7px)\n//\n// Additionally, if the image dimensions are not provided,\n// The image dimensions will be extracted from the image itself.\n//\n//     ul.pretty\n//       +pretty-bullets(\"my-icon.png\")\n//\n@mixin pretty-bullets($bullet-icon, $width: image-width($bullet-icon), $height: image-height($bullet-icon), $line-height: 18px, $padding: 14px) {\n  margin-left: 0;\n  li {\n    padding-left: $padding;\n    background: image-url($bullet-icon) no-repeat ($padding - $width) / 2 ($line-height - $height) / 2;\n    list-style-type: none;\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/typography/lists/_horizontal-list.scss",
    "content": "// Horizontal list layout module.\n//\n// Easy mode using simple descendant li selectors:\n//\n//   ul.nav\n//     +horizontal-list\n//\n// Advanced mode:\n// If you need to target the list items using a different selector then use\n// +horizontal-list-container on your ul/ol and +horizontal-list-item on your li.\n// This may help when working on layouts involving nested lists. For example:\n//\n//   ul.nav\n//     +horizontal-list-container\n//     > li\n//       +horizontal-list-item\n\n@import \"bullets\";\n@import \"compass/utilities/general/clearfix\";\n@import \"compass/utilities/general/reset\";\n@import \"compass/utilities/general/float\";\n@import \"compass/support\";\n\n// Can be mixed into any selector that target a ul or ol that is meant\n// to have a horizontal layout. Used to implement +horizontal-list.\n@mixin horizontal-list-container {\n  @include reset-box-model;\n  @include clearfix; }\n\n// Can be mixed into any li selector that is meant to participate in a horizontal layout.\n// Used to implement +horizontal-list.\n//\n// :last-child is not fully supported\n// see http://www.quirksmode.org/css/contents.html#t29 for the support matrix\n//\n// IE8 ignores rules that are included on the same line as :last-child\n// see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n//\n// Setting `$padding` to `false` disables the padding between list elements\n@mixin horizontal-list-item($padding: 4px, $direction: left) {\n  @include no-bullet;\n  white-space: nowrap;\n  @include float($direction);\n  @if $padding {\n    padding: {\n      left: $padding;\n      right: $padding;\n    }\n    &:first-child #{if(support-legacy-browser(\"ie\", \"6\", $threshold: $css-sel2-support-threshold), ', &.first', '')} { padding-#{$direction}: 0; }\n    &:last-child { padding-#{opposite-position($direction)}: 0; }\n    @if support-legacy-browser(\"ie\", \"7\", $threshold: $css-sel2-support-threshold) {\n      &.last { padding-#{opposite-position($direction)}: 0; } }\n  }\n}\n\n// A list(ol,ul) that is layed out such that the elements are floated left and won't wrap.\n// This is not an inline list.\n//\n// Setting `$padding` to `false` disables the padding between list elements\n@mixin horizontal-list($padding: 4px, $direction: left) {\n  @include horizontal-list-container;\n  li {\n    @include horizontal-list-item($padding, $direction); } }\n"
  },
  {
    "path": "core/stylesheets/compass/typography/lists/_inline-block-list.scss",
    "content": "// Inline-Block list layout module.\n//\n// Easy mode using simple descendant li selectors:\n//\n//     ul.nav {\n//       @import inline-block-list;\n//     }\n//\n// Advanced mode:\n// If you need to target the list items using a different selector then use\n// `@include inline-block-list-container` on your ul/ol and\n// `@include inline-block-list-item` on your li. This may help when working\n// on layouts involving nested lists. For example:\n//\n//     ul.nav {\n//       @include inline-block-list-container;\n//       > li {\n//         @include inline-block-list-item;\n//       }\n//     }\n\n@import \"bullets\";\n@import \"horizontal-list\";\n@import \"compass/utilities/general/float\";\n@import \"compass/css3/inline-block\";\n\n// Can be mixed into any selector that target a ul or ol that is meant\n// to have an inline-block layout. Used to implement `inline-block-list`.\n@mixin inline-block-list-container {\n  @include horizontal-list-container; }\n\n// Can be mixed into any li selector that is meant to participate in a horizontal layout.\n// Used to implement `inline-block-list`.\n@mixin inline-block-list-item($padding: false) {\n  @include no-bullet;\n  @include inline-block;\n  white-space: nowrap;\n  @if $padding {\n    padding: {\n      left: $padding;\n      right: $padding;\n    };    \n  }\n}\n\n// A list(ol,ul) that is layed out such that the elements are inline-block and won't wrap.\n@mixin inline-block-list($padding: false) {\n  @include inline-block-list-container;\n  li {\n    @include inline-block-list-item($padding); } }\n"
  },
  {
    "path": "core/stylesheets/compass/typography/lists/_inline-list.scss",
    "content": "@import \"compass/support\";\n\n// makes a list inline.\n@mixin inline-list {\n  list-style-type: none;\n  &, & li {\n    margin: 0;\n    padding: 0;\n    display: inline;\n  }\n}\n\n// makes an inline list delimited with the passed string.\n// Defaults to making a comma-separated list.\n//\n// Please make note of the browser support issues before using this mixin:\n//\n// use of `content` and `:after` is not fully supported in all browsers.\n// See quirksmode for the [support matrix](http://www.quirksmode.org/css/contents.html#t15)\n//\n// `:last-child` is not fully supported.\n// see quirksmode for the [support matrix](http://www.quirksmode.org/css/contents.html#t29).\n//\n// IE8 ignores rules that are included on the same line as :last-child\n// see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n\n@mixin delimited-list($separator: \", \") {\n  @include inline-list;\n  li {\n    &:after { content: $separator; }\n    &:last-child {\n      &:after { content: \"\"; }\n    }\n    @if support-legacy-browser(\"ie\", \"7\", $threshold: $css-sel2-support-threshold) {\n      &.last {\n        &:after { content: \"\"; }\n      }\n    }\n  }\n}\n\n// See [delimited-list](#mixin-delimited-list)\n// @deprecated\n@mixin comma-delimited-list {\n  @warn \"comma-delimited-list is deprecated. Please use delimited-list instead.\";\n  @include delimited-list;\n}\n"
  },
  {
    "path": "core/stylesheets/compass/typography/text/_ellipsis.scss",
    "content": "@import \"compass/css3/deprecated-support\";\n\n// To get full firefox support, you must install the ellipsis pattern:\n//\n//     compass install compass/ellipsis\n$use-mozilla-ellipsis-binding: false !default;\n\n// This technique, by [Justin Maxwell](http://code404.com/), was originally\n// published [here](http://mattsnider.com/css/css-string-truncation-with-ellipsis/).\n// Firefox implementation by [Rikkert Koppes](http://www.rikkertkoppes.com/thoughts/2008/6/).\n@mixin ellipsis($no-wrap: true) {\n  @if $no-wrap { white-space: nowrap; }\n  overflow: hidden;\n  @include experimental(text-overflow, ellipsis,\n    not -moz,\n    not -webkit,\n    -o,\n    -ms,\n    not -khtml,\n    official\n  );\n  @if $legacy-support-for-mozilla and $use-mozilla-ellipsis-binding {\n    -moz-binding: stylesheet-url(unquote(\"xml/ellipsis.xml#ellipsis\"));\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/typography/text/_force-wrap.scss",
    "content": "// Prevent long urls and text from breaking layouts\n// [originally from perishablepress.com](http://perishablepress.com/press/2010/06/01/wrapping-content/)\n@mixin force-wrap {\n  white-space: pre;           // CSS 2.0\n  white-space: pre-wrap;      // CSS 2.1\n  white-space: pre-line;      // CSS 3.0\n  white-space: -pre-wrap;     // Opera 4-6\n  white-space: -o-pre-wrap;   // Opera 7\n  white-space: -moz-pre-wrap; // Mozilla\n  white-space: -hp-pre-wrap;  // HP Printers\n  word-wrap: break-word;      // IE 5+\n}\n"
  },
  {
    "path": "core/stylesheets/compass/typography/text/_nowrap.scss",
    "content": "// When remembering whether or not there's a hyphen in white-space is too hard\n@mixin nowrap { white-space: nowrap; }\n"
  },
  {
    "path": "core/stylesheets/compass/typography/text/_replacement.scss",
    "content": "@import \"compass/support\";\n\n// Indicates the direction you prefer to move your text\n// when hiding it.\n//\n// `left` is more robust, especially in older browsers.\n// `right` seems have better runtime performance.\n$hide-text-direction: left !default;\n\n// Hides html text and replaces it with an image.\n// If you use this on an inline element, you will need to change the display to block or inline-block.\n// Also, if the size of the image differs significantly from the font size, you'll need to set the width and/or height.\n//\n// Parameters:\n//\n// * `img` -- the relative path from the project image directory to the image, or a url literal.\n// * `x` -- the x position of the background image.\n// * `y` -- the y position of the background image.\n@mixin replace-text($img, $x: 50%, $y: 50%) {\n  @include hide-text;\n  background: {\n    @if is-url($img) {\n      image: $img;\n    } @else {\n      image: image-url($img);\n    }\n    repeat: no-repeat;\n    position: $x $y;\n  };\n}\n\n// Like the `replace-text` mixin, but also sets the width\n// and height of the element according the dimensions of the image.\n//\n// If you set `$inline` to true, then an inline image (data uri) will be used.\n@mixin replace-text-with-dimensions($img, $x: 50%, $y: 50%, $inline: false) {\n  @include replace-text(if($inline, inline-image($img), $img), $x, $y);\n  width: image-width($img);\n  height: image-height($img);\n}\n\n// Hides text in an element so you can see the background.\n//\n// The direction indicates how the text should be moved out of view.\n//\n// See `$hide-text-direction` for more information and to set this globally\n// for your application.\n@mixin hide-text($direction: $hide-text-direction) {\n  @if $direction == left {\n    $approximate-em-value: 12px / 1em;\n    $wider-than-any-screen: -9999em;\n    text-indent: $wider-than-any-screen * $approximate-em-value;\n    overflow: hidden;\n    text-align: left;\n  } @else {\n    // slightly wider than the box prevents issues with inline-block elements\n    text-indent: 110%;\n    white-space: nowrap;\n    overflow: hidden;\n  }\n  @include for-legacy-browsers((ie: \"7\"), $critical-usage-threshold) {\n    //Text transform capitalize fixes text-replacement issue when used in a <button> element on ie7\n    text-transform:capitalize;\n  }\n}\n\n// Hides text in an element by squishing the text into oblivion.\n// Use this if you need to hide text contained in an inline element\n// but still have it read by a screen reader.\n@mixin squish-text {\n  font: 0/0 serif;\n  text-shadow: none;\n  color: transparent;\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/_color.scss",
    "content": "@import \"color/contrast\";"
  },
  {
    "path": "core/stylesheets/compass/utilities/_general.scss",
    "content": "@import \"general/reset\";\n@import \"general/clearfix\";\n@import \"general/float\";\n@import \"general/tag-cloud\";\n@import \"general/hacks\";\n@import \"general/min\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/_links.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/links' instead.\";\n\n@import \"../typography/links/hover-link\";\n@import \"../typography/links/link-colors\";\n@import \"../typography/links/unstyled-link\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/_lists.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/lists' instead.\";\n\n@import \"../typography/lists/horizontal-list\";\n@import \"../typography/lists/inline-list\";\n@import \"../typography/lists/inline-block-list\";\n@import \"../typography/lists/bullets\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/_print.scss",
    "content": "// Classes that are useful for controlling what gets printed.\n// You must mix `+print-utilities` into your print stylesheet\n// and `+print-utilities(screen)` into your screen stylesheet.\n// Note: these aren't semantic.\n@mixin print-utilities($media: print) {\n  @if $media == print {\n    .noprint, .no-print { display: none; }\n    #{elements-of-type(block)} {\n      &.print-only { display: block; }\n    }\n    #{elements-of-type(inline)} {\n      &.print-only {  display: inline; }\n    }\n  } @else {\n    .print-only { display: none; }\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/_sass.scss",
    "content": "@import \"sass/lists\";\n@import \"sass/maps\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/_sprites.scss",
    "content": "@import \"sprites/base\";\n@import \"sprites/sprite-img\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/_tables.scss",
    "content": "@import \"tables/alternating-rows-and-columns\";\n@import \"tables/borders\";\n@import \"tables/scaffolding\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/_text.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/text' instead.\";\n\n@import \"../typography/text/ellipsis\";\n@import \"../typography/text/nowrap\";\n@import \"../typography/text/replacement\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/color/_brightness.scss",
    "content": "// Computes the \"brightness\" of a color\n//\n// Brightness is similiar to lightness in HSL but more closely approximates\n// how humans perceive the intensity of the different RGB components of\n// a color. Brightness is sometimes called luminance.\n//\n// Returns a number between 0% and 100%, where 100% is fully bright\n// (white) and 0% is fully dark (black) for color values.\n//\n// For numbers and percentages it returns the same value to be used\n// in `@include filter(brightness(1.1))`.\n@function brightness($color) {\n  @if type-of($color) == color {\n    @return ((red($color) * .299) + (green($color) * .587) + (blue($color) * .114)) / 255 * 100%;\n  }\n  @else {\n    @return unquote(\"brightness(#{$color})\");\n  }\n}\n\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/color/_contrast.scss",
    "content": "@import \"compass/utilities/color/brightness\";\n\n$contrasted-dark-default:   #000 !default;\n$contrasted-light-default:  #fff !default;\n\n// Returns either the `$light` or `$dark` color\n// by deciding which contrasts more with `$color`.\n//\n// E.g. This can be used to select the more readable foreground color\n// for a given background color.\n//\n// `$dark` defaults to black and `$light` defaults to white.\n//\n// When `$color` is `null`, this function returns `null`.\n@function contrast-color(\n  $color,\n  $dark: $contrasted-dark-default,\n  $light: $contrasted-light-default,\n  $threshold: null\n) {\n  @if $threshold {\n    // Deprecated in Compass 0.13\n    @warn \"The $threshold argment to contrast-color is no longer needed and will be removed in the next release.\"\n  }\n  @if $color == null {\n    @return null;\n  }\n  @else {\n    $color-brightness: brightness($color);\n    $dark-text-brightness: brightness($dark);\n    $light-text-brightness: brightness($light);\n\n    @return if(abs($color-brightness - $light-text-brightness) > abs($color-brightness - $dark-text-brightness), $light, $dark);\n  }\n}\n\n// Sets the specified background color and calculates a dark or light\n// contrasted text color.  The arguments are passed through to the\n// [contrast-color function](#function-contrast-color).\n@mixin contrasted(\n  $background-color,\n  $dark: $contrasted-dark-default,\n  $light: $contrasted-light-default,\n  $threshold: null\n) {\n  @if $threshold {\n    // Deprecated in Compass 0.13\n    @warn \"The $threshold argment to contrasted is no longer needed and will be removed in the next release.\"\n  }\n  background-color: $background-color;\n  color: contrast-color($background-color, $dark, $light);\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/general/_clearfix.scss",
    "content": "// @doc off\n// Extends the bottom of the element to enclose any floats it contains.\n// @doc on\n\n@import \"hacks\";\n\n// This basic method is preferred for the usual case, when positioned\n// content will not show outside the bounds of the container.\n//\n// Recommendations include using this in conjunction with a width.\n// Credit: [quirksmode.org](http://www.quirksmode.org/blog/archives/2005/03/clearing_floats.html)\n@mixin clearfix {\n  overflow: hidden;\n  @include has-layout;\n}\n\n// This older method from Position Is Everything called\n// [Easy Clearing](http://www.positioniseverything.net/easyclearing.html)\n// has the advantage of allowing positioned elements to hang\n// outside the bounds of the container at the expense of more tricky CSS.\n@mixin legacy-pie-clearfix {\n  &:after {\n    content    : \"\\0020\";\n    display    : block;\n    height     : 0;\n    clear      : both;\n    overflow   : hidden;\n    visibility : hidden;\n  }\n  @include has-layout;\n}\n\n// This is an updated version of the PIE clearfix method that reduces the amount of CSS output.\n// If you need to support Firefox before 3.5 you need to use `legacy-pie-clearfix` instead.\n//\n// Adapted from: [A new micro clearfix hack](http://nicolasgallagher.com/micro-clearfix-hack/)\n@mixin pie-clearfix {\n  &:after {\n    content: \"\";\n    display: table;\n    clear: both;\n  }\n  @include has-layout;\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/general/_float.scss",
    "content": "@import \"compass/support\";\n\n// The legacy support threshold for float.\n// Defaults to the $critical-usage-threshold.\n$legacy-float-support-threshold: $critical-usage-threshold !default;\n\n// Implementation of float:left with fix for the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float-left {\n  @include float(left); }\n\n// Implementation of float:right with fix for the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float-right {\n  @include float(right); }\n\n// Direction independent float mixin that fixes the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float($side: left) {\n  float: unquote($side);\n  @if support-legacy-browser(\"ie\", \"6\", $threshold: $legacy-float-support-threshold) {\n    display: inline; } }\n\n// Resets floated elements back to their default of `float: none` and defaults\n// to `display: block` unless you pass `inline` as an argument\n//\n// Usage Example:\n//\n//     body.homepage\n//       #footer li\n//         +float-left\n//     body.signup\n//       #footer li\n//         +reset-float\n@mixin reset-float($display: block) {\n  float: none;\n  @if support-legacy-browser(\"ie\", \"6\", $threshold: $legacy-float-support-threshold) {\n    display: $display; } }\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/general/_hacks.scss",
    "content": "@import \"compass/support\";\n\n// The legacy support threshold for has-layout.\n// Defaults to the $critical-usage-threshold.\n$has-layout-support-threshold: $critical-usage-threshold !default;\n\n// The `zoom` approach generates less CSS but does not validate.\n// Set this to `block` to use the display-property to hack the\n// element to gain layout.\n$default-has-layout-approach: zoom !default;\n\n// This mixin causes an element matching the selector\n// to gain the \"hasLayout\" property in internet explorer.\n// More information on [hasLayout](http://reference.sitepoint.com/css/haslayout).\n@mixin has-layout($approach: $default-has-layout-approach) {\n  @if support-legacy-browser(\"ie\", \"7\", $threshold: $has-layout-support-threshold) {\n    @if $approach == zoom {\n      @include has-layout-zoom;\n    } @else if $approach == block {\n      @include has-layout-block;\n    } @else {\n      @warn \"Unknown has-layout approach: #{$approach}\";\n      @include has-layout-zoom;\n    }\n  }\n}\n\n@mixin has-layout-zoom {\n  @if support-legacy-browser(\"ie\", \"7\", $threshold: $has-layout-support-threshold) {\n    *zoom: 1;\n  }\n}\n\n@mixin has-layout-block {\n  @if support-legacy-browser(\"ie\", \"7\", $threshold: $has-layout-support-threshold) {\n    // This makes ie6 get layout\n    display: inline-block;\n    // and this puts it back to block\n    & { display: block; }\n  }\n}\n\n\n// The legacy support threshold for IE6 attribute hack.\n// Defaults to the $critical-usage-threshold.\n$ie6-attribute-hack-support-threshold: $critical-usage-threshold !default;\n\n// A hack to supply IE6 (and below) with a different property value.\n// [Read more](http://www.cssportal.com/css-hacks/#in_css-important).\n@mixin bang-hack($property, $value, $ie6-value) {\n  @if support-legacy-browser(\"ie\", \"6\", $threshold: $ie6-attribute-hack-support-threshold) {\n    @warn \"it's recommended to use the underscore-hack() mixin instead of bang-hack()\";\n    #{$property}: #{$value} !important;\n    #{$property}: #{$ie6-value};\n  }\n}\n\n// A hack to supply IE6 (and below) with a different property value.\n// [Read more](http://www.paulirish.com/2009/browser-specific-css-hacks/)\n@mixin underscore-hack($property, $value, $ie6-value) {\n  @if support-legacy-browser(\"ie\", \"6\", $threshold: $ie6-attribute-hack-support-threshold) {\n    #{$property}: #{$value};\n    _#{$property}: #{$ie6-value};\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/general/_min.scss",
    "content": "@import \"hacks\";\n\n//**\n// Cross browser min-height mixin.\n@mixin min-height($value) {\n  @include hacked-minimum(height, $value); }\n\n//**\n// Cross browser min-width mixin.\n@mixin min-width($value) {\n  @include hacked-minimum(width, $value); }\n\n// @private This mixin is not meant to be used directly.\n@mixin hacked-minimum($property, $value) {\n  min-#{$property}: $value;\n  @include underscore-hack($property, auto, $value); }\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/general/_reset.scss",
    "content": "// This module has moved.\n@import \"compass/reset/utilities\";"
  },
  {
    "path": "core/stylesheets/compass/utilities/general/_tabs.scss",
    "content": "\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/general/_tag-cloud.scss",
    "content": "// Emits styles for a tag cloud\n@mixin tag-cloud($base-size: 1em) {\n  font-size: $base-size;\n  line-height: 1.2 * $base-size;\n  .xxs, .xs, .s, .l, .xl, .xxl {\n    line-height: 1.2 * $base-size; }\n  .xxs {\n    font-size: $base-size / 2; }\n  .xs {\n    font-size: 2 * $base-size / 3; }\n  .s {\n    font-size: 3 * $base-size / 4; }\n  .l {\n    font-size: 4 * $base-size / 3; }\n  .xl {\n    font-size: 3 * $base-size / 2; }\n  .xxl {\n    font-size: 2 * $base-size; } }\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/links/_hover-link.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/links/hover-link' instead.\";\n\n@import \"../../typography/links/hover-link\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/links/_link-colors.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/links/link-colors' instead.\";\n\n@import \"../../typography/links/link-colors\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/links/_unstyled-link.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/links/unstyled-link' instead.\";\n\n@import \"../../typography/links/unstyled-link\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/lists/_bullets.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/lists/bullets' instead.\";\n\n@import \"../../typography/lists/bullets\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/lists/_horizontal-list.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/lists/horizontal-list' instead.\";\n\n@import \"../../typography/lists/horizontal-list\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/lists/_inline-block-list.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/lists/inline-block-list' instead.\";\n\n@import \"../../typography/lists/inline-block-list\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/lists/_inline-list.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/lists/inline-list' instead.\";\n\n@import \"../../typography/lists/inline-list\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/sass/_lists.scss",
    "content": "@function newline() {\n  @return \"\n\";\n}\n\n// Joins a list into a string with the separator given.\n@function list-join($list, $separator: \", \") {\n  $result: \"\";\n  @each $value in $list {\n    @if str-length($result) > 0 {\n      $result: $result + $separator;\n    }\n    $result: $result + #{$value};\n  }\n  @return $result;\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/sass/_maps.scss",
    "content": "// Returns true if a $map is a superset of $sub-map.\n@function map-contains-all($map, $sub-map) {\n  @each $key, $value in $sub-map {\n    @if not (map-has-key($map, $key) and map-get($map, $key) == $value) {\n      @return false;\n    }\n  }\n  @return true;\n}\n\n// Returns true if a $map has any key-value pair in $sub-map.\n@function map-contains-any($map, $sub-map) {\n  @each $key, $value in $sub-map {\n    @if map-has-key($map, $key) and map-get($map, $key) == $value {\n      @return true;\n    }\n  }\n  @return false;\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/sprites/_base.scss",
    "content": "// Determines those states for which you want to enable magic sprite selectors\n$sprite-selectors: hover, target, active, focus !default;\n\n// Set the width and height of an element to the original\n// dimensions of an image before it was included in the sprite.\n@mixin sprite-dimensions($map, $sprite) {\n  height: image-height(sprite-file($map, $sprite));\n  width: image-width(sprite-file($map, $sprite));\n}\n\n// Set the background position of the given sprite `$map` to display the\n// sprite of the given `$sprite` name. You can move the image relative to its\n// natural position by passing `$offset-x` and `$offset-y`.\n// The background-position will be returned in pixels. By passing `true\n// for `$use_percentages`, you get percentages instead.\n@mixin sprite-background-position($map, $sprite, $offset-x: 0, $offset-y: 0,\n$use-percentages: false) {\n  background-position: sprite-position($map, $sprite, $offset-x, $offset-y,\n  $use-percentages);\n}\n\n\n// Determines if you want to include magic selectors in your sprites\n$disable-magic-sprite-selectors: false !default;\n\n// Set this to underscore if you prefer\n$default-sprite-separator: \"-\" !default;\n\n// Include the position and (optionally) dimensions of this `$sprite`\n// in the given sprite `$map`. The sprite url should come from either a base\n// class or you can specify the `sprite-url` explicitly like this:\n//\n//     background: $map no-repeat;\n@mixin sprite($map, $sprite, $dimensions: false, $offset-x: 0, $offset-y: 0,\n                             $use-percentages: false,\n                             $use-magic-selectors: not $disable-magic-sprite-selectors,\n                             $separator: $default-sprite-separator) {\n  @include sprite-background-position($map, $sprite, $offset-x, $offset-y,\n                                      $use-percentages);\n  @if $dimensions {\n    @include sprite-dimensions($map, $sprite);\n  }\n  @if $use-magic-selectors {\n    @include sprite-selectors($map, $sprite, $sprite, $offset-x, $offset-y,\n                              $use-percentages, $separator);\n  }\n}\n\n// Include the selectors for the `$sprite` given the `$map` and the \n// `$full-sprite-name`\n// @private\n@mixin sprite-selectors($map, $sprite-name, $full-sprite-name, $offset-x: 0,\n                        $offset-y: 0, $use-percentages: false,\n                        $separator: $default-sprite-separator) {\n  @each $state in $sprite-selectors {\n    $sprite-class: \"#{$full-sprite-name}#{$separator}#{$state}\";\n    @if sprite_has_selector($map, $sprite-name, $state) {\n      @if sprite_has_valid_selector($sprite-class) {\n        &:#{$state}, &.#{$sprite-class} {\n            @include sprite-background-position($map, sprite_selector_file($map, $sprite-name, $state),\n                                                $offset-x, $offset-y, $use-percentages);\n        }\n      }\n    }\n  }\n}\n\n// Generates a class for each space separated name in `$sprite-names`.\n// The class will be of the form .<map-name>-<sprite-name>.\n//\n// If a base class is provided, then each class will extend it.\n//\n// If `$dimensions` is `true`, the sprite dimensions will specified.\n// Positions are returned in pixel units. Set `$use_percentages` to true to\n// instead get percentages.\n@mixin sprites($map, $sprite-names, $base-class: false, $dimensions: false,\n               $prefix: sprite-map-name($map), $offset-x: 0, $offset-y: 0,\n               $use-percentages: false,\n               $separator: $default-sprite-separator) {\n  @each $sprite-name in $sprite-names {\n    @if sprite_does_not_have_parent($map, $sprite-name) {\n      $full-sprite-name: \"#{$prefix}#{$separator}#{$sprite-name}\";\n      @if sprite_has_valid_selector($full-sprite-name) {\n        .#{$full-sprite-name} {\n          @if $base-class { @extend #{$base-class}; }\n          @include sprite($map, $sprite-name, $dimensions, $offset-x, $offset-y, \n                          $use-percentages, $separator: $separator);\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/sprites/_sprite-img.scss",
    "content": "@import \"compass/typography/text/replacement\";\n\n// @doc off\n// Example 1:\n//\n//     a.twitter\n//       +sprite-img(\"icons-32.png\", 1)\n//     a.facebook\n//       +sprite-img(\"icons-32png\", 2)\n//\n// Example 2:\n//\n//     a\n//       +sprite-background(\"icons-32.png\")\n//       a.twitter\n//         +sprite-column(1)\n//       a.facebook\n//         +sprite-row(2)\n// @doc on\n\n$sprite-default-size: 32px !default;\n\n$sprite-default-margin: 0px !default;\n\n$sprite-image-default-width: $sprite-default-size !default;\n\n$sprite-image-default-height: $sprite-default-size !default;\n\n// Sets all the rules for a sprite from a given sprite image to show just one of the sprites.\n// To reduce duplication use a sprite-bg mixin for common properties and a sprite-select mixin for positioning.\n@mixin sprite-img($img, $col, $row: 1, $width: $sprite-image-default-width, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n  @include sprite-background($img, $width, $height);\n  @include sprite-position($col, $row, $width, $height, $margin); \n}\n\n// Sets rules common for all sprites, assumes you want a square, but allows a rectangular region.\n@mixin sprite-background($img, $width: $sprite-default-size, $height: $width) {\n  @include sprite-background-rectangle($img, $width, $height); \n}\n\n// Sets rules common for all sprites, assumes a rectangular region.\n@mixin sprite-background-rectangle($img, $width: $sprite-image-default-width, $height: $sprite-image-default-height) {\n  background: image-url($img) no-repeat;\n  width: $width;\n  height: $height;\n  overflow: hidden; \n}\n\n// Allows horizontal sprite positioning optimized for a single row of sprites.\n@mixin sprite-column($col, $width: $sprite-image-default-width, $margin: $sprite-default-margin) {\n  @include sprite-position($col, 1, $width, 0px, $margin); \n}\n\n// Allows vertical sprite positioning optimized for a single column of sprites.\n@mixin sprite-row($row, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n  @include sprite-position(1, $row, 0px, $height, $margin); \n}\n\n// Allows vertical and horizontal sprite positioning from a grid of equal dimensioned sprites.\n@mixin sprite-position($col, $row: 1, $width: $sprite-image-default-width, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n  $x: ($col - 1) * -$width - ($col - 1) * $margin;\n  $y: ($row - 1) * -$height - ($row - 1) * $margin;\n  background-position: $x $y; \n}\n\n\n\n// Similar to 'sprite-replace-text-with-dimensions' but does not autmaticly set the demensions\n@mixin sprite-replace-text ($map, $sprite, $dimensions: false, $offset-x: 0, $offset-y: 0) {    \n  @include hide-text;\n  @include sprite($map, $sprite, $dimensions, $offset-x, $offset-y);\n  background-image: $map;\n  background-repeat: no-repeat;\n}\n\n// Similar to 'replace-text-with-dimensions' but with sprites\n// To use, create your sprite and then pass it in the `$map` param\n// The name of the image in the sprite folder should be `$img-name`\n@mixin sprite-replace-text-with-dimensions ($map, $sprite, $offset-x: 0, $offset-y: 0){    \n  @include sprite-replace-text ($map, $sprite, true, $offset-x, $offset-y);\n}\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/tables/_alternating-rows-and-columns.scss",
    "content": "@mixin alternating-rows-and-columns($even-row-color, $odd-row-color, $dark-intersection, $header-color: white, $footer-color: white) {\n  th {\n    background-color: $header-color;\n    &.even, &:nth-child(2n) {\n      background-color: $header-color - $dark-intersection; } }\n  tr {\n    &.odd, &:nth-child(2n+1) {\n      td {\n       background-color: $odd-row-color;\n       &.even, &:nth-child(2n) {\n         background-color: $odd-row-color - $dark-intersection; } } }\n    }\n  tr.even {\n    td {\n      background-color: $even-row-color;\n      &.even, &:nth-child(2n) {\n        background-color: $even-row-color - $dark-intersection; } } }\n  tfoot {\n    th, td {\n      background-color: $footer-color;\n      &.even, &:nth-child(2n) {\n        background-color: $footer-color - $dark-intersection; } } } }\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/tables/_borders.scss",
    "content": "@import \"compass/support\";\n\n@mixin outer-table-borders($width: 2px, $color: black) {\n  border: $width solid $color;\n  thead {\n    th {\n      border-bottom: $width solid $color; } }\n  tfoot {\n    th, td {\n      border-top: $width solid $color; } }\n  th {\n    &:first-child #{if(support-legacy-browser(ie, \"6\"), ', &.first', null)} {\n      border-right: $width solid $color; } } }\n\n@mixin inner-table-borders($width: 2px, $color: black) {\n  th, td {\n    border: {\n      right: $width solid $color;\n      bottom: $width solid $color;\n      left-width: 0;\n      top-width: 0; };\n    &:last-child {\n      border-right-width: 0; }\n\n    // IE8 ignores rules that are included on the same line as :last-child\n    // see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n    @if support-legacy-browser(ie, \"8\") {\n      &.last {\n        border-right-width: 0; } } }\n\n  tbody, tfoot {\n    tr:last-child {\n      th, td {\n        border-bottom-width: 0; } }\n    @if support-legacy-browser(ie, \"8\") {\n      tr.last {\n        th, td {\n          border-bottom-width: 0; } } } } }\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/tables/_scaffolding.scss",
    "content": "@mixin table-scaffolding {\n  th {\n    text-align: center;\n    font-weight: bold; }\n  td,\n  th {\n    padding: 2px;\n    &.numeric {\n      text-align: right; } } }\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/text/_ellipsis.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/text/ellipsis' instead.\";\n\n@import \"../../typography/text/ellipsis\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/text/_nowrap.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/text/nowrap' instead.\";\n\n@import \"../../typography/text/nowrap\";\n"
  },
  {
    "path": "core/stylesheets/compass/utilities/text/_replacement.scss",
    "content": "@warn \"This import is deprecated. Use 'compass/typography/text/replacement' instead.\";\n\n@import \"../../typography/text/replacement\";\n"
  },
  {
    "path": "core/templates/ellipsis/ellipsis.sass",
    "content": "// Since you've installed the xml file, you should set\n// $use-mozilla-ellipsis-binding to true before importing.\n$use-mozilla-ellipsis-binding: true\n@import compass/typography/text/ellipsis\n\n// You can delete this sass file if you want, it's just an example of how to use the ellipsis mixin.\n// By default, ellipsis text is no-wrap. Pass false as the first argument if you don't want that.\n.ellipsis\n  +ellipsis"
  },
  {
    "path": "core/templates/ellipsis/manifest.rb",
    "content": "description \"Plugin for cross-browser ellipsis truncated text.\"\n\nfile 'xml/ellipsis.xml', :like => :css\nstylesheet 'ellipsis.sass'\n\nhelp %Q{\nFirst, install the plugin to get the xml file that makes this work in firefox:\n\n  compass install compass/ellipsis\n\nThen @include \"ellipsis\" into your selectors to enable ellipsis\nthere when text gets too long.\n\nThe ellipsis.sass file is just an example for how to use this plugin,\nfeel free to delete it.\n\nFor more information see:\n  http://mattsnider.com/css/css-string-truncation-with-ellipsis/\n}\n\nwelcome_message %Q{\nThe ellipsis.sass file is just an example for how to use this plugin,\nfeel free to delete it.\n\nFor more information see:\n  http://mattsnider.com/css/css-string-truncation-with-ellipsis/  \n}"
  },
  {
    "path": "core/templates/ellipsis/xml/ellipsis.xml",
    "content": "<?xml version=\"1.0\"?>\n<bindings\n  xmlns=\"http://www.mozilla.org/xbl\"\n  xmlns:xbl=\"http://www.mozilla.org/xbl\"\n  xmlns:xul=\"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\"\n>\n\t<binding id=\"ellipsis\">\n\t\t<content>\n\t\t\t<xul:window>\n\t\t\t\t<xul:description crop=\"end\" xbl:inherits=\"value=xbl:text\"><children/></xul:description>\n\t\t\t</xul:window>\n\t\t</content>\n\t</binding>\n</bindings>"
  },
  {
    "path": "core/templates/extension/manifest.rb",
    "content": "description \"Generate a compass extension.\"\n\nunless options.include?(:preferred_syntax)\n  options[:preferred_syntax] = 'sass'\nend\n\nfile 'templates/project/manifest.rb'\nfile \"stylesheets/main.sass\", :to => \"stylesheets/_#{File.basename(options[:pattern_name]||options[:project_name]||'main')}.#{options[:preferred_syntax]}\"\n\nfile \"templates/project/screen.sass\", :to => \"templates/project/screen.#{options[:preferred_syntax]}\"\n\n\nhelp %Q{\n  To generate a compass extension:\n  compass create my_extension --using compass/extension\n}\n\nwelcome_message %Q{\nFor a full tutorial on how to build your own extension see:\n\nhttp://compass-style.org/help/tutorials/extensions/\n\n}, :replace => true\n\nno_configuration_file!\nskip_compilation!\n"
  },
  {
    "path": "core/templates/extension/stylesheets/main.sass",
    "content": "// This is your framework's main stylesheet. Use it to import all default modules.\n"
  },
  {
    "path": "core/templates/extension/templates/project/manifest.rb",
    "content": "# Make sure you list all the project template files here in the manifest.\nstylesheet 'screen.sass', :media => 'screen, projection'\n"
  },
  {
    "path": "core/templates/extension/templates/project/screen.sass",
    "content": "// This is where you put the contents of the main stylesheet for the user's project.\n// It should import your sass stylesheets and demonstrate how to use them."
  },
  {
    "path": "core/templates/project/USAGE.markdown",
    "content": "When no framework is specified, a new compass project is set up with three stylesheets:\n\n* screen.sass\n* print.sass\n* ie.sass\n\nIt is expected that you will link your html to these like so:\n\n    <head>\n      <link href=\"/stylesheets/screen.css\" media=\"screen, projection\"\n            rel=\"stylesheet\" type=\"text/css\" />\n      <link href=\"/stylesheets/print.css\" media=\"print\"\n            rel=\"stylesheet\" type=\"text/css\" />\n      <!--[if IE]>\n          <link href=\"/stylesheets/ie.css\" media=\"screen, projection\"\n                rel=\"stylesheet\" type=\"text/css\" />\n      <![endif]-->\n    </head>\n\nYou don't have to use these three stylesheets, they are just a recommendation.\nYou can rename them, make new stylesheets, and delete them. Compass will\nhappily compile whatever sass files you place into your project.\n\nAny folders you create in your source directory with sass files in them will be folders\nthat get created with css files in them when compiled.\n\nSass files beginning with an underscore are called partials, they are not directly\ncompiled to their own css file. You can use these partials by importing them\ninto other stylesheets. This is useful for keeping your stylesheets small and manageable\nand single-focused. It is common to create a file called _base.sass at the top level\nof your stylesheets and to import this to set up project-wide constants and mixins.\n\n"
  },
  {
    "path": "core/templates/project/ie.sass",
    "content": "/*\n  Welcome to Compass. Use this file to write IE specific override styles.\n  Import this file using the following HTML or equivalent:\n  <!--[if IE]>\n    <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n"
  },
  {
    "path": "core/templates/project/manifest.rb",
    "content": "description \"The default project layout.\"\nstylesheet 'screen.sass', :media => 'screen, projection'\nstylesheet 'print.sass',  :media => 'print'\nstylesheet 'ie.sass',     :media => 'screen, projection', :condition => \"IE\""
  },
  {
    "path": "core/templates/project/print.sass",
    "content": "/*\n  Welcome to Compass. Use this file to define print styles.\n  Import this file using the following HTML or equivalent:\n  <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" />\n  \n\n"
  },
  {
    "path": "core/templates/project/screen.sass",
    "content": "/*\n  Welcome to Compass.\n  In this file you should write your main styles. (or centralize your imports)\n  Import this file using the following HTML or equivalent:\n  <link href=\"/stylesheets/screen.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" />\n\n@import compass/reset\n"
  },
  {
    "path": "core/test/helpers/diff.rb",
    "content": "require 'diff/lcs'\nrequire 'diff/lcs/hunk'\nmodule Compass\n  module Diff\n    #stole this from rspec who stole this from the gem\n    def diff_as_string(data_old, data_new)\n      data_old = data_old.split(/\\n/).map! { |e| e.chomp }\n      data_new = data_new.split(/\\n/).map! { |e| e.chomp }\n      output = \"\"\n      diffs = ::Diff::LCS.diff(data_old, data_new)\n      return output if diffs.empty?\n      oldhunk = hunk = nil  \n      file_length_difference = 0\n      diffs.each do |piece|\n        begin\n          hunk = ::Diff::LCS::Hunk.new(\n            data_old, data_new, piece, context_lines, file_length_difference\n          )\n          file_length_difference = hunk.file_length_difference      \n          next unless oldhunk      \n          # Hunks may overlap, which is why we need to be careful when our\n          # diff includes lines of context. Otherwise, we might print\n          # redundant lines.\n          if (context_lines > 0) and hunk.overlaps?(oldhunk)\n            hunk.unshift(oldhunk)\n          else\n            output << oldhunk.diff(format)\n          end\n        ensure\n          oldhunk = hunk\n          output << \"\\n\"\n        end\n      end  \n      #Handle the last remaining hunk\n      output << oldhunk.diff(format) << \"\\n\"\n    end\n  \n    protected\n\n      def format\n        :unified\n      end\n\n      def context_lines\n        3\n      end\n  \n  end\nend"
  },
  {
    "path": "core/test/integrations/projects/.gitignore",
    "content": "*/saved/**/*.*\n"
  },
  {
    "path": "core/test/integrations/projects/busted_font_urls/css/screen.css",
    "content": ".showgrid { font-family: url('http://assets3.example.com/fonts/grid-BUSTED.ttf'); }\n\n.no-buster { font-family: url('http://assets3.example.com/fonts/grid.ttf'); }\n\n.buster-by-default { font-family: url('http://assets3.example.com/fonts/grid-BUSTED.ttf'); }\n\n.feed { font-family: url('http://assets3.example.com/fonts/feed.ttf?query_string'); }\n\n.dk { font-family: url('http://assets1.example.com/fonts/sub/dk.ttf?query_string'); }\n"
  },
  {
    "path": "core/test/integrations/projects/busted_font_urls/sass/_project-setup.scss",
    "content": "$project-path: absolute-path(join-file-segments(\"..\"));\n\n@import \"compass/configuration\";\n\n@function asset-host($path) {\n  @return \"http://assets#{str-length($path) % 4}.example.com\"\n}\n\n@function busted($url, $file) {\n  $file-parts: split-filename($url);\n\n  $dirname: nth($file-parts, 1);\n  $basename: nth($file-parts, 2);\n  $extname: nth($file-parts, 3);\n\n  @if $basename == \"grid\" {\n    @return (path: \"#{$dirname}/#{$basename}-BUSTED#{$extname}\", query: null);\n  } @else if $basename == \"feed\" {\n    @return \"query_string\";\n  } @else if $basename == \"dk\" {\n    @return (query: \"query_string\");\n  } @else {\n    @return null;\n  }\n}\n\n@include compass-configuration($asset-cache-buster: busted, $asset-host: asset-host);\n\n\n"
  },
  {
    "path": "core/test/integrations/projects/busted_font_urls/sass/screen.sass",
    "content": "@import \"project-setup\"\n\n.showgrid\n  font-family: font-url(\"grid.ttf\", $only-path: false, $cache-buster: true)\n\n.no-buster\n  font-family: font-url(\"grid.ttf\", $only-path: false, $cache-buster: false)\n\n.buster-by-default\n  font-family: font-url(\"grid.ttf\")\n\n.feed\n  font-family: font-url(\"feed.ttf\", $only-path: false, $cache-buster: true)\n\n.dk\n  font-family: font-url(\"sub/dk.ttf\", $only-path: false, $cache-buster: true)\n"
  },
  {
    "path": "core/test/integrations/projects/busted_image_urls/css/screen.css",
    "content": ".showgrid { background-image: url('http://assets0.example.com/images/grid-BUSTED.png'); }\n\n.inlinegrid { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAUEAYAAACv1qP4AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAZ0lEQVRYw+3QwQ2AIBAFUTEUwI3+uzN7gDscsIgxEuO8An52J11X73OudfxMraXkzHfO3Y98nQEhA0IGhAwIGRAyIGRAyICQASEDQgaEDAgZEDIgZEDIgJABoZzSGK3tPuN9ERFP7Nw4fg+c5g8V1wAAAABJRU5ErkJggg=='); }\n\n.no-buster { background-image: url('http://assets0.example.com/images/grid.png'); }\n\n.feed { background-image: url('http://assets0.example.com/images/feed.png?query_string'); }\n\n.dk { background-image: url('http://assets0.example.com/images/flags/dk.png?query_string'); }\n\n.us { background-image: url('http://assets0.example.com/images/flags/us.png?h=032797efa407ee86590b491e44759b42'); }\n\n.gb { background-image: url('http://assets0.example.com/images/flags/gb.png?i=199110015093513000754718445147053933528'); }\n"
  },
  {
    "path": "core/test/integrations/projects/busted_image_urls/sass/_project-setup.scss",
    "content": "$project-path: absolute-path(join-file-segments(\"..\"));\n\n@import \"compass/configuration\";\n\n@function asset-host($path) {\n  @return \"http://assets#{str-length($path) % 4}.example.com\"\n}\n\n@function busted($url, $file) {\n  $file-parts: split-filename($url);\n\n  $dirname: nth($file-parts, 1);\n  $basename: nth($file-parts, 2);\n  $extname: nth($file-parts, 3);\n\n  @if $basename == \"grid\" {\n    @return (path: \"#{$dirname}/#{$basename}-BUSTED#{$extname}\", query: null);\n  } @else if $basename == \"feed\" {\n    @return \"query_string\";\n  } @else if $basename == \"dk\" {\n    @return (query: \"query_string\");\n  } @else if $basename == \"us\" {\n    @return (query: \"h=#{md5sum($file)}\");\n  } @else if $basename == \"gb\" {\n    @return (query: \"i=#{md5sum($file, integer)}\");\n  } @else {\n    @return null;\n  }\n}\n\n@include compass-configuration($asset-cache-buster: busted, $asset-host: asset-host);\n"
  },
  {
    "path": "core/test/integrations/projects/busted_image_urls/sass/screen.sass",
    "content": "@import \"project-setup\"\n\n.showgrid\n  background-image: image-url(\"grid.png\")\n\n.inlinegrid\n  background-image: inline-image(\"grid.png\")\n\n.no-buster\n  background-image: image-url(\"grid.png\", $only-path: false, $cache-buster: false)\n\n.feed\n  background-image: image-url(\"feed.png\")\n\n.dk\n  background-image: image-url(\"flags/dk.png\")\n\n.us\n  background-image: image-url(\"flags/us.png\")\n\n.gb\n  background-image: image-url(\"flags/gb.png\")\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/animation-with-legacy-ie.css",
    "content": "@-moz-keyframes test {\n  0%, 100% {\n    opacity: 1; }\n\n  50% {\n    opacity: 0; } }\n@-webkit-keyframes test {\n  0%, 100% {\n    opacity: 1; }\n\n  50% {\n    opacity: 0; } }\n@keyframes test {\n  0%, 100% {\n    opacity: 1; }\n\n  50% {\n    opacity: 0; } }\n.animation {\n  -moz-animation: test;\n  -webkit-animation: test;\n  animation: test; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/animation.css",
    "content": "@-moz-keyframes test {\n  0%, 100% {\n    background-color: red; }\n\n  50% {\n    background-color: blue; } }\n@-webkit-keyframes test {\n  0%, 100% {\n    background-color: red; }\n\n  50% {\n    background-color: blue; } }\n@keyframes test {\n  0%, 100% {\n    background-color: red; }\n\n  50% {\n    background-color: blue; } }\n.animation {\n  -moz-animation: test;\n  -webkit-animation: test;\n  animation: test; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/appearance.css",
    "content": ".searchfield {\n  -moz-appearance: searchfield;\n  -webkit-appearance: searchfield; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/background-clip.css",
    "content": ".background-clip {\n  -moz-background-clip: border;\n  -o-background-clip: border-box;\n  -webkit-background-clip: border;\n  background-clip: border-box; }\n\n.background-clip-multiple {\n  -moz-background-clip: border, padding, content;\n  -o-background-clip: border-box, padding-box, content-box;\n  -webkit-background-clip: border, padding, content;\n  background-clip: border-box, padding-box, content-box; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/background-origin.css",
    "content": ".background-origin {\n  -moz-background-origin: border;\n  -o-background-origin: border-box;\n  -webkit-background-origin: border;\n  background-origin: border-box; }\n\n.background-origin-multiple {\n  -moz-background-origin: border, padding, content;\n  -o-background-origin: border-box, padding-box, content-box;\n  -webkit-background-origin: border, padding, content;\n  background-origin: border-box, padding-box, content-box; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/background-size.css",
    "content": ".background-size-default {\n  -moz-background-size: 100% auto;\n  -o-background-size: 100% auto;\n  -webkit-background-size: 100% auto;\n  background-size: 100% auto; }\n\n.background-size-single {\n  -moz-background-size: 50% 25%;\n  -o-background-size: 50% 25%;\n  -webkit-background-size: 50% 25%;\n  background-size: 50% 25%; }\n\n.background-size-multiple {\n  -moz-background-size: 4em 3em, 100% auto, 50%;\n  -o-background-size: 4em 3em, 100% auto, 50%;\n  -webkit-background-size: 4em 3em, 100% auto, 50%;\n  background-size: 4em 3em, 100% auto, 50%; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/border_radius.css",
    "content": ".simple {\n  -moz-border-radius: 4px / 4px;\n  -webkit-border-radius: 4px 4px;\n  border-radius: 4px / 4px; }\n\n.compound {\n  -moz-border-radius: 2px 5px / 3px 6px;\n  -webkit-border-radius: 2px 3px;\n  border-radius: 2px 5px / 3px 6px; }\n\n.crazy {\n  -moz-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px;\n  -webkit-border-radius: 1px 2px;\n  border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/box-sizing.css",
    "content": ".div {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.div {\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box; }\n\n.div {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/box.css",
    "content": ".hbox {\n  display: -webkit-box;\n  display: -moz-box;\n  display: -ms-box;\n  display: box;\n  -webkit-box-orient: horizontal;\n  -moz-box-orient: horizontal;\n  -ms-box-orient: horizontal;\n  box-orient: horizontal;\n  -webkit-box-align: stretch;\n  -moz-box-align: stretch;\n  -ms-box-align: stretch;\n  box-align: stretch; }\n  .hbox > * {\n    -webkit-box-flex: 0;\n    -moz-box-flex: 0;\n    -ms-box-flex: 0;\n    box-flex: 0; }\n\n.vbox {\n  display: -webkit-box;\n  display: -moz-box;\n  display: -ms-box;\n  display: box;\n  -webkit-box-orient: vertical;\n  -moz-box-orient: vertical;\n  -ms-box-orient: vertical;\n  box-orient: vertical;\n  -webkit-box-align: stretch;\n  -moz-box-align: stretch;\n  -ms-box-align: stretch;\n  box-align: stretch; }\n  .vbox > * {\n    -webkit-box-flex: 0;\n    -moz-box-flex: 0;\n    -ms-box-flex: 0;\n    box-flex: 0; }\n\n.spacer {\n  -webkit-box-flex: 1;\n  -moz-box-flex: 1;\n  -ms-box-flex: 1;\n  box-flex: 1; }\n\n.reverse {\n  -webkit-box-direction: reverse;\n  -moz-box-direction: reverse;\n  -ms-box-direction: reverse;\n  box-direction: reverse; }\n\n.box-flex-0 {\n  -webkit-box-flex: 0;\n  -moz-box-flex: 0;\n  -ms-box-flex: 0;\n  box-flex: 0; }\n\n.box-flex-1 {\n  -webkit-box-flex: 1;\n  -moz-box-flex: 1;\n  -ms-box-flex: 1;\n  box-flex: 1; }\n\n.box-flex-2 {\n  -webkit-box-flex: 2;\n  -moz-box-flex: 2;\n  -ms-box-flex: 2;\n  box-flex: 2; }\n\n.box-flex-group-0 {\n  -webkit-box-flex-group: 0;\n  -moz-box-flex-group: 0;\n  -ms-box-flex-group: 0;\n  box-flex-group: 0; }\n\n.box-flex-group-1 {\n  -webkit-box-flex-group: 1;\n  -moz-box-flex-group: 1;\n  -ms-box-flex-group: 1;\n  box-flex-group: 1; }\n\n.box-flex-group-2 {\n  -webkit-box-flex-group: 2;\n  -moz-box-flex-group: 2;\n  -ms-box-flex-group: 2;\n  box-flex-group: 2; }\n\n.start {\n  -webkit-box-pack: start;\n  -moz-box-pack: start;\n  -ms-box-pack: start;\n  box-pack: start; }\n\n.end {\n  -webkit-box-pack: end;\n  -moz-box-pack: end;\n  -ms-box-pack: end;\n  box-pack: end; }\n\n.center {\n  -webkit-box-pack: center;\n  -moz-box-pack: center;\n  -ms-box-pack: center;\n  box-pack: center; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/box_shadow.css",
    "content": ".no-box-shadow {\n  -moz-box-shadow: none;\n  -webkit-box-shadow: none;\n  box-shadow: none; }\n\n.box-shadow {\n  -moz-box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222;\n  -webkit-box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222;\n  box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222; }\n\n.single-box-shadow {\n  -moz-box-shadow: 0px 5px #333333;\n  -webkit-box-shadow: 0px 5px #333333;\n  box-shadow: 0px 5px #333333; }\n\n.multiple-box-shadows {\n  -moz-box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222;\n  -webkit-box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222;\n  box-shadow: 0px 0px 5px #333333, 2px 2px 5px #222222; }\n\n.legacy-single-box-shadow {\n  -moz-box-shadow: 0px 5px blue;\n  -webkit-box-shadow: 0px 5px blue;\n  box-shadow: 0px 5px blue; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/brightness.css",
    "content": ".black-is-0-percent {\n  brightness: 0%; }\n\n.white-is-100-percent {\n  brightness: 100%; }\n\n.green-is-58-point-7-percent {\n  brightness: 58.7%; }\n\n.blue-is-11-point-4-percent {\n  brightness: 11.4%; }\n\n.red-is-29-point-9-percent {\n  brightness: 29.9%; }\n\n.numeric-brightness-keeps-value {\n  brightness: brightness(1.1); }\n\n.percentage-brightness-keeps-value {\n  brightness: brightness(110%); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/browser-support.css",
    "content": ".android {\n  versions: \"2.1\", \"2.2\", \"2.3\", \"3\", \"4\", \"4.1\", \"4.2-4.3\", \"4.4\", \"4.4.3\";\n  background-img-opts: -webkit;\n  background-img-opts-unprefixed-at: \"3\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"4.4\";\n  border-radius: -webkit;\n  border-radius-unprefixed-at: \"2.2\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"4\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"4.4\";\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"4.4\";\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"4.4\";\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"4\";\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n\n.android-chrome {\n  versions: \"36\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n\n.android-firefox {\n  versions: \"31\";\n  css-appearance: -moz;\n  css-hyphens: -moz;\n  css-placeholder: -moz;\n  css3-tabsize: -moz;\n  font-feature: -moz;\n  intrinsic-width: -moz;\n  multicolumn: -moz;\n  text-decoration: -moz;\n  text-size-adjust: -moz;\n  user-select-none: -moz; }\n\n.blackberry {\n  versions: \"7\", \"10\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"10\";\n  calc: -webkit;\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"10\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-repeating-gradients: -webkit;\n  css-transitions: -webkit;\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"10\";\n  flexbox: -webkit;\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n\n.chrome {\n  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\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"16\";\n  border-radius: -webkit;\n  border-radius-unprefixed-at: \"5\";\n  calc: -webkit;\n  calc-unprefixed-at: \"26\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"10\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"26\";\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-regions: -webkit;\n  css-regions-unprefixed-at: \"19\";\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"26\";\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"26\";\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"10\";\n  flexbox: -webkit;\n  flexbox-unprefixed-at: \"29\";\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms2d-unprefixed-at: \"36\";\n  transforms3d: -webkit;\n  transforms3d-unprefixed-at: \"36\";\n  user-select-none: -webkit; }\n\n.firefox {\n  versions: \"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\";\n  background-img-opts: -moz;\n  background-img-opts-unprefixed-at: \"4\";\n  border-image: -moz;\n  border-image-unprefixed-at: \"15\";\n  border-radius: -moz;\n  border-radius-unprefixed-at: \"4\";\n  calc: -moz;\n  calc-unprefixed-at: \"16\";\n  css-animation: -moz;\n  css-animation-unprefixed-at: \"16\";\n  css-appearance: -moz;\n  css-boxshadow: -moz;\n  css-boxshadow-unprefixed-at: \"4\";\n  css-gradients: -moz;\n  css-gradients-unprefixed-at: \"16\";\n  css-hyphens: -moz;\n  css-placeholder: -moz;\n  css-repeating-gradients: -moz;\n  css-repeating-gradients-unprefixed-at: \"16\";\n  css-resize: prefix-no-longer-needed;\n  css-resize-unprefixed-at: \"5\";\n  css-selection: -moz;\n  css-transitions: -moz;\n  css-transitions-unprefixed-at: \"16\";\n  css3-boxsizing: -moz;\n  css3-boxsizing-unprefixed-at: \"29\";\n  css3-tabsize: -moz;\n  font-feature: -moz;\n  font-feature-unprefixed-at: \"32\";\n  inline-block: prefix-no-longer-needed;\n  inline-block-unprefixed-at: \"3\";\n  intrinsic-width: -moz;\n  multicolumn: -moz;\n  text-decoration: -moz;\n  transforms2d: -moz;\n  transforms2d-unprefixed-at: \"16\";\n  transforms3d: -moz;\n  transforms3d-unprefixed-at: \"16\";\n  user-select-none: -moz; }\n\n.ie {\n  versions: \"5.5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\";\n  css-grid: -ms;\n  css-hyphens: -ms;\n  css-placeholder: -ms;\n  css-regions: -ms;\n  transforms2d: -ms;\n  transforms2d-unprefixed-at: \"10\";\n  user-select-none: -ms; }\n\n.ie-mobile {\n  versions: \"10\";\n  css-grid: -ms;\n  css-placeholder: -ms;\n  css-regions: -ms;\n  text-size-adjust: -ms;\n  user-select-none: -ms; }\n\n.ios-safari {\n  versions: \"3.2\", \"4.0-4.1\", \"4.2-4.3\", \"5.0-5.1\", \"6.0-6.1\", \"7.0-7.1\", \"8\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"6.0-6.1\";\n  border-radius: -webkit;\n  border-radius-unprefixed-at: \"4.0-4.1\";\n  calc: -webkit;\n  calc-unprefixed-at: \"7.0-7.1\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"5.0-5.1\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"7.0-7.1\";\n  css-hyphens: -webkit;\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-regions: -webkit;\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"7.0-7.1\";\n  css-shapes: prefix-no-longer-needed;\n  css-sticky: -webkit;\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"7.0-7.1\";\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"5.0-5.1\";\n  flexbox: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-size-adjust: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n\n.opera {\n  versions: \"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\";\n  background-img-opts: -webkit;\n  background-img-opts-unprefixed-at: \"10.5\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"15\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"12.1\";\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"12.1\";\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"12.1\";\n  css3-tabsize: prefix-no-longer-needed;\n  css3-tabsize-unprefixed-at: \"15\";\n  flexbox: -webkit;\n  flexbox-unprefixed-at: \"17\";\n  font-feature: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  object-fit: prefix-no-longer-needed;\n  object-fit-unprefixed-at: \"15\";\n  text-overflow: prefix-no-longer-needed;\n  text-overflow-unprefixed-at: \"11\";\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms2d-unprefixed-at: \"23\";\n  transforms3d: -webkit;\n  transforms3d-unprefixed-at: \"23\";\n  user-select-none: -webkit; }\n\n.opera-mini {\n  versions: \"5.0-7.0\";\n  text-overflow: -o; }\n\n.opera-mobile {\n  versions: \"10\", \"11.5\", \"12\", \"12.1\", \"22\";\n  border-image: -o;\n  border-image-unprefixed-at: \"22\";\n  css-animation: prefix-no-longer-needed;\n  css-appearance: prefix-no-longer-needed;\n  css-canvas: prefix-no-longer-needed;\n  css-filters: prefix-no-longer-needed;\n  css-gradients: prefix-no-longer-needed;\n  css-gradients-unprefixed-at: \"12.1\";\n  css-masks: prefix-no-longer-needed;\n  css-placeholder: prefix-no-longer-needed;\n  css-reflections: prefix-no-longer-needed;\n  css-repeating-gradients: prefix-no-longer-needed;\n  css-repeating-gradients-unprefixed-at: \"12.1\";\n  css-transitions: -o;\n  css-transitions-unprefixed-at: \"12.1\";\n  css3-tabsize: -o;\n  css3-tabsize-unprefixed-at: \"22\";\n  font-feature: prefix-no-longer-needed;\n  intrinsic-width: prefix-no-longer-needed;\n  multicolumn: prefix-no-longer-needed;\n  object-fit: -o;\n  object-fit-unprefixed-at: \"22\";\n  text-overflow: -o;\n  text-overflow-unprefixed-at: \"12.1\";\n  text-stroke: prefix-no-longer-needed;\n  transforms2d: prefix-no-longer-needed;\n  transforms3d: prefix-no-longer-needed;\n  user-select-none: prefix-no-longer-needed; }\n\n.safari {\n  versions: \"3.1\", \"3.2\", \"4\", \"5\", \"5.1\", \"6\", \"6.1\", \"7\", \"8\";\n  border-image: -webkit;\n  border-image-unprefixed-at: \"6\";\n  border-radius: -webkit;\n  border-radius-unprefixed-at: \"5\";\n  calc: -webkit;\n  calc-unprefixed-at: \"6.1\";\n  css-animation: -webkit;\n  css-appearance: -webkit;\n  css-boxshadow: -webkit;\n  css-boxshadow-unprefixed-at: \"5.1\";\n  css-canvas: -webkit;\n  css-filters: -webkit;\n  css-gradients: -webkit;\n  css-gradients-unprefixed-at: \"6.1\";\n  css-hyphens: -webkit;\n  css-masks: -webkit;\n  css-placeholder: -webkit;\n  css-reflections: -webkit;\n  css-regions: -webkit;\n  css-repeating-gradients: -webkit;\n  css-repeating-gradients-unprefixed-at: \"6.1\";\n  css-shapes: prefix-no-longer-needed;\n  css-sticky: -webkit;\n  css-transitions: -webkit;\n  css-transitions-unprefixed-at: \"6.1\";\n  css3-boxsizing: -webkit;\n  css3-boxsizing-unprefixed-at: \"5.1\";\n  flexbox: -webkit;\n  intrinsic-width: -webkit;\n  multicolumn: -webkit;\n  text-stroke: -webkit;\n  transforms2d: -webkit;\n  transforms3d: -webkit;\n  user-select-none: -webkit; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/color.css",
    "content": ".handles-null {\n  content: \"there should be no property below this one\"; }\n\n.contrasts-light {\n  background-color: #eeeeee;\n  color: black; }\n\n.contrasts-dark {\n  background-color: #222222;\n  color: white; }\n\n.contrasts-light-with-contrast-color-override {\n  background-color: #eeeeee;\n  color: red; }\n\n.contrasts-dark-with-contrast-color-override {\n  background-color: #222222;\n  color: yellow; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/columns.css",
    "content": ".columns {\n  -moz-columns: 20em 5;\n  -webkit-columns: 20em 5;\n  columns: 20em 5; }\n\n.column-count {\n  -moz-column-count: 5;\n  -webkit-column-count: 5;\n  column-count: 5; }\n\n.column-gap {\n  -moz-column-gap: 10px;\n  -webkit-column-gap: 10px;\n  column-gap: 10px; }\n\n.column-width {\n  -moz-column-width: 90px;\n  -webkit-column-width: 90px;\n  column-width: 90px; }\n\n.column-span {\n  -moz-column-span: all;\n  -webkit-column-span: all;\n  column-span: all; }\n\n.column-rule-width {\n  -moz-rule-width: 1px;\n  -webkit-rule-width: 1px;\n  rule-width: 1px; }\n\n.column-rule-style {\n  -moz-rule-style: dotted;\n  -webkit-rule-style: dotted;\n  rule-style: dotted; }\n\n.column-rule-color {\n  -moz-rule-color: blue;\n  -webkit-rule-color: blue;\n  rule-color: blue; }\n\n.column-rule {\n  -moz-column-rule: 1px solid blue;\n  -webkit-column-rule: 1px solid blue;\n  column-rule: 1px solid blue; }\n\n.column-rule-spaced {\n  -moz-column-rule: 1px solid blue;\n  -webkit-column-rule: 1px solid blue;\n  column-rule: 1px solid blue; }\n\n.column-break-before {\n  -moz-page-break-before: always;\n  -webkit-column-break-before: always;\n  break-before: always; }\n\n.column-break-after {\n  -moz-page-break-after: always;\n  -webkit-column-break-after: always;\n  break-after: always; }\n\n.column-break-inside {\n  -moz-page-break-inside: auto;\n  -webkit-column-break-inside: auto;\n  break-inside: auto; }\n\n.column-count {\n  -moz-column-count: 5;\n  -webkit-column-count: 5;\n  column-count: 5; }\n\n.column-gap {\n  -moz-column-gap: 10px;\n  -webkit-column-gap: 10px;\n  column-gap: 10px; }\n\n.column-width {\n  -moz-column-width: 90px;\n  -webkit-column-width: 90px;\n  column-width: 90px; }\n\n.column-rule-width {\n  -moz-rule-width: 1px;\n  -webkit-rule-width: 1px;\n  rule-width: 1px; }\n\n.column-rule-style {\n  -moz-rule-style: dotted;\n  -webkit-rule-style: dotted;\n  rule-style: dotted; }\n\n.column-rule-color {\n  -moz-rule-color: blue;\n  -webkit-rule-color: blue;\n  rule-color: blue; }\n\n.column-rule {\n  -moz-column-rule: 1px solid blue;\n  -webkit-column-rule: 1px solid blue;\n  column-rule: 1px solid blue; }\n\n.column-rule-spaced {\n  -moz-column-rule: 1px solid blue;\n  -webkit-column-rule: 1px solid blue;\n  column-rule: 1px solid blue; }\n\n.column-break-before {\n  -moz-page-break-before: always;\n  -webkit-column-break-before: always;\n  break-before: always; }\n\n.column-break-after {\n  -moz-page-break-after: always;\n  -webkit-column-break-after: always;\n  break-after: always; }\n\n.column-break-inside {\n  -moz-page-break-inside: auto;\n  -webkit-column-break-inside: auto;\n  break-inside: auto; }\n\n.column-break-before-shortcut {\n  -moz-page-break-before: always;\n  -webkit-column-break-before: always;\n  break-before: always; }\n\n.column-break-after-shortcut {\n  -moz-page-break-after: always;\n  -webkit-column-break-after: always;\n  break-after: always; }\n\n.column-break-inside-shortcut {\n  -moz-page-break-inside: auto;\n  -webkit-column-break-inside: auto;\n  break-inside: auto; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/env.css",
    "content": ".at-root {\n  should-be-true: true; }\n\n.not-at-root {\n  should-be-false: false; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/filters.css",
    "content": ".blur {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: blur(5px);\n  filter: blur(5px); }\n\n.brightness {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: brightness(0.2);\n  filter: brightness(0.2); }\n\n.hue-rotate {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: hue-rotate(20deg);\n  filter: hue-rotate(20deg); }\n\n.contrast {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: contrast(150%);\n  filter: contrast(150%); }\n\n.grayscale {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: grayscale(150%);\n  filter: grayscale(150%); }\n\n.sepia {\n  /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is not prefixed with -o because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-filters is prefixed with -webkit because 50.0928% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-filter: sepia(150%);\n  filter: sepia(150%); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/flexbox.css",
    "content": ".display {\n  display: -webkit-flex;\n  display: flex; }\n\n.flex-direction {\n  -webkit-flex-direction: row-reverse;\n  flex-direction: row-reverse; }\n\n.flex-wrap {\n  -webkit-flex-wrap: wrap-reverse;\n  flex-wrap: wrap-reverse; }\n\n.flex-flow {\n  -webkit-flex-flow: row-reverse wrap-reverse;\n  flex-flow: row-reverse wrap-reverse; }\n\n.order {\n  -webkit-order: 1;\n  order: 1; }\n\n.flex {\n  -webkit-flex: 1 0 auto;\n  flex: 1 0 auto; }\n\n.flex-grow {\n  -webkit-flex-grow: 1;\n  flex-grow: 1; }\n\n.flex-shrink {\n  -webkit-flex-shrink: 1;\n  flex-shrink: 1; }\n\n.flex-basis {\n  -webkit-flex-basis: auto;\n  flex-basis: auto; }\n\n.justify-content {\n  -webkit-justify-content: flex-start;\n  justify-content: flex-start; }\n\n.align-items {\n  -webkit-align-items: flex-start;\n  align-items: flex-start; }\n\n.align-self {\n  -webkit-align-self: flex-start;\n  align-self: flex-start; }\n\n.align-content {\n  -webkit-align-content: flex-start;\n  align-content: flex-start; }\n\n.flexbox {\n  display: -webkit-flex;\n  -webkit-flex-direction: row-reverse;\n  -webkit-flex-wrap: wrap-reverse;\n  -webkit-flex-flow: row-reverse wrap-reverse;\n  -webkit-order: 1;\n  -webkit-flex: 1 0 auto;\n  -webkit-flex-grow: 1;\n  -webkit-flex-shrink: 0;\n  -webkit-flex-basis: auto;\n  -webkit-justify-content: flex-start;\n  -webkit-align-items: flex-start;\n  -webkit-align-self: flex-start;\n  -webkit-align-content: flex-start;\n  display: flex;\n  flex-direction: row-reverse;\n  flex-wrap: wrap-reverse;\n  flex-flow: row-reverse wrap-reverse;\n  order: 1;\n  flex: 1 0 auto;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: auto;\n  justify-content: flex-start;\n  align-items: flex-start;\n  align-self: flex-start;\n  align-content: flex-start; }\n\n.flexbox-2 {\n  display: -ms-flexbox;\n  -ms-flex-flow: row-reverse;\n  -ms-flex-order: 1; }\n\n.flexbox-1 {\n  display: -moz-box;\n  -moz-box-orient: vertical;\n  -moz-box-ordinal-group: 1;\n  -moz-box-flex: 1;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-box-ordinal-group: 1;\n  -webkit-box-flex: 1; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/fonts.css",
    "content": "@font-face {\n  font-family: \"font1\";\n  src: url('/fonts/font1.eot?busted=true');\n  src: url('/fonts/font1.eot?&busted=true#iefix') format('embedded-opentype'), url('/fonts/font1.woff?busted=true') format('woff'); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/force-wrap.css",
    "content": "pre {\n  white-space: pre;\n  white-space: pre-wrap;\n  white-space: pre-line;\n  white-space: -pre-wrap;\n  white-space: -o-pre-wrap;\n  white-space: -moz-pre-wrap;\n  white-space: -hp-pre-wrap;\n  word-wrap: break-word; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/gradients.css",
    "content": ".bg-shortcut-simple-image {\n  background: white url(\"foo.png\"); }\n\n.bg-shortcut-linear-gradient {\n  background: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background: white -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa));\n  background: white -moz-linear-gradient(top left, #dddddd, #aaaaaa);\n  background: white -webkit-linear-gradient(top left, #dddddd, #aaaaaa);\n  background: white linear-gradient(to bottom right, #dddddd, #aaaaaa); }\n\n.bg-linear-gradient-angle-svg {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDBmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -moz-linear-gradient(135deg, #0000ff, #000000);\n  background-image: -webkit-linear-gradient(135deg, #0000ff, #000000);\n  background-image: linear-gradient(-45deg, #0000ff, #000000); }\n\n.bg-linear-gradient-angle2-svg {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDBmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #0000ff), color-stop(100%, #000000));\n  background-image: -moz-linear-gradient(top left, #0000ff, #000000);\n  background-image: -webkit-linear-gradient(top left, #0000ff, #000000);\n  background-image: linear-gradient(to bottom right, #0000ff, #000000); }\n\n.bg-simple-image {\n  background-image: url(\"foo.png\"); }\n\n.bg-linear-gradient {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(top left, #dddddd, #aaaaaa);\n  background-image: -webkit-linear-gradient(top left, #dddddd, #aaaaaa);\n  background-image: linear-gradient(to bottom right, #dddddd, #aaaaaa); }\n\n.bg-linear-gradient-pixel-stop-from-top {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiNkZGRkZGQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNhYWFhYWEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 40, color-stop(25%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(top, #dddddd 10px, #aaaaaa 40px);\n  background-image: -webkit-linear-gradient(top, #dddddd 10px, #aaaaaa 40px);\n  background-image: linear-gradient(to bottom, #dddddd 10px, #aaaaaa 40px); }\n\n.bg-linear-gradient-pixel-stop-from-left {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiNkZGRkZGQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNhYWFhYWEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 50%, 40 50%, color-stop(25%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(left, #dddddd 10px, #aaaaaa 40px);\n  background-image: -webkit-linear-gradient(left, #dddddd 10px, #aaaaaa 40px);\n  background-image: linear-gradient(to right, #dddddd 10px, #aaaaaa 40px); }\n\n.transparent-in-linear-gradient {\n  background-image: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNhYWFhYWEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: white -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, #aaaaaa));\n  background-image: white -moz-linear-gradient(top left, rgba(0, 0, 0, 0), #aaaaaa);\n  background-image: white -webkit-linear-gradient(top left, rgba(0, 0, 0, 0), #aaaaaa);\n  background-image: white linear-gradient(to bottom right, rgba(0, 0, 0, 0), #aaaaaa); }\n\n.currentColor-in-linear-gradient {\n  background-image: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9ImN1cnJlbnRDb2xvciIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: white -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, currentColor));\n  background-image: white -moz-linear-gradient(top left, rgba(0, 0, 0, 0), currentColor);\n  background-image: white -webkit-linear-gradient(top left, rgba(0, 0, 0, 0), currentColor);\n  background-image: white linear-gradient(to bottom right, rgba(0, 0, 0, 0), currentColor); }\n\n.calc-in-linear-gradient {\n  background-image: -moz-linear-gradient(left, #ffffff calc(100% - 50px), rgba(0, 0, 0, 0) calc(100% - 50px));\n  background-image: -webkit-linear-gradient(left, #ffffff calc(100% - 50px), rgba(0, 0, 0, 0) calc(100% - 50px));\n  background-image: linear-gradient(to right, #ffffff calc(100% - 50px), rgba(0, 0, 0, 0) calc(100% - 50px)); }\n\n.rgba-in-linear-gradient {\n  background-image: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjgiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  background-size: 100%;\n  background-image: white -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, rgba(255, 255, 255, 0.8)), color-stop(100%, rgba(0, 0, 0, 0.1)));\n  background-image: white -moz-linear-gradient(top left, rgba(255, 255, 255, 0.8), rgba(0, 0, 0, 0.1));\n  background-image: white -webkit-linear-gradient(top left, rgba(255, 255, 255, 0.8), rgba(0, 0, 0, 0.1));\n  background-image: white linear-gradient(to bottom right, rgba(255, 255, 255, 0.8), rgba(0, 0, 0, 0.1)); }\n\n.bg-shortcut-radial-gradient {\n  background: white url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background: white -moz-radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background: white -webkit-radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background: white radial-gradient(center center, #dddddd, #aaaaaa 100px); }\n\n.bg-all-gradient-types-with-simplification {\n  background: #ffcc00;\n  background: url('/images/4x6.png?busted=true'), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), #ffcc00;\n  background: url('/images/4x6.png?busted=true'), -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa)), radial-gradient(center center, #dddddd, #aaaaaa 100px), #ffcc00;\n  background: url('/images/4x6.png?busted=true'), -moz-linear-gradient(top left, #dddddd, #aaaaaa), -moz-radial-gradient(center center, #dddddd, #aaaaaa 100px), #ffcc00;\n  background: url('/images/4x6.png?busted=true'), -webkit-linear-gradient(top left, #dddddd, #aaaaaa), -webkit-radial-gradient(center center, #dddddd, #aaaaaa 100px), #ffcc00;\n  background: url('/images/4x6.png?busted=true'), linear-gradient(to bottom right, #dddddd, #aaaaaa), radial-gradient(center center, #dddddd, #aaaaaa 100px), #ffcc00; }\n\n.bg-radial-gradient {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -moz-radial-gradient(center center, #dddddd, rgba(0, 0, 0, 0) 100px);\n  background-image: -webkit-radial-gradient(center center, #dddddd, rgba(0, 0, 0, 0) 100px);\n  background-image: radial-gradient(center center, #dddddd, rgba(0, 0, 0, 0) 100px); }\n\n.currentColor-in-radial-gradient {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iY3VycmVudENvbG9yIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -moz-radial-gradient(center center, currentColor, rgba(0, 0, 0, 0) 100px);\n  background-image: -webkit-radial-gradient(center center, currentColor, rgba(0, 0, 0, 0) 100px);\n  background-image: radial-gradient(center center, currentColor, rgba(0, 0, 0, 0) 100px); }\n\n.bg-linear-gradient-with-angle {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -moz-linear-gradient(135deg, #dddddd, #aaaaaa);\n  background-image: -webkit-linear-gradient(135deg, #dddddd, #aaaaaa);\n  background-image: linear-gradient(-45deg, #dddddd, #aaaaaa); }\n\n.bg-radial-gradient-with-angle-and-shape {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9ImVsbGlwc2UiIGN5PSJjb3ZlciIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -moz-radial-gradient(ellipse cover, #dddddd, #aaaaaa 100px);\n  background-image: -webkit-radial-gradient(ellipse cover, #dddddd, #aaaaaa 100px);\n  background-image: radial-gradient(ellipse cover, #dddddd, #aaaaaa 100px); }\n\n.bg-all-gradient-types {\n  background-image: url('/images/4x6.png?busted=true'), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuMCIgeDI9IjEuMCIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: url('/images/4x6.png?busted=true'), -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa)), radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background-image: url('/images/4x6.png?busted=true'), -moz-linear-gradient(top left, #dddddd, #aaaaaa), -moz-radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background-image: url('/images/4x6.png?busted=true'), -webkit-linear-gradient(top left, #dddddd, #aaaaaa), -webkit-radial-gradient(center center, #dddddd, #aaaaaa 100px);\n  background-image: url('/images/4x6.png?busted=true'), linear-gradient(to bottom right, #dddddd, #aaaaaa), radial-gradient(center center, #dddddd, #aaaaaa 100px); }\n\n.border-image-gradient {\n  -moz-border-image: -moz-radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  -moz-border-image: radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  -o-border-image: radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  -webkit-border-image: -webkit-radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  -webkit-border-image: radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  border-image: -moz-radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  border-image: -webkit-radial-gradient(#00ff00, #ff0000 100px) 100 stretch;\n  border-image: radial-gradient(#00ff00, #ff0000 100px) 100 stretch; }\n\n.direct-list-image-plain {\n  list-style-image: url('/images/4x6.png?busted=true'); }\n\n.shorthand-list-image-plain {\n  list-style: outside url('/images/4x6.png?busted=true'); }\n\n.direct-list-image-with-gradient {\n  list-style-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjMDBmZjAwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmYwMDAwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  list-style-image: -moz-radial-gradient(#00ff00, #ff0000 10px);\n  list-style-image: -webkit-radial-gradient(#00ff00, #ff0000 10px);\n  list-style-image: radial-gradient(#00ff00, #ff0000 10px); }\n\n.shorthand-list-image-with-gradient {\n  list-style: outside url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjMDBmZjAwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmYwMDAwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  list-style: outside -moz-radial-gradient(#00ff00, #ff0000 10px);\n  list-style: outside -webkit-radial-gradient(#00ff00, #ff0000 10px);\n  list-style: outside radial-gradient(#00ff00, #ff0000 10px); }\n\n.content-plain {\n  content: \"asdf\"; }\n\n.content-with-gradient {\n  content: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjMDBmZjAwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmYwMDAwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  content: -moz-radial-gradient(#00ff00, #ff0000 10px);\n  content: -webkit-radial-gradient(#00ff00, #ff0000 10px);\n  content: radial-gradient(#00ff00, #ff0000 10px); }\n\n.bg-linear-gradient-no-position {\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(#dddddd, #aaaaaa);\n  background-image: -webkit-linear-gradient(#dddddd, #aaaaaa);\n  background-image: linear-gradient(#dddddd, #aaaaaa); }\n\n.bg-radial-gradient-no-position {\n  background-image: -moz-radial-gradient(#dddddd, #aaaaaa 100px);\n  background-image: -webkit-radial-gradient(#dddddd, #aaaaaa 100px);\n  background-image: radial-gradient(#dddddd, #aaaaaa 100px); }\n\n.image-fallback {\n  background-image: image(-moz-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'), #cc0000);\n  background-image: -webkit-image(-webkit-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'), #cc0000);\n  background-image: image(radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'), #cc0000); }\n\n.cross-fade {\n  background-image: cross-fade(-moz-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'));\n  background-image: -webkit-cross-fade(-webkit-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'));\n  background-image: cross-fade(radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true')); }\n\n.unknown-function-wrapper {\n  background: foo(-moz-radial-gradient(#dddddd, #aaaaaa 100px));\n  background: foo(-webkit-radial-gradient(#dddddd, #aaaaaa 100px));\n  background: foo(radial-gradient(#dddddd, #aaaaaa 100px)); }\n\n.ie-horizontal-filter {\n  *zoom: 1;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#FFFFFFFF', endColorstr='#FF000000'); }\n\n.ie-vertical-filter {\n  *zoom: 1;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFFFFFF', endColorstr='#FF000000'); }\n\n.ie-alpha-filter {\n  *zoom: 1;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFFFFFF', endColorstr='#00FFFFFF'); }\n\n.linear-gradient-new {\n  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0000), color-stop(100%, #88aa44));\n  background: -moz-linear-gradient(top, #ff0000 0%, #88aa44 100%);\n  background: -webkit-linear-gradient(top, #ff0000 0%, #88aa44 100%);\n  background: linear-gradient(to bottom, #ff0000 0%, #88aa44 100%); }\n\n.radial-gradient-old {\n  /* radial-gradient(yellow, green) */\n  background: -moz-radial-gradient(#ffff00, #008000);\n  background: -webkit-radial-gradient(#ffff00, #008000);\n  background: radial-gradient(#ffff00, #008000);\n  /* radial-gradient(ellipse at center, yellow 0%, green 100%) */\n  background: -moz-radial-gradient(center, ellipse, #ffff00 0%, #008000 100%);\n  background: -webkit-radial-gradient(center, ellipse, #ffff00 0%, #008000 100%);\n  background: radial-gradient(ellipse at center, #ffff00 0%, #008000 100%);\n  /* radial-gradient(farthest-corner at 50% 50%, yellow, green) */\n  background: -moz-radial-gradient(50% 50%, farthest-corner, #ffff00, #008000);\n  background: -webkit-radial-gradient(50% 50%, farthest-corner, #ffff00, #008000);\n  background: radial-gradient(farthest-corner at 50% 50%, #ffff00, #008000);\n  /* radial-gradient(circle, yellow, green) */\n  background: -moz-radial-gradient(circle, #ffff00, #008000);\n  background: -webkit-radial-gradient(circle, #ffff00, #008000);\n  background: radial-gradient(circle, #ffff00, #008000);\n  /* radial-gradient(red, yellow, green) */\n  background: -moz-radial-gradient(#ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(#ff0000, #ffff00, #008000);\n  background: radial-gradient(#ff0000, #ffff00, #008000);\n  /* radial-gradient(farthest-side at left bottom, red, yellow 50px, green) */\n  background: -moz-radial-gradient(left bottom, farthest-side, #ff0000, #ffff00 50px, #008000);\n  background: -webkit-radial-gradient(left bottom, farthest-side, #ff0000, #ffff00 50px, #008000);\n  background: radial-gradient(farthest-side at left bottom, #ff0000, #ffff00 50px, #008000);\n  /* radial-gradient(closest-side at 20px 30px, red, yellow, green) */\n  background: -moz-radial-gradient(20px 30px, closest-side, #ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(20px 30px, closest-side, #ff0000, #ffff00, #008000);\n  background: radial-gradient(closest-side at 20px 30px, #ff0000, #ffff00, #008000);\n  /* radial-gradient(20px 30px at 40px 50px, red, yellow, green) */\n  background: -moz-radial-gradient(40px 50px, 20px 30px, #ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(40px 50px, 20px 30px, #ff0000, #ffff00, #008000);\n  background: radial-gradient(20px 30px at 40px 50px, #ff0000, #ffff00, #008000);\n  /* radial-gradient(closest-side circle at , red, yellow, green) */\n  background: -moz-radial-gradient(20px 30px, closest-side circle, #ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(20px 30px, closest-side circle, #ff0000, #ffff00, #008000);\n  background: radial-gradient(closest-side circle at 20px 30px, #ff0000, #ffff00, #008000);\n  /* radial-gradient(20px 20px at 20px 30px, red, yellow, green) */\n  background: -moz-radial-gradient(20px 30px, 20px 20px, #ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(20px 30px, 20px 20px, #ff0000, #ffff00, #008000);\n  background: radial-gradient(20px 20px at 20px 30px, #ff0000, #ffff00, #008000); }\n\n.radial-gradient-new {\n  /* radial-gradient(yellow, green) */\n  background: -moz-radial-gradient(#ffff00, #008000);\n  background: -webkit-radial-gradient(#ffff00, #008000);\n  background: radial-gradient(#ffff00, #008000);\n  /* radial-gradient(ellipse at center, yellow 0%, green 100%) */\n  background: -moz-radial-gradient(center, ellipse, #ffff00 0%, #008000 100%);\n  background: -webkit-radial-gradient(center, ellipse, #ffff00 0%, #008000 100%);\n  background: radial-gradient(ellipse at center, #ffff00 0%, #008000 100%);\n  /* radial-gradient(farthest-corner at 50% 50%, yellow, green) */\n  background: -moz-radial-gradient(50% 50%, farthest-corner, #ffff00, #008000);\n  background: -webkit-radial-gradient(50% 50%, farthest-corner, #ffff00, #008000);\n  background: radial-gradient(farthest-corner at 50% 50%, #ffff00, #008000);\n  /* radial-gradient(circle, yellow, green) */\n  background: -moz-radial-gradient(circle, #ffff00, #008000);\n  background: -webkit-radial-gradient(circle, #ffff00, #008000);\n  background: radial-gradient(circle, #ffff00, #008000);\n  /* radial-gradient(red, yellow, green) */\n  background: -moz-radial-gradient(#ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(#ff0000, #ffff00, #008000);\n  background: radial-gradient(#ff0000, #ffff00, #008000);\n  /* radial-gradient(farthest-side at left bottom, red, yellow 50px, green) */\n  background: -moz-radial-gradient(left bottom, farthest-side, #ff0000, #ffff00 50px, #008000);\n  background: -webkit-radial-gradient(left bottom, farthest-side, #ff0000, #ffff00 50px, #008000);\n  background: radial-gradient(farthest-side at left bottom, #ff0000, #ffff00 50px, #008000);\n  /* radial-gradient(closest-side at 20px 30px, red, yellow, green) */\n  background: -moz-radial-gradient(20px 30px, closest-side, #ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(20px 30px, closest-side, #ff0000, #ffff00, #008000);\n  background: radial-gradient(closest-side at 20px 30px, #ff0000, #ffff00, #008000);\n  /* radial-gradient(20px 30px at 20px 30px, red, yellow, green) */\n  background: -moz-radial-gradient(40px 50px, 20px 30px, #ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(40px 50px, 20px 30px, #ff0000, #ffff00, #008000);\n  background: radial-gradient(20px 30px at 40px 50px, #ff0000, #ffff00, #008000);\n  /* radial-gradient(closest-side circle at 20px 30px, red, yellow, green) */\n  background: -moz-radial-gradient(20px 30px, closest-side circle, #ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(20px 30px, closest-side circle, #ff0000, #ffff00, #008000);\n  background: radial-gradient(closest-side circle at 20px 30px, #ff0000, #ffff00, #008000);\n  /* radial-gradient(20px 20px at 20px 30px, red, yellow, green) */\n  background: -moz-radial-gradient(30px 30px, 20px 20px, #ff0000, #ffff00, #008000);\n  background: -webkit-radial-gradient(30px 30px, 20px 20px, #ff0000, #ffff00, #008000);\n  background: radial-gradient(20px 20px at 30px 30px, #ff0000, #ffff00, #008000); }\n\n.linear-gradient-old {\n  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0000), color-stop(100%, #88aa44));\n  background: -moz-linear-gradient(top, #ff0000 0%, #88aa44 100%);\n  background: -webkit-linear-gradient(top, #ff0000 0%, #88aa44 100%);\n  background: linear-gradient(to bottom, #ff0000 0%, #88aa44 100%); }\n\n.linear-gradient-unknown-new {\n  background: -moz-linear-gradient(330deg, #ff0000 0%, #88aa44 100%);\n  background: -webkit-linear-gradient(330deg, #ff0000 0%, #88aa44 100%);\n  background: linear-gradient(120deg, #ff0000 0%, #88aa44 100%); }\n\n.linear-gradient-unknown-old {\n  background: -moz-linear-gradient(120deg, #ff0000 0%, #88aa44 100%);\n  background: -webkit-linear-gradient(120deg, #ff0000 0%, #88aa44 100%);\n  background: linear-gradient(330deg, #ff0000 0%, #88aa44 100%); }\n\n.issue-1676-has-svg-because-of-minimums {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2FhYWFhYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa));\n  background-image: -moz-linear-gradient(#dddddd, #aaaaaa);\n  background-image: -webkit-linear-gradient(#dddddd, #aaaaaa);\n  background-image: linear-gradient(#dddddd, #aaaaaa); }\n\n.issue-1766 {\n  background: radial-gradient(#ffffff, #000000);\n  background: linear-gradient(#ffffff, #000000); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/grid_background.css",
    "content": ".baseline {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 1.5em;\n  -o-background-size: 100% 1.5em;\n  -webkit-background-size: 100% 1.5em;\n  background-size: 100% 1.5em;\n  background-position: left top; }\n\n.columns {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjMuMTI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzLjEyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQuMTY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcuMjkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcuMjkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOC4zMzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4LjMzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxMS40NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTEuNDU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTIuNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMi41JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxNS42MjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE1LjYyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxNi42NjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxNi42NjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTkuNzkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE5Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjIwLjgzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjIwLjgzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyMy45NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjMuOTU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI4LjEyNSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjguMTI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjI5LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjI5LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzMi4yOTE2NyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzIuMjkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMzMuMzMzMzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMzMuMzMzMzMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjM2LjQ1ODMzJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzNi40NTgzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIzNy41JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM3LjUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQwLjYyNSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAuNjI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQxLjY2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQxLjY2NjY3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0NC43OTE2NyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDQuNzkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDUuODMzMzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDUuODMzMzMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ4Ljk1ODMzJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0OC45NTgzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTMuMTI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1My4xMjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTQuMTY2NjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTQuMTY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjU3LjI5MTY3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1Ny4yOTE2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1OC4zMzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1OC4zMzMzMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjEuNDU4MzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjYxLjQ1ODMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjYyLjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjIuNSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjUuNjI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NS42MjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjYuNjY2NjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjYuNjY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjY5Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2OS43OTE2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3MC44MzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3MC44MzMzMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzMuOTU4MzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjczLjk1ODMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3OC4xMjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijc4LjEyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3OS4xNjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3OS4xNjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODIuMjkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgyLjI5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjMzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjMzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4Ni40NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODYuNDU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iODcuNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4Ny41JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5MC42MjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjkwLjYyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI5MS42NjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI5MS42NjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTQuNzkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijk0Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijk1LjgzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijk1LjgzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5OC45NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTguOTU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 50%, 960 50%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(0%, rgba(121, 121, 229, 0.25)), color-stop(3.125%, rgba(79, 79, 221, 0.25)), color-stop(3.125%, rgba(0, 0, 0, 0)), color-stop(4.16667%, rgba(0, 0, 0, 0)), color-stop(4.16667%, rgba(121, 121, 229, 0.25)), color-stop(7.29167%, rgba(79, 79, 221, 0.25)), color-stop(7.29167%, rgba(0, 0, 0, 0)), color-stop(8.33333%, rgba(0, 0, 0, 0)), color-stop(8.33333%, rgba(121, 121, 229, 0.25)), color-stop(11.45833%, rgba(79, 79, 221, 0.25)), color-stop(11.45833%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(121, 121, 229, 0.25)), color-stop(15.625%, rgba(79, 79, 221, 0.25)), color-stop(15.625%, rgba(0, 0, 0, 0)), color-stop(16.66667%, rgba(0, 0, 0, 0)), color-stop(16.66667%, rgba(121, 121, 229, 0.25)), color-stop(19.79167%, rgba(79, 79, 221, 0.25)), color-stop(19.79167%, rgba(0, 0, 0, 0)), color-stop(20.83333%, rgba(0, 0, 0, 0)), color-stop(20.83333%, rgba(121, 121, 229, 0.25)), color-stop(23.95833%, rgba(79, 79, 221, 0.25)), color-stop(23.95833%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(121, 121, 229, 0.25)), color-stop(28.125%, rgba(79, 79, 221, 0.25)), color-stop(28.125%, rgba(0, 0, 0, 0)), color-stop(29.16667%, rgba(0, 0, 0, 0)), color-stop(29.16667%, rgba(121, 121, 229, 0.25)), color-stop(32.29167%, rgba(79, 79, 221, 0.25)), color-stop(32.29167%, rgba(0, 0, 0, 0)), color-stop(33.33333%, rgba(0, 0, 0, 0)), color-stop(33.33333%, rgba(121, 121, 229, 0.25)), color-stop(36.45833%, rgba(79, 79, 221, 0.25)), color-stop(36.45833%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(121, 121, 229, 0.25)), color-stop(40.625%, rgba(79, 79, 221, 0.25)), color-stop(40.625%, rgba(0, 0, 0, 0)), color-stop(41.66667%, rgba(0, 0, 0, 0)), color-stop(41.66667%, rgba(121, 121, 229, 0.25)), color-stop(44.79167%, rgba(79, 79, 221, 0.25)), color-stop(44.79167%, rgba(0, 0, 0, 0)), color-stop(45.83333%, rgba(0, 0, 0, 0)), color-stop(45.83333%, rgba(121, 121, 229, 0.25)), color-stop(48.95833%, rgba(79, 79, 221, 0.25)), color-stop(48.95833%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(121, 121, 229, 0.25)), color-stop(53.125%, rgba(79, 79, 221, 0.25)), color-stop(53.125%, rgba(0, 0, 0, 0)), color-stop(54.16667%, rgba(0, 0, 0, 0)), color-stop(54.16667%, rgba(121, 121, 229, 0.25)), color-stop(57.29167%, rgba(79, 79, 221, 0.25)), color-stop(57.29167%, rgba(0, 0, 0, 0)), color-stop(58.33333%, rgba(0, 0, 0, 0)), color-stop(58.33333%, rgba(121, 121, 229, 0.25)), color-stop(61.45833%, rgba(79, 79, 221, 0.25)), color-stop(61.45833%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(121, 121, 229, 0.25)), color-stop(65.625%, rgba(79, 79, 221, 0.25)), color-stop(65.625%, rgba(0, 0, 0, 0)), color-stop(66.66667%, rgba(0, 0, 0, 0)), color-stop(66.66667%, rgba(121, 121, 229, 0.25)), color-stop(69.79167%, rgba(79, 79, 221, 0.25)), color-stop(69.79167%, rgba(0, 0, 0, 0)), color-stop(70.83333%, rgba(0, 0, 0, 0)), color-stop(70.83333%, rgba(121, 121, 229, 0.25)), color-stop(73.95833%, rgba(79, 79, 221, 0.25)), color-stop(73.95833%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(121, 121, 229, 0.25)), color-stop(78.125%, rgba(79, 79, 221, 0.25)), color-stop(78.125%, rgba(0, 0, 0, 0)), color-stop(79.16667%, rgba(0, 0, 0, 0)), color-stop(79.16667%, rgba(121, 121, 229, 0.25)), color-stop(82.29167%, rgba(79, 79, 221, 0.25)), color-stop(82.29167%, rgba(0, 0, 0, 0)), color-stop(83.33333%, rgba(0, 0, 0, 0)), color-stop(83.33333%, rgba(121, 121, 229, 0.25)), color-stop(86.45833%, rgba(79, 79, 221, 0.25)), color-stop(86.45833%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(121, 121, 229, 0.25)), color-stop(90.625%, rgba(79, 79, 221, 0.25)), color-stop(90.625%, rgba(0, 0, 0, 0)), color-stop(91.66667%, rgba(0, 0, 0, 0)), color-stop(91.66667%, rgba(121, 121, 229, 0.25)), color-stop(94.79167%, rgba(79, 79, 221, 0.25)), color-stop(94.79167%, rgba(0, 0, 0, 0)), color-stop(95.83333%, rgba(0, 0, 0, 0)), color-stop(95.83333%, rgba(121, 121, 229, 0.25)), color-stop(98.95833%, rgba(79, 79, 221, 0.25)), color-stop(98.95833%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-position: left top; }\n\n.combined {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjMuMTI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzLjEyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQuMTY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcuMjkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcuMjkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOC4zMzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4LjMzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxMS40NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTEuNDU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTIuNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMi41JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxNS42MjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE1LjYyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxNi42NjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxNi42NjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTkuNzkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE5Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjIwLjgzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjIwLjgzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyMy45NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjMuOTU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI4LjEyNSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjguMTI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjI5LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjI5LjE2NjY3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzMi4yOTE2NyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzIuMjkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMzMuMzMzMzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMzMuMzMzMzMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjM2LjQ1ODMzJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIzNi40NTgzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIzNy41JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM3LjUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQwLjYyNSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAuNjI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQxLjY2NjY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQxLjY2NjY3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0NC43OTE2NyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDQuNzkxNjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDUuODMzMzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDUuODMzMzMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ4Ljk1ODMzJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0OC45NTgzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTMuMTI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1My4xMjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTQuMTY2NjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTQuMTY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjU3LjI5MTY3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1Ny4yOTE2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1OC4zMzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1OC4zMzMzMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjEuNDU4MzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjYxLjQ1ODMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjYyLjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjIuNSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjUuNjI1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NS42MjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjYuNjY2NjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjYuNjY2NjclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjY5Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2OS43OTE2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3MC44MzMzMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3MC44MzMzMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzMuOTU4MzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjczLjk1ODMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijc1JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3OC4xMjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijc4LjEyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3OS4xNjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3OS4xNjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODIuMjkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgyLjI5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjMzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjMzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4Ni40NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODYuNDU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iODcuNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4Ny41JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5MC42MjUlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjkwLjYyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI5MS42NjY2NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI5MS42NjY2NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTQuNzkxNjclIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijk0Ljc5MTY3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijk1LjgzMzMzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijk1LjgzMzMzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5OC45NTgzMyUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTguOTU4MzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 0% 50%, 960 50%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(0%, rgba(121, 121, 229, 0.25)), color-stop(3.125%, rgba(79, 79, 221, 0.25)), color-stop(3.125%, rgba(0, 0, 0, 0)), color-stop(4.16667%, rgba(0, 0, 0, 0)), color-stop(4.16667%, rgba(121, 121, 229, 0.25)), color-stop(7.29167%, rgba(79, 79, 221, 0.25)), color-stop(7.29167%, rgba(0, 0, 0, 0)), color-stop(8.33333%, rgba(0, 0, 0, 0)), color-stop(8.33333%, rgba(121, 121, 229, 0.25)), color-stop(11.45833%, rgba(79, 79, 221, 0.25)), color-stop(11.45833%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(0, 0, 0, 0)), color-stop(12.5%, rgba(121, 121, 229, 0.25)), color-stop(15.625%, rgba(79, 79, 221, 0.25)), color-stop(15.625%, rgba(0, 0, 0, 0)), color-stop(16.66667%, rgba(0, 0, 0, 0)), color-stop(16.66667%, rgba(121, 121, 229, 0.25)), color-stop(19.79167%, rgba(79, 79, 221, 0.25)), color-stop(19.79167%, rgba(0, 0, 0, 0)), color-stop(20.83333%, rgba(0, 0, 0, 0)), color-stop(20.83333%, rgba(121, 121, 229, 0.25)), color-stop(23.95833%, rgba(79, 79, 221, 0.25)), color-stop(23.95833%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(0, 0, 0, 0)), color-stop(25%, rgba(121, 121, 229, 0.25)), color-stop(28.125%, rgba(79, 79, 221, 0.25)), color-stop(28.125%, rgba(0, 0, 0, 0)), color-stop(29.16667%, rgba(0, 0, 0, 0)), color-stop(29.16667%, rgba(121, 121, 229, 0.25)), color-stop(32.29167%, rgba(79, 79, 221, 0.25)), color-stop(32.29167%, rgba(0, 0, 0, 0)), color-stop(33.33333%, rgba(0, 0, 0, 0)), color-stop(33.33333%, rgba(121, 121, 229, 0.25)), color-stop(36.45833%, rgba(79, 79, 221, 0.25)), color-stop(36.45833%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(0, 0, 0, 0)), color-stop(37.5%, rgba(121, 121, 229, 0.25)), color-stop(40.625%, rgba(79, 79, 221, 0.25)), color-stop(40.625%, rgba(0, 0, 0, 0)), color-stop(41.66667%, rgba(0, 0, 0, 0)), color-stop(41.66667%, rgba(121, 121, 229, 0.25)), color-stop(44.79167%, rgba(79, 79, 221, 0.25)), color-stop(44.79167%, rgba(0, 0, 0, 0)), color-stop(45.83333%, rgba(0, 0, 0, 0)), color-stop(45.83333%, rgba(121, 121, 229, 0.25)), color-stop(48.95833%, rgba(79, 79, 221, 0.25)), color-stop(48.95833%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(0, 0, 0, 0)), color-stop(50%, rgba(121, 121, 229, 0.25)), color-stop(53.125%, rgba(79, 79, 221, 0.25)), color-stop(53.125%, rgba(0, 0, 0, 0)), color-stop(54.16667%, rgba(0, 0, 0, 0)), color-stop(54.16667%, rgba(121, 121, 229, 0.25)), color-stop(57.29167%, rgba(79, 79, 221, 0.25)), color-stop(57.29167%, rgba(0, 0, 0, 0)), color-stop(58.33333%, rgba(0, 0, 0, 0)), color-stop(58.33333%, rgba(121, 121, 229, 0.25)), color-stop(61.45833%, rgba(79, 79, 221, 0.25)), color-stop(61.45833%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(0, 0, 0, 0)), color-stop(62.5%, rgba(121, 121, 229, 0.25)), color-stop(65.625%, rgba(79, 79, 221, 0.25)), color-stop(65.625%, rgba(0, 0, 0, 0)), color-stop(66.66667%, rgba(0, 0, 0, 0)), color-stop(66.66667%, rgba(121, 121, 229, 0.25)), color-stop(69.79167%, rgba(79, 79, 221, 0.25)), color-stop(69.79167%, rgba(0, 0, 0, 0)), color-stop(70.83333%, rgba(0, 0, 0, 0)), color-stop(70.83333%, rgba(121, 121, 229, 0.25)), color-stop(73.95833%, rgba(79, 79, 221, 0.25)), color-stop(73.95833%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(0, 0, 0, 0)), color-stop(75%, rgba(121, 121, 229, 0.25)), color-stop(78.125%, rgba(79, 79, 221, 0.25)), color-stop(78.125%, rgba(0, 0, 0, 0)), color-stop(79.16667%, rgba(0, 0, 0, 0)), color-stop(79.16667%, rgba(121, 121, 229, 0.25)), color-stop(82.29167%, rgba(79, 79, 221, 0.25)), color-stop(82.29167%, rgba(0, 0, 0, 0)), color-stop(83.33333%, rgba(0, 0, 0, 0)), color-stop(83.33333%, rgba(121, 121, 229, 0.25)), color-stop(86.45833%, rgba(79, 79, 221, 0.25)), color-stop(86.45833%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(0, 0, 0, 0)), color-stop(87.5%, rgba(121, 121, 229, 0.25)), color-stop(90.625%, rgba(79, 79, 221, 0.25)), color-stop(90.625%, rgba(0, 0, 0, 0)), color-stop(91.66667%, rgba(0, 0, 0, 0)), color-stop(91.66667%, rgba(121, 121, 229, 0.25)), color-stop(94.79167%, rgba(79, 79, 221, 0.25)), color-stop(94.79167%, rgba(0, 0, 0, 0)), color-stop(95.83333%, rgba(0, 0, 0, 0)), color-stop(95.83333%, rgba(121, 121, 229, 0.25)), color-stop(98.95833%, rgba(79, 79, 221, 0.25)), color-stop(98.95833%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -moz-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), linear-gradient(to right, rgba(0, 0, 0, 0) 0px, rgba(121, 121, 229, 0.25) 0px, rgba(79, 79, 221, 0.25) 30px, rgba(0, 0, 0, 0) 30px, rgba(0, 0, 0, 0) 40px, rgba(121, 121, 229, 0.25) 40px, rgba(79, 79, 221, 0.25) 70px, rgba(0, 0, 0, 0) 70px, rgba(0, 0, 0, 0) 80px, rgba(121, 121, 229, 0.25) 80px, rgba(79, 79, 221, 0.25) 110px, rgba(0, 0, 0, 0) 110px, rgba(0, 0, 0, 0) 120px, rgba(121, 121, 229, 0.25) 120px, rgba(79, 79, 221, 0.25) 150px, rgba(0, 0, 0, 0) 150px, rgba(0, 0, 0, 0) 160px, rgba(121, 121, 229, 0.25) 160px, rgba(79, 79, 221, 0.25) 190px, rgba(0, 0, 0, 0) 190px, rgba(0, 0, 0, 0) 200px, rgba(121, 121, 229, 0.25) 200px, rgba(79, 79, 221, 0.25) 230px, rgba(0, 0, 0, 0) 230px, rgba(0, 0, 0, 0) 240px, rgba(121, 121, 229, 0.25) 240px, rgba(79, 79, 221, 0.25) 270px, rgba(0, 0, 0, 0) 270px, rgba(0, 0, 0, 0) 280px, rgba(121, 121, 229, 0.25) 280px, rgba(79, 79, 221, 0.25) 310px, rgba(0, 0, 0, 0) 310px, rgba(0, 0, 0, 0) 320px, rgba(121, 121, 229, 0.25) 320px, rgba(79, 79, 221, 0.25) 350px, rgba(0, 0, 0, 0) 350px, rgba(0, 0, 0, 0) 360px, rgba(121, 121, 229, 0.25) 360px, rgba(79, 79, 221, 0.25) 390px, rgba(0, 0, 0, 0) 390px, rgba(0, 0, 0, 0) 400px, rgba(121, 121, 229, 0.25) 400px, rgba(79, 79, 221, 0.25) 430px, rgba(0, 0, 0, 0) 430px, rgba(0, 0, 0, 0) 440px, rgba(121, 121, 229, 0.25) 440px, rgba(79, 79, 221, 0.25) 470px, rgba(0, 0, 0, 0) 470px, rgba(0, 0, 0, 0) 480px, rgba(121, 121, 229, 0.25) 480px, rgba(79, 79, 221, 0.25) 510px, rgba(0, 0, 0, 0) 510px, rgba(0, 0, 0, 0) 520px, rgba(121, 121, 229, 0.25) 520px, rgba(79, 79, 221, 0.25) 550px, rgba(0, 0, 0, 0) 550px, rgba(0, 0, 0, 0) 560px, rgba(121, 121, 229, 0.25) 560px, rgba(79, 79, 221, 0.25) 590px, rgba(0, 0, 0, 0) 590px, rgba(0, 0, 0, 0) 600px, rgba(121, 121, 229, 0.25) 600px, rgba(79, 79, 221, 0.25) 630px, rgba(0, 0, 0, 0) 630px, rgba(0, 0, 0, 0) 640px, rgba(121, 121, 229, 0.25) 640px, rgba(79, 79, 221, 0.25) 670px, rgba(0, 0, 0, 0) 670px, rgba(0, 0, 0, 0) 680px, rgba(121, 121, 229, 0.25) 680px, rgba(79, 79, 221, 0.25) 710px, rgba(0, 0, 0, 0) 710px, rgba(0, 0, 0, 0) 720px, rgba(121, 121, 229, 0.25) 720px, rgba(79, 79, 221, 0.25) 750px, rgba(0, 0, 0, 0) 750px, rgba(0, 0, 0, 0) 760px, rgba(121, 121, 229, 0.25) 760px, rgba(79, 79, 221, 0.25) 790px, rgba(0, 0, 0, 0) 790px, rgba(0, 0, 0, 0) 800px, rgba(121, 121, 229, 0.25) 800px, rgba(79, 79, 221, 0.25) 830px, rgba(0, 0, 0, 0) 830px, rgba(0, 0, 0, 0) 840px, rgba(121, 121, 229, 0.25) 840px, rgba(79, 79, 221, 0.25) 870px, rgba(0, 0, 0, 0) 870px, rgba(0, 0, 0, 0) 880px, rgba(121, 121, 229, 0.25) 880px, rgba(79, 79, 221, 0.25) 910px, rgba(0, 0, 0, 0) 910px, rgba(0, 0, 0, 0) 920px, rgba(121, 121, 229, 0.25) 920px, rgba(79, 79, 221, 0.25) 950px, rgba(0, 0, 0, 0) 950px, rgba(0, 0, 0, 0) 960px);\n  -moz-background-size: 100% 1.5em, auto;\n  -o-background-size: 100% 1.5em, auto;\n  -webkit-background-size: 100% 1.5em, auto;\n  background-size: 100% 1.5em, auto;\n  background-position: left top; }\n\n.percent-baseline {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 1.5em;\n  -o-background-size: 100% 1.5em;\n  -webkit-background-size: 100% 1.5em;\n  background-size: 100% 1.5em;\n  background-position: left top; }\n\n.percent-columns {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTYlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE2JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjE3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjE3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyMiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjIlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI4JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyOCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzQlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjM0JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0MCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDElIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDElIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ2JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0NiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTIlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjUyJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1OCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTglIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjY0JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI2NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI2NSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzAlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjcxJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjcxJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3NiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzYlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNzclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNzclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgyJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4MiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4MyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4MyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODglIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijg4JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5NCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTQlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(11%, rgba(0, 0, 0, 0)), color-stop(11%, rgba(121, 121, 229, 0.25)), color-stop(16%, rgba(79, 79, 221, 0.25)), color-stop(16%, rgba(0, 0, 0, 0)), color-stop(17%, rgba(0, 0, 0, 0)), color-stop(17%, rgba(121, 121, 229, 0.25)), color-stop(22%, rgba(79, 79, 221, 0.25)), color-stop(22%, rgba(0, 0, 0, 0)), color-stop(23%, rgba(0, 0, 0, 0)), color-stop(23%, rgba(121, 121, 229, 0.25)), color-stop(28%, rgba(79, 79, 221, 0.25)), color-stop(28%, rgba(0, 0, 0, 0)), color-stop(29%, rgba(0, 0, 0, 0)), color-stop(29%, rgba(121, 121, 229, 0.25)), color-stop(34%, rgba(79, 79, 221, 0.25)), color-stop(34%, rgba(0, 0, 0, 0)), color-stop(35%, rgba(0, 0, 0, 0)), color-stop(35%, rgba(121, 121, 229, 0.25)), color-stop(40%, rgba(79, 79, 221, 0.25)), color-stop(40%, rgba(0, 0, 0, 0)), color-stop(41%, rgba(0, 0, 0, 0)), color-stop(41%, rgba(121, 121, 229, 0.25)), color-stop(46%, rgba(79, 79, 221, 0.25)), color-stop(46%, rgba(0, 0, 0, 0)), color-stop(47%, rgba(0, 0, 0, 0)), color-stop(47%, rgba(121, 121, 229, 0.25)), color-stop(52%, rgba(79, 79, 221, 0.25)), color-stop(52%, rgba(0, 0, 0, 0)), color-stop(53%, rgba(0, 0, 0, 0)), color-stop(53%, rgba(121, 121, 229, 0.25)), color-stop(58%, rgba(79, 79, 221, 0.25)), color-stop(58%, rgba(0, 0, 0, 0)), color-stop(59%, rgba(0, 0, 0, 0)), color-stop(59%, rgba(121, 121, 229, 0.25)), color-stop(64%, rgba(79, 79, 221, 0.25)), color-stop(64%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(121, 121, 229, 0.25)), color-stop(70%, rgba(79, 79, 221, 0.25)), color-stop(70%, rgba(0, 0, 0, 0)), color-stop(71%, rgba(0, 0, 0, 0)), color-stop(71%, rgba(121, 121, 229, 0.25)), color-stop(76%, rgba(79, 79, 221, 0.25)), color-stop(76%, rgba(0, 0, 0, 0)), color-stop(77%, rgba(0, 0, 0, 0)), color-stop(77%, rgba(121, 121, 229, 0.25)), color-stop(82%, rgba(79, 79, 221, 0.25)), color-stop(82%, rgba(0, 0, 0, 0)), color-stop(83%, rgba(0, 0, 0, 0)), color-stop(83%, rgba(121, 121, 229, 0.25)), color-stop(88%, rgba(79, 79, 221, 0.25)), color-stop(88%, rgba(0, 0, 0, 0)), color-stop(89%, rgba(0, 0, 0, 0)), color-stop(89%, rgba(121, 121, 229, 0.25)), color-stop(94%, rgba(79, 79, 221, 0.25)), color-stop(94%, rgba(0, 0, 0, 0)), color-stop(95%, rgba(0, 0, 0, 0)), color-stop(95%, rgba(121, 121, 229, 0.25)), color-stop(100%, rgba(79, 79, 221, 0.25)), color-stop(100%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-position: left top; }\n\n.percent-combined {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='), url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTYlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjE2JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjE3JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjE3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyMiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMjIlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI4JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyOCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyOSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzQlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjM0JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0MCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDElIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDElIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ2JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0NiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI0NyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTIlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjUyJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUzJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI1OCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTglIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjY0JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI2NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI2NSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzAlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjcxJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjcxJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3NiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNzYlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNzclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNzclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgyJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4MiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4MyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI4MyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODglIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijg4JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI5NCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iOTQlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTUlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(11%, rgba(0, 0, 0, 0)), color-stop(11%, rgba(121, 121, 229, 0.25)), color-stop(16%, rgba(79, 79, 221, 0.25)), color-stop(16%, rgba(0, 0, 0, 0)), color-stop(17%, rgba(0, 0, 0, 0)), color-stop(17%, rgba(121, 121, 229, 0.25)), color-stop(22%, rgba(79, 79, 221, 0.25)), color-stop(22%, rgba(0, 0, 0, 0)), color-stop(23%, rgba(0, 0, 0, 0)), color-stop(23%, rgba(121, 121, 229, 0.25)), color-stop(28%, rgba(79, 79, 221, 0.25)), color-stop(28%, rgba(0, 0, 0, 0)), color-stop(29%, rgba(0, 0, 0, 0)), color-stop(29%, rgba(121, 121, 229, 0.25)), color-stop(34%, rgba(79, 79, 221, 0.25)), color-stop(34%, rgba(0, 0, 0, 0)), color-stop(35%, rgba(0, 0, 0, 0)), color-stop(35%, rgba(121, 121, 229, 0.25)), color-stop(40%, rgba(79, 79, 221, 0.25)), color-stop(40%, rgba(0, 0, 0, 0)), color-stop(41%, rgba(0, 0, 0, 0)), color-stop(41%, rgba(121, 121, 229, 0.25)), color-stop(46%, rgba(79, 79, 221, 0.25)), color-stop(46%, rgba(0, 0, 0, 0)), color-stop(47%, rgba(0, 0, 0, 0)), color-stop(47%, rgba(121, 121, 229, 0.25)), color-stop(52%, rgba(79, 79, 221, 0.25)), color-stop(52%, rgba(0, 0, 0, 0)), color-stop(53%, rgba(0, 0, 0, 0)), color-stop(53%, rgba(121, 121, 229, 0.25)), color-stop(58%, rgba(79, 79, 221, 0.25)), color-stop(58%, rgba(0, 0, 0, 0)), color-stop(59%, rgba(0, 0, 0, 0)), color-stop(59%, rgba(121, 121, 229, 0.25)), color-stop(64%, rgba(79, 79, 221, 0.25)), color-stop(64%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(121, 121, 229, 0.25)), color-stop(70%, rgba(79, 79, 221, 0.25)), color-stop(70%, rgba(0, 0, 0, 0)), color-stop(71%, rgba(0, 0, 0, 0)), color-stop(71%, rgba(121, 121, 229, 0.25)), color-stop(76%, rgba(79, 79, 221, 0.25)), color-stop(76%, rgba(0, 0, 0, 0)), color-stop(77%, rgba(0, 0, 0, 0)), color-stop(77%, rgba(121, 121, 229, 0.25)), color-stop(82%, rgba(79, 79, 221, 0.25)), color-stop(82%, rgba(0, 0, 0, 0)), color-stop(83%, rgba(0, 0, 0, 0)), color-stop(83%, rgba(121, 121, 229, 0.25)), color-stop(88%, rgba(79, 79, 221, 0.25)), color-stop(88%, rgba(0, 0, 0, 0)), color-stop(89%, rgba(0, 0, 0, 0)), color-stop(89%, rgba(121, 121, 229, 0.25)), color-stop(94%, rgba(79, 79, 221, 0.25)), color-stop(94%, rgba(0, 0, 0, 0)), color-stop(95%, rgba(0, 0, 0, 0)), color-stop(95%, rgba(121, 121, 229, 0.25)), color-stop(100%, rgba(79, 79, 221, 0.25)), color-stop(100%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -moz-linear-gradient(left, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%), linear-gradient(to right, rgba(0, 0, 0, 0) 11%, rgba(121, 121, 229, 0.25) 11%, rgba(79, 79, 221, 0.25) 16%, rgba(0, 0, 0, 0) 16%, rgba(0, 0, 0, 0) 17%, rgba(121, 121, 229, 0.25) 17%, rgba(79, 79, 221, 0.25) 22%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 23%, rgba(121, 121, 229, 0.25) 23%, rgba(79, 79, 221, 0.25) 28%, rgba(0, 0, 0, 0) 28%, rgba(0, 0, 0, 0) 29%, rgba(121, 121, 229, 0.25) 29%, rgba(79, 79, 221, 0.25) 34%, rgba(0, 0, 0, 0) 34%, rgba(0, 0, 0, 0) 35%, rgba(121, 121, 229, 0.25) 35%, rgba(79, 79, 221, 0.25) 40%, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0) 41%, rgba(121, 121, 229, 0.25) 41%, rgba(79, 79, 221, 0.25) 46%, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, 0) 47%, rgba(121, 121, 229, 0.25) 47%, rgba(79, 79, 221, 0.25) 52%, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, 0) 53%, rgba(121, 121, 229, 0.25) 53%, rgba(79, 79, 221, 0.25) 58%, rgba(0, 0, 0, 0) 58%, rgba(0, 0, 0, 0) 59%, rgba(121, 121, 229, 0.25) 59%, rgba(79, 79, 221, 0.25) 64%, rgba(0, 0, 0, 0) 64%, rgba(0, 0, 0, 0) 65%, rgba(121, 121, 229, 0.25) 65%, rgba(79, 79, 221, 0.25) 70%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 71%, rgba(121, 121, 229, 0.25) 71%, rgba(79, 79, 221, 0.25) 76%, rgba(0, 0, 0, 0) 76%, rgba(0, 0, 0, 0) 77%, rgba(121, 121, 229, 0.25) 77%, rgba(79, 79, 221, 0.25) 82%, rgba(0, 0, 0, 0) 82%, rgba(0, 0, 0, 0) 83%, rgba(121, 121, 229, 0.25) 83%, rgba(79, 79, 221, 0.25) 88%, rgba(0, 0, 0, 0) 88%, rgba(0, 0, 0, 0) 89%, rgba(121, 121, 229, 0.25) 89%, rgba(79, 79, 221, 0.25) 94%, rgba(0, 0, 0, 0) 94%, rgba(0, 0, 0, 0) 95%, rgba(121, 121, 229, 0.25) 95%, rgba(79, 79, 221, 0.25) 100%, rgba(0, 0, 0, 0) 100%, rgba(0, 0, 0, 0) 100%);\n  -moz-background-size: 100% 1.5em, auto;\n  -o-background-size: 100% 1.5em, auto;\n  -webkit-background-size: 100% 1.5em, auto;\n  background-size: 100% 1.5em, auto;\n  background-position: left top; }\n\n.forced-fluid {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIyLjcwMjclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMi43MDI3JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4LjEwODExJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4LjEwODExJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwLjgxMDgxJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwLjgxMDgxJSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxNi4yMTYyMiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMTYuMjE2MjIlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTguOTE4OTIlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTguOTE4OTIlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjI0LjMyNDMyJSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIyNC4zMjQzMiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyNy4wMjcwMyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIyNy4wMjcwMyUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iMzIuNDMyNDMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjMyLjQzMjQzJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1LjEzNTE0JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjM1LjEzNTE0JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0MC41NDA1NCUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNDAuNTQwNTQlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDMuMjQzMjQlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNDMuMjQzMjQlIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjQ4LjY0ODY1JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI0OC42NDg2NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MS4zNTEzNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MS4zNTEzNSUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNTYuNzU2NzYlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjU2Ljc1Njc2JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjU5LjQ1OTQ2JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjU5LjQ1OTQ2JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI2NC44NjQ4NiUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iNjQuODY0ODYlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjcuNTY3NTclIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iNjcuNTY3NTclIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjcyLjk3Mjk3JSIgc3RvcC1jb2xvcj0iIzRmNGZkZCIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI3Mi45NzI5NyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3NS42NzU2OCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI3NS42NzU2OCUiIHN0b3AtY29sb3I9IiM3OTc5ZTUiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODEuMDgxMDglIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9IjgxLjA4MTA4JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjc4Mzc4JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjgzLjc4Mzc4JSIgc3RvcC1jb2xvcj0iIzc5NzllNSIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSI4OS4xODkxOSUiIHN0b3AtY29sb3I9IiM0ZjRmZGQiIHN0b3Atb3BhY2l0eT0iMC4yNSIvPjxzdG9wIG9mZnNldD0iODkuMTg5MTklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTEuODkxODklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iOTEuODkxODklIiBzdG9wLWNvbG9yPSIjNzk3OWU1IiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijk3LjI5NzMlIiBzdG9wLWNvbG9yPSIjNGY0ZmRkIiBzdG9wLW9wYWNpdHk9IjAuMjUiLz48c3RvcCBvZmZzZXQ9Ijk3LjI5NzMlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(2.7027%, rgba(0, 0, 0, 0)), color-stop(2.7027%, rgba(121, 121, 229, 0.25)), color-stop(8.10811%, rgba(79, 79, 221, 0.25)), color-stop(8.10811%, rgba(0, 0, 0, 0)), color-stop(10.81081%, rgba(0, 0, 0, 0)), color-stop(10.81081%, rgba(121, 121, 229, 0.25)), color-stop(16.21622%, rgba(79, 79, 221, 0.25)), color-stop(16.21622%, rgba(0, 0, 0, 0)), color-stop(18.91892%, rgba(0, 0, 0, 0)), color-stop(18.91892%, rgba(121, 121, 229, 0.25)), color-stop(24.32432%, rgba(79, 79, 221, 0.25)), color-stop(24.32432%, rgba(0, 0, 0, 0)), color-stop(27.02703%, rgba(0, 0, 0, 0)), color-stop(27.02703%, rgba(121, 121, 229, 0.25)), color-stop(32.43243%, rgba(79, 79, 221, 0.25)), color-stop(32.43243%, rgba(0, 0, 0, 0)), color-stop(35.13514%, rgba(0, 0, 0, 0)), color-stop(35.13514%, rgba(121, 121, 229, 0.25)), color-stop(40.54054%, rgba(79, 79, 221, 0.25)), color-stop(40.54054%, rgba(0, 0, 0, 0)), color-stop(43.24324%, rgba(0, 0, 0, 0)), color-stop(43.24324%, rgba(121, 121, 229, 0.25)), color-stop(48.64865%, rgba(79, 79, 221, 0.25)), color-stop(48.64865%, rgba(0, 0, 0, 0)), color-stop(51.35135%, rgba(0, 0, 0, 0)), color-stop(51.35135%, rgba(121, 121, 229, 0.25)), color-stop(56.75676%, rgba(79, 79, 221, 0.25)), color-stop(56.75676%, rgba(0, 0, 0, 0)), color-stop(59.45946%, rgba(0, 0, 0, 0)), color-stop(59.45946%, rgba(121, 121, 229, 0.25)), color-stop(64.86486%, rgba(79, 79, 221, 0.25)), color-stop(64.86486%, rgba(0, 0, 0, 0)), color-stop(67.56757%, rgba(0, 0, 0, 0)), color-stop(67.56757%, rgba(121, 121, 229, 0.25)), color-stop(72.97297%, rgba(79, 79, 221, 0.25)), color-stop(72.97297%, rgba(0, 0, 0, 0)), color-stop(75.67568%, rgba(0, 0, 0, 0)), color-stop(75.67568%, rgba(121, 121, 229, 0.25)), color-stop(81.08108%, rgba(79, 79, 221, 0.25)), color-stop(81.08108%, rgba(0, 0, 0, 0)), color-stop(83.78378%, rgba(0, 0, 0, 0)), color-stop(83.78378%, rgba(121, 121, 229, 0.25)), color-stop(89.18919%, rgba(79, 79, 221, 0.25)), color-stop(89.18919%, rgba(0, 0, 0, 0)), color-stop(91.89189%, rgba(0, 0, 0, 0)), color-stop(91.89189%, rgba(121, 121, 229, 0.25)), color-stop(97.2973%, rgba(79, 79, 221, 0.25)), color-stop(97.2973%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0) 2.7027%, rgba(121, 121, 229, 0.25) 2.7027%, rgba(79, 79, 221, 0.25) 8.10811%, rgba(0, 0, 0, 0) 8.10811%, rgba(0, 0, 0, 0) 10.81081%, rgba(121, 121, 229, 0.25) 10.81081%, rgba(79, 79, 221, 0.25) 16.21622%, rgba(0, 0, 0, 0) 16.21622%, rgba(0, 0, 0, 0) 18.91892%, rgba(121, 121, 229, 0.25) 18.91892%, rgba(79, 79, 221, 0.25) 24.32432%, rgba(0, 0, 0, 0) 24.32432%, rgba(0, 0, 0, 0) 27.02703%, rgba(121, 121, 229, 0.25) 27.02703%, rgba(79, 79, 221, 0.25) 32.43243%, rgba(0, 0, 0, 0) 32.43243%, rgba(0, 0, 0, 0) 35.13514%, rgba(121, 121, 229, 0.25) 35.13514%, rgba(79, 79, 221, 0.25) 40.54054%, rgba(0, 0, 0, 0) 40.54054%, rgba(0, 0, 0, 0) 43.24324%, rgba(121, 121, 229, 0.25) 43.24324%, rgba(79, 79, 221, 0.25) 48.64865%, rgba(0, 0, 0, 0) 48.64865%, rgba(0, 0, 0, 0) 51.35135%, rgba(121, 121, 229, 0.25) 51.35135%, rgba(79, 79, 221, 0.25) 56.75676%, rgba(0, 0, 0, 0) 56.75676%, rgba(0, 0, 0, 0) 59.45946%, rgba(121, 121, 229, 0.25) 59.45946%, rgba(79, 79, 221, 0.25) 64.86486%, rgba(0, 0, 0, 0) 64.86486%, rgba(0, 0, 0, 0) 67.56757%, rgba(121, 121, 229, 0.25) 67.56757%, rgba(79, 79, 221, 0.25) 72.97297%, rgba(0, 0, 0, 0) 72.97297%, rgba(0, 0, 0, 0) 75.67568%, rgba(121, 121, 229, 0.25) 75.67568%, rgba(79, 79, 221, 0.25) 81.08108%, rgba(0, 0, 0, 0) 81.08108%, rgba(0, 0, 0, 0) 83.78378%, rgba(121, 121, 229, 0.25) 83.78378%, rgba(79, 79, 221, 0.25) 89.18919%, rgba(0, 0, 0, 0) 89.18919%, rgba(0, 0, 0, 0) 91.89189%, rgba(121, 121, 229, 0.25) 91.89189%, rgba(79, 79, 221, 0.25) 97.2973%, rgba(0, 0, 0, 0) 97.2973%, rgba(0, 0, 0, 0) 100%);\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 2.7027%, rgba(121, 121, 229, 0.25) 2.7027%, rgba(79, 79, 221, 0.25) 8.10811%, rgba(0, 0, 0, 0) 8.10811%, rgba(0, 0, 0, 0) 10.81081%, rgba(121, 121, 229, 0.25) 10.81081%, rgba(79, 79, 221, 0.25) 16.21622%, rgba(0, 0, 0, 0) 16.21622%, rgba(0, 0, 0, 0) 18.91892%, rgba(121, 121, 229, 0.25) 18.91892%, rgba(79, 79, 221, 0.25) 24.32432%, rgba(0, 0, 0, 0) 24.32432%, rgba(0, 0, 0, 0) 27.02703%, rgba(121, 121, 229, 0.25) 27.02703%, rgba(79, 79, 221, 0.25) 32.43243%, rgba(0, 0, 0, 0) 32.43243%, rgba(0, 0, 0, 0) 35.13514%, rgba(121, 121, 229, 0.25) 35.13514%, rgba(79, 79, 221, 0.25) 40.54054%, rgba(0, 0, 0, 0) 40.54054%, rgba(0, 0, 0, 0) 43.24324%, rgba(121, 121, 229, 0.25) 43.24324%, rgba(79, 79, 221, 0.25) 48.64865%, rgba(0, 0, 0, 0) 48.64865%, rgba(0, 0, 0, 0) 51.35135%, rgba(121, 121, 229, 0.25) 51.35135%, rgba(79, 79, 221, 0.25) 56.75676%, rgba(0, 0, 0, 0) 56.75676%, rgba(0, 0, 0, 0) 59.45946%, rgba(121, 121, 229, 0.25) 59.45946%, rgba(79, 79, 221, 0.25) 64.86486%, rgba(0, 0, 0, 0) 64.86486%, rgba(0, 0, 0, 0) 67.56757%, rgba(121, 121, 229, 0.25) 67.56757%, rgba(79, 79, 221, 0.25) 72.97297%, rgba(0, 0, 0, 0) 72.97297%, rgba(0, 0, 0, 0) 75.67568%, rgba(121, 121, 229, 0.25) 75.67568%, rgba(79, 79, 221, 0.25) 81.08108%, rgba(0, 0, 0, 0) 81.08108%, rgba(0, 0, 0, 0) 83.78378%, rgba(121, 121, 229, 0.25) 83.78378%, rgba(79, 79, 221, 0.25) 89.18919%, rgba(0, 0, 0, 0) 89.18919%, rgba(0, 0, 0, 0) 91.89189%, rgba(121, 121, 229, 0.25) 91.89189%, rgba(79, 79, 221, 0.25) 97.2973%, rgba(0, 0, 0, 0) 97.2973%, rgba(0, 0, 0, 0) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0) 2.7027%, rgba(121, 121, 229, 0.25) 2.7027%, rgba(79, 79, 221, 0.25) 8.10811%, rgba(0, 0, 0, 0) 8.10811%, rgba(0, 0, 0, 0) 10.81081%, rgba(121, 121, 229, 0.25) 10.81081%, rgba(79, 79, 221, 0.25) 16.21622%, rgba(0, 0, 0, 0) 16.21622%, rgba(0, 0, 0, 0) 18.91892%, rgba(121, 121, 229, 0.25) 18.91892%, rgba(79, 79, 221, 0.25) 24.32432%, rgba(0, 0, 0, 0) 24.32432%, rgba(0, 0, 0, 0) 27.02703%, rgba(121, 121, 229, 0.25) 27.02703%, rgba(79, 79, 221, 0.25) 32.43243%, rgba(0, 0, 0, 0) 32.43243%, rgba(0, 0, 0, 0) 35.13514%, rgba(121, 121, 229, 0.25) 35.13514%, rgba(79, 79, 221, 0.25) 40.54054%, rgba(0, 0, 0, 0) 40.54054%, rgba(0, 0, 0, 0) 43.24324%, rgba(121, 121, 229, 0.25) 43.24324%, rgba(79, 79, 221, 0.25) 48.64865%, rgba(0, 0, 0, 0) 48.64865%, rgba(0, 0, 0, 0) 51.35135%, rgba(121, 121, 229, 0.25) 51.35135%, rgba(79, 79, 221, 0.25) 56.75676%, rgba(0, 0, 0, 0) 56.75676%, rgba(0, 0, 0, 0) 59.45946%, rgba(121, 121, 229, 0.25) 59.45946%, rgba(79, 79, 221, 0.25) 64.86486%, rgba(0, 0, 0, 0) 64.86486%, rgba(0, 0, 0, 0) 67.56757%, rgba(121, 121, 229, 0.25) 67.56757%, rgba(79, 79, 221, 0.25) 72.97297%, rgba(0, 0, 0, 0) 72.97297%, rgba(0, 0, 0, 0) 75.67568%, rgba(121, 121, 229, 0.25) 75.67568%, rgba(79, 79, 221, 0.25) 81.08108%, rgba(0, 0, 0, 0) 81.08108%, rgba(0, 0, 0, 0) 83.78378%, rgba(121, 121, 229, 0.25) 83.78378%, rgba(79, 79, 221, 0.25) 89.18919%, rgba(0, 0, 0, 0) 89.18919%, rgba(0, 0, 0, 0) 91.89189%, rgba(121, 121, 229, 0.25) 91.89189%, rgba(79, 79, 221, 0.25) 97.2973%, rgba(0, 0, 0, 0) 97.2973%, rgba(0, 0, 0, 0) 100%);\n  background-position: left top; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/hyphenation.css",
    "content": ".word-break {\n  word-break: keep-all; }\n\n.hyphens {\n  -moz-hyphens: manual;\n  -ms-hyphens: manual;\n  -webkit-hyphens: manual;\n  hyphens: manual; }\n\n.hyphenate {\n  word-break: break-all;\n  word-break: break-word;\n  -moz-hyphens: auto;\n  -ms-hyphens: auto;\n  -webkit-hyphens: auto;\n  hyphens: auto; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/image_size.css",
    "content": ".png {\n  width: 100px;\n  height: 150px; }\n\n.jpg {\n  width: 100px;\n  height: 150px; }\n\n.jpeg {\n  width: 100px;\n  height: 150px; }\n\n.gif {\n  width: 100px;\n  height: 150px; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/images.css",
    "content": ".relative {\n  background-image: url('/images/4x6.png?busted=true'); }\n\n.root-relative {\n  background-image: url('/images/4x6.png?busted=true'); }\n\n.absolute {\n  background-image: url(http://example.com/images/4x6.png); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/issue-1853.css",
    "content": ".use-case {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmMDAwMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDBmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0000), color-stop(100%, #0000ff));\n  background-image: -moz-linear-gradient(#ff0000, #0000ff);\n  background-image: -webkit-linear-gradient(#ff0000, #0000ff);\n  background-image: linear-gradient(#ff0000, #0000ff); }\n\n.simple {\n  content: (ie: \"9\" \"9\"); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/layout.css",
    "content": "html, body {\n  height: 100%; }\n\n#layout {\n  clear: both;\n  min-height: 100%;\n  height: auto !important;\n  height: 100%;\n  margin-bottom: -72px; }\n  #layout #layout_footer {\n    height: 72px; }\n\n#footer {\n  clear: both;\n  position: relative;\n  height: 72px; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/legacy_clearfix.css",
    "content": ".clearfix {\n  overflow: hidden;\n  display: inline-block; }\n  .clearfix {\n    display: block; }\n\n.pie-clearfix {\n  display: inline-block; }\n  .pie-clearfix:after {\n    content: \"\\0020\";\n    display: block;\n    height: 0;\n    clear: both;\n    overflow: hidden;\n    visibility: hidden; }\n  .pie-clearfix {\n    display: block; }\n\n.simplified-pie-clearfix {\n  display: inline-block; }\n  .simplified-pie-clearfix:after {\n    content: \"\";\n    display: table;\n    clear: both; }\n  .simplified-pie-clearfix {\n    display: block; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/lists.css",
    "content": "ul.horizontal {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.horizontal li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    white-space: nowrap;\n    float: left;\n    padding-left: 4px;\n    padding-right: 4px; }\n    ul.horizontal li:first-child {\n      padding-left: 0; }\n    ul.horizontal li:last-child {\n      padding-right: 0; }\n    ul.horizontal li.last {\n      padding-right: 0; }\n\nul.wide-horizontal {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.wide-horizontal li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    white-space: nowrap;\n    float: left;\n    padding-left: 10px;\n    padding-right: 10px; }\n    ul.wide-horizontal li:first-child {\n      padding-left: 0; }\n    ul.wide-horizontal li:last-child {\n      padding-right: 0; }\n    ul.wide-horizontal li.last {\n      padding-right: 0; }\n\nul.right-horizontal {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.right-horizontal li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    white-space: nowrap;\n    float: right;\n    padding-left: 4px;\n    padding-right: 4px; }\n    ul.right-horizontal li:first-child {\n      padding-right: 0; }\n    ul.right-horizontal li:last-child {\n      padding-left: 0; }\n    ul.right-horizontal li.last {\n      padding-left: 0; }\n\nul.no-padding {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.no-padding li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    white-space: nowrap;\n    float: left; }\n\nul.inline-block {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.inline-block li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    display: inline-block;\n    vertical-align: middle;\n    *vertical-align: auto;\n    *zoom: 1;\n    *display: inline;\n    white-space: nowrap; }\n\nul.wide-inline-block {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  *zoom: 1; }\n  ul.wide-inline-block li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0;\n    display: inline-block;\n    vertical-align: middle;\n    *vertical-align: auto;\n    *zoom: 1;\n    *display: inline;\n    white-space: nowrap;\n    padding-left: 10px;\n    padding-right: 10px; }\n\nul.inline {\n  list-style-type: none; }\n  ul.inline, ul.inline li {\n    margin: 0;\n    padding: 0;\n    display: inline; }\n\nul.comma {\n  list-style-type: none; }\n  ul.comma, ul.comma li {\n    margin: 0;\n    padding: 0;\n    display: inline; }\n  ul.comma li:after {\n    content: \", \"; }\n  ul.comma li:last-child:after {\n    content: \"\"; }\n  ul.comma li.last:after {\n    content: \"\"; }\n\nul.no-bullets {\n  list-style: none; }\n  ul.no-bullets li {\n    list-style-image: none;\n    list-style-type: none;\n    margin-left: 0; }\n\nul.pretty {\n  margin-left: 0; }\n  ul.pretty li {\n    padding-left: 14px;\n    background: url('/images/4x6.png?busted=true') no-repeat 4px 7px;\n    list-style-type: none; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/opacity.css",
    "content": "div {\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20);\n  opacity: 0.2; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/print.css",
    "content": ".noprint, .no-print {\n  display: none; }\n\naddress.print-only, article.print-only, aside.print-only, blockquote.print-only, center.print-only, dir.print-only, div.print-only, dd.print-only, details.print-only, dl.print-only, dt.print-only, fieldset.print-only, figcaption.print-only, figure.print-only, form.print-only, footer.print-only, frameset.print-only, h1.print-only, h2.print-only, h3.print-only, h4.print-only, h5.print-only, h6.print-only, hr.print-only, header.print-only, hgroup.print-only, isindex.print-only, main.print-only, menu.print-only, nav.print-only, noframes.print-only, noscript.print-only, ol.print-only, p.print-only, pre.print-only, section.print-only, summary.print-only, ul.print-only {\n  display: block; }\n\na.print-only, abbr.print-only, acronym.print-only, audio.print-only, b.print-only, basefont.print-only, bdo.print-only, big.print-only, br.print-only, canvas.print-only, cite.print-only, code.print-only, command.print-only, datalist.print-only, dfn.print-only, em.print-only, embed.print-only, font.print-only, i.print-only, img.print-only, input.print-only, keygen.print-only, kbd.print-only, label.print-only, mark.print-only, meter.print-only, output.print-only, progress.print-only, q.print-only, rp.print-only, rt.print-only, ruby.print-only, s.print-only, samp.print-only, select.print-only, small.print-only, span.print-only, strike.print-only, strong.print-only, sub.print-only, sup.print-only, textarea.print-only, time.print-only, tt.print-only, u.print-only, var.print-only, video.print-only, wbr.print-only {\n  display: inline; }\n\n.print-only {\n  display: none; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/regions.css",
    "content": ".source {\n  -ms-flow-into: target;\n  -webkit-flow-into: target;\n  flow-into: target; }\n\n.new-container {\n  -ms-flow-from: target;\n  -webkit-flow-from: target;\n  flow-from: target; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/replacement.css",
    "content": ".basic {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('/images/4x6.png?busted=true');\n  background-repeat: no-repeat;\n  background-position: 50% 50%; }\n\n.with-dimensions {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('/images/4x6.png?busted=true');\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n  width: 6px;\n  height: 4px; }\n\n.with-dimensions-inline {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAIAAAAiZtkUAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAI0lEQVQIHWOwtLT8//9/eno6kISwGdD4QDkGZHkIG6QKTS8A/s4vHesO+KkAAAAASUVORK5CYII=');\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n  width: 6px;\n  height: 4px; }\n\n.with-position {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('/images/4x6.png?busted=true');\n  background-repeat: no-repeat;\n  background-position: 10px top; }\n\n.with-arbitrary-url {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url(http://google.com/logo.gif);\n  background-repeat: no-repeat;\n  background-position: 10px top; }\n\n.with-inline-url {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAIAAAAiZtkUAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAI0lEQVQIHWOwtLT8//9/eno6kISwGdD4QDkGZHkIG6QKTS8A/s4vHesO+KkAAAAASUVORK5CYII=');\n  background-repeat: no-repeat;\n  background-position: 10px top; }\n\n.with-image-url {\n  text-indent: -119988px;\n  overflow: hidden;\n  text-align: left;\n  text-transform: capitalize;\n  background-image: url('/images/4x6.png?busted=true');\n  background-repeat: no-repeat;\n  background-position: 10px top; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/reset.css",
    "content": "html, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font: inherit;\n  font-size: 100%;\n  vertical-align: baseline; }\n\nhtml {\n  line-height: 1; }\n\nol, ul {\n  list-style: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ncaption, th, td {\n  text-align: left;\n  font-weight: normal;\n  vertical-align: middle; }\n\nq, blockquote {\n  quotes: none; }\n  q:before, q:after, blockquote:before, blockquote:after {\n    content: \"\";\n    content: none; }\n\na img {\n  border: none; }\n\narticle, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {\n  display: block; }\n\n.unregistered-only, .registered-only {\n  display: none; }\n\nbody.registered a.registered-only, body.registered abbr.registered-only, body.registered acronym.registered-only, body.registered audio.registered-only, body.registered b.registered-only, body.registered basefont.registered-only, body.registered bdo.registered-only, body.registered big.registered-only, body.registered br.registered-only, body.registered canvas.registered-only, body.registered cite.registered-only, body.registered code.registered-only, body.registered command.registered-only, body.registered datalist.registered-only, body.registered dfn.registered-only, body.registered em.registered-only, body.registered embed.registered-only, body.registered font.registered-only, body.registered i.registered-only, body.registered img.registered-only, body.registered input.registered-only, body.registered keygen.registered-only, body.registered kbd.registered-only, body.registered label.registered-only, body.registered mark.registered-only, body.registered meter.registered-only, body.registered output.registered-only, body.registered progress.registered-only, body.registered q.registered-only, body.registered rp.registered-only, body.registered rt.registered-only, body.registered ruby.registered-only, body.registered s.registered-only, body.registered samp.registered-only, body.registered select.registered-only, body.registered small.registered-only, body.registered span.registered-only, body.registered strike.registered-only, body.registered strong.registered-only, body.registered sub.registered-only, body.registered sup.registered-only, body.registered textarea.registered-only, body.registered time.registered-only, body.registered tt.registered-only, body.registered u.registered-only, body.registered var.registered-only, body.registered video.registered-only, body.registered wbr.registered-only {\n  display: inline; }\nbody.registered address.registered-only, body.registered article.registered-only, body.registered aside.registered-only, body.registered blockquote.registered-only, body.registered center.registered-only, body.registered dir.registered-only, body.registered div.registered-only, body.registered dd.registered-only, body.registered details.registered-only, body.registered dl.registered-only, body.registered dt.registered-only, body.registered fieldset.registered-only, body.registered figcaption.registered-only, body.registered figure.registered-only, body.registered form.registered-only, body.registered footer.registered-only, body.registered frameset.registered-only, body.registered h1.registered-only, body.registered h2.registered-only, body.registered h3.registered-only, body.registered h4.registered-only, body.registered h5.registered-only, body.registered h6.registered-only, body.registered hr.registered-only, body.registered header.registered-only, body.registered hgroup.registered-only, body.registered isindex.registered-only, body.registered main.registered-only, body.registered menu.registered-only, body.registered nav.registered-only, body.registered noframes.registered-only, body.registered noscript.registered-only, body.registered ol.registered-only, body.registered p.registered-only, body.registered pre.registered-only, body.registered section.registered-only, body.registered summary.registered-only, body.registered ul.registered-only {\n  display: block; }\n\nbody.unregistered a.unregistered-only, body.unregistered abbr.unregistered-only, body.unregistered acronym.unregistered-only, body.unregistered audio.unregistered-only, body.unregistered b.unregistered-only, body.unregistered basefont.unregistered-only, body.unregistered bdo.unregistered-only, body.unregistered big.unregistered-only, body.unregistered br.unregistered-only, body.unregistered canvas.unregistered-only, body.unregistered cite.unregistered-only, body.unregistered code.unregistered-only, body.unregistered command.unregistered-only, body.unregistered datalist.unregistered-only, body.unregistered dfn.unregistered-only, body.unregistered em.unregistered-only, body.unregistered embed.unregistered-only, body.unregistered font.unregistered-only, body.unregistered i.unregistered-only, body.unregistered img.unregistered-only, body.unregistered input.unregistered-only, body.unregistered keygen.unregistered-only, body.unregistered kbd.unregistered-only, body.unregistered label.unregistered-only, body.unregistered mark.unregistered-only, body.unregistered meter.unregistered-only, body.unregistered output.unregistered-only, body.unregistered progress.unregistered-only, body.unregistered q.unregistered-only, body.unregistered rp.unregistered-only, body.unregistered rt.unregistered-only, body.unregistered ruby.unregistered-only, body.unregistered s.unregistered-only, body.unregistered samp.unregistered-only, body.unregistered select.unregistered-only, body.unregistered small.unregistered-only, body.unregistered span.unregistered-only, body.unregistered strike.unregistered-only, body.unregistered strong.unregistered-only, body.unregistered sub.unregistered-only, body.unregistered sup.unregistered-only, body.unregistered textarea.unregistered-only, body.unregistered time.unregistered-only, body.unregistered tt.unregistered-only, body.unregistered u.unregistered-only, body.unregistered var.unregistered-only, body.unregistered video.unregistered-only, body.unregistered wbr.unregistered-only {\n  display: inline; }\nbody.unregistered address.unregistered-only, body.unregistered article.unregistered-only, body.unregistered aside.unregistered-only, body.unregistered blockquote.unregistered-only, body.unregistered center.unregistered-only, body.unregistered dir.unregistered-only, body.unregistered div.unregistered-only, body.unregistered dd.unregistered-only, body.unregistered details.unregistered-only, body.unregistered dl.unregistered-only, body.unregistered dt.unregistered-only, body.unregistered fieldset.unregistered-only, body.unregistered figcaption.unregistered-only, body.unregistered figure.unregistered-only, body.unregistered form.unregistered-only, body.unregistered footer.unregistered-only, body.unregistered frameset.unregistered-only, body.unregistered h1.unregistered-only, body.unregistered h2.unregistered-only, body.unregistered h3.unregistered-only, body.unregistered h4.unregistered-only, body.unregistered h5.unregistered-only, body.unregistered h6.unregistered-only, body.unregistered hr.unregistered-only, body.unregistered header.unregistered-only, body.unregistered hgroup.unregistered-only, body.unregistered isindex.unregistered-only, body.unregistered main.unregistered-only, body.unregistered menu.unregistered-only, body.unregistered nav.unregistered-only, body.unregistered noframes.unregistered-only, body.unregistered noscript.unregistered-only, body.unregistered ol.unregistered-only, body.unregistered p.unregistered-only, body.unregistered pre.unregistered-only, body.unregistered section.unregistered-only, body.unregistered summary.unregistered-only, body.unregistered ul.unregistered-only {\n  display: block; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/selection.css",
    "content": "*::-moz-selection {\n  background-color: #fe57a1;\n  color: #fff; }\n*::selection {\n  background-color: #fe57a1;\n  color: #fff; }\n\n.hot-pink::-moz-selection {\n  background-color: #fe57a1;\n  color: #fff; }\n.hot-pink::selection {\n  background-color: #fe57a1;\n  color: #fff; }\n\n.hot-pink-with-arguments::-moz-selection {\n  color: #fff;\n  background-color: #fe57a1; }\n.hot-pink-with-arguments::selection {\n  color: #fff;\n  background-color: #fe57a1; }\n\n.hot-pink-with-arguments-and-extra-stuff::-moz-selection {\n  color: #fff;\n  background-color: #fe57a1;\n  text-decoration: line-through; }\n.hot-pink-with-arguments-and-extra-stuff::selection {\n  color: #fff;\n  background-color: #fe57a1;\n  text-decoration: line-through; }\n\n.hot-pink-with-default-foreground::-moz-selection {\n  color: #000;\n  background-color: #fe57a1; }\n.hot-pink-with-default-foreground::selection {\n  color: #000;\n  background-color: #fe57a1; }\n\n.browser-support-is-considered::-moz-selection {\n  color: #000;\n  background-color: #fe57a1;\n  prefix: -moz;\n  -moz-prefix: true;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n.browser-support-is-considered::selection {\n  color: #000;\n  background-color: #fe57a1;\n  -moz-prefix: false;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/selection.css.3.3",
    "content": "*::-moz-selection {\n  background-color: #fe57a1;\n  color: #fff; }\n*::selection {\n  background-color: #fe57a1;\n  color: #fff; }\n\n.hot-pink::-moz-selection {\n  background-color: #fe57a1;\n  color: #fff; }\n.hot-pink::selection {\n  background-color: #fe57a1;\n  color: #fff; }\n\n.hot-pink-with-arguments::-moz-selection {\n  color: white;\n  background-color: #fe57a1; }\n.hot-pink-with-arguments::selection {\n  color: white;\n  background-color: #fe57a1; }\n\n.hot-pink-with-arguments-and-extra-stuff::-moz-selection {\n  color: white;\n  background-color: #fe57a1;\n  text-decoration: line-through; }\n.hot-pink-with-arguments-and-extra-stuff::selection {\n  color: white;\n  background-color: #fe57a1;\n  text-decoration: line-through; }\n\n.hot-pink-with-default-foreground::-moz-selection {\n  color: black;\n  background-color: #fe57a1; }\n.hot-pink-with-default-foreground::selection {\n  color: black;\n  background-color: #fe57a1; }\n\n.browser-support-is-considered::-moz-selection {\n  color: black;\n  background-color: #fe57a1;\n  prefix: -moz;\n  -moz-prefix: true;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n.browser-support-is-considered::selection {\n  color: black;\n  background-color: #fe57a1;\n  -moz-prefix: false;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/stretching.css",
    "content": ".stretched-completely {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0; }\n\n.stretched-horizontally {\n  position: absolute;\n  left: 0;\n  right: 0; }\n\n.stretched-right {\n  position: absolute;\n  left: 0;\n  right: 50%; }\n\n.left-pane {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 50%; }\n\n.stretched-left {\n  position: absolute;\n  left: 50%;\n  right: 0; }\n\n.right-pane {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 50%;\n  right: 0; }\n\n.stretched-down {\n  position: absolute;\n  top: 0;\n  bottom: 50%; }\n\n.top-pane {\n  position: absolute;\n  top: 0;\n  bottom: 50%;\n  left: 0;\n  right: 0; }\n\n.stretched-up {\n  position: absolute;\n  top: 50%;\n  bottom: 0; }\n\n.bottom-pane {\n  position: absolute;\n  top: 50%;\n  bottom: 0;\n  left: 0;\n  right: 0; }\n\n.viewport {\n  position: absolute;\n  top: 10px;\n  bottom: 30px;\n  left: 40px;\n  right: 20px; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/support.css",
    "content": "/* ### Compass Support ---------- */\n/* - [variable] $compass-extensions is set and is a map (3 Assertions, 3 Passed, 0 Failed) */\n/* - [function] set-arglist-default() with no arguments (1 Assertions, 1 Passed, 0 Failed) */\n/* - [function] set-arglist-default() with a \"default\" argument (1 Assertions, 1 Passed, 0 Failed) */\n/* - [function] set-arglist-default() with a \"default\" argument and another argument (1 Assertions, 1 Passed, 0 Failed) */\n/* - [function] set-arglist-default() with a \"default\" argument not first and another argument (1 Assertions, 1 Passed, 0 Failed) */\n/* - [function] support-legacy-browser() from threshold (2 Assertions, 2 Passed, 0 Failed) */\n/* - [function] support-legacy-browser() from minimums (2 Assertions, 2 Passed, 0 Failed) */\n/* - [function] browser-out-of-scope() with no scope (2 Assertions, 2 Passed, 0 Failed) */\n/* - prefix context tracking (9 Assertions, 9 Passed, 0 Failed) */\n/* - [function] browser-out-of-scope() with a scope (2 Assertions, 2 Passed, 0 Failed) */\n/* - [function] browser-out-of-scope() with version (3 Assertions, 3 Passed, 0 Failed) */\n/* - [mixin] with-prefix() (4 Assertions, 4 Passed, 0 Failed) */\n/* - [mixin] with-each-prefix() (1 Assertions, 1 Passed, 0 Failed) */\n/* - [mixin] with-each-prefix() respects $supported-browsers (1 Assertions, 1 Passed, 0 Failed) */\n/* - [mixin] with-each-prefix() respects $current-prefix (3 Assertions, 3 Passed, 0 Failed) */\n/* - [function] has-browser-subset() (5 Assertions, 5 Passed, 0 Failed) */\n/* - [function] support-legacy-browser() respects $supported-browsers (1 Assertions, 1 Passed, 0 Failed) */\n/*\n*/\n/* 17 Tests: */\n/* - 17 Passed */\n/* - 0 Failed */\n/*\n*/\n/* Capability css-animation is prefixed with -moz because 0.57224% of users need it which is more than the threshold of 0.1%. */\n/* Creating new -moz context. */\n@-moz-keyframes foo {\n  0% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: ie 8 is incompatible with -moz. */\n    opacity: 0; }\n\n  100% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: ie 8 is incompatible with -moz. */\n    opacity: 1; } }\n/* Capability css-animation is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n/* Capability css-animation is not prefixed with -o because 0.02146% of users are affected which is less than the threshold of 0.1. */\n/* Capability css-animation is prefixed with -webkit because 57.87258% of users need it which is more than the threshold of 0.1%. */\n/* Creating new -webkit context. */\n@-webkit-keyframes foo {\n  0% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: ie 8 is incompatible with -webkit. */\n    opacity: 0; }\n\n  100% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: ie 8 is incompatible with -webkit. */\n    opacity: 1; } }\n@keyframes foo {\n  0% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: The current scope only works with ie 10 - 11. */\n    opacity: 0; }\n\n  100% {\n    /* Content for ie 8 omitted.\n       Not allowed in the current scope: The current scope only works with ie 10 - 11. */\n    opacity: 1; } }\n.foo {\n  /* Capability css-animation is prefixed with -moz because 0.57224% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -moz context. */\n  -moz-animation: foo 1s;\n  /* Capability css-animation is not prefixed with -ms because 0% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-animation is not prefixed with -o because 0.02146% of users are affected which is less than the threshold of 0.1. */\n  /* Capability css-animation is prefixed with -webkit because 57.87258% of users need it which is more than the threshold of 0.1%. */\n  /* Creating new -webkit context. */\n  -webkit-animation: foo 1s;\n  animation: foo 1s; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/table.css",
    "content": ".outer-table-borders {\n  border: 2px solid black; }\n  .outer-table-borders thead th {\n    border-bottom: 2px solid black; }\n  .outer-table-borders tfoot th, .outer-table-borders tfoot td {\n    border-top: 2px solid black; }\n  .outer-table-borders th:first-child {\n    border-right: 2px solid black; }\n\n.inner-table-borders th, .inner-table-borders td {\n  border-right: 2px solid black;\n  border-bottom: 2px solid black;\n  border-left-width: 0;\n  border-top-width: 0; }\n  .inner-table-borders th:last-child, .inner-table-borders td:last-child {\n    border-right-width: 0; }\n  .inner-table-borders th.last, .inner-table-borders td.last {\n    border-right-width: 0; }\n.inner-table-borders tbody tr:last-child th, .inner-table-borders tbody tr:last-child td, .inner-table-borders tfoot tr:last-child th, .inner-table-borders tfoot tr:last-child td {\n  border-bottom-width: 0; }\n.inner-table-borders tbody tr.last th, .inner-table-borders tbody tr.last td, .inner-table-borders tfoot tr.last th, .inner-table-borders tfoot tr.last td {\n  border-bottom-width: 0; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/text_shadow.css",
    "content": ".default-single-text-shadow {\n  text-shadow: 0px 0px 1px #aaaaaa; }\n\n.none {\n  text-shadow: none; }\n\n.color-only {\n  text-shadow: 0px 0px 1px #cccccc; }\n\n.color-first-with-params {\n  text-shadow: 2px 2px 5px #cccccc;\n  text-shadow: 2px 2px 5px 2px #cccccc; }\n\n.color-last-with-params {\n  text-shadow: 2px 2px 5px #cccccc;\n  text-shadow: 2px 2px 5px 2px #cccccc; }\n\n.default-text-shadow {\n  text-shadow: 0px 0px 1px #aaaaaa; }\n\n.multiple-text-shadows-with-default {\n  text-shadow: 0px 0px 1px #aaaaaa, 2px 2px 5px #222222; }\n\n.multiple-text-shadows {\n  text-shadow: 4px 4px 10px #444444, 2px 2px 5px #222222; }\n\n.multiple-text-shadows-with-spread {\n  text-shadow: 4px 4px 10px #444444, 2px 2px 5px #222222;\n  text-shadow: 4px 4px 10px 1px #444444, 2px 2px 5px 3px #222222; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/transform.css",
    "content": ".apply-origin-2d {\n  -moz-transform-origin: 2px 5%;\n  -ms-transform-origin: 2px 5%;\n  -webkit-transform-origin: 2px 5%;\n  transform-origin: 2px 5%; }\n\n.apply-origin-3d {\n  -moz-transform-origin: 2px 5% 2in;\n  -webkit-transform-origin: 2px 5% 2in;\n  transform-origin: 2px 5% 2in; }\n\n.transform-origin-2d {\n  -moz-transform-origin: 100px 100px;\n  -ms-transform-origin: 100px 100px;\n  -webkit-transform-origin: 100px 100px;\n  transform-origin: 100px 100px; }\n\n.transform-origin-3d {\n  -moz-transform-origin: 100px 100px 100px;\n  -webkit-transform-origin: 100px 100px 100px;\n  transform-origin: 100px 100px 100px; }\n\n.transform-2d {\n  -moz-transform: rotateY(20deg);\n  -ms-transform: rotateY(20deg);\n  -webkit-transform: rotateY(20deg);\n  transform: rotateY(20deg); }\n\n.transform-3d {\n  -moz-transform: rotateZ(20deg);\n  -webkit-transform: rotateZ(20deg);\n  transform: rotateZ(20deg); }\n\n.perspective {\n  -moz-perspective: 500;\n  -webkit-perspective: 500;\n  perspective: 500; }\n\n.perspective-origin {\n  -moz-perspective-origin: 25% 25%;\n  -webkit-perspective-origin: 25% 25%;\n  perspective-origin: 25% 25%; }\n\n.transform-style {\n  -moz-transform-style: preserve-3d;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.backface-visibility {\n  -moz-backface-visibility: hidden;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.scale {\n  -moz-transform: scale(30px, 50px);\n  -ms-transform: scale(30px, 50px);\n  -webkit-transform: scale(30px, 50px);\n  transform: scale(30px, 50px); }\n\n.scale-3d {\n  -moz-transform: scale(30px, 50px);\n  -webkit-transform: scale(30px, 50px);\n  transform: scale(30px, 50px); }\n\n.scale-with-perspective {\n  -moz-transform: perspective(500) scale(30px, 50px);\n  -ms-transform: perspective(500) scale(30px, 50px);\n  -webkit-transform: perspective(500) scale(30px, 50px);\n  transform: perspective(500) scale(30px, 50px); }\n\n.scale-3d-with-perspective {\n  -moz-transform: perspective(500) scale(30px, 50px);\n  -webkit-transform: perspective(500) scale(30px, 50px);\n  transform: perspective(500) scale(30px, 50px); }\n\n.scale-x {\n  -moz-transform: scaleX(30px);\n  -ms-transform: scaleX(30px);\n  -webkit-transform: scaleX(30px);\n  transform: scaleX(30px); }\n\n.scale-x-3d {\n  -moz-transform: scaleX(30px);\n  -webkit-transform: scaleX(30px);\n  transform: scaleX(30px); }\n\n.scale-x-with-perspective {\n  -moz-transform: perspective(500) scaleX(30px);\n  -ms-transform: perspective(500) scaleX(30px);\n  -webkit-transform: perspective(500) scaleX(30px);\n  transform: perspective(500) scaleX(30px); }\n\n.scale-x-3d-with-perspective {\n  -moz-transform: perspective(500) scaleX(30px);\n  -webkit-transform: perspective(500) scaleX(30px);\n  transform: perspective(500) scaleX(30px); }\n\n.scale-y {\n  -moz-transform: scaleY(50px);\n  -ms-transform: scaleY(50px);\n  -webkit-transform: scaleY(50px);\n  transform: scaleY(50px); }\n\n.scale-y-3d {\n  -moz-transform: scaleY(50px);\n  -webkit-transform: scaleY(50px);\n  transform: scaleY(50px); }\n\n.scale-y-with-perspective {\n  -moz-transform: perspective(500) scaleY(50px);\n  -ms-transform: perspective(500) scaleY(50px);\n  -webkit-transform: perspective(500) scaleY(50px);\n  transform: perspective(500) scaleY(50px); }\n\n.scale-y-3d-with-perspective {\n  -moz-transform: perspective(500) scaleY(50px);\n  -webkit-transform: perspective(500) scaleY(50px);\n  transform: perspective(500) scaleY(50px); }\n\n.scale-z {\n  -moz-transform: scaleZ(50px);\n  -webkit-transform: scaleZ(50px);\n  transform: scaleZ(50px); }\n\n.scale-z-with-perspective {\n  -moz-transform: perspective(500) scaleZ(50px);\n  -webkit-transform: perspective(500) scaleZ(50px);\n  transform: perspective(500) scaleZ(50px); }\n\n.scale3d {\n  -moz-transform: scale3d(30px, 50px, 100px);\n  -webkit-transform: scale3d(30px, 50px, 100px);\n  transform: scale3d(30px, 50px, 100px); }\n\n.scaled3-with-perspective {\n  -moz-transform: perspective(500) scale3d(30px, 50px, 100px);\n  -webkit-transform: perspective(500) scale3d(30px, 50px, 100px);\n  transform: perspective(500) scale3d(30px, 50px, 100px); }\n\n.rotate {\n  -moz-transform: perspective(500) rotate(25deg);\n  -ms-transform: perspective(500) rotate(25deg);\n  -webkit-transform: perspective(500) rotate(25deg);\n  transform: perspective(500) rotate(25deg); }\n\n.rotate-with-perspective {\n  -moz-transform: perspective(500) rotate(25deg);\n  -ms-transform: perspective(500) rotate(25deg);\n  -webkit-transform: perspective(500) rotate(25deg);\n  transform: perspective(500) rotate(25deg); }\n\n.rotate-z {\n  -moz-transform: rotate(25deg);\n  -ms-transform: rotate(25deg);\n  -webkit-transform: rotate(25deg);\n  transform: rotate(25deg); }\n\n.rotate-z-with-perspective {\n  -moz-transform: perspective(500) rotate(25deg);\n  -ms-transform: perspective(500) rotate(25deg);\n  -webkit-transform: perspective(500) rotate(25deg);\n  transform: perspective(500) rotate(25deg); }\n\n.rotate-x {\n  -moz-transform: rotateX(25deg);\n  -webkit-transform: rotateX(25deg);\n  transform: rotateX(25deg); }\n\n.rotate-x-with-perspective {\n  -moz-transform: perspective(500) rotateX(25deg);\n  -webkit-transform: perspective(500) rotateX(25deg);\n  transform: perspective(500) rotateX(25deg); }\n\n.rotate-y {\n  -moz-transform: rotateY(25deg);\n  -webkit-transform: rotateY(25deg);\n  transform: rotateY(25deg); }\n\n.rotate-y-with-perspective {\n  -moz-transform: perspective(500) rotateY(25deg);\n  -webkit-transform: perspective(500) rotateY(25deg);\n  transform: perspective(500) rotateY(25deg); }\n\n.rotate-3d {\n  -moz-transform: rotate3d(5, 2, 1, 75deg);\n  -webkit-transform: rotate3d(5, 2, 1, 75deg);\n  transform: rotate3d(5, 2, 1, 75deg); }\n\n.rotate-3d-with-perspective {\n  -moz-transform: perspective(500) rotate3d(5, 2, 1, 75deg);\n  -webkit-transform: perspective(500) rotate3d(5, 2, 1, 75deg);\n  transform: perspective(500) rotate3d(5, 2, 1, 75deg); }\n\n.translate {\n  -moz-transform: translate(20px, 30%);\n  -ms-transform: translate(20px, 30%);\n  -webkit-transform: translate(20px, 30%);\n  transform: translate(20px, 30%); }\n\n.translate-with-perspective {\n  -moz-transform: perspective(500) translate(20px, 30%);\n  -ms-transform: perspective(500) translate(20px, 30%);\n  -webkit-transform: perspective(500) translate(20px, 30%);\n  transform: perspective(500) translate(20px, 30%); }\n\n.translate-3d {\n  -moz-transform: translate(20px, 30%);\n  -webkit-transform: translate(20px, 30%);\n  transform: translate(20px, 30%); }\n\n.translate-3d-with-perspective {\n  -moz-transform: perspective(500) translate(20px, 30%);\n  -webkit-transform: perspective(500) translate(20px, 30%);\n  transform: perspective(500) translate(20px, 30%); }\n\n.translate-x {\n  -moz-transform: translateX(30px);\n  -ms-transform: translateX(30px);\n  -webkit-transform: translateX(30px);\n  transform: translateX(30px); }\n\n.translate-x-3d {\n  -moz-transform: translateX(30px);\n  -webkit-transform: translateX(30px);\n  transform: translateX(30px); }\n\n.translate-x-with-perspective {\n  -moz-transform: perspective(500) translateX(30px);\n  -ms-transform: perspective(500) translateX(30px);\n  -webkit-transform: perspective(500) translateX(30px);\n  transform: perspective(500) translateX(30px); }\n\n.translate-x-3d-with-perspective {\n  -moz-transform: perspective(500) translateX(30px);\n  -webkit-transform: perspective(500) translateX(30px);\n  transform: perspective(500) translateX(30px); }\n\n.translate-y {\n  -moz-transform: translateY(30px);\n  -ms-transform: translateY(30px);\n  -webkit-transform: translateY(30px);\n  transform: translateY(30px); }\n\n.translate-y-3d {\n  -moz-transform: translateY(30px);\n  -webkit-transform: translateY(30px);\n  transform: translateY(30px); }\n\n.translate-y-with-perspective {\n  -moz-transform: perspective(500) translateY(30px);\n  -ms-transform: perspective(500) translateY(30px);\n  -webkit-transform: perspective(500) translateY(30px);\n  transform: perspective(500) translateY(30px); }\n\n.translate-y-3d-with-perspective {\n  -moz-transform: perspective(500) translateY(30px);\n  -webkit-transform: perspective(500) translateY(30px);\n  transform: perspective(500) translateY(30px); }\n\n.translate-z {\n  -moz-transform: translateZ(30px);\n  -webkit-transform: translateZ(30px);\n  transform: translateZ(30px); }\n\n.translate-z-with-perspective {\n  -moz-transform: perspective(500) translateZ(30px);\n  -webkit-transform: perspective(500) translateZ(30px);\n  transform: perspective(500) translateZ(30px); }\n\n.translate-3d {\n  -moz-transform: translate3d(30px, 50px, 75px);\n  -webkit-transform: translate3d(30px, 50px, 75px);\n  transform: translate3d(30px, 50px, 75px); }\n\n.translate-3d-with-perspective {\n  -moz-transform: perspective(500) translate3d(30px, 50px, 75px);\n  -webkit-transform: perspective(500) translate3d(30px, 50px, 75px);\n  transform: perspective(500) translate3d(30px, 50px, 75px); }\n\n.skew {\n  -moz-transform: skew(20deg, 50deg);\n  -ms-transform: skew(20deg, 50deg);\n  -webkit-transform: skew(20deg, 50deg);\n  transform: skew(20deg, 50deg); }\n\n.skew-3d {\n  -moz-transform: skew(20deg, 50deg);\n  -webkit-transform: skew(20deg, 50deg);\n  transform: skew(20deg, 50deg); }\n\n.skew-x {\n  -moz-transform: skewX(20deg);\n  -ms-transform: skewX(20deg);\n  -webkit-transform: skewX(20deg);\n  transform: skewX(20deg); }\n\n.skew-x-3d {\n  -moz-transform: skewX(20deg);\n  -webkit-transform: skewX(20deg);\n  transform: skewX(20deg); }\n\n.skew-y {\n  -moz-transform: skewY(20deg);\n  -ms-transform: skewY(20deg);\n  -webkit-transform: skewY(20deg);\n  transform: skewY(20deg); }\n\n.skew-y-3d {\n  -moz-transform: skewY(20deg);\n  -webkit-transform: skewY(20deg);\n  transform: skewY(20deg); }\n\n.create-transform-2d {\n  -moz-transform: perspective(500) scale(20px, 20px) rotateX(25deg) rotateY(25deg) rotate3d(false 50px) translateX(50px) translateZ(50deg) skew(50deg, 50%);\n  -ms-transform: perspective(500) scale(20px, 20px) rotateX(25deg) rotateY(25deg) rotate3d(false 50px) translateX(50px) translateZ(50deg) skew(50deg, 50%);\n  -webkit-transform: perspective(500) scale(20px, 20px) rotateX(25deg) rotateY(25deg) rotate3d(false 50px) translateX(50px) translateZ(50deg) skew(50deg, 50%);\n  transform: perspective(500) scale(20px, 20px) rotateX(25deg) rotateY(25deg) rotate3d(false 50px) translateX(50px) translateZ(50deg) skew(50deg, 50%);\n  -moz-transform-origin: 50%;\n  -ms-transform-origin: 50%;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%; }\n\n.create-transform-3d {\n  -moz-transform: perspective(500) scale3d(20px, 20px, 20px) rotateX(25deg) rotateY(25deg) rotateZ(25deg) rotate3d(false 50px) translate3d(50px, 50px, 50deg) skew(50deg, 50%);\n  -ms-transform: perspective(500) scale3d(20px, 20px, 20px) rotateX(25deg) rotateY(25deg) rotateZ(25deg) rotate3d(false 50px) translate3d(50px, 50px, 50deg) skew(50deg, 50%);\n  -webkit-transform: perspective(500) scale3d(20px, 20px, 20px) rotateX(25deg) rotateY(25deg) rotateZ(25deg) rotate3d(false 50px) translate3d(50px, 50px, 50deg) skew(50deg, 50%);\n  transform: perspective(500) scale3d(20px, 20px, 20px) rotateX(25deg) rotateY(25deg) rotateZ(25deg) rotate3d(false 50px) translate3d(50px, 50px, 50deg) skew(50deg, 50%);\n  -moz-transform-origin: 50% 50%;\n  -ms-transform-origin: 50% 50%;\n  -webkit-transform-origin: 50% 50%;\n  transform-origin: 50% 50%; }\n\n.simple-transform {\n  -moz-transform:  scale(25px, 25px) rotateZ(25deg) translate(10px, 10px) skew(30deg, 30deg);\n  -ms-transform:  scale(25px, 25px) rotateZ(25deg) translate(10px, 10px) skew(30deg, 30deg);\n  -webkit-transform:  scale(25px, 25px) rotateZ(25deg) translate(10px, 10px) skew(30deg, 30deg);\n  transform:  scale(25px, 25px) rotateZ(25deg) translate(10px, 10px) skew(30deg, 30deg);\n  -moz-transform-origin: 10% 10%;\n  -ms-transform-origin: 10% 10%;\n  -webkit-transform-origin: 10% 10%;\n  transform-origin: 10% 10%; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/transition.css",
    "content": ".single-transition-without-delay {\n  -moz-transition: all 0.6s ease-out;\n  -o-transition: all 0.6s ease-out;\n  -webkit-transition: all 0.6s ease-out;\n  transition: all 0.6s ease-out; }\n\n.single-transition-with-delay {\n  -moz-transition: all 0.6s ease-out 0.2s;\n  -o-transition: all 0.6s ease-out 0.2s;\n  -webkit-transition: all 0.6s ease-out;\n  -webkit-transition-delay: 0.2s;\n  transition: all 0.6s ease-out 0.2s; }\n\n.transition-duration-list {\n  -moz-transition-duration: 0.2s, 0.5s, 0.2s;\n  -o-transition-duration: 0.2s, 0.5s, 0.2s;\n  -webkit-transition-duration: 0.2s, 0.5s, 0.2s;\n  transition-duration: 0.2s, 0.5s, 0.2s; }\n\n.multiple-transition-durations {\n  -moz-transition-duration: 0.2s, 0.5s, 0.2s;\n  -o-transition-duration: 0.2s, 0.5s, 0.2s;\n  -webkit-transition-duration: 0.2s, 0.5s, 0.2s;\n  transition-duration: 0.2s, 0.5s, 0.2s; }\n\n.single-transform-transition-without-delay {\n  -moz-transition: -moz-transform 0.6s ease-out;\n  -o-transition: -o-transform 0.6s ease-out;\n  -webkit-transition: -webkit-transform 0.6s ease-out;\n  transition: transform 0.6s ease-out; }\n\n.single-transform-transition-with-delay {\n  -moz-transition: -moz-transform 0.6s ease-out 0.2s;\n  -o-transition: -o-transform 0.6s ease-out 0.2s;\n  -webkit-transition: -webkit-transform 0.6s ease-out;\n  -webkit-transition-delay: 0.2s;\n  transition: transform 0.6s ease-out 0.2s; }\n\n.transform-transition {\n  -moz-transition: -moz-transform 0.6s ease-out;\n  -o-transition: -o-transform 0.6s ease-out;\n  -webkit-transition: -webkit-transform 0.6s ease-out;\n  transition: transform 0.6s ease-out; }\n\n.multiple-transitions {\n  -moz-transition: -moz-transform 0.6s ease-out, opacity 0.2s ease-in;\n  -o-transition: -o-transform 0.6s ease-out, opacity 0.2s ease-in;\n  -webkit-transition: -webkit-transform 0.6s ease-out, opacity 0.2s ease-in;\n  transition: transform 0.6s ease-out, opacity 0.2s ease-in; }\n\n.transition-property {\n  -moz-transition-property: -moz-transform;\n  -o-transition-property: -o-transform;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform; }\n\n.transition-properties {\n  -moz-transition-property: -moz-transform, opacity, width, height, left, top;\n  -o-transition-property: -o-transform, opacity, width, height, left, top;\n  -webkit-transition-property: -webkit-transform, opacity, width, height, left, top;\n  transition-property: transform, opacity, width, height, left, top; }\n\n.multiple-transition-properties {\n  -moz-transition-property: opacity, -moz-transform, left;\n  -o-transition-property: opacity, -o-transform, left;\n  -webkit-transition-property: opacity, -webkit-transform, left;\n  transition-property: opacity, transform, left; }\n\n.default-transition {\n  -moz-transition: all 1s;\n  -o-transition: all 1s;\n  -webkit-transition: all 1s;\n  transition: all 1s; }\n\n.transition-timing {\n  -moz-transition-timing-function: ease-in;\n  -o-transition-timing-function: ease-in;\n  -webkit-transition-timing-function: ease-in;\n  transition-timing-function: ease-in; }\n\n.transition-timings {\n  -moz-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  -o-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  -webkit-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0); }\n\n.transition-timings-list {\n  -moz-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  -o-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  -webkit-transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0);\n  transition-timing-function: ease-in, cubic-bezier(1, 0, 1, 0); }\n\n.transition-delay {\n  -moz-transition-delay: 1s;\n  -o-transition-delay: 1s;\n  -webkit-transition-delay: 1s;\n  transition-delay: 1s; }\n\n.transition-delays {\n  -moz-transition-delay: 1s, 2s, 3s;\n  -o-transition-delay: 1s, 2s, 3s;\n  -webkit-transition-delay: 1s, 2s, 3s;\n  transition-delay: 1s, 2s, 3s; }\n\n.transition-delays-list {\n  -moz-transition-delay: 1s, 2s, 3s;\n  -o-transition-delay: 1s, 2s, 3s;\n  -webkit-transition-delay: 1s, 2s, 3s;\n  transition-delay: 1s, 2s, 3s; }\n\n.regression-912 {\n  -moz-transition: background-color 0.5s ease-in 0s, width 0.5s ease-out 0s, height 0.5s ease-in 0s, top 0.5s ease-out 0s;\n  -o-transition: background-color 0.5s ease-in 0s, width 0.5s ease-out 0s, height 0.5s ease-in 0s, top 0.5s ease-out 0s;\n  -webkit-transition: background-color 0.5s ease-in, width 0.5s ease-out, height 0.5s ease-in, top 0.5s ease-out;\n  -webkit-transition-delay: 0s, 0s, 0s, 0s;\n  transition: background-color 0.5s ease-in 0s, width 0.5s ease-out 0s, height 0.5s ease-in 0s, top 0.5s ease-out 0s; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/typography/links/hover-link.css",
    "content": "a {\n  text-decoration: none; }\n  a:hover, a:focus {\n    text-decoration: underline; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/units.css",
    "content": ".foo {\n  width: 600px;\n  height: 200px; }\n\n.foo .test {\n  /* 16px for margins should be 1em */\n  margin-top: 1em;\n  /* 16px for margins should be 2.66667% (relative to parent's width) */\n  margin-right: 2.66667%;\n  /* 1.35em for margins should be 3.6% (relative to parent's width,\n   * even for top and bottom margins) */\n  margin-bottom: 3.6%;\n  /* 16px for margins should be 2ex */\n  margin-left: 2ex; }\n\n.bar {\n  font-size: 18px;\n  width: 360px; }\n\n.bar .test {\n  /* 150% for line-height should be 27px */\n  line-height: 27px;\n  /* 1px should always be .0625rem for this page */\n  border-top: 0.0625rem;\n  /* 2em for this element should be 9.525mm (relative to own font-size, as inherited) */\n  margin-top: 9.525mm;\n  /* 2px for margins should be .55556% (relative to parent's width) */\n  margin-right: 0.55556%;\n  /* 1rem should always be 16px for this page, even when own font-size is 18px */\n  margin-bottom: 16px; }\n\n.rem {\n  border-width: 10px;\n  border-width: 0.625rem;\n  margin: 0.625rem;\n  width: auto; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/user-interface.css",
    "content": ".user-select {\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  -webkit-user-select: none;\n  user-select: none; }\n\n*:-moz-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n*::-moz-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n*:-ms-input-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n*::-webkit-input-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n\ninput:-moz-placeholder, textarea:-moz-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\ninput::-webkit-input-placeholder, textarea::-webkit-input-placeholder {\n  color: #bfbfbf;\n  font-style: italic; }\n\n.sets-up-browser-support-for-content:-moz-placeholder {\n  prefix: -moz;\n  -moz-prefix: true;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n.sets-up-browser-support-for-content::-moz-placeholder {\n  prefix: -moz;\n  -moz-prefix: true;\n  -ms-prefix: false;\n  -webkit-prefix: false; }\n.sets-up-browser-support-for-content:-ms-input-placeholder {\n  prefix: -ms;\n  -moz-prefix: false;\n  -ms-prefix: true;\n  -webkit-prefix: false; }\n.sets-up-browser-support-for-content::-webkit-input-placeholder {\n  prefix: -webkit;\n  -moz-prefix: false;\n  -ms-prefix: false;\n  -webkit-prefix: true; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/utilities.css",
    "content": ".clearfix {\n  overflow: hidden;\n  *zoom: 1; }\n\n.pie-clearfix {\n  *zoom: 1; }\n  .pie-clearfix:after {\n    content: \"\\0020\";\n    display: block;\n    height: 0;\n    clear: both;\n    overflow: hidden;\n    visibility: hidden; }\n\n.simple-pie-clearfix {\n  *zoom: 1; }\n  .simple-pie-clearfix:after {\n    content: \"\";\n    display: table;\n    clear: both; }\n\np.light {\n  background-color: #f3aead;\n  color: #000; }\n\np.dark {\n  background-color: #a22321;\n  color: #fff; }\n\np.light-with-args {\n  background-color: #f3aead;\n  color: blue; }\n\np.dark-with-args {\n  background-color: #a22321;\n  color: yellow; }\n\nth {\n  background-color: white; }\n  th.even, th:nth-child(2n) {\n    background-color: yellow; }\n\ntr.odd td, tr:nth-child(2n+1) td {\n  background-color: white; }\n  tr.odd td.even, tr.odd td:nth-child(2n), tr:nth-child(2n+1) td.even, tr:nth-child(2n+1) td:nth-child(2n) {\n    background-color: yellow; }\n\ntr.even td {\n  background-color: red; }\n  tr.even td.even, tr.even td:nth-child(2n) {\n    background-color: red; }\n\ntfoot th, tfoot td {\n  background-color: white; }\n  tfoot th.even, tfoot th:nth-child(2n), tfoot td.even, tfoot td:nth-child(2n) {\n    background-color: yellow; }\n\np.ellipsis {\n  white-space: nowrap;\n  overflow: hidden;\n  -ms-text-overflow: ellipsis;\n  -o-text-overflow: ellipsis;\n  text-overflow: ellipsis; }\n\np.ellipsis.moz {\n  white-space: nowrap;\n  overflow: hidden;\n  -ms-text-overflow: ellipsis;\n  -o-text-overflow: ellipsis;\n  text-overflow: ellipsis;\n  -moz-binding: url('/tmp/xml/ellipsis.xml#ellipsis'); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/utilities.css.3.3",
    "content": ".clearfix {\n  overflow: hidden;\n  *zoom: 1; }\n\n.pie-clearfix {\n  *zoom: 1; }\n  .pie-clearfix:after {\n    content: \"\\0020\";\n    display: block;\n    height: 0;\n    clear: both;\n    overflow: hidden;\n    visibility: hidden; }\n\n.simple-pie-clearfix {\n  *zoom: 1; }\n  .simple-pie-clearfix:after {\n    content: \"\";\n    display: table;\n    clear: both; }\n\np.light {\n  background-color: #f3aead;\n  color: black; }\n\np.dark {\n  background-color: #a22321;\n  color: white; }\n\np.light-with-args {\n  background-color: #f3aead;\n  color: blue; }\n\np.dark-with-args {\n  background-color: #a22321;\n  color: yellow; }\n\nth {\n  background-color: white; }\n  th.even, th:nth-child(2n) {\n    background-color: yellow; }\n\ntr.odd td, tr:nth-child(2n+1) td {\n  background-color: white; }\n  tr.odd td.even, tr.odd td:nth-child(2n), tr:nth-child(2n+1) td.even, tr:nth-child(2n+1) td:nth-child(2n) {\n    background-color: yellow; }\n\ntr.even td {\n  background-color: red; }\n  tr.even td.even, tr.even td:nth-child(2n) {\n    background-color: red; }\n\ntfoot th, tfoot td {\n  background-color: white; }\n  tfoot th.even, tfoot th:nth-child(2n), tfoot td.even, tfoot td:nth-child(2n) {\n    background-color: yellow; }\n\np.ellipsis {\n  white-space: nowrap;\n  overflow: hidden;\n  -ms-text-overflow: ellipsis;\n  -o-text-overflow: ellipsis;\n  text-overflow: ellipsis; }\n\np.ellipsis.moz {\n  white-space: nowrap;\n  overflow: hidden;\n  -ms-text-overflow: ellipsis;\n  -o-text-overflow: ellipsis;\n  text-overflow: ellipsis;\n  -moz-binding: url('/tmp/xml/ellipsis.xml#ellipsis'); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/css/vertical_rhythm.css",
    "content": "html {\n  font-size: 87.5%;\n  line-height: 1.14286em; }\n\n.small {\n  font-size: 0.85714em;\n  line-height: 1.33333em; }\n\n.padded {\n  margin-top: 1.14286em;\n  padding-top: 1.14286em;\n  padding-bottom: 1.14286em;\n  margin-bottom: 1.14286em; }\n\n.small-padded {\n  font-size: 0.85714em;\n  line-height: 1.33333em;\n  margin-top: 1.33333em;\n  padding-top: 1.33333em;\n  padding-bottom: 1.33333em;\n  margin-bottom: 1.33333em; }\n\n.borders {\n  border-top-width: 0.07143em;\n  border-top-style: solid;\n  padding-top: 1.07143em;\n  border-bottom-width: 0.07143em;\n  border-bottom-style: solid;\n  padding-bottom: 1.07143em; }\n\n.large-borders {\n  font-size: 1.71429em;\n  line-height: 2em;\n  border-top-width: 0.25em;\n  border-top-style: solid;\n  padding-top: 0.41667em;\n  border-bottom-width: 0.25em;\n  border-bottom-style: solid;\n  padding-bottom: 0.41667em; }\n\n.reset {\n  line-height: 1.14286em; }\n\n/* New test using em output */\nhtml {\n  font-size: 112.5%;\n  line-height: 1.4em; }\n\n.container {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 1.4em;\n  -o-background-size: 100% 1.4em;\n  -webkit-background-size: 100% 1.4em;\n  background-size: 100% 1.4em;\n  background-position: left top; }\n\np {\n  margin-top: 1.4em;\n  margin-bottom: 1.4em; }\n\nth,\ntd {\n  padding-top: 0.35em;\n  padding-bottom: 0.35em; }\n\n.caption {\n  font-size: 0.72222em;\n  line-height: 1.55077em; }\n\n.spaced-out {\n  line-height: 2.1em; }\n\nblockquote {\n  margin-top: 1.4em;\n  margin-bottom: 1.4em;\n  padding: 0 1.4em; }\n\n.fig-quote > blockquote {\n  margin-bottom: 0.7em; }\n.fig-quote .source {\n  font-size: 0.72222em;\n  line-height: 1.93846em;\n  margin-bottom: 0.96923em; }\n\n.panel {\n  font-size: 0.88889em;\n  line-height: 1.575em;\n  border-width: 0.0625em;\n  border-style: solid;\n  border-color: #aaaaaa;\n  padding: 1.5125em; }\n\n/* New using rem output with pixel fallbacks */\nhtml {\n  font-size: 112.5%;\n  line-height: 1.4em; }\n\n.container {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 1.4rem;\n  -o-background-size: 100% 1.4rem;\n  -webkit-background-size: 100% 1.4rem;\n  background-size: 100% 1.4rem;\n  background-position: left top; }\n\np {\n  margin-top: 25px;\n  margin-top: 1.4rem;\n  margin-bottom: 25px;\n  margin-bottom: 1.4rem; }\n\nth,\ntd {\n  padding-top: 6px;\n  padding-top: 0.35rem;\n  padding-bottom: 6px;\n  padding-bottom: 0.35rem; }\n\n/* Incremental leading made easy! */\n.caption {\n  font-size: 15px;\n  font-size: 0.85rem;\n  line-height: 20px;\n  line-height: 1.12rem; }\n\n.spaced-out {\n  line-height: 38px;\n  line-height: 2.1rem; }\n\nblockquote {\n  margin-top: 25px;\n  margin-top: 1.4rem;\n  margin-bottom: 25px;\n  margin-bottom: 1.4rem;\n  padding: 0 1.4rem; }\n\n.fig-quote > blockquote {\n  margin-bottom: 13px;\n  margin-bottom: 0.7rem; }\n.fig-quote .source {\n  font-size: 15px;\n  font-size: 0.85rem;\n  line-height: 25px;\n  line-height: 1.4rem;\n  margin-bottom: 13px;\n  margin-bottom: 0.7rem; }\n\n.panel {\n  border-width: 1px;\n  border-width: 0.05556rem;\n  border-style: solid;\n  border-color: #aaaaaa;\n  padding: 24px;\n  padding: 1.34444rem; }\n\n/* New using px output */\nhtml {\n  font-size: 18px;\n  line-height: 25px; }\n\n.container {\n  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjUlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');\n  background-size: 100%;\n  background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(5%, rgba(0, 0, 0, 0.5)), color-stop(5%, rgba(0, 0, 0, 0)));\n  background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5) 5%, rgba(0, 0, 0, 0) 5%);\n  -moz-background-size: 100% 25px;\n  -o-background-size: 100% 25px;\n  -webkit-background-size: 100% 25px;\n  background-size: 100% 25px;\n  background-position: left top; }\n\np {\n  margin-top: 25px;\n  margin-bottom: 25px; }\n\nth,\ntd {\n  padding-top: 6px;\n  padding-bottom: 6px; }\n\n/* Incremental leading made easy! */\n.caption {\n  font-size: 15px;\n  line-height: 20px; }\n\n.spaced-out {\n  line-height: 37px; }\n\nblockquote {\n  margin-top: 25px;\n  margin-bottom: 25px;\n  padding: 0 25px; }\n\n.fig-quote > blockquote {\n  margin-bottom: 12px; }\n.fig-quote .source {\n  font-size: 15px;\n  line-height: 25px;\n  margin-bottom: 12px; }\n\n.panel {\n  border-width: 1px;\n  border-style: solid;\n  border-color: #aaaaaa;\n  padding: 24px; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/_project-setup.scss",
    "content": "$project-path: absolute-path(join-file-segments(\"..\"));\n\n@import \"compass/configuration\";\n\n@function busted($url, $file) {\n  @return \"busted=true\";\n}\n\n@include compass-configuration($asset-cache-buster: busted);\n\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/animation-with-legacy-ie.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/animation\";\n@import \"compass/css3/opacity\";\n\n$browser-minimum-versions: (ie: \"6\");\n\n@include keyframes(test) {\n  0%, 100% {\n    @include opacity(1);\n  }\n  50% {\n    @include opacity(0);\n  }\n}\n\n.animation {\n  @include animation(test);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/animation.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/animation\";\n\n@include keyframes(test) {\n  0%, 100% {\n    background-color: red; }\n  50% {\n    background-color: blue;\n  }\n}\n\n.animation {\n  @include animation(test);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/appearance.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/appearance\";\n\n.searchfield {\n  @include appearance(searchfield);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/background-clip.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/background-clip\";\n\n.background-clip { @include background-clip('border-box'); }\n\n.background-clip-multiple { @include background-clip('border-box', padding-box, content-box); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/background-origin.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/background-origin\";\n\n.background-origin { @include background-origin('border-box'); }\n\n.background-origin-multiple { @include background-origin('border-box', padding-box, content-box); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/background-size.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/background-size\";\n\n.background-size-default { @include background-size; }\n\n.background-size-single { @include background-size(50% 25%); }\n\n.background-size-multiple { @include background-size(4em 3em, $default-background-size, 50%); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/border_radius.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/border-radius\";\n\n.simple   { @include border-radius(4px, 4px); }\n.compound { @include border-radius(2px 5px, 3px 6px); }\n.crazy    { @include border-radius(1px 3px 5px 7px, 2px 4px 6px 8px)}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/box-sizing.scss",
    "content": "@import \"compass/css3/box-sizing\";\n\n.div {\n  @include box-sizing();\n}\n.div {\n  @include box-sizing(content-box);\n}\n.div {\n  @include box-sizing(border-box);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/box.sass",
    "content": "@import \"project-setup\"\n@include compass-configuration($disable-warnings: true, $reconfigure: true)\n@import compass/css3/box\n\n\n.hbox\n  +display-box\n  +box-orient\n  +box-align\n  \n  & > *\n    +box-flex\n\n.vbox\n  +display-box\n  +box-orient(vertical)\n  +box-align\n  \n  & > *\n    +box-flex\n\n.spacer\n  +box-flex(1)\n\n.reverse\n  +box-direction(reverse)\n\n.box-flex-0\n  +box-flex(0)\n\n.box-flex-1\n  +box-flex(1)\n\n.box-flex-2\n  +box-flex(2)\n\n.box-flex-group-0\n  +box-flex-group(0)\n\n.box-flex-group-1\n  +box-flex-group(1)\n\n.box-flex-group-2\n  +box-flex-group(2)\n\n.start\n  +box-pack(start)\n\n.end\n  +box-pack(end)\n\n.center\n  +box-pack(center)\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/box_shadow.scss",
    "content": "@import \"project-setup\";\n@include compass-configuration($disable-warnings: true, $reconfigure: true);\n@import \"compass/css3/box-shadow\";\n\n.no-box-shadow { @include box-shadow(none); }\n.box-shadow { @include box-shadow(default, 2px 2px 5px #222222);}\n.single-box-shadow { @include single-box-shadow;}\n.multiple-box-shadows { @include box-shadow(default, 2px 2px 5px #222222);}\n.legacy-single-box-shadow { @include single-box-shadow(blue);}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/brightness.scss",
    "content": "@import \"project-setup\";\n@import \"compass/utilities/color/brightness\";\n\n.black-is-0-percent {\n  brightness: brightness(black); }\n.white-is-100-percent {\n  brightness: brightness(white); }\n.green-is-58-point-7-percent {\n  brightness: brightness(#00ff00); }\n.blue-is-11-point-4-percent {\n  brightness: brightness(#0000ff); }\n.red-is-29-point-9-percent {\n  brightness: brightness(#ff0000); }\n.numeric-brightness-keeps-value {\n  brightness: brightness(1.1); }\n.percentage-brightness-keeps-value {\n  brightness: brightness(110%); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/browser-support.scss",
    "content": "@import \"project-setup\";\n@import \"compass/support\";\n@import \"compass/css3/flexbox\";\n\n@function unprefixed-at-version($browser, $capability) {\n  $options: if($capability == flexbox, $flexbox-capability-options, $default-capability-options);\n  @each $version in browser-versions($browser) {\n    @if not browser-requires-prefix($browser, $version, $capability, $options) {\n      @return $version;\n    }\n  }\n  @return null;\n}\n@each $browser in browsers() {\n  $prefix: browser-prefix($browser);\n  .#{$browser} {\n    $versions: browser-versions($browser);\n    versions: $versions;\n    @each $capability in browser-capabilities() {\n      $options: if($capability == flexbox, $flexbox-capability-options, $default-capability-options);\n      @if browser-requires-prefix($browser, nth($versions, 1), $capability, $options) {\n        @if prefix-usage($prefix, $capability, $options) > 0.1 {\n          #{$capability}: $prefix;\n        } @else {\n          #{$capability}: prefix-no-longer-needed;\n        }\n        #{$capability}-unprefixed-at: unprefixed-at-version($browser, $capability);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/color.scss",
    "content": "@import \"project-setup\";\n@import \"compass/utilities/color\";\n\n.handles-null {\n  content: \"there should be no property below this one\";\n  color: contrast-color(null);\n}\n\n.contrasts-light {\n  @include contrasted(#eeeeee, $dark: black);\n}\n\n.contrasts-dark {\n  @include contrasted(#222222, $light: white);\n}\n\n.contrasts-light-with-contrast-color-override {\n  @include contrasted(#eeeeee, $dark: red);\n}\n\n.contrasts-dark-with-contrast-color-override {\n  @include contrasted(#222222, $light: yellow);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/columns.scss",
    "content": "@import \"compass/css3/columns\";\n\n.columns            { @include columns(20em 5);               }\n.column-count       { @include column-count(5);               }\n.column-gap         { @include column-gap(10px);              }\n.column-width       { @include column-width(90px);            }\n.column-span        { @include column-span(all);              }\n.column-rule-width  { @include column-rule-width(1px);        }\n.column-rule-style  { @include column-rule-style(dotted);     }\n.column-rule-color  { @include column-rule-color(blue);       }\n.column-rule        { @include column-rule(1px, solid, blue); }\n.column-rule-spaced { @include column-rule(1px solid blue);   }\n.column-break-before{ @include column-break(before, always);}\n.column-break-after { @include column-break(after, always); }\n.column-break-inside{ @include column-break(inside);        }\n.column-count       \t\t\t{ @include column-count(5);               }\n.column-gap         \t\t\t{ @include column-gap(10px);              }\n.column-width       \t\t\t{ @include column-width(90px);            }\n.column-rule-width  \t\t\t{ @include column-rule-width(1px);        }\n.column-rule-style  \t\t\t{ @include column-rule-style(dotted);     }\n.column-rule-color  \t\t\t{ @include column-rule-color(blue);       }\n.column-rule        \t\t\t{ @include column-rule(1px, solid, blue); }\n.column-rule-spaced \t\t\t{ @include column-rule(1px solid blue);   }\n.column-break-before \t\t\t{ @include break-before(always);   }\n.column-break-after \t\t\t{ @include break-after(always);    }\n.column-break-inside \t\t\t{ @include break-inside();         }\n.column-break-before-shortcut \t{ @include column-break(before, always);}\n.column-break-after-shortcut \t{ @include column-break(after, always); }\n.column-break-inside-shortcut \t{ @include column-break(inside);        }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/env.scss",
    "content": "$at-root: at-stylesheet-root();\n\n.at-root {\n  should-be-true: $at-root;\n}\n\n.not-at-root {\n  should-be-false: at-stylesheet-root();\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/filters.scss",
    "content": "@import \"project-setup\";\n$debug-browser-support: true;\n@import \"compass/css3/filter\";\n\n.blur {\n  @include filter(blur(5px));\n}\n.brightness {\n  @include filter(brightness(0.2));\n}\n// We can enable this test case when sass commit 38f3c4be8bc15c130c5b1cc5880c9131e1bcb08f is released.\n// .saturate {\n//   @include filter(saturate(50%));\n// }\n.hue-rotate {\n  @include filter(hue-rotate(20deg));\n}\n.contrast {\n  @include filter(contrast(150%));\n}\n.grayscale {\n  @include filter(grayscale(150%));\n}\n.sepia {\n  @include filter(sepia(150%));\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/flexbox.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/flexbox\";\n\n.display {\n  @include display-flex;\n}\n\n.flex-direction {\n  @include flex-direction(row-reverse);\n}\n\n.flex-wrap {\n  @include flex-wrap(wrap-reverse);\n}\n\n.flex-flow {\n  @include flex-flow(row-reverse wrap-reverse);\n}\n\n.order {\n  @include order(1);\n}\n\n.flex {\n  @include flex(1 0 auto);\n}\n\n.flex-grow {\n  @include flex-grow(1);\n}\n\n.flex-shrink {\n  @include flex-shrink(1);\n}\n\n.flex-basis {\n  @include flex-basis(auto);\n}\n\n.justify-content {\n  @include justify-content(flex-start);\n}\n\n.align-items {\n  @include align-items(flex-start);\n}\n\n.align-self {\n  @include align-self(flex-start);\n}\n\n.align-content {\n  @include align-content(flex-start);\n}\n\n.flexbox {\n  @include flexbox((\n    display: flex,\n    flex-direction: row-reverse,\n    flex-wrap: wrap-reverse,\n    flex-flow: row-reverse wrap-reverse,\n    order: 1,\n    flex: 1 0 auto,\n    flex-grow: 1,\n    flex-shrink: 0,\n    flex-basis: auto,\n    justify-content: flex-start,\n    align-items: flex-start,\n    align-self: flex-start,\n    align-content: flex-start\n  ));\n}\n\n.flexbox-2 {\n  @include flexbox((\n    display: flexbox,\n    flex-flow: row-reverse,\n    flex-order: 1,\n  ), $version: 2);\n}\n\n.flexbox-1 {\n  @include flexbox((\n    display: box,\n    box-orient: vertical,\n    box-ordinal-group: 1,\n    box-flex: 1,\n  ), $version: 1);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/fonts.sass",
    "content": "@import \"project-setup\"\n@import compass/css3/font-face\n\n+font-face(\"font1\", font-files(\"font1.woff\", woff), \"font1.eot\")\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/force-wrap.scss",
    "content": "@import \"project-setup\";\n@import \"compass/typography/text\";\n\npre { @include force-wrap; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/gradients.sass",
    "content": "@import project-setup\n@import compass/css3/images\n\n$svg-gradient-shim-threshold: 0\n\n.bg-shortcut-simple-image\n  +background(white url('foo.png'))\n\n.bg-shortcut-linear-gradient\n  +background(white linear-gradient(top left, #ddd, #aaa))\n\n.bg-linear-gradient-angle-svg\n  +background-image(linear-gradient(-45deg, blue, black))\n\n.bg-linear-gradient-angle2-svg\n  +background-image(linear-gradient(top left, blue, black))\n\n.bg-simple-image\n  +background-image(url('foo.png'))\n\n.bg-linear-gradient\n  +background-image(linear-gradient(top left, #ddd, #aaa))\n\n.bg-linear-gradient-pixel-stop-from-top\n  +background-image(linear-gradient(top, #ddd 10px, #aaa 40px))\n\n.bg-linear-gradient-pixel-stop-from-left\n  +background-image(linear-gradient(left, #ddd 10px, #aaa 40px))\n\n.transparent-in-linear-gradient\n  +background-image(white linear-gradient(top left, transparent, #aaa))\n\n.currentColor-in-linear-gradient\n  +background-image(white linear-gradient(top left, transparent, currentColor))\n\n.calc-in-linear-gradient\n  +background-image(linear-gradient(to right, white calc(100% - 50px), transparent calc(100% - 50px)))\n\n.rgba-in-linear-gradient\n  +background-image(white linear-gradient(top left, rgba(255,255,255,0.8), rgba(0,0,0,0.1)))\n\n.bg-shortcut-radial-gradient\n  +background(white radial-gradient(center center, #ddd, #aaa 100px))\n\n.bg-all-gradient-types-with-simplification\n  +background-with-css2-fallback(image-url(\"4x6.png\"), linear-gradient(top left, #ddd, #aaa), radial-gradient(center center, #ddd, #aaa 100px), #ffcc00)\n\n.bg-radial-gradient\n  +background-image(radial-gradient(center center, #ddd, transparent 100px))\n\n.currentColor-in-radial-gradient\n  +background-image(radial-gradient(center center, currentColor, transparent 100px))\n\n.bg-linear-gradient-with-angle\n  +background-image(linear-gradient(-45deg, #ddd, #aaa))\n\n.bg-radial-gradient-with-angle-and-shape\n  +background-image(radial-gradient(ellipse cover, #ddd, #aaa 100px))\n\n.bg-all-gradient-types\n  +background-image(image-url(\"4x6.png\"), linear-gradient(top left, #ddd, #aaa), radial-gradient(center center, #ddd, #aaa 100px))\n\n.border-image-gradient\n  +border-image(radial-gradient(#0f0,#f00 100px) 100 stretch)\n\n.direct-list-image-plain\n  +list-style-image(image-url(\"4x6.png\"))\n\n.shorthand-list-image-plain\n  +list-style(outside image-url(\"4x6.png\"))\n\n.direct-list-image-with-gradient\n  +list-style-image(radial-gradient(lime, red 10px))\n\n.shorthand-list-image-with-gradient\n  // Note: I haven't seen a browser render this correctly, but they should eventually.\n  +list-style(outside radial-gradient(lime, red 10px))\n\n.content-plain\n  +content(\"asdf\")\n\n.content-with-gradient\n  +content(radial-gradient(lime, red 10px))\n\n$svg-gradient-shim-threshold: 10\n\n.bg-linear-gradient-no-position\n  +background-image(linear-gradient(#ddd, #aaa))\n\n.bg-radial-gradient-no-position\n  +background-image(radial-gradient(#ddd, #aaa 100px))\n\n.image-fallback\n  +background-image(image(radial-gradient(#ddd, #aaa 100px), image-url(\"4x6.png\"), #cc0000))\n\n.cross-fade\n  +background-image(cross-fade(radial-gradient(#ddd, #aaa 100px), image-url(\"4x6.png\")))\n\n.unknown-function-wrapper\n  +background(foo(radial-gradient(#ddd, #aaa 100px)))\n\n.ie-horizontal-filter\n  +filter-gradient(white, black, horizontal)\n\n.ie-vertical-filter\n  +filter-gradient(white, black, vertical)\n\n.ie-alpha-filter\n  +filter-gradient(rgba(white, 1), rgba(white, 0))\n\n.linear-gradient-new\n  +background(linear-gradient(to bottom, #ff0000 0%, #88aa44 100%))\n\n.radial-gradient-old\n  /* radial-gradient(yellow, green)\n  +background(radial-gradient(yellow, green))\n  /* radial-gradient(ellipse at center, yellow 0%, green 100%)\n  +background(radial-gradient(center, ellipse, yellow 0%, green 100%))\n  /* radial-gradient(farthest-corner at 50% 50%, yellow, green)\n  +background(radial-gradient(50% 50%, farthest-corner, yellow, green))\n  /* radial-gradient(circle, yellow, green)\n  +background(radial-gradient(circle, yellow, green))\n  /* radial-gradient(red, yellow, green)\n  +background(radial-gradient(red, yellow, green))\n  /* radial-gradient(farthest-side at left bottom, red, yellow 50px, green)\n  +background(radial-gradient(left bottom, farthest-side, red, yellow 50px, green))\n  /* radial-gradient(closest-side at 20px 30px, red, yellow, green)\n  +background(radial-gradient(20px 30px, closest-side, red, yellow, green))\n  /* radial-gradient(20px 30px at 40px 50px, red, yellow, green)\n  +background(radial-gradient(40px 50px, 20px 30px, red, yellow, green))\n  /* radial-gradient(closest-side circle at , red, yellow, green)\n  +background(radial-gradient(20px 30px, closest-side circle, red, yellow, green))\n  /* radial-gradient(20px 20px at 20px 30px, red, yellow, green)\n  +background(radial-gradient(20px 30px, 20px 20px, red, yellow, green))\n\n.radial-gradient-new\n  /* radial-gradient(yellow, green)\n  +background(radial-gradient(yellow, green))\n  /* radial-gradient(ellipse at center, yellow 0%, green 100%)\n  +background(radial-gradient(ellipse at center, yellow 0%, green 100%))\n  /* radial-gradient(farthest-corner at 50% 50%, yellow, green)\n  +background(radial-gradient(farthest-corner at 50% 50%, yellow, green))\n  /* radial-gradient(circle, yellow, green)\n  +background(radial-gradient(circle, yellow, green))\n  /* radial-gradient(red, yellow, green)\n  +background(radial-gradient(red, yellow, green))\n  /* radial-gradient(farthest-side at left bottom, red, yellow 50px, green)\n  +background(radial-gradient(farthest-side at left bottom, red, yellow 50px, green))\n  /* radial-gradient(closest-side at 20px 30px, red, yellow, green)\n  +background(radial-gradient(closest-side at 20px 30px, red, yellow, green))\n  /* radial-gradient(20px 30px at 20px 30px, red, yellow, green)\n  +background(radial-gradient(20px 30px at 40px 50px, red, yellow, green))\n  /* radial-gradient(closest-side circle at 20px 30px, red, yellow, green)\n  +background(radial-gradient(closest-side circle at 20px 30px, red, yellow, green))\n  /* radial-gradient(20px 20px at 20px 30px, red, yellow, green)\n  +background(radial-gradient(20px 20px at 30px 30px, red, yellow, green))\n\n$use-legacy-gradient-syntax: true\n \n.linear-gradient-old\n  +background(linear-gradient(top, #ff0000 0%, #88aa44 100%))\n \n// This setting is only important when we can't tell which syntax is being used.\n// * That is only ever true when the angle is specified in deg\n// * original webkit syntax does not support deg (see output)\n// * if $support-for-original-webkit-gradients and type-of($angle) == \"number\" : @WARN\n$use-legacy-gradient-syntax: false\n \n.linear-gradient-unknown-new\n  +background(linear-gradient(120deg, #ff0000 0%, #88aa44 100%))\n \n$use-legacy-gradient-syntax: true\n \n.linear-gradient-unknown-old\n  +background(linear-gradient(120deg, #ff0000 0%, #88aa44 100%))\n\n$svg-gradient-shim-threshold: 100\n$browser-minimum-versions: ('ie': '9')\n.issue-1676-has-svg-because-of-minimums\n  +background-image(linear-gradient(#ddd, #aaa))\n\n.issue-1766\n  background: radial-gradient(white, black)\n  background: linear-gradient(white, black)\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/grid_background.scss",
    "content": "@import \"project-setup\";\n@import \"compass/layout/grid-background\";\n\n.baseline {\n  @include baseline-grid-background;\n}\n\n.columns {\n  @include column-grid-background;\n}\n\n.combined {\n  @include grid-background;\n}\n\n$grid-background-total-columns: 15;\n$grid-background-offset: 11%;\n$grid-background-column-width: 5%;\n$grid-background-gutter-width: 1%;\n\n.percent-baseline {\n  @include baseline-grid-background;\n}\n\n.percent-columns {\n  @include column-grid-background;\n}\n\n.percent-combined {\n  @include grid-background;\n}\n\n.forced-fluid {\n  @include column-grid-background(12, 2em, 1em, 1em, $grid-background-column-color, $grid-background-gutter-color, true);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/hyphenation.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/hyphenation\";\n\n.word-break {\n\t@include word-break(keep-all);\n}\n.hyphens {\n\t@include hyphens(manual);\n}\n.hyphenate {\n\t@include hyphenation;\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/image_size.sass",
    "content": "@import project-setup\n.png\n  width: image_width(unquote(\"100x150.png\"))\n  height: image_height(unquote(\"100x150.png\"))\n\n.jpg\n  width: image_width(unquote(\"100x150.jpg\"))\n  height: image_height(unquote(\"100x150.jpg\"))\n\n.jpeg\n  width: image_width(unquote(\"100x150.jpeg\"))\n  height: image_height(unquote(\"100x150.jpeg\"))\n\n.gif\n  width: image_width(unquote(\"100x150.gif\"))\n  height: image_height(unquote(\"100x150.gif\"))\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/images.scss",
    "content": "@import \"project-setup\";\n.relative {\n  background-image: image-url(\"4x6.png\");\n}\n.root-relative {\n  background-image: image-url(\"/images/4x6.png\");\n}\n.absolute {\n  background-image: image-url(\"http://example.com/images/4x6.png\");\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/issue-1853.scss",
    "content": "@import \"compass/support\";\n@import \"compass/css3/images\";\n\n// An actual use-case that demonstrates the problem\n.use-case {\n  @include with-browser-ranges(css-mediaqueries) {\n    @include background-image(linear-gradient(red, blue));\n  }\n}\n\n// A simplification of the issue\n$ranges: (ie: \"9\" \"11\");\n$new-ranges: (ie: \"9\");\n.simple {\n  content: inspect(intersect-browser-ranges($ranges, $new-ranges));\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/layout.sass",
    "content": "@import project-setup\n@import compass/layout\n\n+sticky-footer(72px, unquote(\"#layout\"), unquote(\"#layout_footer\"), unquote(\"#footer\"))\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/legacy_clearfix.scss",
    "content": "@import \"project-setup\";\n$default-has-layout-approach: block;\n\n@import \"compass/utilities\";\n\n.clearfix {\n    @include clearfix;\n}\n\n.pie-clearfix {\n    @include legacy-pie-clearfix;\n}\n.simplified-pie-clearfix {\n    @include pie-clearfix;\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/lists.scss",
    "content": "@import \"project-setup\";\n@import \"compass/typography/lists\";\n\nul.horizontal        { @include horizontal-list;             }\nul.wide-horizontal   { @include horizontal-list(10px);       }\nul.right-horizontal  { @include horizontal-list(4px, right); }\nul.no-padding        { @include horizontal-list(false);      }\nul.inline-block      { @include inline-block-list;           }\nul.wide-inline-block { @include inline-block-list(10px);     }\nul.inline            { @include inline-list;                 }\nul.comma             { @include delimited-list;              }\nul.no-bullets        { @include no-bullets;                  }\nul.pretty            { @include pretty-bullets(\"4x6.png\");   }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/opacity.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/opacity\";\n\ndiv {\n  @include opacity(.2);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/print.sass",
    "content": "@import project-setup\n@import compass/utilities/print\n\n+print-utilities\n\n+print-utilities(screen)\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/regions.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/regions\";\n\n.source   { @include flow-into(target); }\n.new-container { @include flow-from(target); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/replacement.scss",
    "content": "@import \"project-setup\";\n@import \"compass/typography/text/replacement\";\n.basic {\n  @include replace-text(\"4x6.png\");\n}\n.with-dimensions {\n  @include replace-text-with-dimensions(\"4x6.png\");\n}\n.with-dimensions-inline {\n  @include replace-text-with-dimensions(\"4x6.png\", $inline: true);\n}\n.with-position {\n  @include replace-text(\"4x6.png\", 10px, top);\n}\n.with-arbitrary-url {\n  @include replace-text(url(http://google.com/logo.gif), 10px, top);\n}\n.with-inline-url {\n  @include replace-text(inline-image(\"4x6.png\"), 10px, top);\n}\n.with-image-url {\n  @include replace-text(image-url(\"4x6.png\"), 10px, top);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/reset.sass",
    "content": "@import project-setup\n@import compass/reset\n\n// Turn off the display for both of these classes\n.unregistered-only, .registered-only\n  display: none\n\n// Now turn only one of them back on depending on some other context.\nbody.registered\n  +reset-display(unquote(\".registered-only\"))\n\nbody.unregistered\n  +reset-display(unquote(\".unregistered-only\"))\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/selection.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/selection\";\n\n* {\n  @include selection {\n    background-color: #fe57a1;\n    color: #fff;\n  }\n}\n\n.hot-pink {\n  @include selection {\n    background-color: #fe57a1;\n    color: #fff;\n  }\n}\n\n.hot-pink-with-arguments {\n  @include selection(#fe57a1, #fff);\n}\n\n.hot-pink-with-arguments-and-extra-stuff {\n  @include selection(#fe57a1, #fff) {\n    text-decoration: line-through;\n  }\n}\n\n.hot-pink-with-default-foreground {\n  @include selection(#fe57a1);\n}\n\n.browser-support-is-considered {\n  @include selection(#fe57a1) {\n    prefix: $current-prefix;\n    -moz-prefix: $current-prefix == -moz;\n    -ms-prefix: $current-prefix == -ms;\n    -webkit-prefix: $current-prefix == -webkit;\n  }\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/stretching.sass",
    "content": "@import project-setup\n@import \"compass/layout/stretching\"\n\n.stretched-completely\n  +stretch\n\n.stretched-horizontally\n  +stretch-x\n\n.stretched-right\n  +stretch-x(0, 50%)\n\n.left-pane\n  +stretch(0, 50%, 0, 0)\n\n.stretched-left\n  +stretch-x(50%, 0)\n\n.right-pane\n  +stretch(0, 0, 0, 50%)\n\n.stretched-down\n  +stretch-y(0, 50%)\n\n.top-pane\n  +stretch(0, 0, 50%, 0)\n\n.stretched-up\n  +stretch-y(50%, 0)\n\n.bottom-pane\n  +stretch(50%, 0, 0, 0)\n\n.viewport\n  +stretch(10px, 20px, 30px, 40px)\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/support.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/animation\";\n@import \"compass/css3/opacity\";\n@import \"true\";\n\n$some-default-value: some default value;\n@function has-default-arglist($arglist...) {\n  @return set-arglist-default($arglist, $some-default-value);\n}\n\n@mixin with-declared-support($browsers) {\n  $old-browsers: $supported-browsers;\n  $supported-browsers: $browsers !global;\n  @content;\n  $supported-browsers: $old-browsers !global;\n}\n\n@mixin with-declared-minimums($supported-browsers) {\n    $old-mins: $browser-minimum-versions;\n    $browser-minimum-versions: $supported-browsers !global;\n    @content;\n    $browser-minimum-versions: $old-mins !global;\n}\n\n@include test-module('Compass Support') {\n  @include test('[variable] $compass-extensions is set and is a map') {\n    @include assert-true(global-variable-exists(compass-extensions));\n    @include assert-equal(map, type-of($compass-extensions));\n    @include assert-equal(1, str-index(map-get($compass-extensions, compass), \"1.0\"));\n  }\n  @include test('[function] set-arglist-default() with no arguments') {\n    @include assert-true(\n               has-default-arglist() == $some-default-value,\n               'No arguments should get a default value.');\n  }\n  @include test('[function] set-arglist-default() with a \"default\" argument') {\n    @include assert-true(\n               nth(has-default-arglist(default), 1) == $some-default-value,\n               'an argument of \"default\" should get a default value.');\n  }\n  @include test('[function] set-arglist-default() with a \"default\" argument and another argument') {\n    @include assert-true(\n               has-default-arglist(default, some other value) == ($some-default-value, some other value),\n               'an argument of \"default\" should get a default value.');\n  }\n  @include test('[function] set-arglist-default() with a \"default\" argument not first and another argument') {\n    @include assert-true(\n               has-default-arglist(some other value, default) == (some other value, $some-default-value),\n               'an argument of \"default\" should get a default value.');\n  }\n\n  @include test('[function] support-legacy-browser() from threshold') {\n    @include assert-true(support-legacy-browser('ie', '6', $threshold: 0.00000001),\n                         \"should be supported because of user support threshold.\");\n    @include assert-false(support-legacy-browser('ie', '6', $threshold: 10.000),\n                          \"should not be supported because of support threshold.\");\n  }\n\n  @include test('[function] support-legacy-browser() from minimums') {\n    @include with-declared-minimums(('ie': '7')) {\n      @include assert-true(support-legacy-browser('ie', '7', $threshold: 10.00),\n      \"should be supported because of minimum version.\");\n      @include assert-false(support-legacy-browser('ie', '6', $threshold: 10.000),\n      \"should not be supported because of minimum version.\");\n    }\n  }\n\n  @include test('[function] browser-out-of-scope() with no scope') {\n    @include assert-true(not browser-out-of-scope('ie'), \"should be in scope.\");\n    @include assert-true(not browser-out-of-scope('chrome'), \"should be in scope.\");\n  }\n\n  @include test('prefix context tracking') {\n    $outer-prefix-invoked: false;\n    $inner-prefix-invoked: false;\n    $mismatched-prefix-invoked: false;\n    @include with-prefix(-webkit) {\n      $outer-prefix-invoked: true;\n      @include assert-equal(-webkit, $current-prefix, \"should be equal.\");\n      @include assert-equal(-webkit, $prefix-context, \"should be equal.\");\n      @include with-prefix(null) {\n        $inner-prefix-invoked: true;\n        @include assert-equal(null, $current-prefix, \"should be equal.\");\n        @include assert-equal(-webkit, $prefix-context, \"should be equal.\");\n      }\n      @include with-prefix(-ms) {\n        $mismatched-prefix-invoked: true;\n      }\n    }\n    @include assert-true($inner-prefix-invoked, \"should have been invoked\");\n    @include assert-true($outer-prefix-invoked, \"should have been invoked\");\n    @include assert-false($mismatched-prefix-invoked, \"should not have been invoked\");\n    @include assert-equal(null, $prefix-context, \"should be null\");\n    @include assert-equal(null, $current-prefix, \"should be null\");\n  }\n\n  @include test('[function] browser-out-of-scope() with a scope') {\n    @include with-prefix(browser-prefix('chrome')) {\n      @include assert-true(not browser-out-of-scope('chrome'), \"should be in scope.\");\n      @include assert-false(not browser-out-of-scope('ie'), \"should not be in scope.\");\n    }\n  }\n\n  @include test('[function] browser-out-of-scope() with version') {\n    @include with-browser-ranges((ie: '8' '8')) {\n      @include assert-false(not browser-out-of-scope('ie', '10'), \"should not be in scope.\");\n      @include assert-true(not browser-out-of-scope('ie', '8'), \"should be in scope.\");\n      @include assert-false(not browser-out-of-scope('ie', '7'), \"should not be in scope.\");\n    }\n  }\n\n  @include test('[mixin] with-prefix()') {\n    @include assert-true($current-prefix == null, \"should be null.\");\n    @include with-prefix(-webkit) {\n      @include assert-true($current-prefix == -webkit, \"should be set.\");\n      $called: false;\n      @include with-prefix(-webkit) {\n        $called: true;\n      }\n      @include assert-true($called, \"should be called.\");\n      $called: false;\n      @include with-prefix(-ms) {\n        $called: true;\n      }\n      @include assert-false($called, \"should not be called.\");\n    }\n  }\n\n  @include test('[mixin] with-each-prefix()') {\n    $prefixes: ();\n    @include with-each-prefix(css-regions, 0.0001) {\n      $prefixes: append($prefixes, $current-prefix);\n    }\n    @include assert-equal((-ms -webkit null), $prefixes, \"Not equal\");\n  }\n\n  @include test('[mixin] with-each-prefix() respects $supported-browsers') {\n    @include with-declared-support(\"ie\") {\n      $prefixes: ();\n      @include with-each-prefix(css-regions, 0.0001) {\n        $prefixes: append($prefixes, $current-prefix);\n      }\n      @include assert-equal((-ms null), $prefixes, \"Not equal\");\n    }\n  }\n\n  @include test('[mixin] with-each-prefix() respects $current-prefix') {\n    $contexts: ();\n    $prefixes: ();\n    @include with-prefix(-webkit) {\n      $prefixes: append($prefixes, $current-prefix);\n      $contexts: append($contexts, $prefix-context);\n      @include with-each-prefix(css-regions, 0.0001) {\n        $prefixes: append($prefixes, $current-prefix);\n        $contexts: append($contexts, $prefix-context);\n      }\n    }\n    @include assert-true(index($prefixes, null), \"Must have a null\");\n    @include assert-equal((-webkit -webkit null), $prefixes, \"Not equal\");\n    @include assert-equal((-webkit -webkit -webkit), $contexts, \"Not equal\");\n  }\n\n  @include test('[function] has-browser-subset()') {\n    @include assert-true(has-browser-subset((firefox: \"16\" \"25\"), (firefox: \"2\" \"25\")), \"Should detect version overlap\");\n    @include assert-true(not has-browser-subset((firefox: \"16\" \"25\"), (firefox: \"2\" \"15\")), \"Should not detect version overlap\");\n    @include assert-true(not has-browser-subset((firefox: \"2\" \"15\"), (firefox: \"16\" \"25\")), \"Should not detect version overlap\");\n    @include assert-true(has-browser-subset((firefox: \"16\" \"24\"), (firefox: \"2\" \"25\")), \"Should detect version overlap\");\n    @include assert-true(has-browser-subset((firefox: \"2\" \"25\"), (firefox: \"16\" \"24\")), \"Should detect version overlap\");\n  }\n\n  @include test('[function] support-legacy-browser() respects $supported-browsers') {\n    @include with-declared-support('chrome') {\n      @include assert-false(support-legacy-browser('ie', '8'), \"ie is not a supported browser\");\n    }\n  }\n}\n\n@include with-browser-support-debugging {\n  @include keyframes(foo) {\n    0% { @include opacity(0); }\n    100% { @include opacity(1); }\n  }\n  .foo {\n    @include animation(foo 1s);\n  }\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/table.scss",
    "content": "@import \"project-setup\";\n@import \"compass/utilities/tables\";\n\n.outer-table-borders { @include outer-table-borders; }\n.inner-table-borders { @include inner-table-borders; }"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/text_shadow.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/text-shadow\";\n\n.default-single-text-shadow { @include single-text-shadow;}\n.none { @include single-text-shadow(none);}\n.color-only { @include single-text-shadow(#cccccc);}\n.color-first-with-params { @include single-text-shadow(#cccccc, 2px, 2px, 5px, 2px);}\n.color-last-with-params { @include single-text-shadow(2px, 2px, 5px, 2px, #cccccc);}\n.default-text-shadow { @include text-shadow;}\n.multiple-text-shadows-with-default { @include text-shadow(default, 2px 2px 5px #222222);}\n.multiple-text-shadows { @include text-shadow(4px 4px 10px #444444, 2px 2px 5px #222222);}\n.multiple-text-shadows-with-spread { @include text-shadow(4px 4px 10px 1px #444444, 2px 2px 5px 3px #222222);}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/transform.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/transform\";\n\n.apply-origin-2d                  { @include apply-origin(2px 5%, false); }\n.apply-origin-3d                  { @include apply-origin(2px 5% 2in, true); }\n.transform-origin-2d              { @include transform-origin(100px, 100px); }\n.transform-origin-3d              { @include transform-origin(100px, 100px, 100px); }\n.transform-2d                     { @include transform2d(rotateY(20deg)); }\n.transform-3d                     { @include transform3d(rotateZ(20deg)); }\n.perspective                      { @include perspective(500); }\n.perspective-origin               { @include perspective-origin(25% 25%)}\n.transform-style                  { @include transform-style; }\n.backface-visibility              { @include backface-visibility;}\n.scale                            { @include scale(30px, 50px);}\n.scale-3d                         { @include scale(30px, 50px, false, true);}\n.scale-with-perspective           { @include scale(30px, 50px, 500);}\n.scale-3d-with-perspective        { @include scale(30px, 50px, 500, true);}\n.scale-x                          { @include scaleX(30px);}\n.scale-x-3d                       { @include scaleX(30px, false, true);}\n.scale-x-with-perspective         { @include scaleX(30px, 500);}\n.scale-x-3d-with-perspective      { @include scaleX(30px, 500, true);}\n.scale-y                          { @include scaleY(50px);}\n.scale-y-3d                       { @include scaleY(50px, false, true);}\n.scale-y-with-perspective         { @include scaleY(50px, 500);}\n.scale-y-3d-with-perspective      { @include scaleY(50px, 500, true);}\n.scale-z                          { @include scaleZ(50px);}\n.scale-z-with-perspective         { @include scaleZ(50px, 500);}\n.scale3d                          { @include scale3d(30px, 50px, 100px);}\n.scaled3-with-perspective         { @include scale3d(30px, 50px, 100px, 500);}\n.rotate                           { @include rotate(25deg, 500);}\n.rotate-with-perspective          { @include rotate(25deg, 500);}\n.rotate-z                         { @include rotateZ(25deg);}\n.rotate-z-with-perspective        { @include rotateZ(25deg, 500);}\n.rotate-x                         { @include rotateX(25deg);}\n.rotate-x-with-perspective        { @include rotateX(25deg, 500);}\n.rotate-y                         { @include rotateY(25deg);}\n.rotate-y-with-perspective        { @include rotateY(25deg, 500);}\n.rotate-3d                        { @include rotate3d(5, 2, 1, 75deg);}\n.rotate-3d-with-perspective       { @include rotate3d(5, 2, 1, 75deg, 500);}\n.translate                        { @include translate(20px, 30%);}\n.translate-with-perspective       { @include translate(20px, 30%, 500);}\n.translate-3d                     { @include translate(20px, 30%, false, true);}\n.translate-3d-with-perspective    { @include translate(20px, 30%, 500, true);}\n.translate-x                      { @include translateX(30px);}\n.translate-x-3d                   { @include translateX(30px, false, true);}\n.translate-x-with-perspective     { @include translateX(30px, 500);}\n.translate-x-3d-with-perspective  { @include translateX(30px, 500, true);}\n.translate-y                      { @include translateY(30px);}\n.translate-y-3d                   { @include translateY(30px, false, true);}\n.translate-y-with-perspective     { @include translateY(30px, 500);}\n.translate-y-3d-with-perspective  { @include translateY(30px, 500, true);}\n.translate-z                      { @include translateZ(30px);}\n.translate-z-with-perspective     { @include translateZ(30px, 500);}\n.translate-3d                     { @include translate3d(30px, 50px, 75px);}\n.translate-3d-with-perspective    { @include translate3d(30px, 50px, 75px, 500);}\n.skew                             { @include skew(20deg, 50deg);}\n.skew-3d                          { @include skew(20deg, 50deg, true);}\n.skew-x                           { @include skewX(20deg);}\n.skew-x-3d                        { @include skewX(20deg, true);}\n.skew-y                           { @include skewY(20deg);}\n.skew-y-3d                        { @include skewY(20deg, true);}\n.create-transform-2d              { @include create-transform(\n                                               500,\n                                               20px, 20px, false,\n                                               25deg, 25deg, false, false\n                                               50px, 50px, false,\n                                               50deg, 50deg,\n                                               50%, 50%, false\n                                              );\n                                  }\n.create-transform-3d              { @include create-transform(\n                                               500,\n                                               20px, 20px, 20px,\n                                               25deg, 25deg, 25deg, false\n                                               50px, 50px, 50px,\n                                               50deg, 50deg,\n                                               50%, 50%, 50%\n                                              );\n                                  }\n\n.simple-transform                 { @include simple-transform(\n                                               25px,\n                                               25deg,\n                                               10px, 10px,\n                                               30deg, 30deg,\n                                               10%, 10%\n                                             );\n                                  }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/transition.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/transition\";\n\n.single-transition-without-delay  { @include single-transition(all, 0.6s, ease-out); }\n.single-transition-with-delay     { @include single-transition(all, 0.6s, ease-out, 0.2s); }\n.transition-duration-list { @include transition-duration((0.2s, 0.5s, 0.2s)); }\n.multiple-transition-durations { @include transition-duration(0.2s, 0.5s, 0.2s); }\n.single-transform-transition-without-delay  { @include single-transition(transform, 0.6s, ease-out); }\n.single-transform-transition-with-delay     { @include single-transition(transform, 0.6s, ease-out, 0.2s); }\n.transform-transition { @include transition(transform 0.6s ease-out) }\n.multiple-transitions { @include transition(transform 0.6s ease-out, opacity 0.2s ease-in) }\n.transition-property { @include transition-property(transform); }\n.transition-properties { @include transition-property(transform, opacity, width, height, left, top); }\n.multiple-transition-properties { @include transition-property((opacity, transform, left)); }\n.default-transition { @include transition(); }\n.transition-timing { @include transition-timing-function(ease-in); }\n.transition-timings { @include transition-timing-function(ease-in, cubic-bezier(1,0,1,0)); }\n.transition-timings-list { @include transition-timing-function((ease-in, cubic-bezier(1,0,1,0))); }\n.transition-delay { @include transition-delay(1s); }\n.transition-delays { @include transition-delay(1s, 2s, 3s); }\n.transition-delays-list { @include transition-delay((1s, 2s, 3s)); }\n.regression-912 { @include transition((background-color 0.5s ease-in 0s, width 0.5s ease-out 0s, height 0.5s ease-in 0s, top 0.5s ease-out 0s)); }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/typography/links/hover-link.scss",
    "content": "@import \"compass/typography/links/hover-link\";\n\na { @include hover-link; }\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/units.scss",
    "content": "@import \"project-setup\";\n$base-font-size: 16px;\n\n@import \"compass/typography/units\";\n\n.foo {\n\twidth: 600px;\n\theight: 200px;\n}\n\n.foo .test {\n\t/* 16px for margins should be 1em */\n\tmargin-top: convert-length(16px, em);\n\n\t/* 16px for margins should be 2.66667% (relative to parent's width) */\n\tmargin-right: convert-length(16px, '%', $to-context: 600px);\n\n\t/* 1.35em for margins should be 3.6% (relative to parent's width,\n\t * even for top and bottom margins) */\n\tmargin-bottom: convert-length(1.35em, '%', $to-context: 600px);\n\n\t/* 16px for margins should be 2ex */\n\tmargin-left: convert-length(16px, ex);\n}\n\n.bar {\n\tfont-size: 18px;\n\twidth: 360px;\n}\n\n.bar .test {\n\t/* 150% for line-height should be 27px */\n\tline-height: convert-length(150%, px, 18px);\n\n\t/* 1px should always be .0625rem for this page */\n\tborder-top: convert-length(1px, rem);\n\n\t/* 2em for this element should be 9.525mm (relative to own font-size, as inherited) */\n\tmargin-top: convert-length(2em, mm, 18px);\n\n\t/* 2px for margins should be .55556% (relative to parent's width) */\n\tmargin-right: convert-length(2px, '%', $to-context: 360px);\n\n\t/* 1rem should always be 16px for this page, even when own font-size is 18px */\n\tmargin-bottom: convert-length(1rem, px);\n}\n\n.rem {\n  @include rem(border-width, 10px);\n  @include rem(margin, 10px, false);\n  @include rem(width, auto);\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/user-interface.scss",
    "content": "@import \"project-setup\";\n@import \"compass/css3/user-interface\";\n\n.user-select {\n  @include user-select(none);\n}\n\n* {\n  @include input-placeholder {\n    color: #bfbfbf;\n    font-style: italic;\n  }\n}\n\n#{elements-of-type(text-input)} {\n  @include input-placeholder {\n    color: #bfbfbf;\n    font-style: italic;\n  }\n}\n\n.sets-up-browser-support-for-content {\n  @include input-placeholder {\n    prefix: $current-prefix;\n    -moz-prefix: $current-prefix == -moz;\n    -ms-prefix: $current-prefix == -ms;\n    -webkit-prefix: $current-prefix == -webkit;\n  }\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/utilities.scss",
    "content": "@import \"project-setup\";\n@import \"compass/utilities\";\n\n.clearfix {\n    @include clearfix;\n}\n\n.pie-clearfix {\n    @include legacy-pie-clearfix;\n}\n.simple-pie-clearfix {\n  @include pie-clearfix;\n}\n\np.light { @include contrasted(#f3aead); }\np.dark  { @include contrasted(#a22321); }\np.light-with-args { @include contrasted(#f3aead, blue, yellow); }\np.dark-with-args  { @include contrasted(#a22321, blue, yellow); }\n\n\n@include alternating-rows-and-columns(red, white, blue);\n\np.ellipsis {\n  @include ellipsis;\n}\n\np.ellipsis.moz {\n  $legacy-support-for-mozilla: true !global;\n  $use-mozilla-ellipsis-binding: true !global;\n  @include ellipsis;\n}\n"
  },
  {
    "path": "core/test/integrations/projects/compass/sass/vertical_rhythm.scss",
    "content": "@import \"project-setup\";\n// Test all functions and mixins, at least indirectly.\n// functions:\n// * rhythm\n// * lines-for-font-size\n//\n// mixins:\n// * establish-baseline\n// * output-rhythm\n// * debug-vertical-alignment\n// * adjust-font-size-to\n// * adjust-leading-to\n// * leader\n// * margin-leader\n// * padding-leader\n// * trailer\n// * margin-trailer\n// * padding-trailer\n// * rhythm\n// * rhythm-margins\n// * rhythm-padding\n// * apply-side-rhythm-border\n// * leading-border\n// * trailing-border\n// * rhythm-borders\n// * horizontal-borders (h-borders)\n//\n// deprecated mixins:\n// * reset-baseline\n\n$base-font-size: 14px;\n$base-line-height: 16px;\n@import \"compass/typography/vertical_rhythm\";\n\n@include establish-baseline;\n\n.small {\n\t@include adjust-font-size-to(12px, 1);\n}\n\n.padded {\n\t@include rhythm(1, 1, 1, 1);\n}\n\n.small-padded {\n\t@include adjust-font-size-to(12px, 1);\n\t@include rhythm(1, 1, 1, 1, 12px);\n}\n\n.borders {\n\t@include h-borders(1px, 1);\n}\n\n.large-borders {\n\t@include adjust-font-size-to(24px, 3);\n\t@include h-borders(6px, 1, 24px);\n}\n\n.reset {\n\t@include reset-baseline;\n}\n\n\n/* New test using em output */\n$base-font-size: 18px;\n$base-line-height: $base-font-size * 1.4;\n$rhythm-unit: em;\n$default-rhythm-border-style: solid #aaaaaa;\n\n@import \"compass/typography/vertical_rhythm\";\n\n@include establish-baseline;\n\n.container {\n\t@include debug-vertical-alignment;\n}\n\np {\n\t@include margin-leader;\n\t@include margin-trailer;\n}\n\nth,\ntd {\n\t@include rhythm-padding(.25);\n}\n\n// Incremental leading made easy!\n.caption {\n\t@include adjust-font-size-to(13px, 4/5);\n}\n\n.spaced-out {\n\t@include adjust-leading-to(1.5);\n}\n\nblockquote {\n\t@include rhythm-margins;\n\tpadding: 0 rhythm();\n}\n\n.fig-quote {\n\t> blockquote {\n\t\t@include trailer(.5);\n\t}\n\t.source {\n\t\t@include adjust-font-size-to(13px, auto);\n\t\t@include trailer(.5, 13px);\n\t}\n}\n\n.panel {\n\t@include adjust-font-size-to(16px);\n\t@include rhythm-borders($font-size: 16px);\n}\n\n/* New using rem output with pixel fallbacks */\n$base-font-size: 18px;\n$base-line-height: $base-font-size * 1.4;\n$rhythm-unit: rem;\n$default-rhythm-border-style: solid #aaaaaa;\n@import \"compass/typography/vertical_rhythm\";\n\n@include establish-baseline;\n\n.container {\n\t@include debug-vertical-alignment;\n}\n\np {\n\t@include margin-leader;\n\t@include margin-trailer;\n}\n\nth,\ntd {\n\t@include rhythm-padding(.25);\n}\n\n/* Incremental leading made easy! */\n.caption {\n\t@include adjust-font-size-to(.85rem, 4/5);\n}\n\n.spaced-out {\n\t@include adjust-leading-to(1.5);\n}\n\nblockquote {\n\t@include rhythm-margins;\n\tpadding: 0 rhythm();\n}\n\n.fig-quote {\n\t> blockquote {\n\t\t@include trailer(.5);\n\t}\n\t.source {\n\t\t@include adjust-font-size-to(.85rem, auto);\n\t\t@include trailer(.5);\n\t}\n}\n\n.panel {\n\t@include rhythm-borders;\n}\n\n/* New using px output */\n$base-font-size: 18px;\n$base-line-height: $base-font-size * 1.4;\n$rhythm-unit: px;\n$default-rhythm-border-style: solid #aaaaaa;\n@import \"compass/typography/vertical_rhythm\";\n\n@include establish-baseline;\n\n.container {\n\t@include debug-vertical-alignment;\n}\n\np {\n\t@include margin-leader;\n\t@include margin-trailer;\n}\n\nth,\ntd {\n\t@include rhythm-padding(.25);\n}\n\n/* Incremental leading made easy! */\n.caption {\n\t@include adjust-font-size-to(.85rem, 4/5);\n}\n\n.spaced-out {\n\t@include adjust-leading-to(1.5);\n}\n\nblockquote {\n\t@include rhythm-margins;\n\tpadding: 0 rhythm();\n}\n\n.fig-quote {\n\t> blockquote {\n\t\t@include trailer(.5);\n\t}\n\t.source {\n\t\t@include adjust-font-size-to(.85rem, auto);\n\t\t@include trailer(.5);\n\t}\n}\n\n.panel {\n\t@include rhythm-borders;\n}\n\n"
  },
  {
    "path": "core/test/integrations/projects/envtest/css/env.css",
    "content": ".env {\n  env: development; }\n\n.time {\n  time: 2013-11-04; }\n\n.date {\n  date: 2013-11-04; }\n\n.filename {\n  file: env.scss; }\n\n.output {\n  output: env.css; }\n"
  },
  {
    "path": "core/test/integrations/projects/envtest/sass/_project-setup.scss",
    "content": "$project-path: absolute-path(join-file-segments(\"..\"));\n\n@import \"compass/configuration\";\n\n@function busted($path) {\n  @return \"busted=true\";\n}\n\n@include compass-configuration($asset-cache-buster: busted);\n"
  },
  {
    "path": "core/test/integrations/projects/envtest/sass/env.scss",
    "content": "@import \"project-setup\";\n\n.env {\n  env: compass-env();  \n}\n\n.time {\n  time: current-time(\"%F\");\n}\n\n.date {\n  date: current-date(\"%F\");\n}\n\n.filename {\n  file: current-source-file();\n}\n\n.output {\n  output: current-output-file();\n}\n"
  },
  {
    "path": "core/test/integrations/projects/image_urls/css/screen.css",
    "content": ".showgrid { background-image: url('http://assets0.example.com/images/grid.png?busted=true'); }\n\n.inlinegrid { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAUEAYAAACv1qP4AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAZ0lEQVRYw+3QwQ2AIBAFUTEUwI3+uzN7gDscsIgxEuO8An52J11X73OudfxMraXkzHfO3Y98nQEhA0IGhAwIGRAyIGRAyICQASEDQgaEDAgZEDIgZEDIgJABoZzSGK3tPuN9ERFP7Nw4fg+c5g8V1wAAAABJRU5ErkJggg=='); }\n\n.no-buster { background-image: url('http://assets0.example.com/images/grid.png'); }\n"
  },
  {
    "path": "core/test/integrations/projects/image_urls/sass/_project-setup.scss",
    "content": "$project-path: absolute-path(join-file-segments(\"..\"));\n\n@import \"compass/configuration\";\n\n@function busted($url, $file) {\n  @return \"busted=true\";\n}\n\n@function asset-host($path) {\n  @return \"http://assets#{str-length($path) % 4}.example.com\"\n}\n\n@include compass-configuration($asset-cache-buster: busted, $asset-host: asset-host);\n"
  },
  {
    "path": "core/test/integrations/projects/image_urls/sass/screen.sass",
    "content": "@import project-setup\n.showgrid\n  background-image: image-url(unquote(\"grid.png\"))\n\n.inlinegrid\n  background-image: inline-image(unquote(\"grid.png\"))\n\n.no-buster\n  background-image: image-url(\"grid.png\", $only-path: false, $cache-buster: false)\n"
  },
  {
    "path": "core/test/integrations/projects/relative/css/ie.css",
    "content": "/* Welcome to Compass. Use this file to write IE specific override styles. Import this file using the following HTML or equivalent: <!--[if IE]> <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" /> <![endif]--> */\n"
  },
  {
    "path": "core/test/integrations/projects/relative/css/print.css",
    "content": "/* Welcome to Compass. Use this file to define print styles. Import this file using the following HTML or equivalent: <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" /> */\n"
  },
  {
    "path": "core/test/integrations/projects/relative/css/screen.css",
    "content": "test { background: url('../assets/images/testing.png?<%= File.mtime(File.join(Compass.configuration.project_path, 'assets', 'images', 'testing.png')).strftime(\"%s\") %>'); }\n"
  },
  {
    "path": "core/test/integrations/projects/relative/sass/_project-setup.scss",
    "content": "$project-path: absolute-path(join-file-segments(\"..\"));\n\n@import \"compass/configuration\";\n\n@include compass-configuration($images-dir: join-file-segments(\"assets\", \"images\"),\n                               $relative-assets: true);\n"
  },
  {
    "path": "core/test/integrations/projects/relative/sass/ie.sass",
    "content": "@import \"project-setup\"\n/* Welcome to Compass. Use this file to write IE specific override styles.\n   Import this file using the following HTML or equivalent:\n   <!--[if IE]>\n     <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" />\n   <![endif]-->\n"
  },
  {
    "path": "core/test/integrations/projects/relative/sass/print.sass",
    "content": "@import \"project-setup\"\n/* Welcome to Compass. Use this file to define print styles.\n   Import this file using the following HTML or equivalent:\n   <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" />\n"
  },
  {
    "path": "core/test/integrations/projects/relative/sass/screen.sass",
    "content": "@import \"project-setup\"\ntest\n  background: image-url(\"testing.png\")\n"
  },
  {
    "path": "core/test/integrations/projects/uses_only_stylesheets_ext/css/ie.css",
    "content": "/* Welcome to Compass. Use this file to write IE specific override styles.\n * Import this file using the following HTML or equivalent:\n * <!--[if IE]>\n *   <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" />\n * <![endif]--> */\n"
  },
  {
    "path": "core/test/integrations/projects/uses_only_stylesheets_ext/css/print.css",
    "content": "/* Welcome to Compass. Use this file to define print styles.\n * Import this file using the following HTML or equivalent:\n * <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" /> */\n"
  },
  {
    "path": "core/test/integrations/projects/uses_only_stylesheets_ext/css/screen.css",
    "content": "/* Welcome to Compass.\n * In this file you should write your main styles. (or centralize your imports)\n * Import this file using the following HTML or equivalent:\n * <link href=\"/stylesheets/screen.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" /> */\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font: inherit;\n  font-size: 100%;\n  vertical-align: baseline;\n}\n\nhtml {\n  line-height: 1;\n}\n\nol, ul {\n  list-style: none;\n}\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ncaption, th, td {\n  text-align: left;\n  font-weight: normal;\n  vertical-align: middle;\n}\n\nq, blockquote {\n  quotes: none;\n}\nq:before, q:after, blockquote:before, blockquote:after {\n  content: \"\";\n  content: none;\n}\n\na img {\n  border: none;\n}\n\narticle, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {\n  display: block;\n}\n"
  },
  {
    "path": "core/test/integrations/projects/uses_only_stylesheets_ext/sass/ie.scss",
    "content": "/* Welcome to Compass. Use this file to write IE specific override styles.\n * Import this file using the following HTML or equivalent:\n * <!--[if IE]>\n *   <link href=\"/stylesheets/ie.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" />\n * <![endif]--> */\n"
  },
  {
    "path": "core/test/integrations/projects/uses_only_stylesheets_ext/sass/print.scss",
    "content": "/* Welcome to Compass. Use this file to define print styles.\n * Import this file using the following HTML or equivalent:\n * <link href=\"/stylesheets/print.css\" media=\"print\" rel=\"stylesheet\" type=\"text/css\" /> */\n"
  },
  {
    "path": "core/test/integrations/projects/uses_only_stylesheets_ext/sass/screen.scss",
    "content": "/* Welcome to Compass.\n * In this file you should write your main styles. (or centralize your imports)\n * Import this file using the following HTML or equivalent:\n * <link href=\"/stylesheets/screen.css\" media=\"screen, projection\" rel=\"stylesheet\" type=\"text/css\" /> */\n\n@import \"compass/reset\";\n"
  },
  {
    "path": "core/test/integrations/projects/valid/css/simple.css",
    "content": "/* line 1, ../sass/simple.sass */\ndiv {\n  color: red;\n}\n"
  },
  {
    "path": "core/test/integrations/projects/valid/sass/simple.sass",
    "content": "div\n  color: red"
  },
  {
    "path": "core/test/integrations/projects_test.rb",
    "content": "#! /usr/bin/env ruby\ntest_directory = File.expand_path(File.dirname(__FILE__))\n$: << test_directory unless $:.include? test_directory\nrequire 'test_helper'\nrequire 'fileutils'\nrequire 'compass/core'\nrequire 'sass/plugin'\nrequire 'pathname'\nrequire 'true'\nrequire 'timecop'\n\nclass ProjectsTest < Test::Unit::TestCase\n  def setup\n    Compass.reset_configuration!\n  end\n\n  def verbose?\n    false\n  end\n\n  def test_compass\n    compile_project(\"compass\", &method(:standard_checks))\n  end\n\n  def test_busted_font_urls\n    compile_project(\"busted_font_urls\", {:style => :compact}, &method(:standard_checks))\n  end\n\n  def test_relative\n    compile_project(\"relative\", {:style => :compact}, &method(:standard_checks))\n  end\n\n  def test_valid\n    compile_project(\"valid\", {:line_comments => true, :style => :expanded}, &method(:standard_checks))\n  end\n\n  def test_busted_image_urls\n    compile_project(\"busted_image_urls\", {:style => :compact}, &method(:standard_checks))\n  end\n\n  def test_envtest\n    Timecop.travel(Time.local(2013, \"nov\", 4, 12, 0)) do\n      compile_project(\"envtest\", &method(:standard_checks))\n    end\n  end\n\n  def test_image_urls\n    compile_project(\"image_urls\", {:style => :compact}, &method(:standard_checks))\n  end\n\n  def test_uses_only_stylesheets_ext\n    compile_project(\"uses_only_stylesheets_ext\", {:style => :expanded}, &method(:standard_checks))\n  end\n\nprivate\n\n  def standard_checks(compiler)\n    compiler.on_updated_stylesheet do |sass, css, map|\n      sass_file = Pathname.new(sass).relative_path_from(\n                    Pathname.new(template_path(@current_project))).to_s\n      if verbose?\n        puts \"sass_file = #{sass_file} (#{(((Time.now - @last_compile) - (@last_compile - @diff_start)) * 1000).round}ms)\"\n      end\n      @diff_start = Time.now\n      assert_renders_correctly sass_file, :ignore_charset => true\n      @last_compile = Time.now\n    end\n    compiler.on_compilation_error do |error, sass, css|\n      raise error\n    end\n  end\n\n  def assert_renders_correctly(*arguments)\n    options = arguments.last.is_a?(Hash) ? arguments.pop : {}\n    for name in arguments\n      actual_result_file = \"#{tempfile_path(@current_project)}/#{name}\".gsub(/s[ac]ss/, \"css\")\n      expected_result_file = \"#{result_path(@current_project)}/#{name}.#{Sass.version[:major]}.#{Sass.version[:minor]}\".gsub(/s[ac]ss/, \"css\")\n      expected_result_file = \"#{result_path(@current_project)}/#{name}\".gsub(/s[ac]ss/, \"css\") unless File.exists?(expected_result_file)\n      actual_lines = File.read(actual_result_file)\n      actual_lines.gsub!(/^@charset[^;]+;/,'') if options[:ignore_charset]\n      actual_lines = actual_lines.split(\"\\n\").reject{|l| l=~/\\A\\Z/}\n      expected_lines = ERB.new(File.read(expected_result_file)).result(binding)\n      expected_lines.gsub!(/^@charset[^;]+;/,'') if options[:ignore_charset]\n      expected_lines = expected_lines.split(\"\\n\").reject{|l| l=~/\\A\\Z/}\n      expected_lines.zip(actual_lines).each_with_index do |pair, line|\n        if pair.first == pair.last\n          assert(true)\n        else\n          assert false, \"Error in #{actual_result_file}:#{line + 1}\\n\"+diff_as_string(pair.first.inspect, pair.last.inspect)\n        end\n      end\n      if expected_lines.size < actual_lines.size\n        assert(false, \"#{actual_lines.size - expected_lines.size} Trailing lines found in #{actual_result_file}: #{actual_lines[expected_lines.size..-1].join('\\n')}\")\n      end\n    end\n  end\n\n  def compile_project(project_name, options = {})\n    @last_compile = Time.now\n    @diff_start = Time.now\n    @current_project = project_name\n    options = {\n      :always_update => true,\n      :load_paths => [],\n      :sourcemap => false\n    }.merge(options)\n    options.update(\n      :css_location => tempfile_path(project_name),\n      :template_location => template_path(project_name)\n    )\n    options[:load_paths] = (load_paths + options[:load_paths] + sass_path_env).uniq\n    compiler = Sass::Plugin::Compiler.new(options)\n    yield compiler\n    compiler.update_stylesheets\n  rescue\n    save_output(project_name)\n    raise\n  ensure\n    @current_project = nil\n  end\n\n  def sass_path_env\n    (ENV['SASSPATH'] || \"\").split(File::PATH_SEPARATOR).select {|d| File.directory?(d)}\n  end\n\n  def each_css_file(dir, &block)\n    Dir.glob(\"#{dir}/**/*.css\").each(&block)\n  end\n\n  def load_paths\n    [Compass::Core.base_directory(\"stylesheets\")]\n  end\n\n  def each_sass_file(sass_dir = nil)\n    sass_dir ||= template_path(@current_project)\n    Dir.glob(\"#{sass_dir}/**/*.s[ac]ss\").each do |sass_file|\n      yield sass_file[(sass_dir.length+1)..-6]\n    end\n  end\n\n  def save_output(dir)\n    FileUtils.rm_rf(save_path(dir))\n    FileUtils.cp_r(tempfile_path(dir), save_path(dir)) if File.exists?(tempfile_path(dir))\n  end\n\n  def projects\n    Dir.glob(File.join(projects_path, \"*\")).map do |project_path|\n      File.dirname(project_path)\n    end\n  end\n\n  def projects_path\n    File.join(File.dirname(__FILE__), \"projects\")\n  end\n\n  def project_path(project_name)\n    File.join(projects_path, project_name)\n  end\n\n  def tempfile_path(project_name)\n    File.join(project_path(project_name), \"tmp\")\n  end\n\n  def template_path(project_name)\n    File.join(project_path(project_name), \"sass\")\n  end\n\n  def result_path(project_name)\n    File.join(project_path(project_name), \"css\")\n  end\n\n  def save_path(project_name)\n    File.join(project_path(project_name), \"saved\")\n  end\nend\n"
  },
  {
    "path": "core/test/integrations/test_helper.rb",
    "content": "require \"test/unit\"\nrequire File.join(File.dirname(__FILE__), \"..\", \"helpers\", \"diff\")\n\ninclude Compass::Diff\n\n"
  },
  {
    "path": "core/test/units/configuration_test.rb",
    "content": "#! /usr/bin/env ruby\ntest_directory = File.expand_path(File.dirname(__FILE__))\n$: << test_directory unless $:.include? test_directory\nrequire 'test_helper'\nrequire 'compass-core'\n\nclass ConfigurationTest < Test::Unit::TestCase\n\n  def test_sass_engine_options\n    result = Compass.configuration.to_sass_engine_options\n    assert_kind_of Hash, result\n  end\n\n  def test_sass_plugin_options\n    result = Compass.configuration.to_sass_plugin_options\n    assert_kind_of Hash, result\n  end\n\nend\n\n"
  },
  {
    "path": "core/test/units/frameworks_test.rb",
    "content": "#! /usr/bin/env ruby\ntest_directory = File.expand_path(File.dirname(__FILE__))\n$: << test_directory unless $:.include? test_directory\nrequire 'test_helper'\n\nclass FrameworksTest < Test::Unit::TestCase\n\n  def test_compass_has_the_compass_framework\n    names = []\n    Compass::Frameworks::ALL.each do |framework|\n      names << framework.name\n    end\n    assert names.include?(\"compass\")\n  end\n\nend\n\n"
  },
  {
    "path": "core/test/units/shared_extension_paths_test.rb",
    "content": "require 'test_helper'\n\nclass SharedExtensionsTest < Test::Unit::TestCase\n\n  def setup\n    Compass.reset_configuration!\n    Compass.instance_variable_set(\"@shared_extension_paths\", nil)\n    @original_home = ENV[\"HOME\"]\n  end\n\n  def teardown\n    ENV[\"HOME\"] = @original_home\n    Compass.reset_configuration!\n  end\n\n  def test_shared_extension_paths_with_valid_home\n    ENV[\"HOME\"] = \"/\"\n    assert_equal [\"/.compass/extensions\"], Compass.shared_extension_paths\n  end\n\n  def test_shared_extension_paths_with_nil_home\n    ENV[\"HOME\"] = nil\n    assert_equal [], Compass.shared_extension_paths\n  end\n\n  def test_shared_extension_paths_with_file_home\n    ENV[\"HOME\"] = __FILE__\n    assert_equal [], Compass.shared_extension_paths\n  end\n\n  def test_shared_extension_paths_with_relative_home\n    ENV[\"HOME\"] = \".\"\n    assert_equal [\"./.compass/extensions\"], Compass.shared_extension_paths\n  end\n\nend\n"
  },
  {
    "path": "core/test/units/test_helper.rb",
    "content": "require 'fileutils'\nrequire 'compass/core'\n\nrequire \"test/unit\"\nrequire File.expand_path(File.join(File.dirname(__FILE__), \"..\", \"helpers\", \"diff\"))\n\ninclude Compass::Diff\n\n"
  },
  {
    "path": "core/test/units/urls_test.rb",
    "content": "#! /usr/bin/env ruby\ntest_directory = File.expand_path(File.dirname(__FILE__))\n$: << test_directory unless $:.include? test_directory\nrequire 'test_helper'\n\nclass UrlsTest < Test::Unit::TestCase\n  include Compass::Core::SassExtensions::Functions::Urls\n\n  def test_compute_relative_path\n    options[:css_filename] = File.expand_path(\"./test.css\")\n    assert_equal \".\", compute_relative_path(\".\")\n    assert_equal \".\", compute_relative_path(File.expand_path(\".\"))\n    options[:css_filename] = \"./test.css\"\n    assert_equal \".\", compute_relative_path(\".\")\n    assert_equal \".\", compute_relative_path(File.expand_path(\".\"))\n  end\n\n  private\n\n  def options\n    @options ||= {}\n  end\nend\n"
  },
  {
    "path": "import-once/.gitignore",
    "content": "*.gem\n*.rbc\n.bundle\n.config\n.yardoc\nGemfile*.lock\nInstalledFiles\n_yardoc\ncoverage\ndoc/\nlib/bundler/man\npkg\nrdoc\nspec/reports\ntest/tmp\ntest/version_tmp\ntmp\n"
  },
  {
    "path": "import-once/Gemfile",
    "content": "source 'https://rubygems.org'\n\ngem 'test-unit', '~> 3.0.9'\n\ngemspec\n"
  },
  {
    "path": "import-once/Gemfile_sass_3_2",
    "content": "source 'https://rubygems.org'\n\ngemspec\n\ngem 'sass', '~> 3.2.15'\n"
  },
  {
    "path": "import-once/LICENSE.txt",
    "content": "Copyright (c) 2013 Chris Eppstein\n\nMIT License\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "import-once/README.md",
    "content": "# Import Once\n\nThis plugin changes the behavior of Sass's `@import` directive so that\nif the same sass file is imported more than once, the second import\nwill be a no-op. This allows dependencies to behave how most people\nexpect them to behave and provides a considerable performance improvement\nfor some sass projects.\n\n**Note**: Although this plugin is maintained by compass, it can be used\nwithout compass in any Sass-based project.\n\n## Installation\n\nEither add this line to your application's Gemfile if you have one:\n\n    gem 'compass-import-once', :require => 'compass/import-once/activate'\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install compass-import-once\n\n## Usage\n\nTo use with the Sass command line:\n\n```\nsass -r 'compass/import-once/activate' ...\n```\n\nTo enable in non-compass environments there's two options:\n\n    require 'compass/import-once/activate'\n\nor you can activate it conditionally:\n\n    require 'compass/import-once'\n    Compass::ImportOnce.activate!\n\n## Forcing an Import\n\nIf a file must be imported a second time, you can force it by adding an\nexclamation mark to the end of the import url. E.g.\n\n\n```scss\n@import \"something\";\n@import \"something!\"; // this will be imported again.\n```\n"
  },
  {
    "path": "import-once/Rakefile",
    "content": "require \"bundler/gem_tasks\"\nrequire \"rake/testtask\"\n\nRake::TestTask.new do |t|\n  t.libs << \"test\"\n  t.libs << \"lib\"\n  t.test_files = FileList['test/**/*_test.rb']\n  t.verbose = true\nend\n"
  },
  {
    "path": "import-once/VERSION",
    "content": "1.0.5\n"
  },
  {
    "path": "import-once/compass-import-once.gemspec",
    "content": "# coding: utf-8\nlib = File.expand_path('../lib', __FILE__)\n$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)\nrequire 'compass/import-once/version'\n\nGem::Specification.new do |spec|\n  spec.name          = \"compass-import-once\"\n  spec.version       = Compass::ImportOnce::VERSION\n  spec.authors       = [\"Chris Eppstein\"]\n  spec.email         = [\"chris@eppsteins.net\"]\n  spec.description   = %q{Changes the behavior of Sass's @import directive to only import a file once.}\n  spec.summary       = %q{Speed up your Sass compilation by making @import only import each file once.}\n  spec.homepage      = \"https://github.com/chriseppstein/compass/tree/master/import-once\"\n  spec.license       = \"MIT\"\n\n  spec.files         = `git ls-files #{File.dirname(__FILE__)}`.split($/)\n  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }\n  spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})\n  spec.require_paths = [\"lib\"]\n\n  spec.add_dependency \"sass\", \">= 3.2\", \"< 3.5\"\n  spec.add_development_dependency \"bundler\", \"~> 1.3\"\n  spec.add_development_dependency \"diff-lcs\"\n  spec.add_development_dependency \"rake\"\n  spec.add_development_dependency \"sass-globbing\"\nend\n"
  },
  {
    "path": "import-once/lib/compass/import-once/activate.rb",
    "content": "require 'compass/import-once'\nmodule Sass\n  class Engine\n    def self.new(*args)\n      instance = super\n      instance.extend(Compass::ImportOnce::Engine)\n      if i = instance.options[:importer]\n        i.extend(Compass::ImportOnce::Importer) unless i.is_a?(Compass::ImportOnce::Importer)\n      end\n      instance.options[:load_paths].each do |path|\n        if path.is_a?(Sass::Importers::Base) && !path.is_a?(Compass::ImportOnce::Importer)\n          path.extend(Compass::ImportOnce::Importer)\n        elsif !path.is_a?(Sass::Importers::Base)\n          Sass::Util.sass_warn \"WARNING: #{path.inspect} is on the load path and is not an importer.\"\n        end\n      end\n      instance\n    end\n  end\nend\n"
  },
  {
    "path": "import-once/lib/compass/import-once/engine.rb",
    "content": "module Compass\n  # although this is part of the compass suite of gems, it doesn't depend on compass,\n  # so any sass-based project can use to to get import-once behavior for all of their\n  # importers.\n  module ImportOnce\n    # All sass engines will be extended with this module to manage the lifecycle\n    # around each\n    module Engine\n      def to_css\n        with_import_scope(options[:css_filename]) do\n          super\n        end\n      end\n\n      def render\n        with_import_scope(options[:css_filename]) do\n          super\n        end\n      end\n\n      def render_with_sourcemap(sourcemap_uri)\n        with_import_scope(options[:css_filename]) do\n          super\n        end\n      end\n\n      def with_import_scope(css_filename)\n        Compass::ImportOnce.import_tracker[css_filename] = Set.new\n        yield\n      ensure\n        Compass::ImportOnce.import_tracker.delete(css_filename)\n      end\n    end\n  end\nend\n\n"
  },
  {
    "path": "import-once/lib/compass/import-once/importer.rb",
    "content": "module Compass\n  module ImportOnce\n    # Any importer object that is extended with this module will get the import once behavior.\n    module Importer\n      def find_relative(uri, base, options, *args)\n        uri, force_import = handle_force_import(uri)\n        maybe_replace_with_dummy_engine(super(uri, base, options, *args), options, force_import)\n      end\n\n      def find(uri, options, *args)\n        uri, force_import = handle_force_import(uri)\n        maybe_replace_with_dummy_engine(super(uri, options, *args), options, force_import)\n      end\n\n      def key(uri, options, *args)\n        if uri =~ /^\\(NOT IMPORTED\\) (.*)$/\n          [\"(import-once)\", $1]\n        else\n          super\n        end\n      end\n\n      def mtime(uri, options, *args)\n        if uri =~ /^\\(NOT IMPORTED\\) (.*)$/\n          File.mtime($1) if File.exist?($1)\n        else\n          super\n        end\n      end\n\n      protected\n\n      # any uri that ends with an exclamation mark will be forced to import\n      def handle_force_import(uri)\n        if uri.end_with?(\"!\")\n          [uri[0...-1], true]\n        else\n          [uri, false]\n        end\n      end\n\n      def maybe_replace_with_dummy_engine(engine, options, force_import)\n        if engine && !force_import && imported?(engine, options)\n          engine = dummy_engine(engine, options)\n        elsif engine\n          imported!(engine, options)\n        end\n        engine\n      end\n\n      def tracker(options)\n         Compass::ImportOnce.import_tracker[options[:css_filename]] ||= Set.new\n      end\n\n      # Giant hack to support sass-globbing.\n      # Need to find a better fix.\n      def normalize_filesystem_importers(key)\n        key.map do |part|\n          part.sub(/Glob:/, 'Sass::Importers::Filesystem:')\n        end\n      end\n\n      def import_tracker_key(engine, options)\n        normalize_filesystem_importers(key(engine.options[:filename], options)).join(\"|\").freeze\n      end\n\n      def dummy_engine(engine, options)\n        new_options = engine.options.merge(:filename => \"(NOT IMPORTED) #{engine.options[:filename]}\" )\n        Sass::Engine.new(\"\", new_options)\n      end\n\n      def imported?(engine, options)\n        tracker(options).include?(import_tracker_key(engine, options))\n      end\n\n      def imported!(engine, options)\n        tracker(options) << import_tracker_key(engine, options)\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "import-once/lib/compass/import-once/version.rb",
    "content": "module Compass\n  module ImportOnce\n    VERSION = File.read(File.join(File.dirname(__FILE__), \"..\", \"..\", \"..\", \"VERSION\")).strip\n  end\nend\n"
  },
  {
    "path": "import-once/lib/compass/import-once.rb",
    "content": "require \"compass/import-once/version\"\nrequire \"compass/import-once/importer\"\nrequire \"compass/import-once/engine\"\nrequire 'set'\n\nmodule Compass\n  # although this is part of the compass suite of gems, it doesn't depend on compass,\n  # so any sass-based project can use to to get import-once behavior for all of their\n  # importers.\n  module ImportOnce\n    class << self\n      # A map of css filenames to a set of engine cache keys that uniquely identify what has\n      # been imported. The lifecycle of each key is handled by code wrapped around Sass's\n      # render, to_css and render_with_sourcemap methods on the Sass::Engine.\n      #\n      # Ideally, Sass would provide a place in it's public API to put\n      # information that persists for only the duration of a single compile and would be accessible\n      # for all sass engines and sass functions written in ruby.\n      def import_tracker\n        Thread.current[:import_once_tracker] ||= {}\n      end\n\n      def activate!\n        require 'compass/import-once/activate'\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "import-once/lib/compass-import-once.rb",
    "content": "require 'compass/import-once'\n"
  },
  {
    "path": "import-once/test/diff_as_string.rb",
    "content": "require 'diff/lcs'\nrequire 'diff/lcs/hunk'\n\nmodule DiffAsString\n  #stole this from rspec who stole this from the gem\n  def diff_as_string(data_old, data_new)\n    data_old = data_old.split(/\\n/).map! { |e| e.chomp }\n    data_new = data_new.split(/\\n/).map! { |e| e.chomp }\n    output = \"\"\n    diffs = ::Diff::LCS.diff(data_old, data_new)\n    return output if diffs.empty?\n    oldhunk = hunk = nil  \n    file_length_difference = 0\n    diffs.each do |piece|\n      begin\n        hunk = ::Diff::LCS::Hunk.new(\n          data_old, data_new, piece, context_lines, file_length_difference\n        )\n        file_length_difference = hunk.file_length_difference      \n        next unless oldhunk      \n        # Hunks may overlap, which is why we need to be careful when our\n        # diff includes lines of context. Otherwise, we might print\n        # redundant lines.\n        if (context_lines > 0) and hunk.overlaps?(oldhunk)\n          hunk.unshift(oldhunk)\n        else\n          output << oldhunk.diff(format)\n        end\n      ensure\n        oldhunk = hunk\n        output << \"\\n\"\n      end\n    end  \n    #Handle the last remaining hunk\n    output << oldhunk.diff(format) << \"\\n\"\n  end\n\n  protected\n\n  def format\n    :unified\n  end\n\n  def context_lines\n    3\n  end\n\nend\n"
  },
  {
    "path": "import-once/test/fixtures/_simple_partial.scss",
    "content": "$simple-imported: 0 !default;\n$simple-imported: $simple-imported + 1;\n.simple {\n  times-imported: $simple-imported;\n}\n"
  },
  {
    "path": "import-once/test/fixtures/basic.css",
    "content": ".simple {\n  times-imported: 1;\n}\n"
  },
  {
    "path": "import-once/test/fixtures/basic.scss",
    "content": "@import \"simple_partial\";\n@import \"simple_partial\";\n"
  },
  {
    "path": "import-once/test/fixtures/force_import.css",
    "content": ".simple {\n  times-imported: 1;\n}\n\n.simple {\n  times-imported: 2;\n}\n"
  },
  {
    "path": "import-once/test/fixtures/force_import.scss",
    "content": "@import \"simple_partial\";\n@import \"simple_partial!\";\n"
  },
  {
    "path": "import-once/test/fixtures/with_globbing.css",
    "content": ".simple {\n  times-imported: 1;\n}\n"
  },
  {
    "path": "import-once/test/fixtures/with_globbing.scss",
    "content": "@import \"*_partial*\";\n@import \"simple_partial\";\n"
  },
  {
    "path": "import-once/test/import_once_test.rb",
    "content": "#!/usr/bin/env ruby\nrequire 'test_helper'\nrequire 'fileutils'\n\n# These are useful in debugging.\nmodule Sass::Script::Functions\n  def filename\n    if @options[:filename]\n      Sass::Script::String.new(@options[:filename], true)\n    else\n      Sass::Script::Null.new\n    end\n  end\n  def importer\n    if @options[:importer]\n      Sass::Script::String.new(@options[:importer].inspect, true)\n    else\n      Sass::Script::Null.new\n    end\n  end\n  def importer_is_import_onced\n    Sass::Script::Bool.new(@options[:importer].is_a?(Compass::ImportOnce::Importer))\n  end\nend\n\nclass ImportOnceTest < Test::Unit::TestCase\n  FIXTURES_DIR = File.join(File.expand_path(File.dirname(__FILE__)), \"fixtures\")\n  Dir.glob(File.join(FIXTURES_DIR, \"**\", \"*.scss\")).each do |scss_file|\n    if ENV[\"FIXTURE\"]\n      next unless File.expand_path(ENV[\"FIXTURE\"]) == scss_file\n    end\n    dir = File.dirname(scss_file)\n    basename = File.basename(scss_file, \".scss\")\n    next if basename.start_with?(\"_\")\n    define_method \"test_#{basename}\" do\n      assert_compilation_result(\n        File.join(dir, \"#{basename}.scss\"),\n        File.join(dir, \"#{basename}.css\"))\n    end\n  end\n\n  protected\n\n  def assert_compilation_result(sass_file, css_file, options = {})\n    options[:style] ||= :expanded\n    actual_result = Sass.compile_file(sass_file, options)\n    expected_result = File.read(css_file)\n    assert expected_result == actual_result, diff_as_string(expected_result, actual_result)\n    FileUtils.rm_f(\"#{css_file}.error\") # cleanup from old tests now that it's passing\n  rescue Exception => e\n    open(\"#{css_file}.error\", \"w\") {|f| f.write(actual_result) }\n    raise\n  end\nend\n"
  },
  {
    "path": "import-once/test/test_helper.rb",
    "content": "require 'sass'\nrequire 'compass/import-once/activate'\nrequire 'sass-globbing'\nrequire 'test/unit'\nrequire 'diff_as_string'\n\nclass Test::Unit::TestCase\n  include DiffAsString\nend\n"
  },
  {
    "path": "test_all.sh",
    "content": "#!/bin/sh\n\ncd core && bundle install --quiet && bundle exec rake test && cd .. &&\n  cd cli && bundle install --quiet && bundle exec rake && cd .. &&\n  cd import-once && bundle install --quiet && bundle exec rake test && cd .. &&\n  cd import-once && (BUNDLE_GEMFILE=Gemfile_sass_3_2 bundle install --quiet && bundle exec rake test) && cd ..\n"
  }
]