[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.css]\ninsert_final_newline = false\n\n[package.json]\nindent_style = space\nindent_size = 2\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Enforce Unix newlines\n* text=auto eol=lf\n"
  },
  {
    "path": ".github/workflows/docker.yml",
    "content": "# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n# separate terms of service, privacy policy, and support\n# documentation.\n\n# GitHub recommends pinning actions to a commit SHA.\n# To get a newer version, you will need to update the SHA.\n# You can also reference a tag or branch, but the action may change without warning.\n\nname: Create and publish a Docker image\n\non:\n  push:\n    branches:\n    - master\n\nenv:\n  REGISTRY: ghcr.io\n  IMAGE_NAME: ${{ github.repository }}\n\njobs:\n  build-and-push-image:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v3\n        with:\n          fetch-depth: 0\n\n      - name: Log in to the Container registry\n        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Extract metadata (tags, labels) for Docker\n        id: meta\n        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38\n        with:\n          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n\n      - name: Build and push Docker image\n        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc\n        with:\n          context: .\n          push: true\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Tests\n\non: [push, pull_request]\n\nenv:\n  CI: true\n\njobs:\n  run:\n    name: Node ${{ matrix.node }} on ${{ matrix.os }}\n    runs-on: ${{ matrix.os }}\n\n    strategy:\n      fail-fast: false\n      matrix:\n        node: [18, 20]\n        os: [ubuntu-latest, windows-latest]\n\n    steps:\n      - name: Clone repository\n        uses: actions/checkout@v3\n        with:\n          persist-credentials: false\n\n      - name: Set up Node.js\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node }}\n          cache: npm\n\n      - name: Install npm dependencies\n        run: npm ci\n\n      - name: Run tests\n        run: npm test\n\n      - name: Patch lcov.info\n        run: sed -i -- 's/SF:..\\//SF:.\\//g' ./coverage/lcov.info\n\n      - name: Coveralls Parallel\n        uses: coverallsapp/github-action@master\n        env:\n          NODE_COVERALLS_DEBUG: 1\n        with:\n          github-token: ${{ secrets.github_token }}\n          flag-name: run-${{ matrix.os }}-${{ matrix.node }}\n          parallel: true\n\n  finish:\n    needs: run\n    runs-on: ubuntu-latest\n    steps:\n    - name: Coveralls Finished\n      uses: coverallsapp/github-action@master\n      with:\n        github-token: ${{ secrets.github_token }}\n        parallel-finished: true\n"
  },
  {
    "path": ".gitignore",
    "content": "/coverage/\n/node_modules/\n/test/fixture/bower_components/bootstrap/dist/css/*\n/test/fixture/test-*\n/test/fixture/tmp-*\n/test/fixtures/styles/bootstrap.beffebca.css\n/test/fixtures/styles/main.d41d8cd9.css\n"
  },
  {
    "path": ".npmrc",
    "content": "lockfile-version=2\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# v2.0.0 / 2020-06-16\n\n- Drop support for Node.js < 10\n- Bump dependencies\n- Use Jest for testing\n- Drop `include` and `timeout` options as they can be specified in the `penthouse` options.\n- Drop options `styleTarget` & `dest` in favour of `target`\n  You can specify either a **css** file, an **html** file or an object `{css: dest.css, html: dest.html}` if you want to store both. We may also add an extract target here in a future release.\n- Drop options `destFolder`, `folder` and `pathPrefix`. We tried our best to improve the way critical auto-detects the paths to used assets in the critical css which should suit for most cases. If this doesn't work out you can use the new `rebase` option to either specify the location of the css & the html file like this: `{from: '/styles/main.css', to: '/en/test.html'}`. You can also pass a callback function to dynamically compute the path or specify a cdn for example. We utilize [`postcss-url`](https://github.com/postcss/postcss-url#options-list) for this task.\n- Due to some limitations with modern css features we replaced `filter-css` as the library of choice for handling ignores with [postcss-discard](https://github.com/bezoerb/postcss-discard/). We tried to keep things backwards compatible but you may have to change your `ignore` configuration.\n- Add `concurrency` option to specify how many operations can run in parallel.\n- Add the ability to specify used css files using file globs. See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).\n\n# v1.3.4 / 2018-07-19\n\n- fix: return `Promise.reject` instead of re-throw\n- fix: handle `PAGE_UNLOADED_DURING_EXECUTION` error (#314)\n- output warning on invalid extract setting\n- Add user agent option (#316)\n- Bump dependencies\n- npm audit fix\n\n# v1.3.3 / 2018-06-06\n\n- Bump dependencies\n- Docs: fix typo (#310)\n- Reduced vulnerabilities (#308)\n\n# v1.3.2 / 2018-05-15\n\n- Switched to async-exit-hook\n\n# v1.3.1 / 2018-05-14\n\n- Bump dependencies\n- Removed `process.exit` on cleanup\n- Adding html-webpack-critical-plugin to README (#306)\n\n# v1.3.0 / 2018-05-02\n\n- Add basic auth option (#295)\n\n# v1.2.2 / 2018-04-02\n\n- Improved handling of protocol-relative asset URLs (#288)\n- Adjust test files according to (#293)\n- Improve error reporting (#258)\n- Replace gutil with fancy-log (#297)\n- Update README.md (#296)\n\n# v1.2.1 / 2018-03-26\n\n- Add license file\n\n# v1.2.0 / 2018-03-19\n\n- Allow external stylesheets to be passed as css option (#290)\n- Add Tests for #277\n\n# v1.1.1 / 2018-03-15\n\n- Bump dependencies\n\n# v1.1.0 / 2017-12-02\n\n- 1.1.0\n- Remove temporary files\n- Bump inline-critical\n- Fix corrupted `File.contents` (#191, #218)\n\n# v1.0.0 / 2017-11-06\n\n- Bump dependencies\n- Removed deprecated methods\n- Don't enforce strict SSL for external assets (#171)\n- Allow http 2xx response codes (#244)\n- Replace `|` with its HTML character entity reference (#248)\n- Headless chrome (#246)\n- Add `folder` option to readme (#245)\n\n# v0.9.1 / 2017-09-04\n\n- AppVeyor tweaks\n- Use yarn with AppVeyor\n- Added package missing in AppVeyor\n- Remove AppVeyor cache\n- Try to reinstall \"css\" dependencies\n- Upgrade Penthouse\n- Update readme according to #220\n\n# v0.9.0 / 2017-07-19\n\n- Bump dependencies\n- Library options (#178)\n- Ignore print styles (#113) (#221)\n- Prefer `let` & `const` + arrow functions\n- Run tests on Node.js 8\n- Support for passing CSS files as Vinyl objects. (#204)\n\n# v0.8.4 / 2017-03-01\n\n- Better remote handling (#198)\n- Bump inline-critical\n\n# v0.8.3 / 2017-02-17\n\n- Fixed multi-dimension critical-path CSS\n\n# v0.8.2 / 2017-02-11\n\n- Bump dependencies\n- Update README.md\n\n# v0.8.1 / 2016-11-24\n\n- Added missing comma\n- Add tmpfile to garbage collector\n- Bump dependencies\n- Vinyl (#120)\n\n# v0.8.0 / 2016-08-30\n\n- Revise production-use messaging.\n- Consistent CSS capitalization in README.\n- Remove object.assign; require Node.js 4.\n- Fix all tests to run on Windows.\n- Enforce LF.\n- Fix xo errors.\n- Update dependencies.\n- Fix test failures. (#155)\n- Travis: add explicitly Node.js 4 and 6. (#154)\n- Update .gitignore.\n- package.json: remove duplicate dep. (#153)\n- Remove JSHint leftovers. (#152)\n- Update README.md (#151)\n- Update appveyor.yml (#150)\n- added penthouse timeout option (#140)\n- CSS Rel Preload support (#129)\n\n# v0.7.3 / 2016-05-30\n\n- Bump package.json version\n- Add test for 404 case\n- Remove trailing whitespace\n- Fix silly typo\n- Ignore 404 requests, reject promise with `Error` not `String`\n- Fixed #130\n- Better error message for unresolved css files\n- cli: exit after `stdout.write`\n- Remove `uncaughtException` listener; log error instead\n- Fixed import-order\n- Bump dependencies\n- Added changelog (#123)\n\n# v0.7.2 / 2016-03-17\n\n- Add include option (#125)\n\n# v0.7.1 / 2016-02-26\n\n- Dropped JSHint and added xo\n- Adjust tests for penthouse 0.8.4\n- Bump dependencies\n- Remove listeners on exit\n- Update Readme\n\n# v0.7.0 / 2015-12-22\n\n- bump penthouse\n- Test #79\n- some debug logs\n- trigger cleanup\n- added missing deps\n- Switch to http server for local files (#94)\n- ignore generated css\n- tests adjusted for penthouse 0.7.1\n- minor tweaks\n- Fix AppVeyor tests\n- local url for phantomjs (#94)\n- penthouse bump\n- Bump dependencies\n- Bump inline-critical\n- Update README.md\n- use default base\n- add a test for query string in file name\n- fix local files query string `ENOENT` exception\n- fixed tests for bumped deps\n- Bump dependencies\n- AppVeyor file tweaks\n- Actually Emit Critical Error in Stream\n- cleanup\n- Switched to postcss-image-inliner\n- bump inline-critical\n- AppVeyor tweaks\n- cleanup\n- added gc to address #82\n- Added CLI remote test\n- some cleanup\n- fixed phantom on missing file extension\n- use loadCSS 0.1.8\n- allow remote resources\n- Bump dependencies\n\n# v0.6.0 / 2015-07-07\n\n- added testcase for #88\n- testcase for bc53420 issue\n- Fixed issue from bc53420\n- Update README.md\n- backwards compatibility\n- drop Node.js 0.10\n- simplify CLI help creation\n- minor style tweaks\n- Merged master\n- Fixed tests & locked clean-css version\n- Bump filter-css\n- Fixed CLI tests\n- minor package.json tweaks\n- Bump devDependencies\n- Correct expectation for adaptive\n- Updated tests for new clean-css 3.2.7\n- some cleanup\n- Bump dependencies\n- Update README.md\n- Don't encode entities\n- Removed parallel testcase\n- Add 'ignore' option\n- Deprecated some things\n- deprecated htmltarget & styletarget for CLI and introduced --inline\n- Added pathPrefix support for CLI\n- normalize newlines\n- added test for pathPrefix option\n- allows pathPrefix to be set through options. Updates README\n- Added stream wrapper\n\n# v0.5.7 / 2015-04-12\n\n- AppVeyor tweaks\n- Automated Windows tests using AppVeyor\n- Fixed tests on Windows\n- Added some badges\n- Bump dependencies\n- cleancss syntax change\n- modified tests to use new cleancss output\n\n# v0.5.6 / 2015-03-16\n\n- catch cancellation\n- Fix callbacks on error\n\n# v0.5.5 / 2015-03-03\n\n- Fixed CLI error codes\n- renaming\n- Added jshint\n- Added tests for #63 & #64\n- Bump dependencies\n- up dimensions used in tests, update expected result files\n- fix typo\n- up dimensions used for generate in index.js\n- up dimensions used in README examples\n- Fix multi test\n- bump dependency\n- fix #67\n- Add support for multi-dimension critical css.\n- improve file structure\n- readme tweaks\n- fix .gitignore\n- codestyle\n- Bump dependencies\n- updated tests for penthouse 0.3.0\n\n# v0.5.4 / 2015-02-09\n\n- Update .travis.yml\n- Use `os.tmpdir()` folder for temporary css\n- add `preferGlobal` prop to package.json\n\n# v0.5.3 / 2015-01-18\n\n- Bump dependencies\n\n# v0.5.2 / 2015-01-12\n\n- #56 Locked penthouse version\n\n# v0.5.1 / 2014-12-28\n\n- Fixed tests\n- inline-critical version bump\n- Fixed CLI Tests for Windows\n- Added tests and additional CLI fixes for #52\n- Fix for #52\n\n# v0.5.0 / 2014-11-28\n\n- inline critical version bump\n- Increased mocha timeout\n- Fixed newline character in css to address #14\n- Updated version of inline-critical to address #14\n- Added bin/critical to files #49\n- added CLI / changed structure\n- Update README.md\n- Remove inlined CSS rules from source stylesheets #39\n- Fixed backslash in rebased paths on Windows\n- fixed fa77c44\n- Return critical css even if unlinking of the temporary file fails\n- Ignores external stylesheets\n\n# v0.4.0 / 2014-10-04\n\n- Add build tasks\n- Update UUID dep\n- Changed inlineImages default to false\n- Fixed tests for #35\n\n# v0.3.1 / 2014-09-16\n\n- Fixed parallel calls mentioned in #34\n\n# v0.3.0 / 2014-09-09\n\n- Update fixtures to account for dep. bump\n- Bump dependencies\n\n# v0.2.0 / 2014-08-30\n\n- fixed implementation in #30\n- Skipped max size for inlined images\n- Added image inlining to generate\n- removed dynamic test file\n- Adds a maxImageFileSize for inlined images and rebases relative css resource paths\n\n# v0.1.6 / 2014-07-30\n\n- Update to Penthouse 0.2.5 to addr raised issues\n- change penthouse test to critical css test\n- some code formatting\n- Fixed tests\n- fixed fixtures\n- changed test size to only include header nav\n- prevent catching callback test errors\n- Format code\n- Make CSS files/path configurable\n- CSS Images fix\n- Add more demo projects.\n- Add demo projects.\n- Move viewport settings up.\n- Improve formatting of first example.\n\n# v0.1.5 / 2014-07-16\n\n- Improve the Critical / Penthouse section\n- Readme corrections\n- Add contributing guide\n- Readme revisions\n- Add mention of criticalCSS module.\n- More edits\n- Infra revisions\n- Add note about unit tests.\n- Add better comments to inline-styles.\n- Tweaks to readme.\n- Minor revisions.\n\n# v0.1.4 / 2014-07-11\n\n- Add note about sample project\n- Strap update\n- improve tests\n- Tweak to readme.\n- Update README.md\n- fix all the things\n- Attempt to fix builds\n- README.md: break long lines.\n- Lint fixes.\n- Whitespace normalization\n- package.json: Add missing properties.\n\n# v0.1.3 / 2014-07-04\n\n- Add support for generateInline\n\n# v0.1.2 / 2014-07-04\n\n- Address path issues post-integration testing\n\n# v0.1.1 / 2014-07-04\n\n- Add missing file to package\n- Update to latest Oust, API\n- Add syntax highlighting to code blocks\n\n# v0.1.0 / 2014-06-30\n\n- Consistency of example order\n- Add minification for inline styles\n- Fix some style, cb issues\n- Revisions for minification\n- Add support for minification\n- Add options to readme\n- Fixes #9 - adds defaults for w/h\n- Add note about FAQs, license\n- Expand on joined paths\n- Move reads\n- Improve test descriptions\n- Improve callbacks, add more tests\n- Fixes #2, passes errors\n- Path joins for #6, test > fixture for #10, other fixes\n- Fixes #4 - drop log statements\n- Fixes #5 - switch to readFile/writeFile only\n- Fixes #7 - throw if src/base not specified\n- Should fix #1 - only write to disk if dest specified\n- Switch to integers\n- Readme revisions\n\n# v0.0.1 / 2014-06-28\n\n- API revisions, readme updates, cleanup\n- Various fixes\n- Add implementation.\n- Add tests.\n- Add testing rig.\n- Add README.\n- Initial package.\n- Initial commit\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "Critical is an open source project. It is licensed using the\n[Apache Software License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html).\nWe really appreciate pull requests and bug reports, here are our guidelines:\n\n1. If filing a bug report, please verify the issue is with Critical first. A good sanity check is:\ndoes the issue have to do with styles not being correctly captured? If so, test with [Penthouse](https://github.com/pocketjoso/penthouse).\nIf it works with Penthouse then it's a Critical bug and we encourage you to open up a [new ticket](https://github.com/addyosmani/critical/issues/new) with details.\nDoes the bug have to do with inlining styles, general module failures or installation issues? Those are also\npossibly Critical bugs and we will strive to take a look at them.\n1. Working on a patch? File a bug at https://github.com/addyosmani/critical/issues (if there\nisn’t one already). If your patch is going to be large it might be a good idea\nto get the discussion started early. We are happy to discuss it in a new issue beforehand.\n1. Make sure that patches provide justification for why they should be merged.\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM node:20-slim\n\nARG CRITICAL_VERSION=5.0.4\n\nARG PACKAGES=\"\\\n  libx11-6\\\n  libx11-xcb1\\\n  libxcomposite1\\\n  libxcursor1\\\n  libxdamage1\\\n  libxext6\\\n  libxi6\\\n  libxtst6\\\n  libglib2.0-0\\\n  libnss3\\\n  libcups2\\\n  libxss1\\\n  libexpat1\\\n  libxrandr2\\\n  libasound2\\\n  libatk1.0-0\\\n  libatk-bridge2.0-0\\\n  libpangocairo-1.0-0\\\n  libgtk-3-0\\\n  \"\nRUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache\n# hadolint ignore=DL3008\nRUN --mount=type=cache,id=build-apt-cache,sharing=locked,target=/var/cache/apt \\\n    --mount=type=cache,id=build-apt-lib,sharing=locked,target=/var/lib/apt \\\n    apt-get update -qq \\\n    && apt-get install --no-install-recommends -y ${PACKAGES} \\\n    && rm -rf /var/lib/apt/lists /var/cache/apt/archives\n\nRUN --mount=type=cache,id=build-npm-cache,sharing=locked,target=/root/.npm \\\n  npm install -g critical@${CRITICAL_VERSION}\n\nWORKDIR /site\n\nCMD [\"critical\", \"--help\"]\n"
  },
  {
    "path": "README.md",
    "content": "[![NPM version][npm-image]][npm-url] [![Build Status][ci-image]][ci-url] [![Coverage][coveralls-image]][coveralls-url]\n\n# critical\n\nCritical extracts & inlines critical-path (above-the-fold) CSS from HTML\n\n<img src=\"https://raw.githubusercontent.com/addyosmani/critical/master/preview.png\" alt=\"Preview\" width=\"378\">\n\n## Install\n\n```sh\nnpm i -D critical\n```\n\n## Build plugins\n\n- [grunt-critical](https://github.com/bezoerb/grunt-critical)\n- Gulp users should use Critical directly\n- For Webpack use [html-critical-webpack-plugin](https://github.com/anthonygore/html-critical-webpack-plugin)\n\n## Demo projects\n\n- [Optimize a basic page with Gulp](https://github.com/addyosmani/critical-path-css-demo) with a [tutorial](https://github.com/addyosmani/critical-path-css-demo#tutorial)\n- [Optimize an Angular boilerplate with Gulp](https://github.com/addyosmani/critical-path-angular-demo)\n- [Optimize a Weather app with Gulp](https://github.com/addyosmani/critical-css-weather-app)\n\n## Usage\n\nInclude:\n\n```js\nimport {generate} from 'critical';\n```\n\nFull blown example with available options:\n\n```js\ngenerate({\n  // Inline the generated critical-path CSS\n  // - true generates HTML\n  // - false generates CSS\n  inline: true,\n\n  // Your base directory\n  base: 'dist/',\n\n  // HTML source\n  html: '<html>...</html>',\n\n  // HTML source file\n  src: 'index.html',\n\n  // Your CSS Files (optional)\n  css: ['dist/styles/main.css'],\n\n  // Viewport width\n  width: 1300,\n\n  // Viewport height\n  height: 900,\n\n  // Output results to file\n  target: {\n    css: 'critical.css',\n    html: 'index-critical.html',\n    uncritical: 'uncritical.css',\n  },\n\n  // Extract inlined styles from referenced stylesheets\n  extract: true,\n\n  // ignore CSS rules\n  ignore: {\n    atrule: ['@font-face'],\n    rule: [/some-regexp/],\n    decl: (node, value) => /big-image\\.png/.test(value),\n  },\n});\n```\n\n### Generate and inline critical-path CSS\n\nBasic usage:\n\n```js\ngenerate({\n  inline: true,\n  base: 'test/',\n  src: 'index.html',\n  target: 'index-critical.html',\n  width: 1300,\n  height: 900,\n});\n```\n\n### Generate critical-path CSS\n\nBasic usage:\n\n```js\ngenerate({\n  base: 'test/',\n  src: 'index.html',\n  target: 'styles/main.css',\n  width: 1300,\n  height: 900,\n});\n```\n\nGenerate and minify critical-path CSS:\n\n```js\ngenerate({\n  base: 'test/',\n  src: 'index.html',\n  target: 'styles/styles.min.css',\n  width: 1300,\n  height: 900,\n});\n```\n\nGenerate, minify and inline critical-path CSS:\n\n```js\ngenerate({\n  inline: true,\n  base: 'test/',\n  src: 'index.html',\n  target: {\n    html: 'index-critical.html',\n    css: 'critical.css',\n  },\n  width: 1300,\n  height: 900,\n});\n```\n\nGenerate and return output via callback:\n\n```js\ngenerate({\n    base: 'test/',\n    src: 'index.html',\n    width: 1300,\n    height: 900,\n    inline: true\n}, (err, {css, html, uncritical}) => {\n    // You now have critical-path CSS as well as the modified HTML.\n    // Works with and without target specified.\n    ...\n});\n```\n\nGenerate and return output via promise:\n\n```js\ngenerate({\n    base: 'test/',\n    src: 'index.html',\n    width: 1300,\n    height: 900\n}).then(({ css, html, uncritical }) => {\n    // You now have critical-path CSS as well as the modified HTML.\n    // Works with and without target specified.\n}).catch(err => {\n    // …\n});\n```\n\nGenerate and return output via async function:\n\n```js\nconst {css, html, uncritical} = await generate({\n  base: 'test/',\n  src: 'index.html',\n  width: 1300,\n  height: 900,\n});\n```\n\n### Generate critical-path CSS with multiple resolutions\n\nWhen your site is adaptive and you want to deliver critical CSS for multiple screen resolutions this is a useful option.\n_note:_ (your final output will be minified as to eliminate duplicate rule inclusion)\n\n```js\ngenerate({\n  base: 'test/',\n  src: 'index.html',\n  target: {\n    css: 'styles/main.css',\n  },\n  dimensions: [\n    {\n      height: 200,\n      width: 500,\n    },\n    {\n      height: 900,\n      width: 1200,\n    },\n  ],\n});\n```\n\n### Generate critical-path CSS and ignore specific selectors\n\nThis is a useful option when you e.g. want to defer loading of webfonts or background images.\n\n```js\ngenerate({\n  base: 'test/',\n  src: 'index.html',\n  target: {\n    css: 'styles/main.css',\n  },\n  ignore: {\n    atrule: ['@font-face'],\n    decl: (node, value) => /url\\(/.test(value),\n  },\n});\n```\n\n### Generate critical-path CSS and specify asset rebase behaviour\n\n```js\ngenerate({\n  base: 'test/',\n  src: 'index.html',\n  target: {\n    css: 'styles/main.css',\n  },\n  rebase: {\n    from: '/styles/main.css',\n    to: '/folder/subfolder/index.html',\n  },\n});\n```\n\n```js\ngenerate({\n  base: 'test/',\n  src: 'index.html',\n  target: {\n    css: 'styles/main.css',\n  },\n  rebase: (asset) => `https://my-cdn.com${asset.absolutePath}`,\n});\n```\n\n### Options\n\n| Name                | Type                   | Default                                                                                                                                                                                | Description                                                                                                                                                                                                                                                                                                                                                                     |\n| ------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| inline              | `boolean`\\|`object`    | `false`                                                                                                                                                                                | Inline critical-path CSS using filamentgroup's loadCSS. Pass an object to configure [`inline-critical`](https://github.com/bezoerb/inline-critical#inlinehtml-styles-options)                                                                                                                                                                                                   |\n| base                | `string`               | `path.dirname(src)` or `process.cwd()`                                                                                                                                                 | Base directory in which the source and destination are to be written                                                                                                                                                                                                                                                                                                            |\n| html                | `string`               |                                                                                                                                                                                        | HTML source to be operated against. This option takes precedence over the `src` option.                                                                                                                                                                                                                                                                                         |\n| css                 | `array`                | `[]`                                                                                                                                                                                   | An array of paths to css files, file globs, [Vinyl](https://www.npmjs.com/package/vinyl) file objects or source CSS strings.                                                                                                                                                                                                                                                                        |\n| src                 | `string`               |                                                                                                                                                                                        | Location of the HTML source to be operated against                                                                                                                                                                                                                                                                                                                              |\n| target              | `string` or `object`   |                                                                                                                                                                                        | Location of where to save the output of an operation. Use an object with 'html' and 'css' props if you want to store both                                                                                                                                                                                                                                                       |\n| width               | `integer`              | `1300`                                                                                                                                                                                 | Width of the target viewport                                                                                                                                                                                                                                                                                                                                                    |\n| height              | `integer`              | `900`                                                                                                                                                                                  | Height of the target viewport                                                                                                                                                                                                                                                                                                                                                   |\n| dimensions          | `array`                | `[]`                                                                                                                                                                                   | An array of objects containing height and width. Takes precedence over `width` and `height` if set                                                                                                                                                                                                                                                                              |\n| extract             | `boolean`              | `false`                                                                                                                                                                                | Remove the inlined styles from any stylesheets referenced in the HTML. It generates new references based on extracted content so it's safe to use for multiple HTML files referencing the same stylesheet. Use with caution. Removing the critical CSS per page results in a unique async loaded CSS file for every page. Meaning you can't rely on cache across multiple pages |\n| inlineImages        | `boolean`              | `false`                                                                                                                                                                                | Inline images                                                                                                                                                                                                                                                                                                                                                                   |\n| assetPaths          | `array`                | `[]`                                                                                                                                                                                   | List of directories/urls where the inliner should start looking for assets                                                                                                                                                                                                                                                                                                      |\n| maxImageFileSize    | `integer`              | `10240`                                                                                                                                                                                | Sets a max file size (in bytes) for base64 inlined images                                                                                                                                                                                                                                                                                                                       |\n| rebase              | `object` or `function` | `undefined`                                                                                                                                                                            | Critical tries it's best to rebase the asset paths relative to the document. If this doesn't work as expected you can always use this option to control the rebase paths. See [`postcss-url`](https://github.com/postcss/postcss-url) for details. (https://github.com/pocketjoso/penthouse#usage-1).                                                                           |\n| ignore              | `array` or `object`    | `undefined`                                                                                                                                                                            | Ignore CSS rules. See [`postcss-discard`](https://github.com/bezoerb/postcss-discard) for usage examples. If you pass an array all rules will be applied to atrules, rules and declarations;                                                                                                                                                                                    |\n| ignoreInlinedStyles | `boolean`              | `false`                                                                                                                                                                                | Ignore inlined stylesheets                                                                                                                                                                                                                                                                                                                                                      |\n| userAgent           | `string`               | `''`                                                                                                                                                                                   | User agent to use when fetching a remote src                                                                                                                                                                                                                                                                                                                                    |\n| penthouse           | `object`               | `{}`                                                                                                                                                                                   | Configuration options for [`penthouse`](https://github.com/pocketjoso/penthouse).                                                                                                                                                                                                                                                                                               |\n| request             | `object`               | `{}`                                                                                                                                                                                   | Configuration options for [`got`](https://github.com/sindresorhus/got).                                                                                                                                                                                                                                                                                                         |\n| cleanCSS            | `object`               | `{level: {  1: { all: true }, 2: { all: false, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, removeDuplicateRules: true, removeEmpty: true, mergeMedia: true } }}` | Configuration options for [`CleanCSS`](https://github.com/clean-css/clean-css) which let's you configure the optimization level for the generated critical css                                                                                                                                                                                                                  |\n| user                | `string`               | `undefined`                                                                                                                                                                            | RFC2617 basic authorization: user                                                                                                                                                                                                                                                                                                                                               |\n| pass                | `string`               | `undefined`                                                                                                                                                                            | RFC2617 basic authorization: pass                                                                                                                                                                                                                                                                                                                                               |\n| strict              | `boolean`              | `false`                                                                                                                                                                                | Throw an error on css parsing errors or if no css is found.                                                                                                                                                                                                                                                                                                                     |\n\n## CLI\n\n```sh\nnpm install -g critical\n```\n\ncritical works well with standard input.\n\n```sh\ncat test/fixture/index.html | critical --base test/fixture --inline > index.critical.html\n```\n\nOr on Windows:\n\n```bat\ntype test\\fixture\\index.html | critical --base test/fixture --inline > index.critical.html\n```\n\nYou can also pass in the critical CSS file as an option.\n\n```sh\ncritical test/fixture/index.html --base test/fixture > critical.css\n```\n\n## Gulp\n\n```js\nimport gulp from 'gulp';\nimport log from 'fancy-log';\nimport {stream as critical} from 'critical';\n\n// Generate & Inline Critical-path CSS\ngulp.task('critical', () => {\n  return gulp\n    .src('dist/*.html')\n    .pipe(\n      critical({\n        base: 'dist/',\n        inline: true,\n        css: ['dist/styles/components.css', 'dist/styles/main.css'],\n      })\n    )\n    .on('error', (err) => {\n      log.error(err.message);\n    })\n    .pipe(gulp.dest('dist'));\n});\n```\n\n## Why?\n\n### Why is critical-path CSS important?\n\n> CSS is required to construct the render tree for your pages and JavaScript\n> will often block on CSS during initial construction of the page.\n> You should ensure that any non-essential CSS is marked as non-critical\n> (e.g. print and other media queries), and that the amount of critical CSS\n> and the time to deliver it is as small as possible.\n\n### Why should critical-path CSS be inlined?\n\n> For best performance, you may want to consider inlining the critical CSS\n> directly into the HTML document. This eliminates additional roundtrips\n> in the critical path and if done correctly can be used to deliver a\n> “one roundtrip” critical path length where only the HTML is a blocking resource.\n\n## FAQ\n\n### Are there any sample projects available using Critical?\n\nWhy, yes!. Take a look at [this](https://github.com/addyosmani/critical-path-css-demo) Gulp project\nwhich demonstrates using Critical to generate and inline critical-path CSS. It also includes a mini-tutorial\nthat walks through how to use it in a simple webapp.\n\n### When should I just use Penthouse directly?\n\nThe main differences between Critical and [Penthouse](https://github.com/pocketjoso/penthouse), a module we\nuse, are:\n\n- Critical will automatically extract stylesheets from your HTML from which to generate critical-path CSS from,\n  whilst other modules generally require you to specify this upfront.\n- Critical provides methods for inlining critical-path CSS (a common logical next-step once your CSS is generated)\n- Since we tackle both generation and inlining, we're able to abstract away some of the ugly boilerplate otherwise\n  involved in tackling these problems separately.\n\nThat said, if your site or app has a large number of styles or styles which are being dynamically injected into\nthe DOM (sometimes common in Angular apps) I recommend using Penthouse directly. It will require you to supply\nstyles upfront, but this may provide a higher level of accuracy if you find Critical isn't serving your needs.\n\n### What other alternatives to Critical are available?\n\nFilamentGroup maintain a [criticalCSS](https://github.com/filamentgroup/criticalCSS) node module, which\nsimilar to [Penthouse](https://github.com/pocketjoso/penthouse) will find and output the critical-path CSS for\nyour pages. The PageSpeed Optimization modules for nginx, apache, IIS, ATS, and Open Lightspeed can do all the heavy\nlifting automatically when you enable the [prioritize_critical_css](https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery) filter\n\n### Is Critical stable and suitable for production use?\n\nCritical has been used on a number of production sites that have found it stable for everyday use.\nThat said, we welcome you to try it out on your project and report bugs if you find them.\n\n## Can I contribute?\n\nOf course. We appreciate all of our [contributors](https://github.com/addyosmani/critical/graphs/contributors) and\nwelcome contributions to improve the project further. If you're uncertain whether an addition should be made, feel\nfree to open up an issue and we can discuss it.\n\n## Maintainers\n\nThis module is brought to you and maintained by the following people:\n\n- Addy Osmani - Creator ([Github](https://github.com/addyosmani) / [Twitter](https://twitter.com/addyosmani))\n- Ben Zörb - Primary maintainer ([Github](https://github.com/bezoerb) / [Twitter](https://twitter.com/bezoerb))\n\n## License\n\n[Apache-2.0 © Addy Osmani, Ben Zörb](license)\n\n[npm-url]: https://www.npmjs.com/package/critical\n[npm-image]: https://img.shields.io/npm/v/critical.svg\n[ci-url]: https://github.com/addyosmani/critical/actions?workflow=Tests\n[ci-image]: https://github.com/addyosmani/critical/workflows/Tests/badge.svg\n[coveralls-url]: https://coveralls.io/github/addyosmani/critical?branch=master\n[coveralls-image]: https://img.shields.io/coveralls/github/addyosmani/critical/master.svg\n"
  },
  {
    "path": "cli.js",
    "content": "#!/usr/bin/env node\nimport os from 'node:os';\nimport process from 'node:process';\nimport stdin from 'get-stdin';\nimport groupArgs from 'group-args';\nimport indentString from 'indent-string';\nimport {escapeRegExp, isObject, isString, reduce} from 'lodash-es';\nimport meow from 'meow';\nimport pico from 'picocolors';\nimport {validate} from './src/config.js';\nimport {generate} from './index.js';\n\nconst help = `\nUsage: critical <input> [<option>]\n\nOptions:\n  -b, --base              Your base directory\n  -c, --css               Your CSS Files (optional)\n  -w, --width             Viewport width\n  -h, --height            Viewport height\n  -i, --inline            Generate the HTML with inlined critical-path CSS\n  -e, --extract           Extract inlined styles from referenced stylesheets\n\n  --inlineImages          Inline images\n  --dimensions            Pass dimensions e.g. 1300x900\n  --ignore                RegExp, @type or selector to ignore\n  --ignore-[OPTION]       Pass options to postcss-discard. See https://goo.gl/HGo5YV\n  --ignoreInlinedStyles   Ignore inlined stylesheets\n  --include               RegExp, @type or selector to include\n  --include-[OPTION]      Pass options to inline-critical. See https://goo.gl/w6SHJM\n  --assetPaths            Directories/Urls where the inliner should start looking for assets\n  --user                  RFC2617 basic authorization user\n  --pass                  RFC2617 basic authorization password\n  --penthouse-[OPTION]    Pass options to penthouse. See https://goo.gl/PQ5HLL\n  --ua, --userAgent       User agent to use when fetching remote src\n  --strict                Throw an error on css parsing errors or if no css is found\n`;\n\nconst meowOpts = {\n  importMeta: import.meta,\n  flags: {\n    base: {\n      type: 'string',\n      shortFlag: 'b',\n    },\n    css: {\n      type: 'string',\n      shortFlag: 'c',\n      isMultiple: true,\n    },\n    width: {\n      shortFlag: 'w',\n    },\n    height: {\n      shortFlag: 'h',\n    },\n    inline: {\n      type: 'boolean',\n      shortFlag: 'i',\n    },\n    extract: {\n      type: 'boolean',\n      shortFlag: 'e',\n      default: false,\n    },\n    inlineImages: {\n      type: 'boolean',\n    },\n    ignoreInlinedStyles: {\n      type: 'boolean',\n      default: false,\n    },\n    ignore: {\n      type: 'string',\n    },\n    user: {\n      type: 'string',\n    },\n    strict: {\n      type: 'boolean',\n      default: false,\n    },\n    pass: {\n      type: 'string',\n    },\n    userAgent: {\n      type: 'string',\n      shortFlag: 'ua',\n    },\n    dimensions: {\n      type: 'string',\n      isMultiple: true,\n    },\n  },\n};\n\nconst cli = meow(help, meowOpts);\n\nconst groupKeys = ['ignore', 'inline', 'penthouse', 'target', 'request'];\n// Group args for inline-critical and penthouse\nconst grouped = {\n  ...cli.flags,\n  ...groupArgs(\n    groupKeys,\n    {\n      delimiter: '-',\n    },\n    meowOpts\n  ),\n};\n\n/**\n * Check if key is an alias\n * @param {string} key Key to check\n * @returns {boolean} True for alias\n */\nconst isAlias = (key) => {\n  if (isString(key) && key.length > 1) {\n    return false;\n  }\n\n  const aliases = Object.keys(meowOpts.flags)\n    .filter((k) => meowOpts.flags[k].shortFlag)\n    .map((k) => meowOpts.flags[k].shortFlag);\n\n  return aliases.includes(key);\n};\n\n/**\n * Check if value is an empty object\n * @param {mixed} val Value to check\n * @returns {boolean} Whether or not this is an empty object\n */\nconst isEmptyObj = (val) => isObject(val) && Object.keys(val).length === 0;\n\n/**\n * Check if value is transformed to {default: val}\n * @param {mixed} val Value to check\n * @returns {boolean} True if it's been converted to {default: value}\n */\nconst isGroupArgsDefault = (val) => isObject(val) && Object.keys(val).length === 1 && val.default;\n\n/**\n * Return regex if value is a string like this: '/.../g'\n * @param {mixed} val Value to process\n * @returns {mixed} Mapped values\n */\nconst mapRegExpStr = (val) => {\n  if (isString(val)) {\n    const {groups} = val.match(/^\\/(?<regex>[^/]+)(?:\\/?(?<flags>[igmy]+))?\\/$/) || {};\n    const {regex, flags} = groups || {};\n\n    return (groups && new RegExp(escapeRegExp(regex), flags)) || val;\n  }\n\n  if (Array.isArray(val)) {\n    return val.map((v) => mapRegExpStr(v));\n  }\n\n  return val;\n};\n\nconst normalizedFlags = reduce(\n  grouped,\n  (res, val, key) => {\n    // Cleanup groupArgs mess ;)\n    if (groupKeys.includes(key)) {\n      // An empty object means param without value, just true\n      if (isEmptyObj(val)) {\n        val = true;\n      } else if (isGroupArgsDefault(val)) {\n        val = val.default;\n      }\n    }\n\n    // Cleanup camelized group keys\n    if (groupKeys.some((k) => key.includes(k)) && !validate(key, val)) {\n      return res;\n    }\n\n    if (!isAlias(key)) {\n      res[key] = mapRegExpStr(val);\n    }\n\n    return res;\n  },\n  {}\n);\n\nfunction showError(err) {\n  process.stderr.write(indentString(pico.red('Error: ') + err.message || err, 3));\n  process.stderr.write(os.EOL);\n  process.stderr.write(indentString(help, 3));\n  process.exit(1);\n}\n\nfunction run(data) {\n  const {_: inputs = [], css, ...opts} = {...normalizedFlags};\n\n  // Detect css globbing\n  const cssBegin = process.argv.findIndex((el) => ['--css', '-c'].includes(el));\n  const cssEnd = process.argv.findIndex((el, index) => index > cssBegin && el.startsWith('-'));\n  const cssCheck = cssBegin >= 0 ? process.argv.slice(cssBegin, cssEnd > 0 ? cssEnd : undefined) : [];\n  const additionalCss = inputs.filter((file) => cssCheck.includes(file));\n  // Just take the first html input as we don't support multiple html sources for\n  const [input] = inputs.filter((file) => !additionalCss.includes(file)); // eslint-disable-line unicorn/prefer-array-find\n\n  if (Array.isArray(opts.dimensions)) {\n    opts.dimensions = opts.dimensions.reduce(\n      (result, data) => [\n        ...result,\n        ...data.split(',').map((dimension) => {\n          const [width, height] = dimension.split('x');\n          return {width: Number.parseInt(width, 10), height: Number.parseInt(height, 10)};\n        }),\n      ],\n      []\n    );\n  }\n\n  if (Array.isArray(css)) {\n    opts.css = [...css, ...additionalCss].filter(Boolean);\n  } else if (css || additionalCss.length > 0) {\n    opts.css = [css, ...additionalCss].filter(Boolean);\n  }\n\n  if (data) {\n    opts.html = data;\n  } else {\n    opts.src = input;\n  }\n\n  try {\n    generate(opts, (error, val) => {\n      if (error) {\n        showError(error);\n      } else if (opts.inline) {\n        process.stdout.write(val.html, process.exit);\n      } else if (opts.extract) {\n        process.stdout.write(val.uncritical, process.exit);\n      } else {\n        process.stdout.write(val.css, process.exit);\n      }\n    });\n  } catch (error) {\n    showError(error);\n  }\n}\n\nif (cli.input[0]) {\n  run();\n} else {\n  const data = await stdin();\n  run(data);\n}\n"
  },
  {
    "path": "index.js",
    "content": "import path from 'node:path';\nimport {Buffer} from 'node:buffer';\nimport process from 'node:process';\nimport through2 from 'through2';\nimport PluginError from 'plugin-error';\nimport replaceExtension from 'replace-ext';\nimport {create} from './src/core.js';\nimport {outputFileAsync} from './src/file.js';\nimport {getOptions} from './src/config.js';\n\n/**\n * Critical path CSS generation\n * @param  {object} params Options\n * @param  {function} cb Callback\n * @return {Promise<object>} Result object with html, css & optional extracted original css\n */\nexport async function generate(params, cb) {\n  try {\n    const options = await getOptions(params);\n    const {target = {}, base = process.cwd()} = options;\n    const result = await create(options);\n    // Store generated css\n    if (target.css) {\n      await outputFileAsync(path.resolve(base, target.css), result.css);\n    }\n\n    // Store generated html\n    if (target.html) {\n      await outputFileAsync(path.resolve(base, target.html), result.html);\n    }\n\n    // Store extracted css\n    if (target.uncritical) {\n      await outputFileAsync(path.resolve(base, target.uncritical), result.uncritical);\n    }\n\n    if (typeof cb === 'function') {\n      cb(null, result);\n      return;\n    }\n\n    return result;\n  } catch (error) {\n    if (typeof cb === 'function') {\n      cb(error);\n      return;\n    }\n\n    throw error;\n  }\n}\n\n/**\n * Streams wrapper for critical\n *\n * @param {object} params Critical options\n * @returns {stream} Gulp stream\n */\nexport function stream(params) {\n  // Return stream\n  return through2.obj(function (file, enc, cb) {\n    if (file.isNull()) {\n      return cb(null, file);\n    }\n\n    if (file.isStream()) {\n      return this.emit('error', new PluginError('critical', 'Streaming not supported'));\n    }\n\n    Promise.resolve()\n      .then(() => generate({...params, src: file}))\n      .then(({css, html}) => {\n        // Rename file if not inlined\n        if (params.inline) {\n          file.contents = Buffer.from(html);\n        } else {\n          file.path = replaceExtension(file.path, '.css');\n          file.contents = Buffer.from(css);\n        }\n\n        cb(null, file);\n      })\n      .catch((error) => cb(new PluginError('critical', error.message)));\n  });\n}\n\ngenerate.stream = stream;\n"
  },
  {
    "path": "license",
    "content": "                              Apache License\n                        Version 2.0, January 2004\n                     http://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n   \"License\" shall mean the terms and conditions for use, reproduction,\n   and distribution as defined by Sections 1 through 9 of this document.\n\n   \"Licensor\" shall mean the copyright owner or entity authorized by\n   the copyright owner that is granting the License.\n\n   \"Legal Entity\" shall mean the union of the acting entity and all\n   other entities that control, are controlled by, or are under common\n   control with that entity. For the purposes of this definition,\n   \"control\" means (i) the power, direct or indirect, to cause the\n   direction or management of such entity, whether by contract or\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\n   outstanding shares, or (iii) beneficial ownership of such entity.\n\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\n   exercising permissions granted by this License.\n\n   \"Source\" form shall mean the preferred form for making modifications,\n   including but not limited to software source code, documentation\n   source, and configuration files.\n\n   \"Object\" form shall mean any form resulting from mechanical\n   transformation or translation of a Source form, including but\n   not limited to compiled object code, generated documentation,\n   and conversions to other media types.\n\n   \"Work\" shall mean the work of authorship, whether in Source or\n   Object form, made available under the License, as indicated by a\n   copyright notice that is included in or attached to the work\n   (an example is provided in the Appendix below).\n\n   \"Derivative Works\" shall mean any work, whether in Source or Object\n   form, that is based on (or derived from) the Work and for which the\n   editorial revisions, annotations, elaborations, or other modifications\n   represent, as a whole, an original work of authorship. For the purposes\n   of this License, Derivative Works shall not include works that remain\n   separable from, or merely link (or bind by name) to the interfaces of,\n   the Work and Derivative Works thereof.\n\n   \"Contribution\" shall mean any work of authorship, including\n   the original version of the Work and any modifications or additions\n   to that Work or Derivative Works thereof, that is intentionally\n   submitted to Licensor for inclusion in the Work by the copyright owner\n   or by an individual or Legal Entity authorized to submit on behalf of\n   the copyright owner. For the purposes of this definition, \"submitted\"\n   means any form of electronic, verbal, or written communication sent\n   to the Licensor or its representatives, including but not limited to\n   communication on electronic mailing lists, source code control systems,\n   and issue tracking systems that are managed by, or on behalf of, the\n   Licensor for the purpose of discussing and improving the Work, but\n   excluding communication that is conspicuously marked or otherwise\n   designated in writing by the copyright owner as \"Not a Contribution.\"\n\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\n   on behalf of whom a Contribution has been received by Licensor and\n   subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   copyright license to reproduce, prepare Derivative Works of,\n   publicly display, publicly perform, sublicense, and distribute the\n   Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   (except as stated in this section) patent license to make, have made,\n   use, offer to sell, sell, import, and otherwise transfer the Work,\n   where such license applies only to those patent claims licensable\n   by such Contributor that are necessarily infringed by their\n   Contribution(s) alone or by combination of their Contribution(s)\n   with the Work to which such Contribution(s) was submitted. If You\n   institute patent litigation against any entity (including a\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\n   or a Contribution incorporated within the Work constitutes direct\n   or contributory patent infringement, then any patent licenses\n   granted to You under this License for that Work shall terminate\n   as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n   Work or Derivative Works thereof in any medium, with or without\n   modifications, and in Source or Object form, provided that You\n   meet the following conditions:\n\n   (a) You must give any other recipients of the Work or\n       Derivative Works a copy of this License; and\n\n   (b) You must cause any modified files to carry prominent notices\n       stating that You changed the files; and\n\n   (c) You must retain, in the Source form of any Derivative Works\n       that You distribute, all copyright, patent, trademark, and\n       attribution notices from the Source form of the Work,\n       excluding those notices that do not pertain to any part of\n       the Derivative Works; and\n\n   (d) If the Work includes a \"NOTICE\" text file as part of its\n       distribution, then any Derivative Works that You distribute must\n       include a readable copy of the attribution notices contained\n       within such NOTICE file, excluding those notices that do not\n       pertain to any part of the Derivative Works, in at least one\n       of the following places: within a NOTICE text file distributed\n       as part of the Derivative Works; within the Source form or\n       documentation, if provided along with the Derivative Works; or,\n       within a display generated by the Derivative Works, if and\n       wherever such third-party notices normally appear. The contents\n       of the NOTICE file are for informational purposes only and\n       do not modify the License. You may add Your own attribution\n       notices within Derivative Works that You distribute, alongside\n       or as an addendum to the NOTICE text from the Work, provided\n       that such additional attribution notices cannot be construed\n       as modifying the License.\n\n   You may add Your own copyright statement to Your modifications and\n   may provide additional or different license terms and conditions\n   for use, reproduction, or distribution of Your modifications, or\n   for any such Derivative Works as a whole, provided Your use,\n   reproduction, and distribution of the Work otherwise complies with\n   the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n   any Contribution intentionally submitted for inclusion in the Work\n   by You to the Licensor shall be under the terms and conditions of\n   this License, without any additional terms or conditions.\n   Notwithstanding the above, nothing herein shall supersede or modify\n   the terms of any separate license agreement you may have executed\n   with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n   names, trademarks, service marks, or product names of the Licensor,\n   except as required for reasonable and customary use in describing the\n   origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n   agreed to in writing, Licensor provides the Work (and each\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n   implied, including, without limitation, any warranties or conditions\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n   PARTICULAR PURPOSE. You are solely responsible for determining the\n   appropriateness of using or redistributing the Work and assume any\n   risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n   whether in tort (including negligence), contract, or otherwise,\n   unless required by applicable law (such as deliberate and grossly\n   negligent acts) or agreed to in writing, shall any Contributor be\n   liable to You for damages, including any direct, indirect, special,\n   incidental, or consequential damages of any character arising as a\n   result of this License or out of the use or inability to use the\n   Work (including but not limited to damages for loss of goodwill,\n   work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses), even if such Contributor\n   has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n   the Work or Derivative Works thereof, You may choose to offer,\n   and charge a fee for, acceptance of support, warranty, indemnity,\n   or other liability obligations and/or rights consistent with this\n   License. However, in accepting such obligations, You may act only\n   on Your own behalf and on Your sole responsibility, not on behalf\n   of any other Contributor, and only if You agree to indemnify,\n   defend, and hold each Contributor harmless for any liability\n   incurred by, or claims asserted against, such Contributor by reason\n   of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n   To apply the Apache License to your work, attach the following\n   boilerplate notice, with the fields enclosed by brackets \"[]\"\n   replaced with your own identifying information. (Don't include\n   the brackets!)  The text should be enclosed in the appropriate\n   comment syntax for the file format. We also recommend that a\n   file or class name and description of purpose be included on the\n   same \"printed page\" as the copyright notice for easier\n   identification within third-party archives.\n\nCopyright Addy Osmani\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"critical\",\n  \"version\": \"7.2.1\",\n  \"description\": \"Extract & Inline Critical-path CSS from HTML\",\n  \"author\": \"Addy Osmani\",\n  \"license\": \"Apache-2.0\",\n  \"repository\": \"addyosmani/critical\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"jest\": \"cross-env NODE_OPTIONS=--experimental-vm-modules jest\",\n    \"xo\": \"xo\",\n    \"test\": \"npm run xo && npm run jest\"\n  },\n  \"files\": [\n    \"cli.js\",\n    \"index.js\",\n    \"src\"\n  ],\n  \"exports\": {\n    \".\": \"./index.js\",\n    \"./file.js\": \"./src/file.js\",\n    \"./errors.js\": \"./src/errors.js\"\n  },\n  \"bin\": \"cli.js\",\n  \"keywords\": [\n    \"critical\",\n    \"path\",\n    \"css\",\n    \"optimization\"\n  ],\n  \"engines\": {\n    \"node\": \">=18.18\"\n  },\n  \"dependencies\": {\n    \"@adobe/css-tools\": \"^4.4.0\",\n    \"async-traverse-tree\": \"^1.1.0\",\n    \"clean-css\": \"^5.3.3\",\n    \"common-tags\": \"^1.8.2\",\n    \"css-url-parser\": \"^1.1.4\",\n    \"data-uri-to-buffer\": \"^6.0.2\",\n    \"debug\": \"^4.3.7\",\n    \"find-up\": \"^7.0.0\",\n    \"get-stdin\": \"^9.0.0\",\n    \"globby\": \"^14.0.2\",\n    \"got\": \"^13.0.0\",\n    \"group-args\": \"^0.1.0\",\n    \"indent-string\": \"^5.0.0\",\n    \"inline-critical\": \"^12.1.0\",\n    \"is-glob\": \"^4.0.3\",\n    \"joi\": \"^17.13.3\",\n    \"lodash\": \"^4.17.21\",\n    \"lodash-es\": \"^4.17.21\",\n    \"make-dir\": \"^5.0.0\",\n    \"meow\": \"^13.2.0\",\n    \"oust\": \"^2.0.4\",\n    \"p-all\": \"^5.0.0\",\n    \"penthouse\": \"^2.3.3\",\n    \"picocolors\": \"^1.1.0\",\n    \"plugin-error\": \"^2.0.1\",\n    \"postcss\": \"^8.4.47\",\n    \"postcss-discard\": \"^2.0.0\",\n    \"postcss-image-inliner\": \"^7.0.1\",\n    \"postcss-url\": \"^10.1.3\",\n    \"replace-ext\": \"^2.0.0\",\n    \"slash\": \"^5.1.0\",\n    \"tempy\": \"^3.1.0\",\n    \"through2\": \"^4.0.2\",\n    \"vinyl\": \"^3.0.0\"\n  },\n  \"devDependencies\": {\n    \"async\": \"^3.2.6\",\n    \"cross-env\": \"^7.0.3\",\n    \"finalhandler\": \"^1.3.1\",\n    \"get-port\": \"^7.1.0\",\n    \"jest\": \"^29.7.0\",\n    \"nock\": \"^13.5.5\",\n    \"normalize-newline\": \"^4.1.0\",\n    \"serve-static\": \"^1.15.0\",\n    \"stream-array\": \"^1.1.2\",\n    \"stream-assert\": \"^2.0.3\",\n    \"vinyl-source-stream\": \"^2.0.0\",\n    \"xo\": \"^0.59.3\"\n  },\n  \"xo\": {\n    \"space\": 2,\n    \"prettier\": true,\n    \"rules\": {\n      \"capitalized-comments\": \"off\",\n      \"promise/prefer-await-to-then\": \"warn\",\n      \"unicorn/prevent-abbreviations\": \"off\",\n      \"unicorn/string-content\": \"off\",\n      \"unicorn/no-reduce\": \"off\",\n      \"unicorn/no-array-reduce\": \"off\",\n      \"unicorn/no-array-for-each\": \"off\",\n      \"unicorn/no-fn-reference-in-iterator\": \"off\"\n    },\n    \"overrides\": [\n      {\n        \"files\": \"test/*.js\",\n        \"envs\": [\n          \"jest\"\n        ]\n      }\n    ]\n  },\n  \"prettier\": {\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"printWidth\": 120,\n    \"bracketSpacing\": false\n  },\n  \"jest\": {\n    \"transform\": {},\n    \"collectCoverage\": true\n  }\n}\n"
  },
  {
    "path": "src/array.js",
    "content": "export async function mapAsync(array = [], callback = (a) => a) {\n  const result = [];\n  for (const index of array.keys()) {\n    const mapped = await callback(array[index], index, array); /* eslint-disable-line no-await-in-loop */\n    result.push(mapped);\n  }\n\n  return result;\n}\n\nexport async function forEachAsync(array = [], callback = () => {}) {\n  for (const index of array.keys()) {\n    await callback(array[index], index, array); /* eslint-disable-line no-await-in-loop */\n  }\n}\n\nexport async function filterAsync(array = [], filter = (a) => a) {\n  const result = [];\n  for (const index of array.keys()) {\n    const active = await filter(array[index], index, array); /* eslint-disable-line no-await-in-loop */\n    if (active) {\n      result.push(array[index]);\n    }\n  }\n\n  return result;\n}\n\nexport async function reduceAsync(initial, array = [], reducer = (r) => r) {\n  for (const index of array.keys()) {\n    initial = await reducer(initial, array[index], index); /* eslint-disable-line no-await-in-loop */\n  }\n\n  return initial;\n}\n"
  },
  {
    "path": "src/config.js",
    "content": "import process from 'node:process';\nimport Joi from 'joi';\nimport debugBase from 'debug';\nimport {traverse, STOP} from 'async-traverse-tree';\nimport {ConfigError} from './errors.js';\n\nconst debug = debugBase('critical:config');\n\nexport const DEFAULT = {\n  width: 1300,\n  height: 900,\n  timeout: 30_000,\n  maxImageFileSize: 10_240,\n  inline: false,\n  strict: false,\n  extract: false,\n  inlineImages: false,\n  ignoreInlinedStyles: false,\n  concurrency: Number.POSITIVE_INFINITY,\n  include: [],\n};\n\nconst schema = Joi.object()\n  .keys({\n    html: Joi.string(),\n    src: [Joi.string(), Joi.object()],\n    css: [Joi.string(), Joi.array()],\n    base: Joi.string(),\n    strict: Joi.boolean().default(DEFAULT.strict),\n    ignoreInlinedStyles: Joi.boolean().default(DEFAULT.ignoreInlinedStyles),\n    extract: Joi.boolean().default(DEFAULT.extract),\n    inlineImages: Joi.boolean().default(DEFAULT.inlineImages),\n    postcss: Joi.array(),\n    ignore: [Joi.array(), Joi.object().unknown(true)],\n    width: Joi.number().default(DEFAULT.width),\n    height: Joi.number().default(DEFAULT.height),\n    dimensions: Joi.array().items({width: Joi.number(), height: Joi.number()}),\n    inline: [Joi.boolean().default(DEFAULT.inline), Joi.object().unknown(true)],\n    maxImageFileSize: Joi.number().default(DEFAULT.maxImageFileSize),\n    include: Joi.any().default(DEFAULT.include),\n    concurrency: Joi.number().default(DEFAULT.concurrency),\n    user: Joi.string(),\n    pass: Joi.string(),\n    request: Joi.object().unknown(true),\n    penthouse: Joi.object()\n      .keys({\n        url: Joi.any().forbidden(),\n        css: Joi.any().forbidden(),\n        width: Joi.any().forbidden(),\n        height: Joi.any().forbidden(),\n        timeout: Joi.number().default(DEFAULT.timeout),\n        forceInclude: Joi.any(),\n        maxEmbeddedBase64Length: Joi.number(),\n      })\n      .unknown(true),\n    rebase: [\n      Joi.object().keys({\n        from: Joi.string(),\n        to: Joi.string(),\n      }),\n      Joi.func(),\n      Joi.boolean(),\n    ],\n    target: [\n      Joi.string(),\n      Joi.object().keys({\n        css: Joi.string(),\n        html: Joi.string(),\n        uncritical: Joi.string(),\n      }),\n    ],\n    assetPaths: Joi.array().items(Joi.string()),\n    userAgent: Joi.string(),\n    cleanCSS: Joi.object().unknown(true),\n  })\n  .label('options')\n  .xor('html', 'src');\n\nexport async function getOptions(options = {}) {\n  const parsedOptions = await traverse(options, (key, value) => {\n    if (['css', 'html', 'src'].includes(key)) {\n      return STOP;\n    }\n\n    if (typeof value === 'string') {\n      try {\n        return JSON.parse(value);\n      } catch {}\n    }\n\n    return value;\n  });\n\n  const {error, value} = schema.validate(parsedOptions);\n\n  const {inline, dimensions, penthouse = {}, target, ignore} = value || {};\n\n  if (error) {\n    const {details = []} = error;\n    const [detail = {}] = details;\n    const {message = 'invalid options'} = detail;\n\n    throw new ConfigError(message);\n  }\n\n  if (!dimensions || dimensions.length === 0) {\n    value.dimensions = [\n      {\n        width: options.width || DEFAULT.width,\n        height: options.height || DEFAULT.height,\n      },\n    ];\n  }\n\n  if (typeof target === 'string') {\n    const key = /\\.css$/.test(target) ? 'css' : 'html';\n    value.target = {[key]: target};\n  }\n\n  // Set inline options\n  value.inline = Boolean(inline) && {\n    basePath: value.base || process.cwd(),\n    ...(inline === true ? {strategy: 'media'} : inline),\n  };\n\n  if (value.inline.replaceStylesheets !== undefined && !Array.isArray(value.inline.replaceStylesheets)) {\n    if (value.inline.replaceStylesheets === 'false') {\n      value.inline.replaceStylesheets = false;\n    } else if (typeof value.inline.replaceStylesheets !== 'function') {\n      value.inline.replaceStylesheets = [value.inline.replaceStylesheets];\n    }\n  }\n\n  // Set penthouse options\n  value.penthouse = {\n    forceInclude: value.include,\n    timeout: DEFAULT.timeout,\n    maxEmbeddedBase64Length: value.maxImageFileSize,\n    ...penthouse,\n  };\n\n  if (ignore && Array.isArray(ignore)) {\n    value.ignore = {\n      atrule: ignore,\n      rule: ignore,\n      decl: ignore,\n    };\n  }\n\n  if (target && target.uncritical) {\n    value.extract = true;\n  }\n\n  debug(value);\n\n  return value;\n}\n\nexport const validate = (key, val) => {\n  const {error} = schema.validate({[key]: val, html: '<html/>'});\n  if (error) {\n    return false;\n  }\n\n  return true;\n};\n"
  },
  {
    "path": "src/core.js",
    "content": "import {EOL} from 'node:os';\nimport {Buffer} from 'node:buffer';\nimport process from 'node:process';\nimport path from 'node:path';\nimport pico from 'picocolors';\nimport CleanCSS from 'clean-css';\nimport {invokeMap} from 'lodash-es';\nimport pAll from 'p-all';\nimport debugBase from 'debug';\nimport postcss from 'postcss';\nimport discard from 'postcss-discard';\nimport imageInliner from 'postcss-image-inliner';\nimport penthouse from 'penthouse';\nimport {PAGE_UNLOADED_DURING_EXECUTION_ERROR_MESSAGE} from 'penthouse/lib/core.js';\nimport {inline as inlineCritical} from 'inline-critical';\nimport {removeDuplicateStyles} from 'inline-critical/css';\nimport parseCssUrls from 'css-url-parser';\nimport {reduceAsync} from './array.js';\nimport {NoCssError} from './errors.js';\nimport {getDocument, getDocumentFromSource, token, getAssetPaths, isRemote, normalizePath} from './file.js';\n\nconst debug = debugBase('critical:core');\n\n/**\n * Returns a string of combined and deduped css rules.\n * @param {array} cssArray Array with css strings\n * @returns {String} combined and deduped css rules\n */\nfunction combineCss(cssArray) {\n  if (cssArray.length === 1) {\n    return cssArray[0].toString();\n  }\n\n  return new CleanCSS().minify(invokeMap(cssArray, 'toString').join(' ')).styles;\n}\n\n/**\n * Let penthouse compute the critical css\n * @param {vinyl} document Vinyl representation of the HTML document\n * @param {object} options Options passed to critical\n * @returns {string} Critical css for various dimensions combined and deduped\n */\nfunction callPenthouse(document, options) {\n  const {dimensions, width, height, userAgent, user, pass, penthouse: params = {}} = options;\n  const {customPageHeaders = {}} = params;\n  const {css: cssString, url} = document;\n  const config = {...params, cssString, url};\n  // Dimensions need to be sorted from small to wide. Otherwise the order gets corrupted\n  const sizes = Array.isArray(dimensions)\n    ? [...dimensions].sort((a, b) => (a.width || 0) - (b.width || 0))\n    : [{width, height}];\n\n  if (userAgent) {\n    config.userAgent = userAgent;\n  }\n\n  if (user && pass) {\n    config.customPageHeaders = {...customPageHeaders, Authorization: `Basic ${token(user, pass)}`};\n  }\n\n  return sizes.map(({width, height}) => () => {\n    const result = penthouse({...config, width, height});\n    debug('Call penthouse with:', {\n      ...config,\n      width,\n      height,\n      cssString: `${(cssString || '').slice(0, 10)} ... ${(cssString || '').slice(-10)}`,\n    });\n\n    return result;\n  });\n}\n\n/**\n * Critical path CSS generation\n * @param  {object} options Options\n * @accepts src, base, width, height, dimensions, dest\n * @return {Promise<object>} Object with critical css & html\n */\nexport async function create(options = {}) {\n  const {\n    base,\n    src,\n    html,\n    inline,\n    ignore,\n    extract,\n    target = {},\n    inlineImages,\n    maxImageFileSize,\n    postcss: postProcess = [],\n    strict,\n    cleanCSS: cleanCSSOptions,\n    concurrency = Number.POSITIVE_INFINITY,\n    assetPaths = [],\n  } = options;\n\n  // Create vinyl representation for the document with normalized filepath and normalized styles\n  const document = src ? await getDocument(src, options) : await getDocumentFromSource(html, options);\n\n  if (!document.css || !document.css.toString()) {\n    if (strict) {\n      throw new NoCssError();\n    }\n\n    return {\n      css: '',\n      html: document.contents.toString(),\n    };\n  }\n\n  // Generate critical css\n  let criticalCSS;\n  try {\n    const tasks = callPenthouse(document, options);\n    const criticalStyles = await pAll(tasks, {concurrency});\n    criticalCSS = combineCss(criticalStyles);\n  } catch (error) {\n    if (error.message === PAGE_UNLOADED_DURING_EXECUTION_ERROR_MESSAGE) {\n      process.stderr.write(pico.yellow(PAGE_UNLOADED_DURING_EXECUTION_ERROR_MESSAGE) + EOL);\n      return {\n        css: '',\n        html: document.contents.toString(),\n      };\n    }\n\n    throw error;\n  }\n\n  // Add postprocess configuration\n  if (ignore) {\n    postProcess.push(discard(ignore));\n  }\n\n  if (inlineImages) {\n    const refAssets = [...parseCssUrls(criticalCSS), ...document.stylesheets];\n    const refAssetPaths = refAssets.reduce((res, file) => [...res, path.dirname(file)], []);\n\n    const searchpaths = await reduceAsync([], [...new Set(refAssetPaths)], async (res, file) => {\n      const paths = await getAssetPaths(document, file, options, false);\n      return [...new Set([...res, ...paths])];\n    });\n\n    const filtered = searchpaths.filter((p) => isRemote(p) || p.includes(process.cwd()) || (base && p.includes(base)));\n\n    const inlineOptions = {\n      assetPaths: [...filtered, ...assetPaths],\n      maxFileSize: maxImageFileSize,\n    };\n\n    debug('Inline images:', inlineOptions, refAssets);\n\n    postProcess.push(imageInliner(inlineOptions));\n  }\n\n  // Post-process critical css\n  if (postProcess.length > 0) {\n    criticalCSS = await postcss(postProcess)\n      .process(criticalCSS, {from: undefined})\n      .then((contents) => contents.css);\n  }\n\n  // Minify or prettify\n  const cleanCSS = new CleanCSS(\n    cleanCSSOptions || {\n      level: {\n        1: {\n          all: true,\n        },\n        2: {\n          all: false,\n          removeDuplicateFontRules: true,\n          removeDuplicateMediaBlocks: true,\n          removeDuplicateRules: true,\n          removeEmpty: true,\n          mergeMedia: true,\n        },\n      },\n    }\n  );\n  criticalCSS = cleanCSS.minify(criticalCSS).styles;\n\n  const result = {\n    css: criticalCSS,\n  };\n\n  // Define uncritical as lazy evaluated property\n  const lazyUncritical = (orig, diff) =>\n    function () {\n      this._uncritical ||= removeDuplicateStyles(orig, diff);\n\n      return this._uncritical;\n    };\n\n  Object.defineProperty(result, 'uncritical', {\n    get: lazyUncritical(document.css, criticalCSS),\n  });\n\n  // Inline\n  if (inline) {\n    const {replaceStylesheets} = inline;\n\n    if (typeof replaceStylesheets === 'function') {\n      inline.replaceStylesheets = await replaceStylesheets(document, result.uncritical);\n    }\n\n    // If replaceStylesheets is not set via option and and uncritical is empty\n    if (extract && replaceStylesheets === undefined && result.uncritical.trim() === '') {\n      inline.replaceStylesheets = [];\n    }\n\n    if (target.uncritical) {\n      const uncriticalHref = normalizePath(path.relative(document.cwd, path.resolve(base, target.uncritical)));\n      // Only replace stylesheets if the uncriticalHref is inside document.cwd and replaceStylesheets is not set via options\n      if (!/^\\.\\.\\//.test(uncriticalHref) && replaceStylesheets === undefined) {\n        inline.replaceStylesheets = [`/${uncriticalHref}`];\n      }\n    } else {\n      inline.extract = extract;\n    }\n\n    const inlined = inlineCritical(document.contents.toString(), criticalCSS, {...inline, basePath: document.cwd});\n    document.contents = Buffer.from(inlined);\n  }\n\n  // Clean tempfiles\n  await document.cleanup();\n\n  result.html = document.contents.toString();\n\n  // Cleanup output\n  return result;\n}\n"
  },
  {
    "path": "src/errors.js",
    "content": "import process from 'node:process';\nimport pico from 'picocolors';\nimport {stripIndents, stripIndent} from 'common-tags';\n\nexport class FileNotFoundError extends Error {\n  constructor(file = '', paths = [], ...params) {\n    const message = pico.red(stripIndent`\n      Error: File not found: ${file}\n             Current working directory: ${process.cwd()}\n             Searched in: ${paths.length > 0 ? paths.join(', ') : '-'}\n    `);\n\n    super([message, ...params]);\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, FileNotFoundError);\n    }\n\n    this.file = file;\n  }\n}\n\nexport class NoCssError extends Error {\n  constructor(...params) {\n    const message = pico.red(stripIndents`\n      Error: No stylesheets found in document and no css was specified in the options\n    `);\n\n    super([message, ...params]);\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, FileNotFoundError);\n    }\n  }\n}\n\nexport class ConfigError extends Error {\n  constructor(msg, ...params) {\n    const message = pico.red(stripIndents`\n      ConfigError: ${msg}\n    `);\n\n    super([message, ...params]);\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, FileNotFoundError);\n    }\n  }\n}\n"
  },
  {
    "path": "src/file.js",
    "content": "/* eslint-disable complexity */\nimport {Buffer} from 'node:buffer';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport process from 'node:process';\nimport url from 'node:url';\nimport {promisify} from 'node:util';\nimport parseCssUrls from 'css-url-parser';\nimport {dataUriToBuffer} from 'data-uri-to-buffer';\nimport debugBase from 'debug';\nimport {findUpMultiple} from 'find-up';\nimport {globby} from 'globby';\nimport {parse} from '@adobe/css-tools';\nimport got from 'got';\nimport isGlob from 'is-glob';\nimport {makeDirectory} from 'make-dir';\nimport oust from 'oust';\nimport pico from 'picocolors';\nimport postcss from 'postcss';\nimport postcssUrl from 'postcss-url';\nimport slash from 'slash';\nimport {temporaryDirectory, temporaryFile} from 'tempy';\nimport Vinyl from 'vinyl';\nimport {filterAsync, forEachAsync, mapAsync, reduceAsync} from './array.js';\nimport {FileNotFoundError} from './errors.js';\n\nconst debug = debugBase('critical:file');\n\nexport const BASE_WARNING = `${pico.yellow(\n  'Warning:'\n)} Missing base path. Consider 'base' option. https://goo.gl/PwvFVb`;\n\nconst warn = (text) => process.stderr.write(pico.yellow(`${text}${os.EOL}`));\n\nconst unlinkAsync = promisify(fs.unlink);\nconst readFileAsync = promisify(fs.readFile);\nconst writeFileAsync = promisify(fs.writeFile);\n\nexport const checkCssOption = (css) => Boolean((!Array.isArray(css) && css) || (Array.isArray(css) && css.length > 0));\n\nexport async function outputFileAsync(file, data) {\n  const dir = path.dirname(file);\n\n  if (!fs.existsSync(dir)) {\n    await makeDirectory(dir);\n  }\n\n  return writeFileAsync(file, data);\n}\n\n/**\n * Fixup slashes in file paths for Windows and remove volume definition in front\n * @param {string} str Path\n * @returns {string} Normalized path\n */\nexport function normalizePath(str) {\n  return process.platform === 'win32' ? slash(str.replace(/^[a-zA-Z]:/, '')) : str;\n}\n\n/**\n * Check whether a resource is external or not\n * @param {string} href Path\n * @returns {boolean} True if the path is remote\n */\nexport function isRemote(href) {\n  return typeof href === 'string' && /(^\\/\\/)|(:\\/\\/)/.test(href) && !href.startsWith('file:');\n}\n\n/**\n * Parse Url\n * @param {string} str The URL\n * @returns {URL|object} return new URL Object\n */\nexport function urlParse(str = '') {\n  if (/^\\w+:\\/\\//.test(str)) {\n    return new URL(str);\n  }\n\n  if (/^\\/\\//.test(str)) {\n    return new URL(str, 'https://ba.se');\n  }\n\n  return {pathname: str};\n}\n\n/**\n * Get file uri considering OS\n * @param {string} file Absolute filepath\n * @returns {string} file uri\n */\nfunction getFileUri(file) {\n  if (!isAbsolute(file)) {\n    throw new Error('Path must be absolute to compute file uri. Received: ' + file);\n  }\n\n  const fileUrl = process.platform === 'win32' ? new URL(`file:///${file}`) : new URL(`file://${file}`);\n\n  return fileUrl.href;\n}\n\n/**\n * Resolve Url\n * @param {string} from Resolve from\n * @param {string} to Resolve to\n * @returns {string} The resolved url\n */\nexport function urlResolve(from = '', to = '') {\n  if (isRemote(from)) {\n    const {href: base} = urlParse(from);\n    const {href} = new URL(to, base);\n    return href;\n  }\n\n  if (isAbsolute(to)) {\n    return to;\n  }\n\n  return path.join(from.replace(/[^/]+$/, ''), to);\n}\n\nfunction isFilePath(href) {\n  return typeof href === 'string' && !isRemote(href);\n}\n\nexport function isAbsolute(href) {\n  return isFilePath(href) && path.isAbsolute(href);\n}\n\n/**\n * Check whether a resource is relative or not\n * @param {string} href Path\n * @returns {boolean} True if the path is relative\n */\nfunction isRelative(href) {\n  return isFilePath(href) && !isAbsolute(href);\n}\n\n/**\n * Wrapper for File.isVinyl to detect vinyl objects generated by gulp (vinyl < v0.5.6)\n * @param {*} file Object to check\n * @returns {boolean} True if it's a valid vinyl object\n */\nfunction isVinyl(file) {\n  return (\n    Vinyl.isVinyl(file) ||\n    file instanceof Vinyl ||\n    (file && /function File\\(/.test(file.constructor.toString()) && file.contents && file.path)\n  );\n}\n\n/**\n * Check if a file exists (remote & local)\n * @param {string} href Path\n * @param {object} options Critical options\n * @returns {Promise<boolean>} Resolves to true if the file exists\n */\nexport async function fileExists(href, options = {}) {\n  if (isVinyl(href)) {\n    return !href.isNull();\n  }\n\n  if (Buffer.isBuffer(href)) {\n    return true;\n  }\n\n  if (isRemote(href)) {\n    const {request = {}} = options;\n    const method = request.method || 'head';\n    try {\n      const response = await fetch(href, {...options, request: {...request, method}});\n      const {statusCode} = response;\n\n      if (method === 'head') {\n        return Number.parseInt(statusCode, 10) < 400;\n      }\n\n      return Boolean(response);\n    } catch {\n      return false;\n    }\n  }\n\n  return fs.existsSync(href) || fs.existsSync(href.replace(/\\?.*$/, ''));\n}\n\n/**\n * Remove temporary files\n * @param {array} files Array of temp files\n * @returns {Promise<void>|*} Promise resolves when all files removed\n */\nconst getCleanup = (files) => () =>\n  forEachAsync(files, (file) => {\n    try {\n      unlinkAsync(file);\n    } catch {\n      debug(`${file} was already deleted`);\n    }\n  });\n\n/**\n * Path join considering urls\n * @param {string} base Base path part\n * @param {string} part Path part to append\n * @returns {string} Joined path/url\n */\nexport function joinPath(base, part) {\n  if (!part) {\n    return base;\n  }\n\n  if (isRemote(base)) {\n    return urlResolve(base, part);\n  }\n\n  return path.join(base, part.replace(/\\?.*$/, ''));\n}\n\n/**\n * Resolve path\n * @param {string} href Path\n * @param {[string]} search Paths to search in\n * @param {object} options Critical options\n * @returns {Promise<string>} Resolves to found path, rejects with FileNotFoundError otherwise\n */\nexport async function resolve(href, search = [], options = {}) {\n  let exists = await fileExists(href, options);\n  if (exists) {\n    return href;\n  }\n\n  for (const ref of search) {\n    const checkPath = joinPath(ref, href);\n    exists = await fileExists(checkPath, options); /* eslint-disable-line no-await-in-loop */\n    if (exists) {\n      return checkPath;\n    }\n  }\n\n  throw new FileNotFoundError(href, search);\n}\n\n/**\n * Glob pattern\n * @param {array|string} pattern Glob pattern\n * @param {string} base Critical base option\n * @returns {Promise<[string]>} Found files\n */\nfunction glob(pattern, {base} = {}) {\n  // Evaluate globs based on base path\n  const patterns = Array.isArray(pattern) ? pattern : [pattern];\n  // Prepend base if it's not empty & not remote\n  const prependBase = (pattern) => (base && !isRemote(base) ? [path.join(base, pattern)] : []);\n\n  return reduceAsync([], patterns, async (files, pattern) => {\n    if (isGlob(pattern)) {\n      const result = await globby([...prependBase(pattern), pattern]);\n      return [...files, ...result];\n    }\n\n    return [...files, pattern];\n  });\n}\n\n/**\n * Rebase image url in css\n *\n * @param {Buffer|string} css Stylesheet\n * @param {string} from Rebase from url\n * @param {string} to Rebase to url\n * @param {opject} options\n *    method: {string|function} method Rebase method. See https://github.com/postcss/postcss-url#options-combinations\n *    strict: fail on invalid css\n *    inlined: boolean flag indicating inlined css\n * @param {boolean} strict fail on invalid css\n * @returns {Buffer} Rebased css\n */\nasync function rebaseAssets(css, from, to, options = {}) {\n  const {method = 'rebase', strict = false, inlined = false} = options;\n  let rebased = css.toString();\n\n  debug('Rebase assets', {from, to});\n\n  if (/\\/$/.test(to)) {\n    to += 'temp.html';\n  }\n\n  if (/\\/$/.test(from)) {\n    from += 'temp.css';\n  }\n\n  if (isRemote(from)) {\n    const {pathname} = urlParse(from);\n    from = pathname;\n  }\n\n  try {\n    if (typeof method === 'function') {\n      const transform = (asset, ...rest) => {\n        const assetNormalized = {\n          ...asset,\n          absolutePath: normalizePath(asset.absolutePath),\n          relativePath: normalizePath(asset.relativePath),\n        };\n\n        return method(assetNormalized, ...rest);\n      };\n\n      const result = await postcss()\n        .use(postcssUrl({url: transform}))\n        .process(css, {from, to});\n      rebased = result.css;\n    } else if (from && to) {\n      const result = await postcss()\n        .use(postcssUrl({url: method}))\n        .process(css, {from, to});\n      rebased = result.css;\n    }\n  } catch (error) {\n    if (strict) {\n      if (inlined) {\n        error.message = error.message.replace(from, 'Inlined stylesheet');\n      }\n\n      throw error;\n    }\n\n    debug(`CSS parse error: ${error.message}`);\n    rebased = '';\n  }\n\n  return Buffer.from(rebased);\n}\n\n/**\n * Token generated by concatenating username and password with `:` character within a base64 encoded string.\n * @param  {String} user User identifier.\n * @param  {String} pass Password.\n * @returns {String} Base64 encoded authentication token.\n */\nexport const token = (user, pass) => Buffer.from([user, pass].join(':')).toString('base64');\n\n/**\n * Get external resource. Try https and falls back to http\n * @param {string} uri Source uri\n * @param {object} options Options passed to critical\n * @param {boolean} secure Use https?\n * @returns {Promise<Buffer|response>} Resolves to fetched content or response object for HEAD request\n */\nasync function fetch(uri, options = {}, secure = true) {\n  const {user, pass, userAgent, request: requestOptions = {}} = options;\n  const {headers = {}, method = 'get', https} = requestOptions;\n  let resourceUrl = uri;\n  let protocolRelative = false;\n\n  // Consider protocol-relative urls\n  if (/^\\/\\//.test(uri)) {\n    protocolRelative = true;\n    resourceUrl = urlResolve(`http${secure ? 's' : ''}://te.st`, uri);\n  }\n\n  requestOptions.https = {rejectUnauthorized: true, ...https};\n  if (user && pass) {\n    headers.Authorization = `Basic ${token(user, pass)}`;\n  }\n\n  if (userAgent) {\n    headers['User-Agent'] = userAgent;\n  }\n\n  debug(`Fetching resource: ${resourceUrl}`, {...requestOptions, headers});\n\n  try {\n    const response = await got(resourceUrl, {...requestOptions, headers});\n    if (method === 'head') {\n      return response;\n    }\n\n    return Buffer.from(response.body || '');\n  } catch (error) {\n    // Try again with http\n    if (secure && protocolRelative) {\n      debug(`${error.message} - trying again over http`);\n      return fetch(uri, options, false);\n    }\n\n    debug(`${resourceUrl} failed: ${error.message}`);\n\n    if (method === 'head') {\n      return error.response;\n    }\n\n    if (error.response) {\n      return Buffer.from(error.response.body || '');\n    }\n\n    throw error;\n  }\n}\n\n/**\n * Extract stylesheet urls from html document\n * @param {Vinyl} file Vinyl file object (document)\n * @param {object} options Options passed to critical\n * @returns {[string]} Stylesheet urls from document source\n */\nfunction getStylesheetObjects(file, options) {\n  const {ignoreInlinedStyles} = options || {};\n  if (!isVinyl(file)) {\n    throw new Error('Parameter file needs to be a vinyl object');\n  }\n\n  // Already computed stylesheetObjects\n  if (file.stylesheetObjects) {\n    return file.stylesheetObjects;\n  }\n\n  const stylesheets = oust.raw(file.contents.toString(), ['stylesheets', 'preload', 'styles']);\n\n  const isNotPrint = (el) =>\n    el.attr('media') !== 'print' || (Boolean(el.attr('onload')) && el.attr('onload').includes('media'));\n\n  const isMediaQuery = (media) => typeof media === 'string' && !['all', 'print', 'screen'].includes(media);\n\n  const allowedInlinedStylesheet = (type) => type !== 'styles' || !ignoreInlinedStyles;\n\n  const objects = stylesheets\n    .filter((link) => isNotPrint(link.$el) && Boolean(link.value) && allowedInlinedStylesheet(link.type))\n    .map((link) => {\n      const media = isMediaQuery(link.$el.attr('media')) ? link.$el.attr('media') : '';\n\n      // support base64 encoded styles\n      if (link.value.startsWith('data:')) {\n        const parsed = dataUriToBuffer(link.value);\n        return {\n          media,\n          value: Buffer.from(parsed.buffer),\n        };\n      }\n\n      if (link.type === 'styles') {\n        return {\n          media,\n          value: Buffer.from(link.value),\n        };\n      }\n\n      return {\n        media,\n        value: link.value,\n      };\n    });\n\n  const isEqual = (a, b) => Buffer.from(a).compare(Buffer.from(b)) === 0;\n  const compare = (a, b) => isEqual(a.media, b.media) && isEqual(a.value, b.value);\n  // Make objects unique\n  const stylesheetObjects = objects.filter((a, index, array) => {\n    return array.findIndex((b) => compare(a, b)) === index;\n  });\n\n  // cache them for later use\n  file.stylesheetObjects = stylesheetObjects;\n\n  return stylesheetObjects;\n}\n\n/**\n * Extract stylesheet urls from html document\n * @param {Vinyl} file Vinyl file object (document)\n * @param {object} options Options passed to critical\n * @returns {[string]} Stylesheet urls from document source\n */\nexport function getStylesheetHrefs(file, options) {\n  return getStylesheetObjects(file, options).map((object) => object.value);\n}\n\n/**\n * Extract stylesheet urls from html document\n * @param {Vinyl} file Vinyl file object (document)\n * @param {object} options Options passed to critical\n * @returns {[string]} Stylesheet urls from document source\n */\nexport function getStylesheetsMedia(file, options) {\n  return getStylesheetObjects(file, options).map((object) => object.media);\n}\n\n/**\n * Extract asset urls from stylesheet\n * @param {Vinyl} file Vinyl file object (stylesheet)\n * @returns {[string]} Asset urls from stylesheet source\n */\nexport function getAssets(file) {\n  if (!isVinyl(file)) {\n    throw new Error('Parameter file needs to be a vinyl object');\n  }\n\n  return parseCssUrls(file.contents.toString());\n}\n\n/**\n * Compute Path to Html document based on docroot\n * @param {Vinyl} file The file we want to check\n * @param {object} options Critical options object\n * @returns {Promise<string>} Computed path\n */\nexport async function getDocumentPath(file, options = {}) {\n  let {base} = options;\n\n  // Check remote\n  if (file.remote) {\n    let {pathname} = file.urlObj;\n    if (/\\/$/.test(pathname)) {\n      pathname += 'index.html';\n    }\n\n    return pathname;\n  }\n\n  // If we don't have a file path and\n  if (!file.path) {\n    return '';\n  }\n\n  if (base) {\n    base = path.resolve(base);\n    return normalizePath(`/${path.relative(base, file.path || base)}`);\n  }\n\n  // Check local and assume base path based on relative stylesheets\n  if (file.stylesheets) {\n    const relativeRefs = file.stylesheets.filter((href) => isRelative(href));\n    const absoluteRefs = file.stylesheets.filter((href) => isAbsolute(href));\n\n    // If we have no stylesheets inside, fall back to path relative to process cwd\n    if (relativeRefs.length === 0 && absoluteRefs.length === 0) {\n      process.stderr.write(BASE_WARNING);\n\n      return normalizePath(`/${path.relative(process.cwd(), file.path)}`);\n    }\n\n    // Compute base path based on absolute links\n    if (relativeRefs.length === 0) {\n      const [ref] = absoluteRefs;\n      const paths = await getAssetPaths(file, ref, options);\n      try {\n        const filepath = await resolve(ref, paths, options);\n        return normalizePath(`/${path.relative(normalizePath(filepath).replace(ref, ''), file.path)}`);\n      } catch {\n        process.stderr.write(BASE_WARNING);\n\n        return normalizePath(`/${path.relative(process.cwd(), file.path)}`);\n      }\n    }\n\n    // Compute path based on relative stylesheet links\n    const dots = relativeRefs.reduce((res, href) => {\n      const match = /^(\\.\\.\\/)+/.exec(href);\n\n      return match && match[0].length > res.length ? match[0] : res;\n    }, './');\n\n    const tmpBase = path.resolve(path.dirname(file.path), dots);\n\n    return normalizePath(`/${path.relative(tmpBase, file.path)}`);\n  }\n\n  return '';\n}\n\n/**\n * Get path for remote stylesheet. Compares document host with stylesheet host\n * @param {object} fileObj Result of urlParse(style url)\n * @param {object} documentObj Result of urlParse(document url)\n * @param {string} filename Filename\n * @returns {string} Path to css (can be remote or local relative to document base)\n */\nfunction getRemoteStylesheetPath(fileObj, documentObj, filename) {\n  let {hostname: styleHost, port: stylePort, pathname} = fileObj;\n  const {hostname: docHost, port: docPort} = documentObj || {};\n\n  if (filename) {\n    pathname = joinPath(path.dirname(pathname), path.basename(filename));\n    fileObj.pathname = normalizePath(pathname);\n  }\n\n  if (`${styleHost}:${stylePort}` === `${docHost}:${docPort}`) {\n    return pathname;\n  }\n\n  return url.format(fileObj);\n}\n\n/**\n * Get path to stylesheet based on docroot\n * @param {Vinyl} document Optional reference document\n * @param {Vinyl} file the file we want to check\n * @param {object} options Critical options object\n * @returns {Promise<string>} Computed path\n */\nexport function getStylesheetPath(document, file, options = {}) {\n  let {base} = options;\n\n  // Check inline styles\n  if (file.inline) {\n    return normalizePath(`${document.virtualPath}.css`);\n  }\n\n  // Check remote\n  if (file.remote) {\n    return getRemoteStylesheetPath(file.urlObj, document.urlObj);\n  }\n\n  // Generate path relative to document if stylesheet is referenced relative\n  //\n  if (isRelative(file.path) && document.virtualPath) {\n    return normalizePath(joinPath(path.dirname(document.virtualPath), file.path));\n  }\n\n  if (base && path.resolve(file.path).includes(path.resolve(base))) {\n    base = path.resolve(base);\n    return normalizePath(`/${path.relative(path.resolve(base), path.resolve(file.path))}`);\n  }\n\n  // Try to compute path based on document link tags with same name\n  const stylesheet = document.stylesheets\n    .filter((href) => !Buffer.isBuffer(href))\n    .find((href) => {\n      const {pathname} = urlParse(href);\n      const name = path.basename(pathname);\n      return name === path.basename(file.path);\n    });\n\n  if (stylesheet && isRelative(stylesheet) && document.virtualPath) {\n    return normalizePath(joinPath(path.dirname(document.virtualPath), stylesheet));\n  }\n\n  if (stylesheet && isRemote(stylesheet)) {\n    return getRemoteStylesheetPath(urlParse(stylesheet), document.urlObj);\n  }\n\n  if (stylesheet) {\n    return stylesheet;\n  }\n\n  // Try to find stylesheet path based on document link tags\n  const [unsafestylesheet] = document.stylesheets\n    .filter((href) => !Buffer.isBuffer(href))\n    .sort((a) => (isRemote(a) ? 1 : -1));\n  if (unsafestylesheet && isRelative(unsafestylesheet) && document.virtualPath) {\n    return normalizePath(\n      joinPath(path.dirname(document.virtualPath), joinPath(path.dirname(unsafestylesheet), path.basename(file.path)))\n    );\n  }\n\n  if (unsafestylesheet && isRemote(unsafestylesheet)) {\n    return getRemoteStylesheetPath(urlParse(unsafestylesheet), document.urlObj, path.basename(file.path));\n  }\n\n  if (stylesheet) {\n    return stylesheet;\n  }\n\n  process.stderr.write(BASE_WARNING);\n  if (document.virtualPath && file.path) {\n    return normalizePath(joinPath(path.dirname(document.virtualPath), path.basename(file.path)));\n  }\n\n  return '';\n}\n\n/**\n * Get a list of possible asset paths\n * Guess this is rather expensive so this method should only be used if\n * there's no other possible way\n *\n * @param {Vinyl} document Html document\n * @param {string} file File path\n * @param {object} options Critical options\n * @param {boolean} strict Check for file existence\n * @returns {Promise<[string]>} List of asset paths\n */\nexport async function getAssetPaths(document, file, options = {}, strict = true) {\n  const {base, rebase = {}, assetPaths = []} = options;\n  const {history = [], url: docurl = '', urlObj} = document;\n  const {from, to} = rebase;\n  const {pathname: urlPath} = urlObj || {};\n  const [docpath] = history;\n\n  if (isVinyl(file)) {\n    return [];\n  }\n\n  // consider base tag in document\n  const baseTagHref = document?.contents?.toString()?.match(/<base\\s+href=['\"]([^'\"]+)['\"]/)?.[1];\n  // Remove double dots in the middle\n  const normalized = path.join(file);\n  // Count directory hops\n  const hops = normalized.split(path.sep).reduce((cnt, part) => (part === '..' ? cnt + 1 : cnt), 0);\n  // Also findup first real dir path\n  const [first] = normalized.split(path.sep).filter((p) => p && p !== '..'); // eslint-disable-line unicorn/prefer-array-find\n  const mappedAssetPaths = base ? assetPaths.map((a) => joinPath(base, a)) : [];\n\n  // Make a list of possible paths\n  const paths = [\n    ...new Set([\n      base,\n      baseTagHref,\n      baseTagHref && !isRemote(baseTagHref) && path.join(base, baseTagHref),\n      base && isRelative(base) && path.join(process.cwd(), base),\n      docurl,\n      urlPath && urlResolve(urlObj.href, path.dirname(urlPath)),\n      urlPath && !/\\/$/.test(path.dirname(urlPath)) && urlResolve(urlObj.href, `${path.dirname(urlPath)}/`),\n      docurl && urlResolve(docurl, file),\n      docpath && path.dirname(docpath),\n      ...assetPaths,\n      ...mappedAssetPaths,\n      to,\n      from,\n      base && docpath && path.join(base, path.dirname(docpath)),\n      base && to && path.join(base, path.dirname(to)),\n      base && from && path.join(base, path.dirname(from)),\n      base && isRelative(file) && hops ? path.join(base, ...Array.from({length: hops}).fill('tmpdir'), file) : '',\n      process.cwd(),\n    ]),\n  ];\n\n  // Filter non-existent paths\n  const filtered = await filterAsync(paths, (f) => {\n    if (!f || (isAbsolute(f) && !f?.includes(process.cwd()))) {\n      return false;\n    }\n\n    return !strict || fileExists(f, options);\n  });\n\n  // Findup first directory in search path and add to the list if available\n  const all = await reduceAsync(filtered, [...new Set(filtered)], async (result, cwd) => {\n    if (isRemote(cwd)) {\n      return [...result, cwd];\n    }\n\n    // const up = await findUp(first, {cwd, type: 'directory'});\n    const up = await findUpMultiple(first, {cwd, type: 'directory', stopAt: process.cwd()});\n    const additionalDirectories = up.flatMap((u) => {\n      const upDir = path.dirname(u);\n\n      if (hops) {\n        // Add additional directories based on dirHops\n        const additional = path.relative(upDir, cwd).split(path.sep).slice(0, hops);\n\n        return [upDir, path.join(upDir, ...additional)];\n      }\n\n      return [upDir];\n    });\n\n    return [...result, ...additionalDirectories];\n  });\n\n  debug(`(getAssetPaths) Search file \"${file}\" in:`, [...new Set(all)]);\n\n  // Return uniquq result\n  return [...new Set(all)];\n}\n\n/**\n * Create vinyl object from filepath\n * @param {object} src File descriptor either pass \"filepath\" or \"html\"\n * @param {object} options Critical options\n * @returns {Promise<Vinyl>} The vinyl object\n */\nexport async function vinylize(src, options = {}) {\n  const {filepath, html} = src;\n  const {rebase = {}, request = {}} = options;\n  const file = new Vinyl();\n  file.cwd = '/';\n  file.remote = false;\n  file.inline = false;\n\n  if (html) {\n    const {to} = rebase;\n    file.contents = Buffer.from(html);\n    file.path = to || '';\n    file.virtualPath = to || '';\n  } else if (filepath && Buffer.isBuffer(filepath)) {\n    file.path = '';\n    file.virtualPath = '';\n    file.contents = filepath;\n    file.inline = true;\n  } else if (filepath && isVinyl(filepath)) {\n    return filepath;\n  } else if (filepath && isRemote(filepath)) {\n    let url = filepath;\n    try {\n      const response = await fetch(filepath, {...options, request: {...request, method: 'head'}});\n      if (response.url !== url) {\n        debug(`(vinylize) found redirect from ${url} to ${response.url}`);\n        url = response.url;\n      }\n    } catch {}\n\n    file.remote = true;\n    file.url = url;\n    file.urlObj = urlParse(url);\n    file.contents = await fetch(url, options);\n    file.virtualPath = file.urlObj.pathname;\n  } else if (filepath && fs.existsSync(filepath)) {\n    file.path = filepath;\n    file.virtualPath = filepath;\n    file.contents = await readFileAsync(filepath);\n  } else {\n    throw new FileNotFoundError(filepath);\n  }\n\n  return file;\n}\n\n/**\n * Get stylesheet file object\n * @param {Vinyl} document Document vinyl object\n * @param {string} filepath Path/Url to css file\n * @param {object} options Critical options\n * @returns {Promise<Vinyl>} Vinyl representation fo the stylesheet\n */\nexport async function getStylesheet(document, filepath, options = {}) {\n  const {rebase = {}, css, strict, media} = options;\n  const originalPath = filepath;\n\n  const exists = await fileExists(filepath, options);\n\n  if (!exists) {\n    const searchPaths = await getAssetPaths(document, filepath, options);\n    try {\n      filepath = await resolve(filepath, searchPaths, options);\n    } catch (error) {\n      if (!isRemote(filepath) || strict) {\n        throw error;\n      }\n\n      return new Vinyl();\n    }\n  }\n\n  // Create absolute file paths for local files passed via css option\n  // to prevent document relative stylesheet paths if they are not relative specified\n  if (!Buffer.isBuffer(originalPath) && !isVinyl(filepath) && !isRemote(filepath) && checkCssOption(css)) {\n    filepath = path.resolve(filepath);\n  }\n\n  const file = await vinylize({filepath}, options);\n  if (media) {\n    file.contents = Buffer.from(`@media ${media} { ${file.contents.toString()} }`);\n  }\n\n  // Restore original path for local files referenced from document and not from options\n  if (!Buffer.isBuffer(originalPath) && !isRemote(originalPath) && !checkCssOption(css)) {\n    file.path = originalPath;\n  }\n\n  // Get stylesheet path. Keeps stylesheet url if it differs from document url\n  const stylepath = await getStylesheetPath(document, file, options);\n  if (Buffer.isBuffer(originalPath)) {\n    file.path = stylepath;\n    file.virtualPath = stylepath;\n  }\n\n  debug('(getStylesheet) Virtual Stylesheet Path:', stylepath);\n  // We can safely rebase assets if we have:\n  // - a url to the stylesheet\n  // - if rebase.from and rebase.to is specified\n  // - a valid document path and a stylesheet path\n  // - an absolute positioned stylesheet so we can make the images absolute\n  // - and rebase is not disabled (#359)\n  // First respect the user input\n  if (rebase === false) {\n    return file;\n  }\n\n  if (rebase.from && rebase.to) {\n    file.contents = await rebaseAssets(file.contents, rebase.from, rebase.to, {\n      method: 'rebase',\n      strict: options.strict,\n      inlined: Buffer.isBuffer(originalPath),\n    });\n  } else if (typeof rebase === 'function') {\n    file.contents = await rebaseAssets(file.contents, stylepath, document.virtualPath, {\n      method: rebase,\n      strict: options.strict,\n      inlined: Buffer.isBuffer(originalPath),\n    });\n    // Next rebase to the stylesheet url\n  } else if (isRemote(rebase.to || stylepath)) {\n    const from = rebase.from || stylepath;\n    const to = rebase.to || stylepath;\n    const method = (asset) => (isRemote(asset.originUrl) ? asset.originUrl : urlResolve(to, asset.originUrl));\n    file.contents = await rebaseAssets(file.contents, from, to, {\n      method,\n      strict: options.strict,\n      inlined: Buffer.isBuffer(originalPath),\n    });\n\n    // Use relative path to document (local)\n  } else if (document.virtualPath) {\n    file.contents = await rebaseAssets(file.contents, rebase.from || stylepath, rebase.to || document.virtualPath, {\n      method: 'rebase',\n      strict: options.strict,\n      inlined: Buffer.isBuffer(originalPath),\n    });\n  } else if (document.remote) {\n    const {pathname} = document.urlObj;\n    file.contents = await rebaseAssets(file.contents, rebase.from || stylepath, rebase.to || pathname, {\n      method: 'rebase',\n      strict: options.strict,\n      inlined: Buffer.isBuffer(originalPath),\n    });\n\n    // Make images absolute if we have an absolute positioned stylesheet\n  } else if (isAbsolute(stylepath)) {\n    file.contents = await rebaseAssets(file.contents, rebase.from || stylepath, rebase.to || '/index.html', {\n      method: (asset) => normalizePath(asset.absolutePath),\n      strict: options.strict,\n      inlined: Buffer.isBuffer(originalPath),\n    });\n  } else {\n    warn(`Not rebasing assets for ${originalPath}. Use \"rebase\" option`);\n  }\n\n  debug('(getStylesheet) Result:', file);\n\n  return file;\n}\n\nconst isCssSource = (string) => {\n  try {\n    parse(string);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\n/**\n * Get css for document\n * @param {Vinyl} document Vinyl representation of HTML document\n * @param {object} options Critical options\n * @returns {Promise<string>} Css string unoptimized, Multiple stylesheets are concatenated with EOL\n */\nexport async function getCss(document, options = {}) {\n  const {css} = options;\n  let stylesheets = [];\n\n  if (checkCssOption(css)) {\n    const cssArray = Array.isArray(css) ? css : [css];\n\n    // merge css files & css source strings passed as css option\n    const filesRaw = await Promise.all(\n      cssArray.map((value) => {\n        if (isCssSource(value)) {\n          return Buffer.from(value);\n        }\n\n        return glob(value, options);\n      })\n    );\n\n    const files = filesRaw.flat();\n    stylesheets = await mapAsync(files, (file) => getStylesheet(document, file, options));\n    debug('(getCss) css option set', files, stylesheets);\n  } else {\n    stylesheets = await mapAsync(document.stylesheets, (file, index) => {\n      const media = (document.stylesheetsMedia || [])[index];\n      return getStylesheet(document, file, {...options, media});\n    });\n    debug('(getCss) extract from document', document.stylesheets, stylesheets);\n  }\n\n  return stylesheets\n    .filter((stylesheet) => !stylesheet.isNull())\n    .map((stylesheet) => stylesheet.contents.toString())\n    .join(os.EOL);\n}\n\n/**\n * We need to make sure the html file is available alongside the relative css files\n * as they are required by penthouse/puppeteer to render the html correctly\n * @see https://github.com/pocketjoso/penthouse/issues/280\n *\n * @param {Vinyl} document Vinyl representation of HTML document\n * @returns {Promise<string>} File url to html file for use in penthouse\n */\nasync function preparePenthouseData(document) {\n  const tmp = [];\n  const stylesheets = document.stylesheets || [];\n  const [stylesheet, ...canBeEmpty] = stylesheets\n    .filter((file) => isRelative(file))\n    .map((file) => file.replace(/\\?.*$/, ''));\n\n  // Make sure we go as deep inside the temp folder as required by relative stylesheet hrefs\n  const subfolders = [stylesheet, ...canBeEmpty]\n    .reduce((res, href) => {\n      const match = /^(\\.\\.\\/)+/.exec(href || '');\n      return match && match[0].length > res.length ? match[0] : res;\n    }, './')\n    .replaceAll('../', 'sub/');\n  const dir = path.join(temporaryDirectory(), subfolders);\n  const filename = path.basename(temporaryFile({extension: 'html'}));\n  const file = path.join(dir, filename);\n\n  const htmlContent = document.contents.toString();\n  // Inject all styles to make sure we have everything in place\n  // because puppeteer doesn't seem to fetch protocol relative links\n  // when served from file://\n  const injected = htmlContent.replaceAll(/(<head(?:\\s[^>]*)?>)/gi, `$1<style>${document.css.toString()}</style>`);\n  // Write html to temp file\n  await outputFileAsync(file, injected);\n\n  tmp.push(file);\n\n  // Write styles to first stylesheet\n  if (stylesheet) {\n    const filename = path.join(dir, stylesheet);\n    tmp.push(filename);\n    await outputFileAsync(filename, document.css);\n  }\n\n  // Write empty string to rest of the linked stylesheets\n  await forEachAsync(canBeEmpty, (dummy) => {\n    const filename = path.join(dir, dummy);\n    tmp.push(filename);\n    outputFileAsync(filename, '');\n  });\n\n  return [getFileUri(file), getCleanup(tmp)];\n}\n\n/**\n * Get document file object\n * @param {string} filepath Path/Url to html file\n * @param {object} options Critical options\n * @returns {Promise<Vinyl>} Vinyl representation of HTML document\n */\nexport async function getDocument(filepath, options = {}) {\n  const {rebase = {}, base} = options;\n\n  if (!isVinyl(filepath) && !isRemote(filepath) && !fs.existsSync(filepath) && base) {\n    filepath = joinPath(base, filepath);\n  }\n\n  const document = await vinylize({filepath}, options);\n\n  document.stylesheets = await getStylesheetHrefs(document, options);\n  document.stylesheetsMedia = await getStylesheetsMedia(document, options);\n  document.virtualPath = rebase.to || (await getDocumentPath(document, options));\n\n  document.cwd = base || process.cwd();\n  if (!base && document.path) {\n    document.cwd = document.path.replace(document.virtualPath, '');\n  }\n\n  debug('(getDocument) Result: ', {\n    path: document.path,\n    url: document.url,\n    remote: Boolean(document.remote),\n    virtualPath: document.virtualPath,\n    stylesheets: document.stylesheets,\n    cwd: document.cwd,\n  });\n\n  document.css = await getCss(document, options);\n\n  const [url, cleanup] = await preparePenthouseData(document);\n  document.url = url;\n  document.cleanup = cleanup;\n\n  return document;\n}\n\n/**\n * Get document file object from raw html source\n * @param {string} html HTML source\n * @param {object} options Critical options\n * @returns {Promise<*>} Vinyl representation of HTML document\n */\nexport async function getDocumentFromSource(html, options = {}) {\n  const {rebase = {}, base} = options;\n  const document = await vinylize({html}, options);\n\n  document.stylesheets = await getStylesheetHrefs(document);\n  document.stylesheetsMedia = await getStylesheetsMedia(document);\n  document.virtualPath = rebase.to || (await getDocumentPath(document, options));\n  document.cwd = base || process.cwd();\n\n  debug('(getDocumentFromSource) Result: ', {\n    path: document.path,\n    url: document.url,\n    remote: Boolean(document.remote),\n    virtualPath: document.virtualPath,\n    stylesheets: document.stylesheets,\n    cwd: document.cwd,\n  });\n\n  document.css = await getCss(document, options);\n\n  const [url, cleanup] = await preparePenthouseData(document);\n  document.url = url;\n  document.cleanup = cleanup;\n\n  return document;\n}\n"
  },
  {
    "path": "test/array.test.js",
    "content": "import {mapAsync, reduceAsync, filterAsync, forEachAsync} from '../src/array.js';\n\nconst waitFor = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); // eslint-disable-line no-promise-executor-return\nconst waitRandom = () => waitFor(Math.floor(Math.random() * Math.floor(50)));\n\ntest('async map', async () => {\n  const afunc = async (value) => {\n    await waitRandom();\n    return value * value;\n  };\n\n  const func = (value) => value * value;\n  const array = [1, 2, 3, 4, 5, 6, 7, 8];\n  const expected = array.map((value) => func(value));\n\n  const result1 = await mapAsync(array, (v) => func(v));\n  const result2 = await mapAsync(array, (v) => afunc(v));\n\n  expect(result1).toEqual(expected);\n  expect(result2).toEqual(expected);\n});\n\ntest('async map (default)', async () => {\n  const array = [1, 2, 3, 4, 5, 6, 7, 8];\n\n  const result = await mapAsync(array);\n  expect(result).toEqual(array);\n});\n\ntest('async map (empty)', async () => {\n  const result = await mapAsync();\n  expect(result).toEqual([]);\n});\n\ntest('async reduce', async () => {\n  const afunc = async (res, value, index) => {\n    await waitRandom();\n    return [...res, value * index];\n  };\n\n  const func = (res, value, index) => [...res, value * index];\n  const array = [1, 2, 3, 4, 5, 6, 7, 8];\n  const expected = array.reduce((res, value, index) => func(res, value, index), []);\n\n  const result1 = await reduceAsync([], array, func);\n  const result2 = await reduceAsync([], array, afunc);\n\n  expect(result1).toEqual(expected);\n  expect(result2).toEqual(expected);\n});\n\ntest('async reduce (default)', async () => {\n  const array = [1, 2, 3, 4, 5, 6, 7, 8];\n\n  const result = await reduceAsync(array);\n  expect(result).toEqual(array);\n});\n\ntest('async reduce (empty)', async () => {\n  const result = await reduceAsync();\n  expect(result).toEqual(undefined);\n});\n\ntest('async filter', async () => {\n  const afunc = async (value) => {\n    await waitRandom();\n    return value % 2;\n  };\n\n  const func = (value) => value % 2;\n  const array = [1, 2, 3, 4, 5, 6, 7, 8];\n  const expected = array.filter((value) => func(value));\n\n  const result1 = await filterAsync(array, func);\n  const result2 = await filterAsync(array, afunc);\n\n  expect(result1).toEqual(expected);\n  expect(result2).toEqual(expected);\n});\n\ntest('async filter (default)', async () => {\n  const array = [1, 0, 3, false, 5, undefined, 7, null];\n\n  const result = await filterAsync(array);\n  expect(result).toEqual([1, 3, 5, 7]);\n});\n\ntest('async filter (empty)', async () => {\n  const result = await filterAsync();\n  expect(result).toEqual([]);\n});\n\ntest('async forEach', async () => {\n  const array = [1, 2, 3, 4, 5, 6, 7, 8];\n  const expected = [];\n  const result1 = [];\n  const result2 = [];\n  array.forEach((v) => expected.push(v));\n\n  await forEachAsync(array, (v) => result1.push(v));\n  await forEachAsync(array, async (v) => {\n    await waitRandom();\n    result2.push(v);\n  });\n\n  expect(result1).toEqual(expected);\n  expect(result2).toEqual(expected);\n});\n"
  },
  {
    "path": "test/blackbox.test.js",
    "content": "import path from 'node:path';\nimport {createServer} from 'node:http';\nimport {fileURLToPath} from 'node:url';\nimport {Buffer} from 'node:buffer';\nimport process from 'node:process';\nimport fs from 'node:fs';\nimport {jest} from '@jest/globals';\nimport getPort from 'get-port';\nimport Vinyl from 'vinyl';\nimport nock from 'nock';\nimport async from 'async';\nimport finalhandler from 'finalhandler';\nimport serveStatic from 'serve-static';\nimport nn from 'normalize-newline';\nimport {generate} from '../index.js';\nimport {read, readAndRemove} from './helper/index.js';\n\njest.setTimeout(100_000);\n\nconst __dirname = fileURLToPath(new URL('.', import.meta.url));\nconst FIXTURES_DIR = path.join(__dirname, '/fixtures/');\n\nfunction assertCritical(target, expected, done, skipTarget) {\n  return (err, {css, html} = {}) => {\n    const output = /\\.css$/.test(target) ? css : html;\n\n    if (err) {\n      console.log(err);\n      done(err);\n    }\n\n    try {\n      expect(err).toBeFalsy();\n      expect(output).toBeDefined();\n      if (!skipTarget) {\n        const dest = readAndRemove(target);\n        expect(dest).toBe(expected);\n      }\n\n      expect(nn(output)).toBe(expected);\n    } catch (error) {\n      done(error);\n      return;\n    }\n\n    done();\n  };\n}\n\n// Setup static fileserver to mimic remote requests\nlet server;\nlet port;\nbeforeAll(async () => {\n  const serve = serveStatic(path.join(__dirname, 'fixtures'), {index: ['index.html', 'index.htm']});\n  const serveUserAgent = serveStatic(path.join(__dirname, 'fixtures/useragent'), {\n    index: ['index.html', 'index.htm'],\n  });\n\n  port = await getPort();\n\n  server = createServer((req, res) => {\n    if (req.headers['user-agent'] === 'custom agent') {\n      return serveUserAgent(req, res, finalhandler(req, res));\n    }\n\n    serve(req, res, finalhandler(req, res));\n  }).listen(port);\n});\n\nafterAll(() => server.close());\n\n// Prepare stderr mock\nlet stderr;\nbeforeEach(() => {\n  stderr = jest.spyOn(process.stderr, 'write').mockImplementation(() => true);\n});\n\nafterEach(() => {\n  stderr.mockRestore();\n});\n\ndescribe('generate (local)', () => {\n  test('generate critical-path CSS', (done) => {\n    const expected = read('expected/generate-default.css');\n    const target = path.resolve('.critical.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default.html',\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('generate critical-path CSS from CSS files passed as Vinyl objects', (done) => {\n    const expected = read('expected/generate-default.css');\n    const target = path.resolve('.critical.css');\n    const stylesheets = ['fixtures/styles/main.css', 'fixtures/styles/bootstrap.css'].map((filePath) => {\n      return new Vinyl({\n        cwd: '/',\n        base: '/fixtures/',\n        path: filePath,\n        contents: Buffer.from(fs.readFileSync(path.join(__dirname, filePath), 'utf8'), 'utf8'),\n      });\n    });\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default-nostyle.html',\n        target,\n        css: stylesheets,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should throw an error on timeout', (done) => {\n    const target = path.join(__dirname, '.include.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default.html',\n        penthouse: {\n          timeout: 1,\n        },\n        target,\n        width: 1300,\n        height: 900,\n      },\n      (err) => {\n        expect(err).toBeInstanceOf(Error);\n        done();\n      }\n    );\n  });\n\n  test('should throw a usable error when no stylesheets are found', (done) => {\n    const target = path.join(__dirname, '.error.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'error.html',\n        penthouse: {\n          timeout: 1,\n        },\n        target,\n        width: 1300,\n        height: 900,\n      },\n      (err) => {\n        expect(err).toBeInstanceOf(Error);\n        fs.promises.unlink(target).then(() => done());\n      }\n    );\n  });\n\n  test('should generate critical-path CSS with query string in file name', (done) => {\n    const expected = read('expected/generate-default.css');\n    const target = path.resolve('.critical.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default-querystring.html',\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should ignore stylesheets blocked due to 403', (done) => {\n    const expected = '';\n    const target = path.resolve('.403.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: '403-css.html',\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should ignore stylesheets blocked due to 404', (done) => {\n    const expected = '';\n    const target = path.resolve('.404.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: '404-css.html',\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate multi-dimension critical-path CSS', (done) => {\n    const expected = read('expected/generate-adaptive.css', 'utf8');\n    const target = path.resolve('.adaptive.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-adaptive.html',\n        target,\n        dimensions: [\n          {\n            width: 100,\n            height: 70,\n          },\n          {\n            width: 1000,\n            height: 70,\n          },\n        ],\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should consider inline styles', (done) => {\n    const expected = read('expected/generate-adaptive.css', 'utf8');\n    const target = path.resolve('.adaptive-inline.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-adaptive-inline.html',\n        target,\n        dimensions: [\n          {\n            width: 100,\n            height: 70,\n          },\n          {\n            width: 1000,\n            height: 70,\n          },\n        ],\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should consider data uris in stylesheet hrefs', (done) => {\n    const expected = read('expected/generate-adaptive.css', 'utf8');\n    const target = path.resolve('.adaptive-base64.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-adaptive-base64.html',\n        target,\n        dimensions: [\n          {\n            width: 100,\n            height: 70,\n          },\n          {\n            width: 1000,\n            height: 70,\n          },\n        ],\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate minified critical-path CSS', (done) => {\n    const expected = read('expected/generate-default.css', true);\n    const target = path.resolve('.critical.min.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default.html',\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate minified critical-path CSS successfully with external css file configured', (done) => {\n    const expected = read('expected/generate-default.css', true);\n    const target = path.resolve('.nostyle.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default-nostyle.html',\n        css: ['fixtures/styles/main.css', 'fixtures/styles/bootstrap.css'],\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should evaluate css passed as source string', (done) => {\n    const expected = 'html{display:block}';\n    const target = path.resolve('.source-string.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default-nostyle.html',\n        css: ['html{display:block}.someclass{color:red}'],\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline relative images', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.resolve('.image-relative.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-image.html',\n        css: ['fixtures/styles/image-relative.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline relative images from folder', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.resolve('.image-relative.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'folder/generate-image.html',\n        css: ['fixtures/styles/image-relative.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should rewrite relative images for html outside root', (done) => {\n    const expected = read('expected/generate-image-relative.css');\n    const target = path.resolve('fixtures/folder/.image-relative.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'folder/generate-image.html',\n        css: ['fixtures/styles/image-relative.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: false,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should rewrite relative images for html outside root with css file', (done) => {\n    const expected = read('expected/generate-image-relative-subfolder.css');\n    const target = path.resolve('fixtures/folder/subfolder/.image-relative-subfolder.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'folder/subfolder/generate-image-absolute.html',\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: false,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should rewrite relative images for html outside root destFolder option', (done) => {\n    const expected = read('expected/generate-image-relative-subfolder.css');\n    const target = path.resolve('.image-relative-subfolder.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'folder/subfolder/generate-image-absolute.html',\n        // destFolder: 'folder/subfolder',\n        // Dest: target,\n        width: 1300,\n        height: 900,\n        inlineImages: false,\n      },\n      assertCritical(target, expected, done, true)\n    );\n  });\n\n  test('should rewrite relative images for html inside root', (done) => {\n    const expected = read('expected/generate-image-skip.css');\n    const target = path.resolve('.image-relative.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-image.html',\n        css: ['fixtures/styles/image-relative.css'],\n        target,\n        // destFolder: '.',\n        width: 1300,\n        height: 900,\n        inlineImages: false,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline absolute images', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.resolve('.image-absolute.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-image.html',\n        css: ['fixtures/styles/image-absolute.css'],\n        target,\n        // destFolder: '.',\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should skip to big images', (done) => {\n    const expected = read('expected/generate-image-big.css');\n    const target = path.resolve('.image-big.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-image.html',\n        css: ['fixtures/styles/image-big.css'],\n        target,\n        // destFolder: '.',\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('considers \"inlineImages\" option', (done) => {\n    const expected = read('expected/generate-image-skip.css');\n    const target = path.resolve('.image-skip.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-image.html',\n        css: ['fixtures/styles/image-relative.css'],\n        target,\n        // destFolder: '.',\n        width: 1300,\n        height: 900,\n        inlineImages: false,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should not screw up win32 paths', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.resolve('.image.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-image.html',\n        css: ['fixtures/styles/some/path/image.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should respect pathPrefix', (done) => {\n    const expected = read('expected/path-prefix.css');\n    const target = path.resolve('.path-prefix1.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'path-prefix.html',\n        css: ['fixtures/styles/path-prefix.css'],\n        target,\n        width: 1300,\n        height: 900,\n        // pathPrefix: ''\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should detect pathPrefix', (done) => {\n    const expected = read('expected/path-prefix.css');\n    const target = path.resolve('.path-prefix2.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'path-prefix.html',\n        css: ['fixtures/styles/path-prefix.css'],\n        target,\n        // destFolder: '.',\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate and inline, if \"inline\" option is set', (done) => {\n    const expected = read('expected/generateInline.html');\n    const target = path.join(__dirname, '.generateInline1.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generateInline.html',\n        // destFolder: '.',\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate and inline critical-path CSS', (done) => {\n    const expected = read('expected/generateInline.html');\n    const target = path.join(__dirname, '.generateInline2.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generateInline.html',\n        // destFolder: '.',\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate and inline minified critical-path CSS', (done) => {\n    const expected = read('expected/generateInline.html');\n    const target = path.join(__dirname, '.generateInline-minified3.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generateInline.html',\n        // destFolder: '.',\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should handle multiple calls', (done) => {\n    const expected1 = read('expected/generateInline.html');\n    const expected2 = read('expected/generateInline-svg.html');\n\n    async.series(\n      {\n        first(cb) {\n          generate(\n            {\n              base: FIXTURES_DIR,\n              src: 'generateInline.html',\n              inline: true,\n            },\n            cb\n          );\n        },\n        second(cb) {\n          generate(\n            {\n              base: FIXTURES_DIR,\n              src: 'generateInline-svg.html',\n              inline: true,\n            },\n            cb\n          );\n        },\n      },\n      (err, results) => {\n        try {\n          expect(err).toBeFalsy();\n          expect(nn(results.first.html)).toBe(expected1);\n          expect(nn(results.second.html)).toBe(expected2);\n          done();\n        } catch (error) {\n          done(error);\n        }\n      }\n    );\n  });\n\n  test('should inline critical-path CSS ignoring remote stylesheets', (done) => {\n    const expected = read('expected/generateInline-external-minified.html');\n    const target = path.resolve('.generateInline-external.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generateInline-external.html',\n        inlineImages: false,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline critical-path CSS with extract option ignoring remote stylesheets', (done) => {\n    const expected = read('expected/generateInline-external-extract.html');\n    const target = path.resolve('.generateInline-external-extract.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generateInline-external.html',\n        inlineImages: false,\n        extract: true,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline critical-path CSS without screwing svg images ', (done) => {\n    const expected = read('expected/generateInline-svg.html');\n    const target = path.resolve('.generateInline-svg.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generateInline-svg.html',\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline and extract critical-path CSS', (done) => {\n    const expected = read('expected/generateInline-extract.html');\n    const target = path.resolve('.generateInline-extract.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        extract: true,\n        src: 'generateInline.html',\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline and extract critical-path CSS from html source', (done) => {\n    const expected = read('expected/generateInline-extract.html');\n    const target = path.resolve('.generateInline-extract-src.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        extract: true,\n        html: read('fixtures/generateInline.html'),\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should consider \"ignore\" option', (done) => {\n    const expected = read('expected/generate-ignore.css');\n    const target = path.resolve('.ignore.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default.html',\n        target,\n        ignore: ['@media', '.header', /jumbotron/],\n\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should handle empty \"ignore\" array', (done) => {\n    const expected = read('expected/generate-default.css', true);\n    const target = path.join(__dirname, '.ignore.min.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default.html',\n        target,\n        ignore: [],\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should handle ignore \"@font-face\"', (done) => {\n    const expected = read('expected/generate-ignorefont.css', true);\n    const target = path.join(__dirname, '.ignorefont.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-ignorefont.html',\n        target,\n        ignore: ['@font-face'],\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should keep styles defined by the `include` option', (done) => {\n    const expected = read('fixtures/styles/include.css');\n    const target = path.join(__dirname, '.include.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'include.html',\n        include: [/someRule/],\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('#192 - include option - generate', (done) => {\n    const expected = read('expected/issue-192.css');\n    const target = path.join(__dirname, '.issue-192.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'issue-192.html',\n        css: ['fixtures/styles/issue-192.css'],\n        dimensions: [\n          {\n            width: 320,\n            height: 480,\n          },\n          {\n            width: 768,\n            height: 1024,\n          },\n          {\n            width: 1280,\n            height: 960,\n          },\n          {\n            width: 1920,\n            height: 1080,\n          },\n        ],\n        extract: false,\n        ignore: ['@font-face', /url\\(/],\n        include: [/^\\.main-navigation.*$/, /^\\.hero-deck.*$/, /^\\.deck.*$/, /^\\.search-box.*$/],\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should not complain about missing css if the css is passed via options', (done) => {\n    const expected = read('expected/generate-default-nostyle.css');\n    const target = path.join(__dirname, '.generate-default-nostyle.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default-nostyle.html',\n        css: ['fixtures/styles/bootstrap.css'],\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should not complain about missing css if the css is passed via options (inline)', (done) => {\n    const expected = read('expected/generate-default-nostyle.html');\n    const target = path.join(__dirname, '.generate-default-nostyle.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'generate-default-nostyle.html',\n        css: ['fixtures/styles/bootstrap.css'],\n        target,\n        inline: true,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should handle PAGE_UNLOADED_DURING_EXECUTION error (inline)', (done) => {\n    const expected = read('fixtures/issue-314.html');\n    const target = path.join(__dirname, '.issue-314.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'issue-314.html',\n        css: ['fixtures/styles/bootstrap.css'],\n        target,\n        inline: true,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test.skip('should handle PAGE_UNLOADED_DURING_EXECUTION error', (done) => {\n    const expected = '';\n    const target = path.join(__dirname, '.issue-314.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'issue-314.html',\n        css: ['fixtures/styles/bootstrap.css'],\n        target,\n        inline: false,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  // external css changed\n  test.skip('external CSS with absolute url', (done) => {\n    const expected = read('expected/issue-395.css');\n    const target = path.join(__dirname, '.issue-395.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'issue-395.html',\n        target,\n        inline: false,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('Correctly order css on multiple dimensions', (done) => {\n    const dimensions = [700, 600, 100, 200, 250, 150, 350, 400, 450, 500, 300, 550, 50].map((width) => {\n      return {width, height: 1000};\n    });\n\n    const expected = read('fixtures/styles/issue-415.css');\n    const target = path.join(__dirname, '.issue-415.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'issue-415.html',\n        target,\n        inline: false,\n        dimensions,\n        concurrency: 10,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('Ignore inlined stylesheets (disabled)', (done) => {\n    const inlineStyles = '.test-selector{color:#00f}';\n    const target = path.join(__dirname, '.ignore-inlined-styles.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'ignoreInlinedStyles.html',\n        target,\n        ignoreInlinedStyles: false,\n        inline: false,\n        concurrency: 1,\n      },\n      assertCritical(target, inlineStyles, done)\n    );\n  });\n\n  test('Ignore inlined stylesheets (enabled)', (done) => {\n    const target = path.join(__dirname, '.ignore-inlined-styles.css');\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'ignoreInlinedStyles.html',\n        target,\n        ignoreInlinedStyles: true,\n        inline: false,\n        concurrency: 1,\n      },\n      assertCritical(target, '', done)\n    );\n  });\n\n  test('issue #566 - consider base tag', (done) => {\n    const expected = read('expected/issue-566.css');\n    const target = path.join(__dirname, '.issue-566.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: 'issue-566.html',\n        target,\n        inline: false,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n});\n\ndescribe('generate (remote)', () => {\n  test('should generate critical-path CSS', (done) => {\n    const expected = read('expected/generate-default.css');\n    const target = path.join(__dirname, '.critical.css');\n\n    generate(\n      {\n        src: `http://localhost:${port}/generate-default.html`,\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate multi-dimension critical-path CSS', (done) => {\n    const expected = read('expected/generate-adaptive.css', 'utf8');\n    const target = path.join(__dirname, '.adaptive.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-adaptive.html`,\n        target,\n        penthouse: {\n          timeout: 10_000,\n        },\n        dimensions: [\n          {\n            width: 100,\n            height: 70,\n          },\n          {\n            width: 1000,\n            height: 70,\n          },\n        ],\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate minified critical-path CSS', (done) => {\n    const expected = read('expected/generate-default.css', true);\n    const target = path.join(__dirname, '.critical.min.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-default.html`,\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate minified critical-path CSS successfully with external css file configured', (done) => {\n    const expected = read('expected/generate-default.css', true);\n    const target = path.join(__dirname, '.nostyle.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-default-nostyle.html`,\n        css: ['fixtures/styles/main.css', 'fixtures/styles/bootstrap.css'],\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline relative images', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.join(__dirname, '.image-relative.css');\n    try {\n      generate(\n        {\n          src: `http://localhost:${port}/generate-image.html`,\n          target,\n          width: 1300,\n          height: 900,\n          inlineImages: true,\n        },\n        assertCritical(target, expected, done)\n      );\n    } catch (error) {\n      console.log(error);\n    }\n  });\n\n  test('should inline relative images fetched over http', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.join(__dirname, '.image-relative.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-image.html`,\n        css: ['fixtures/styles/image-relative.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n        //  assetPaths: [`http://localhost:${port}/`, `http://localhost:${port}/styles`]\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline absolute images', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.join(__dirname, '.image-absolute.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-image.html`,\n        css: ['fixtures/styles/image-absolute.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline absolute images fetched over http', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.join(__dirname, '.image-absolute.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-image.html`,\n        css: ['fixtures/styles/image-absolute.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n        // assetPaths: [`http://localhost:${port}/`, `http://localhost:${port}/styles`]\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should skip to big images', (done) => {\n    const expected = read('expected/generate-image-big.css');\n    const target = path.join(__dirname, '.image-big.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-image.html`,\n        css: ['fixtures/styles/image-big.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('considers \"inlineImages\" option', (done) => {\n    const expected = read('expected/generate-image-skip.css');\n    const target = path.join(__dirname, '.image-skip.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-image.html`,\n        css: ['fixtures/styles/image-relative.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: false,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should not screw up win32 paths', (done) => {\n    const expected = read('expected/generate-image.css');\n    const target = path.join(__dirname, '.image.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-image.html`,\n        css: ['fixtures/styles/some/path/image.css'],\n        target,\n        width: 1300,\n        height: 900,\n        inlineImages: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should respect pathPrefix', (done) => {\n    const expected = read('expected/path-prefix.css');\n    const target = path.join(__dirname, '.path-prefix.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/path-prefix.html`,\n        css: ['fixtures/styles/path-prefix.css'],\n        target,\n        width: 1300,\n        height: 900,\n        // Empty string most likely to candidate for failure if change in code results in checking option lazily,\n        // pathPrefix: ''\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should detect pathPrefix', (done) => {\n    const expected = read('expected/path-prefix.css');\n    const target = path.join(__dirname, '.path-prefix.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/path-prefix.html`,\n        css: ['fixtures/styles/path-prefix.css'],\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate and inline, if \"inline\" option is set', (done) => {\n    const expected = read('expected/generateInline.html');\n    const target = path.join(__dirname, '.generateInline.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generateInline.html`,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate and inline critical-path CSS', (done) => {\n    const expected = read('expected/generateInline.html');\n    const target = path.join(__dirname, '.generateInline.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generateInline.html`,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should generate and inline minified critical-path CSS', (done) => {\n    const expected = read('expected/generateInline.html');\n    const target = path.join(__dirname, '.generateInline.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generateInline.html`,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should handle multiple calls', (done) => {\n    const expected1 = read('expected/generateInline.html');\n    const expected2 = read('expected/generateInline.html');\n    async.series(\n      {\n        first(cb) {\n          generate(\n            {\n              base: FIXTURES_DIR,\n              src: `http://localhost:${port}/generateInline.html`,\n              inline: true,\n            },\n            cb\n          );\n        },\n        second(cb) {\n          generate(\n            {\n              base: FIXTURES_DIR,\n              src: `http://localhost:${port}/generateInline.html`,\n              inline: true,\n            },\n            cb\n          );\n        },\n      },\n      (err, results) => {\n        expect(err).toBeFalsy();\n        expect(nn(results.first.html)).toBe(expected1);\n        expect(nn(results.second.html)).toBe(expected2);\n        done(err);\n      }\n    );\n  });\n\n  test('should inline critical-path CSS handling remote stylesheets', (done) => {\n    const expected = read('expected/generateInline-external-minified2.html');\n    const target = path.join(__dirname, '.generateInline-external2.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generateInline-external2.html`,\n        inlineImages: false,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline critical-path CSS with extract option handling remote stylesheets', (done) => {\n    const expected = read('expected/generateInline-external-extract2.html');\n    const target = path.join(__dirname, '.generateInline-external-extract.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generateInline-external2.html`,\n        inlineImages: false,\n        extract: true,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline critical-path CSS without screwing svg images ', (done) => {\n    const expected = read('expected/generateInline-svg.html');\n    const target = path.join(__dirname, '.generateInline-svg.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generateInline-svg.html`,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should inline and extract critical-path CSS', (done) => {\n    const expected = read('expected/generateInline-extract.html');\n    const target = path.join(__dirname, '.generateInline-extract.html');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        extract: true,\n        src: `http://localhost:${port}/generateInline.html`,\n        target,\n        inline: true,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should consider \"ignore\" option', (done) => {\n    const expected = read('expected/generate-ignore.css');\n    const target = path.join(__dirname, '.ignore.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-default.html`,\n        target,\n        ignore: ['@media', '.header', /jumbotron/],\n\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should handle empty \"ignore\" array', (done) => {\n    const expected = read('expected/generate-default.css', true);\n    const target = path.join(__dirname, '.ignore.min.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-default.html`,\n        target,\n        ignore: [],\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should handle ignore \"@font-face\"', (done) => {\n    const expected = read('expected/generate-ignorefont.css', true);\n    const target = path.join(__dirname, '.ignorefont.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-ignorefont.html`,\n        target,\n        ignore: ['@font-face'],\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should keep styles defined by the `include` option', (done) => {\n    const expected = read('fixtures/styles/include.css');\n    const target = path.join(__dirname, '.include.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/include.html`,\n        include: [/someRule/],\n        target,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should use the provided user agent to get the remote src', (done) => {\n    const expected = read('expected/generate-default.css');\n    const target = path.join(__dirname, '.critical.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/generate-default-useragent.html`,\n        include: [/someRule/],\n        target,\n        width: 1300,\n        height: 900,\n        userAgent: 'custom agent',\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n\n  test('should use the provided request method to check for asset existance', async () => {\n    const mockGet = jest.fn();\n    const mockHead = jest.fn();\n    nock(`http://localhost:${port}`, {allowUnmocked: true})\n      .intercept('/styles/adaptive.css', 'GET')\n      .reply(200, mockGet)\n      .intercept('/styles/adaptive.css', 'HEAD')\n      .reply(200, mockHead);\n\n    await generate({\n      base: FIXTURES_DIR,\n      src: `http://localhost:${port}/generate-adaptive.html`,\n      width: 1300,\n      height: 900,\n      request: {method: 'get'},\n    });\n\n    expect(mockGet).toHaveBeenCalled();\n    expect(mockHead).not.toHaveBeenCalled();\n\n    await generate({\n      base: FIXTURES_DIR,\n      src: `http://localhost:${port}/generate-adaptive.html`,\n      width: 1300,\n      height: 900,\n    });\n\n    expect(mockHead).toHaveBeenCalled();\n  });\n\n  test('issue #566 - consider base tag', (done) => {\n    const expected = read('expected/issue-566.css');\n    const target = path.join(__dirname, '.issue-566.css');\n\n    generate(\n      {\n        base: FIXTURES_DIR,\n        src: `http://localhost:${port}/issue-566.html`,\n        target,\n        inline: false,\n        width: 1300,\n        height: 900,\n      },\n      assertCritical(target, expected, done)\n    );\n  });\n});\n"
  },
  {
    "path": "test/cli.test.js",
    "content": "import {exec, execFile} from 'node:child_process';\n// import {createRequire} from 'node:module';\nimport path from 'node:path';\nimport process from 'node:process';\nimport {fileURLToPath} from 'node:url';\nimport {promisify} from 'node:util';\nimport {globby} from 'globby';\nimport {jest} from '@jest/globals';\nimport nn from 'normalize-newline';\nimport {read, getPkg} from './helper/index.js';\n\njest.setTimeout(100_000);\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n// const require = createRequire(import.meta.url);\n\nconst {version, bin} = getPkg();\n\njest.unstable_mockModule('../index.js', () => ({\n  generate: jest.fn(),\n  stream: jest.fn(),\n}));\n\nconst criticalBin = path.join(__dirname, '..', bin);\n\nprocess.chdir(path.resolve(__dirname));\nprocess.setMaxListeners(0);\n\nconst pExec = promisify(exec);\nconst pExecFile = promisify(execFile);\n\nconst run = async (args = []) => pExecFile('node', [criticalBin, ...args]);\n\nconst getArgs = async (params = []) => {\n  const origArgv = process.argv;\n  process.argv = ['node', criticalBin, ...params];\n\n  await import('../cli.js');\n  process.argv = origArgv;\n  const {generate} = await import('../index.js');\n  const [args] = generate.mock.calls;\n  const [opts] = args || [{}];\n  expect(generate).toHaveBeenCalledTimes(1);\n  return opts || {};\n};\n\nconst pipe = async (filename, args = []) => {\n  const cat = process.platform === 'win32' ? 'type' : 'cat';\n  const cmd = `${cat} ${filename} | node ${criticalBin} ${args.join(' ')}`;\n  return pExec(cmd, {shell: true});\n};\n\ndescribe('CLI', () => {\n  describe('acceptance', () => {\n    test('Show error alongside help', async () => {\n      expect.assertions(3);\n      try {\n        await run(['not available']);\n      } catch (error) {\n        expect(error.stderr).toMatch('Error:');\n        expect(error.stderr).toMatch('Usage: critical');\n        expect(error.code).toBe(1);\n      }\n    });\n\n    test('Return version', async () => {\n      const {stdout, stderr} = await run(['--version']);\n\n      expect(stderr).toBeFalsy();\n      expect(stdout.trim()).toBe(version);\n    });\n\n    test('Take html file passed via parameter', async () => {\n      const {stdout, stderr} = await run([\n        'fixtures/generate-default.html',\n        '--base',\n        'fixtures',\n        '--width',\n        '1300',\n        '--height',\n        '900',\n      ]);\n      const expected = await read('expected/generate-default.css');\n\n      expect(stderr).toBeFalsy();\n      expect(nn(stdout)).toBe(expected);\n    });\n\n    test('Take html file piped to critical', async () => {\n      const {stdout, stderr} = await pipe(path.normalize('fixtures/generate-default.html'), [\n        '--base',\n        'fixtures',\n        '--width',\n        '1300',\n        '--height',\n        '900',\n      ]);\n      const expected = await read('expected/generate-default.css');\n\n      expect(stderr).toMatch('Not rebasing assets for');\n      expect(stderr.code).toBeUndefined();\n      expect(nn(stdout)).toBe(expected);\n    });\n\n    test('Pipe html file inside a folder to critical', async () => {\n      const {stdout, stderr} = await pipe(path.normalize('fixtures/folder/generate-default.html'), [\n        '--base',\n        'fixtures',\n        '--width',\n        '1300',\n        '--height',\n        '900',\n      ]);\n      const expected = await read('expected/generate-default.css');\n\n      expect(stderr).toMatch('Not rebasing assets for');\n      expect(stderr.code).toBeUndefined();\n      expect(nn(stdout)).toBe(expected);\n    });\n\n    test('Inline images to piped html file', async () => {\n      const {stdout, stderr} = await pipe(path.normalize('fixtures/generate-image.html'), [\n        '-c',\n        'fixtures/styles/image-relative.css',\n        '--inlineImages',\n        '--base',\n        'fixtures',\n        '--width',\n        '1300',\n        '--height',\n        '900',\n      ]);\n      const expected = await read('expected/generate-image.css');\n\n      expect(stderr).toBeFalsy();\n      expect(nn(stdout)).toBe(expected);\n    });\n\n    test(\"Add an absolute image path to critical css if we can't determine document location\", async () => {\n      const {stdout, stderr} = await pipe(path.normalize('fixtures/folder/generate-image.html'), [\n        '-c',\n        'fixtures/styles/image-relative.css',\n        '--base',\n        'fixtures',\n        '--width',\n        '1300',\n        '--height',\n        '900',\n      ]);\n      const expected = await read('expected/generate-image-absolute.css');\n\n      expect(stderr).toBeFalsy();\n      expect(nn(stdout)).toBe(expected);\n    });\n\n    test('Add absolute image paths on piped html without relative links', async () => {\n      const {stdout, stderr} = await pipe(path.normalize('fixtures/folder/subfolder/generate-image-absolute.html'), [\n        '--base',\n        'fixtures',\n        '--width',\n        '1300',\n        '--height',\n        '900',\n      ]);\n      const expected = await read('expected/generate-image-absolute.css');\n\n      expect(stderr).toBeFalsy();\n      expect(nn(stdout)).toBe(expected);\n    });\n\n    test('Exit with code 1 and show help', async () => {\n      expect.assertions(2);\n      try {\n        await run(['fixtures/not-exists.html']);\n      } catch (error) {\n        expect(error.code).toBe(1);\n        expect(error.stderr).toMatch('Usage:');\n      }\n    });\n\n    test('Generate multi-dimension critical-path CSS using cli', async () => {\n      const {stdout} = await pipe(path.normalize('fixtures/generate-adaptive.html'), [\n        '--base',\n        'fixtures',\n        '--dimensions',\n        '100x70',\n        '--dimensions',\n        '1000x70',\n      ]);\n      const expected = await read('expected/generate-adaptive.css', 'utf8');\n      expect(nn(stdout)).toBe(expected);\n    });\n  });\n\n  let exit;\n  describe('mocked', () => {\n    beforeEach(() => {\n      jest.resetModules();\n      exit = process.exit;\n    });\n\n    afterEach(() => {\n      process.exit = exit;\n    });\n\n    test('pass the correct opts when using short opts', async () => {\n      const args = await getArgs(['fixtures/generate-default.html', '-c', 'css', '-w', '300', '-h', '400', '-e', '-i']);\n\n      expect(args).toMatchObject({\n        width: 300,\n        height: 400,\n        css: ['css'],\n        inline: true,\n        extract: true,\n      });\n    });\n\n    test('pass the correct opts when using long opts', async () => {\n      const args = await getArgs([\n        'fixtures/generate-default.html',\n        '--css',\n        'css',\n        '--width',\n        '300',\n        '--height',\n        '400',\n        '--ignore',\n        'ignore',\n        '--include',\n        '/include/',\n        '--inline',\n        '--extract',\n        '--inlineImages',\n        '1024',\n        '--assetPaths',\n        'assetPath1',\n        '--assetPaths',\n        'assetPath2',\n        '--dimensions',\n        '1300x800',\n        '--dimensions',\n        '640x480',\n        '--dimensions',\n        '1x2,3x4,5x6',\n      ]);\n\n      expect(args).toMatchObject({\n        width: 300,\n        height: 400,\n        css: ['css'],\n        inline: true,\n        extract: true,\n        dimensions: [\n          {width: 1300, height: 800},\n          {width: 640, height: 480},\n          {width: 1, height: 2},\n          {width: 3, height: 4},\n          {width: 5, height: 6},\n        ],\n      });\n    });\n\n    test('Set inline to false when prefixed with --no', async () => {\n      const args = await getArgs(['fixtures/generate-default.html', '--no-inline']);\n\n      expect(args).toMatchObject({\n        inline: false,\n      });\n    });\n\n    test('Set penthouse options prefixed with --penthouse-', async () => {\n      const args = await getArgs([\n        'fixtures/generate-default.html',\n        '--penthouse-strict',\n        '--penthouse-timeout',\n        '50000',\n        '--penthouse-renderWaitTime',\n        '300',\n      ]);\n\n      expect(args).toMatchObject({\n        penthouse: {\n          strict: true,\n          timeout: 50_000,\n          renderWaitTime: 300,\n        },\n      });\n    });\n\n    test('Set request options prefixed with --request-', async () => {\n      const args = await getArgs([\n        'fixtures/generate-default.html',\n        '--request-method',\n        'get',\n        '--no-request-followRedirect',\n      ]);\n\n      expect(args).toMatchObject({\n        request: {\n          method: 'get',\n          followRedirect: false,\n        },\n      });\n    });\n\n    test('Handle shell expanded the glob', async () => {\n      // simulate system glob\n      const css = await globby('fixtures/**/*.css');\n      const args = await getArgs(['fixtures/generate-default.html', '-c', ...css, '--target', 'test.css']);\n\n      expect(args).toMatchObject({\n        css,\n        target: 'test.css',\n        src: 'fixtures/generate-default.html',\n      });\n    });\n\n    test('Handle glob', async () => {\n      // simulate system glob\n      const args = await getArgs(['fixtures/generate-default.html', '-c', 'fixtures/**/*.css', '--target', 'test.css']);\n\n      expect(args).toMatchObject({\n        css: ['fixtures/**/*.css'],\n        target: 'test.css',\n        src: 'fixtures/generate-default.html',\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/config.test.js",
    "content": "import {ConfigError} from '../src/errors.js';\nimport {getOptions, DEFAULT} from '../src/config.js';\n\ntest('Throws ConfigError on invalid config', () => {\n  expect(async () => {\n    await getOptions({invalidParam: true});\n  }).rejects.toThrow(ConfigError);\n});\n\ntest('Throws ConfigError on missing param', async () => {\n  expect(async () => {\n    await getOptions({});\n  }).rejects.toThrow(ConfigError);\n});\n\ntest('Throws ConfigError when html & src are both set', async () => {\n  expect(async () => {\n    await getOptions({html: '...', src: '...'});\n  }).rejects.toThrow(ConfigError);\n});\n\ntest('Throws ConfigError on empty required value', async () => {\n  expect(async () => {\n    await getOptions({src: ''});\n  }).rejects.toThrow(ConfigError);\n});\n\ntest('Returns config object', async () => {\n  const config = await getOptions({src: '...'});\n  expect(config).toMatchObject({\n    src: '...',\n    width: DEFAULT.width,\n    height: DEFAULT.height,\n    maxImageFileSize: DEFAULT.maxImageFileSize,\n    strict: DEFAULT.strict,\n    extract: DEFAULT.extract,\n    concurrency: DEFAULT.concurrency,\n    inlineImages: DEFAULT.inlineImages,\n    include: DEFAULT.include,\n    inline: DEFAULT.inline,\n    dimensions: [{width: DEFAULT.width, height: DEFAULT.height}],\n    penthouse: {\n      forceInclude: DEFAULT.include,\n      timeout: DEFAULT.timeout,\n      maxEmbeddedBase64Length: DEFAULT.maxImageFileSize,\n    },\n  });\n});\n\ntest('Target config on passed string', async () => {\n  expect(await getOptions({src: '...', target: 'test.css'})).toHaveProperty('target', {css: 'test.css'});\n  expect(await getOptions({src: '...', target: 'test.html'})).toHaveProperty('target', {html: 'test.html'});\n});\n\ntest('Inline config on passed boolean', async () => {\n  expect(await getOptions({src: '...', inline: true, base: 'BASE'})).toHaveProperty('inline', {\n    basePath: 'BASE',\n    strategy: 'media',\n  });\n});\n\ntest('Inline config on passed object', async () => {\n  expect(await getOptions({src: '...', inline: {check: true}, base: 'BASE'})).toHaveProperty('inline', {\n    basePath: 'BASE',\n    check: true,\n  });\n});\n\ntest('Penthouse config on passed object', async () => {\n  expect(await getOptions({src: '...', penthouse: {check: true}})).toHaveProperty('penthouse', {\n    forceInclude: DEFAULT.include,\n    timeout: DEFAULT.timeout,\n    maxEmbeddedBase64Length: DEFAULT.maxImageFileSize,\n    check: true,\n  });\n});\n\ntest('Ignore config on passed array', async () => {\n  expect(await getOptions({src: '...', ignore: ['@font-face']})).toHaveProperty('ignore', {\n    atrule: ['@font-face'],\n    rule: ['@font-face'],\n    decl: ['@font-face'],\n  });\n});\n\ntest('Parses config values passed as JSON string', async () => {\n  const headers = {cookie: 'key=value'};\n  expect(await getOptions({src: '...', request: {headers: JSON.stringify(headers)}})).toHaveProperty('request', {\n    headers,\n  });\n});\n"
  },
  {
    "path": "test/core.test.js",
    "content": "import process from 'node:process';\nimport {createServer} from 'node:http';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport {jest} from '@jest/globals';\nimport finalhandler from 'finalhandler';\nimport getPort from 'get-port';\nimport serveStatic from 'serve-static';\nimport CleanCSS from 'clean-css';\nimport {create} from '../src/core.js';\nimport {read} from './helper/index.js';\n\nconst __dirname = fileURLToPath(new URL('.', import.meta.url));\njest.setTimeout(100_000);\n\n// Set up static fileserver to mimic remote requests\nlet server;\nlet port;\nbeforeAll(async () => {\n  const root = path.join(__dirname, 'fixtures');\n  const serve = serveStatic(root, {index: ['index.html', 'index.htm']});\n  port = await getPort();\n\n  server = createServer((req, res) => {\n    serve(req, res, finalhandler(req, res));\n  }).listen(port);\n});\n\nafterAll(() => server.close());\n\n// Prepare stderr mock\nlet stderr;\nbeforeEach(() => {\n  stderr = jest.spyOn(process.stderr, 'write').mockImplementation(() => true);\n});\n\nafterEach(() => {\n  stderr.mockRestore();\n});\n\ntest('Generate critical-path CSS', async () => {\n  const css = read('expected/generate-default.css');\n  const html = read('fixtures/generate-default.html');\n\n  try {\n    const result = await create({\n      src: `http://localhost:${port}/generate-default.html`,\n    });\n\n    expect(result.css).toBe(css);\n    expect(result.html).toBe(html);\n  } catch (error) {\n    expect(error).toBe(undefined);\n  }\n});\n\ntest('Generate critical-path CSS with custom cleancss config', async () => {\n  const css = read('fixtures/styles/issue-562.css');\n  const html = read('fixtures/issue-562.html');\n\n  const optionsArray = [\n    {\n      level: 2,\n      format: 'beautify',\n    },\n    {\n      level: 1,\n    },\n  ];\n\n  for (const options of optionsArray) {\n    const expected = new CleanCSS(options).minify(css).styles;\n\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      const result = await create({\n        src: `http://localhost:${port}/issue-562.html`,\n        cleanCSS: options,\n        inline: false,\n        dimensions: [\n          {\n            width: 100,\n            height: 70,\n          },\n          {\n            width: 1000,\n            height: 70,\n          },\n        ],\n      });\n\n      expect(result.css).toBe(expected);\n      expect(result.html).toBe(html);\n    } catch (error) {\n      expect(error).toBe(undefined);\n    }\n  }\n});\n"
  },
  {
    "path": "test/expected/generate-adaptive-useragent.css",
    "content": "#of{background:teal}#guybrush{color:pink}#threepwood{background:orange;content:'monkey island'}@media screen and (min-width:900px){div{height:400px;background:brown}}#revenge{background:#ffefd5}"
  },
  {
    "path": "test/expected/generate-adaptive.css",
    "content": "#of{background:teal}#guybrush{color:pink}#threepwood{background:orange;content:'monkey island'}@media screen and (min-width:900px){div{height:400px;background:brown}}#revenge{background:#ffefd5}"
  },
  {
    "path": "test/expected/generate-default-nostyle.css",
    "content": "html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}"
  },
  {
    "path": "test/expected/generate-default-nostyle.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <style>html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}</style>\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n\n        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n        <script>\n            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n            e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n            e.src='//www.google-analytics.com/analytics.js';\n            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n            ga('create','UA-XXXXX-X');ga('send','pageview');\n        </script>\n\n        <!-- build:js scripts/vendor.js -->\n        <!-- bower:js -->\n        <script src=\"../old/fixture/bower_components/jquery/dist/jquery.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n        <!-- endbower -->\n        <!-- endbuild -->\n\n        <!-- build:js scripts/plugins.js -->\n        <script src=\"../old/fixture/bower_components/bootstrap/js/affix.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/alert.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/dropdown.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tooltip.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/modal.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/transition.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/button.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/popover.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/carousel.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/scrollspy.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/collapse.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tab.js\"></script>\n        <!-- endbuild -->\n\n        <!-- build:js scripts/main.js -->\n        <script src=\"../old/fixture/scripts/main.js\"></script>\n        <!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/expected/generate-default.css",
    "content": "body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}"
  },
  {
    "path": "test/expected/generate-ignore.css",
    "content": "body{padding-top:20px;padding-bottom:20px}.marketing{padding-left:15px;padding-right:15px}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.marketing{margin:40px 0}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}"
  },
  {
    "path": "test/expected/generate-ignorefont.css",
    "content": "body{font-family:'PT Sans',sans-serif}"
  },
  {
    "path": "test/expected/generate-ignorefont.html",
    "content": "<!doctype html>\n<html>\n<head lang=\"en\">\n    <meta charset=\"utf-8\">\n    <title>Font-face</title>\n    <style>\n        body{font-family:'PT Sans',sans-serif}\n    </style>\n    <link rel=\"stylesheet\" href=\"styles/font.css\" media=\"print\" onload=\"this.media='all'\">\n</head>\n<body>\n    <h1>should be styled by @font-face</h1>\n\n<noscript><link rel=\"stylesheet\" href=\"styles/font.css\"></noscript>\n</body>\n</html>\n"
  },
  {
    "path": "test/expected/generate-image-absolute.css",
    "content": ".header{background:url('/images/critical.png')}"
  },
  {
    "path": "test/expected/generate-image-big.css",
    "content": ".header{background:url('images/critical-big.png')}"
  },
  {
    "path": "test/expected/generate-image-relative-subfolder.css",
    "content": ".header{background:url('../../images/critical.png')}"
  },
  {
    "path": "test/expected/generate-image-relative.css",
    "content": ".header{background:url('../images/critical.png')}"
  },
  {
    "path": "test/expected/generate-image-skip.css",
    "content": ".header{background:url('images/critical.png')}"
  },
  {
    "path": "test/expected/generate-image.css",
    "content": ".header{background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAL4AAABZCAYAAACANZ6nAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGMkQ4NDQwMzFFQjkxMUU0OUEwRERGQUVGMzBBOUUwRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGMkQ4NDQwNDFFQjkxMUU0OUEwRERGQUVGMzBBOUUwRCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkYyRDg0NDAxMUVCOTExRTQ5QTBEREZBRUYzMEE5RTBEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkYyRDg0NDAyMUVCOTExRTQ5QTBEREZBRUYzMEE5RTBEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+JjHrHwAAGZpJREFUeNrsXQl4VEW2Pt2drUnIvrGJEFRWEXfBZ8SBAcFxGXGQ587oKIPoOCwqPPVTdPR7jogPWXRQBkdwgXFBRlBRHEEJWxSUZACTgCQhEEI2Qvb0q//ec9O3L7c7vZIAdb7vfEnf/Vb9deo/p07VtTgcDpIi5UwTqywCKRL4UqRI4EuRIoEvRYoEvhQpEvhSpJyCEqb/UVlZSdu2bSObzebrdexCY4TaZJGeIM1CjwutCakFs1rJbref2QXd3EyJiYl07rnn+gb8nTt30ogRI3y511lCLxF6jtAUoeFC5cCAUyxCm4RWCN0rNJv/tgT9RhYL9ezZU2kAZ+rYTE1NDY0ePZqWLl3qG/B9kHihNwq9iK/RILRRaL3Euin4E4X+F2uu0JVCDwa16w4Lo06dOp3RwIdERkb6TnW8lHShfxSaBnbEFh6WPoorWYqrONgoVHP59BM6TejfhP5HFk8H4PheCHj8JLZg5UIjGPCHhBayxZfgdwU9jEIXoV2Z9lSxT/QHoXO43IJi8eGbyRSU0AD/t2zxjwrtxED/h9DvhdbJ4nQrNrb0v2VfCI5uZ6G/E/pyMPyi+Ph4heY0NTXJ0vYmGODDsd3ZkYXFimTQvyp0kwR92wEHoT8JnSu0hC3+MQ4KDAm4VQlLn5CQQC0tLbKkQwD8C7mHaGF687HQX2QR+iQwGu+zhbdyg7gwGNYeVEcCPzRU52x20sBZDzO98STJQq8UmsTW7TuhBzw4zIh4xDGN2iC01M2xvYVeJjSaIyPfsON4qgjCmflCM7g8u7Eh8avXBODT0tIktw8R8O0M4CYGfjGpgzLuBI7cw0ITSA11hnMjWCR0l+HYvkIf4MrXrn+F0P8zaSigWnfrrCUawKV8bNkpVO77hZ4ntJYbcJy/wE9JSaHw8HDJ7UNEdazcSBwctWls4/ibhcay9YYjV87bbyE1EqRveOP4b4Xu2Bi+hl60bY1MGWoY7IiY/OYUK/cGXdTHRn6OpyBuD+BjxFJK6Di+XjyFLDG41YN7BCsfa2WLlsy9QavBYq01HHucKUCygWp1ZtBYdMeiAfRkh/t0L/cTrD1GbCXNaacKMIlguPOyHLxfkxZyH8prMRzb5OZYCx97Rnl2sPZxcXHS2ncg4MPR/A9THQ3YLUxVEAXSD9gcYr4bw8dpinN/1lEkYoewlDmx/lj0Arle0K/TSqS173jAh3zAwE1gECcwH19uYrWXcQOI52PjGeQrTHjx29yw4hjw8Rxd+pe09lJCEdXxVeB8YrBmMHN1gB6ZicdMjkVo9K9CL2C+f5DBbJbwlif0BVIHfeK4B/lRWnspHQX4xMDd4uWxaBAbvTwW0Z/1Z2qFSWvfsamOFM/it6lOTk6W1r4DWHw548p38RT18iiYYSWtffsAH6FDxON7Cf2z7DH8khZ2zGv94fYyA7P9LD7MjZ0rT4r/Vr+ZfJi7oHF7Cfr2pzrS2gdm9f3i9lLaD/jg9UgTyCc528pf0CeyetUAZCTHK8EgKMaBkO5SEWzgO5jmIMNyiSxrv2WU0BvIyyVHvLT26IExtoEkwCp/fAiDYHAQYWZfuBXypZBlW9kOZYqpnM8LfU/onaGgKw5p6QMWG3kZ0vTC2iOR71FSx0Fy2Shhttc7Qkf4+XzXk5p28nfyPnKH4xYL3cON+mRLNDf6xFBz/FYZMGAAXXzxxUpsuT3jy8hLz8vLo6ysLKqvD9pKJzAOSdyNosEjZeIIuSbQ+SpeG442rD0m72DOM7JTkdKBkWxE3VKF3ip0vNAXuWH4IsNIXUXjalLTTY7owD2BGxvSRPbqzknihoZ7DyV1ht7JFIcucBB64Pfr14+mTJmiRBs6wqAKGmBmZiatX7+eNm/eTA0NDf5eKoGBdRaDv17XneNFi9jKHg7Vu2CNmNjYWHdTCvuTOo0Rs9f+KfRJUvOjGrmRYmI7JujMEFpA6iQgb+UVpjibdaBXbIvQZ7mhlRiAj3K4j0H/6ukc1VFk5MiRsK6Wmpoau7BMHSHSUxsfH988YcIEGj58uNIA0AM0NvqUzvMrUmeBIQ/oQ1KT6Jp0Vg85RUO4opFXtIZCsIIcQI+J5G5CmM8w6D9ly663dJXsg8Uw+Kcz9fGWe2OG3SyT7XXknOZpNgNvNSud1sDv1q0bZWRkUF1dXazVakU2ZQY5ZxedbLFylORuYeU3g+pgEvYdd9xB/fv3pyVLlnhr/e8idYxinhugNLO1A9i/4a4fjtUbPjqCbUpERIS7XnQgOWedPe2he1/OAMY85Wu4EVv53HjuKbpyw0nid0YiIKaDZpKaMr6W6csopmgJfO3hzKtRFut533XcGL8kNepnlCF8Xm9uREhc/IzcTxvF7Lpf8/siqIKU9q+EbqMA518EBHxwT3a6bPwyvTtAY7Zrzwagl5WV0eDBg2nixInKmoq1tR6DHePZQfK2q65hh+5WjiS8GdQXsdvdAX8YP2cWg8edlHGDHM40RatzZMP2IXWm3P2kLh1D3JAB/GtJXexqAwN/kNC3DNf+E/9dowP+S6QumXKXAfiR7GtMNgmo4LjfC/3asP1mrod0k/daSOqc7sZ2Az5m+bMlrWWL117rZ9rY8jmMz4hVoC+99FLasmULZWe7xckFDISX/bj3u0KnML/9Llgv5MGp7cd/c73oZWaZOIHaxPbZbEUX8TYNrFodalZ1h9A7GC/g+N3YD9jCFr+VZvJf4zM9z+WDiUT/y2WEHudeoTdxzzOMnEsqwsqv4Mb0Ovsy9ew8w2eZxD7Wc+0C/JKSEjpw4AB16dKlUoD/Rp3j156y38xJzM3NpV27dnmKsoAKrNLRhih2EstMqISFeX61rrIx+ea/uRsONd2L479VAV5nK9OeQ21EoODgvs2/pzLwv+LyaitShYWFH+T/b+XzNIF/grg7VpSbxg0B8ghfb77uXOJgwjHuPW7hnqv+pAMfDuP27dtp3LhxzYJT53XUIXWEOdesWeMpxNmXAbxHF9G5nZzrgi43WLHfcWSjka39QbZAsGiDGVAnI3QX6GIB89oA/Qk2RIcZbyf338g06xMD6DVBb4OVNgaQc30hJEA+YYgaabKB/4ICJZKfq04HHNXBIvzC2gvMWyKpYwxs1Zs5PqmpqR5fg2mDJtcz1/2UHdcrdRwU6/ikcZd9JVfsQt63m/2cUAPfYmgA/spxPxucL/e+SGetzWQj+wXNup4yV4fP8zhoksiNoq8XvUxogd+1a1fq27cvLGksd1kdIapzD+lmfmmDahhv+Oqrr9ydm2qwLt+QcyW3VQbLqp8wv9VgMYs4cmEJMeVrDrTidX5RqCVFY8buiIObCNA17INc4eY9A0pcCgj4yA3nwRUbRwkyOoDFjzbb2Ma6klE66xfG4G52U2Elht7lZ51jfZy79TAKcB4waKMH6nhY12DbEm3CPxK3KtvJIPnaO8Hv+IgBv5yNz2Eu08HM/a3tBnxDVEejGO0d1Wlx10g9uSvkXOEtkx2ozV7eFxXRhcN6EeTMtQ+MxIteCj5JVFSU2e7vdTQCDd1Tshuc0pEcVXmtHeql1IdGqtXjUwxsOLlzDfsbgtHbBRzVKSwspPT09I4Q1dHoRYGZ5cRzehBELZLZubUyh/dW0nTlqH0lJiiLW3kYcNMW1UUvi5j7Sg9O+9XcC/0QpDK2+kg1cN9R7Bu586+eYJr4OKkpIhrnXxMKvzQoUZ0dO3bgo2OI6uztyBMl9u3b53E3qYM037GDepMPPL0X+wTEFbY/WM98/Phxd3SnhK33/zAPziLzL6sgOQ0f8FjnQw/WVs+ohW/jvDznI34OZGxeYuL4P8ARtE/JuUhYE1v+gVwferw+qGt4jnYBPsKEGBUVoLeJCurdgSz+cWMDHTVqFO3evRvpFWbn/sTOVCrze9C1YdT2kidD2D/IITUv5mxSh+CDIviKH57dzQfdMCh0OamDOv8mddR0E/c2GIj7PUecwO1nuonOOLyI3ri4ShxxGcwARK9TxT2Qu3PQKBcxwDEohRSLbUzR7uGoGajlkzojhAEXJAi+yj0Afnfne2of0gh3g19HyIEvKA51794dlimOW3bfDsDxr2UguFCGXr16Ue/evSknJ8fs3DquDFilv3EFPciVutPN/TIYWIv59/VsnYLmQCI5rby8XAnFmiSqoXFjPAEjqLexw2eUnfweWw3Opl0HHnfOvnas1UBrFvK7wr9Yzb1dJjknKZnhair7PxPpxLSOfG4U23XbpjOeEKufo9uOZeMnsQ+Aff3JuZS8dk97yIEPK4QK4XVeIg2F2l5i6sXC0mPeQE5OrjujgFgnBlFGk5qf8gZ3wQPYapXyiYnMV/uy44iCv4od3FeC7hmWllJ8fBzZbGFmVh9riyJHaB47sH34/QvZ+n9t4vg2cg+Q5IH+fEFqLky+ib8CoP+KyybewMNncfhyk0kjhWVHxuivuWes5eNWk2vqM/FzDWXK2Z/LfTs3BtC8Mga+PsKGyM9Rcg5Chhb4HC2BRcgzeN3tAfgWI81RG6caWZw8eQaNHXsrLVw4h7Zs+c4MSG+yhYzggoS1uZIbQ5iOW+bzvlquSHDXBRTk7Ez1K4YA/xFKSkoU1NJttuZW8n7QDGX0fhvH/MRKHuhLlgnFWOHhnGamjt6umFdgsPZ6MbtPNnlO2HMP/J49ewntTfv353t1clFRkTLjqU+fPlWC7txo6RjebR3ofktLMzU3NypASU8/iy64YKgATiRddll3uuKKK+nbb7+mp56aQQcOuPiisI7IX5/A3TMs/3ruDWyGaMY5TKsa+ByXzxENG5ZJnTvH0Nq1/q1nGx+fSM8/P1epEzTc1157mX74YTslJCTKVdSCHdXp0aM7LVnyPk2cOJ727cvz6gLr1q0D8FETtfoK0dqAWSVpzprZPsxlcThaTLarYUmzgShne3OI/Q7hECL+HS2eawClpfWg6OjOynUbGxsE369Xjs/MHEGLF79LmzZtoM8//5f4+432PLVs+QcxhRnBXaj2MetYDn3iQb41cFNKSUmjJ5/8i3CmrxMW20pTp06mjz5636dKiY2No/nzl9DQoZlUVVVBERGR9Mwzc2nmzCn0008/SPAHIxKiL8Cqqhphxavo8OESuueeW6igoBX80cwLozhyk613UiZP/iNlZPRxyXV3OJoJGA0LU7trlz6vuUmA3yLUuM+h5PejYaiNQ09ZWhQrDq5rHLtQ76XSLoCkZ89zFbXboxUfBOcZgYIGhHz3zp1jqb6+QfQA60VDmE+bN39rPDaJIwop5MxULNJxfkUuuugyGjPmBrrkkito4MDzlXkAoCoxMZ1pxgyA36V3Hit0DDm/GjOHr6mAftGif4ieaZigOIdbjURUlF15Fwl+z+HfESNG0Ouvv+4b8Kura0Wh7qPExEQ6dKiY7r67FfxugY8KeO+91UoFawMuAPTRo4cUy5uWdpYCPKe1t9HBg/sUUCYkOL/fpFnz4uJ9gs+mUadOMa3WHZVfV1crGmQRdet2NjcYR+u+qqpyOnasSlCaHhQZGaWcC+uu3tfilZ+CBgDZuHE9vfPOUvryy7WKxUaDctdrJSUlU79+A+mWW24TBX6tuLddPEe1qICaVsCiIdrtkXTzzaNp166dHoFvBnr9cwL8MBqPP/6guNYOhQ5J8AcJ+Dk5+5ljJgjwH6S77rpZ0J58Dfh2HfDfQEU98MCf6P77HxZAL1OsuB7gALMa9TE6bWqEQt8gNPDjPADeSHdAVbAPFW+Mymj3QiNSewbfB07VBmARDSBOuRboDxr1/v0FrfQIzuXPP+8RoCyhO+/8g6CGZwkjkaycW11d1dpbGa+Lsvzss9U0e/ZMca6S03adDvgonTmiLIsWLXpbgH7oCaDXXwu9lGr5HxRGCuBPMqWGEvh+AF9LPktOTqUff/xeWLTR0aKwp3HcF8D//uKLL1++YMGbgj/HUU1NNZ0uS+2gPAByNGoADJNY9D47wI2ywV/0Khhg0s7xdE27vZNo8ERPPDGdPvjgPcS9f8PAh9O84KWXFhSNG3e76A2LPOYVuYJ/iqgfSXv8Ab4xnJnCobsmFP7Ro0fCBg26oPj88y/6tr6+tkdGxnnpgnJYBSiip09/Ak5jbk3NMdF/W8aQ85tXxA0EkRCMGl6vM9EWDvl9yvcapouS2NiB/EQXJ2/UPSc413ccPkzVnRfB8eB9pA5AhZNz0SsHx6Rt7KS26EKftRwXRpz4Qu1eAsC4V7FwKr8Uv64S79dTF6YMF/jG++5g4GJSegtHs3DNf/M7jOHfDvWSliZRbqtFI0qfPXvOpUlJqecLCjlAALjhyJHSBkGNmkeOHDtE9AaDRLk36srwZzJMZcSt4EuB9rzwwnzh9D5K27dnKVRNgt/PqA6D7S1XR7Q5S4B+6L33Tr5w/Pg7h1RUlCtOmwDEJMFn54iKwKAFMuiME81v4ljwshPDjUoOBkC/1LAvj4GPCdATDfveYxDMphMTnh4idTDp76TmprhEFpmivW3YDicVsUbM/nnKsO8bATGsFDBNvJ/xG7ov8nvNJ+ckbU1wrRy+l83wzufU1dVdbbM1vjF16iwFpFglbceObUeXLVtaL3ye+wSgJxl6jnfJZA4vjoHP06lTtHCcnxZUcwLqQ8nklOD3TrzKaYaDp3JsqwJ6dPU8Yqt9b9ZXntPWORYP23w9jwK4lynb8PD8nsoDxWUBRVKjWmp5ogRVsLb4NAyCY+FEw3+YPHm6ck1/fBtp8VVBsj/WXmlgPhkZFha2Izo6xpaVtbE4PDw8trq6ujkuLq58+PARxdXVx7JFYTeJSviErZ/WTWtroID8ryBn1p2NKQa2F+jvxV27lneRxWFELT4axTFzyOd87QZdqHUP/36fLX6LjmqUsl+ykpyfH8V7l/NvhFpW6e6l+DD8/wY+Rstsw7V3MM3SckmaGOjaBJZK7p3CdM9RL8oSfD5PAPWfW7ZsSi4s/KVLdHS0Iz9/T1VFxVGbwP5WcUxXUZa1ujLc1Bb4KysrBK8dQ5s3b6R16xBdi6P2n+9/isXx9c6t5pChSx079qpowT+n653bhx6avmzGjCepoqJSCeG1MdHjjBY1FBmlDG4tX76EHn30oUxhoa/XnFur1TZ/5cq1RQMHDubomNWna8O5Xbx4Hr377hIlKiWd27adW6u7wkTKsbBI9Nxzs7QQXDhbXiWWP2/eX+nee2+lnTuzlcKW3NJzFKaw8AA9/PB9NGvWn0FLYvRlibDus8/OVKgLytxXyoKiV/OR5CLWfnN8DfRxcfE0bdok+vjjlW4rFHkoTz/9GEVE2HhEVYoZ7cdA07x5L9KKFW9Tfb3pfADKzt4qnNTblTCpP+CXoA8A+CroIwToE2jq1En04Ydt55js3p1Dc+c+T6mpybLwTYxDWlq6oCBLhZFY1ebxSJcA+JuaAP4Y6ayeLOBjkVJ8hGDq1Ad8SqyaP38uvfTSc6KSU1pHUdEDYCI6okGualF6FESH1MQz1/3Yp0Y7XBXb0ChPvJ4aacJ5ZvfCM6jPYX4v9TnMn9HsOTzfyyY0vDWhDqBfuXIZPf74w16XpQr+2xTqgjQQGBOzdzaWjfw8VgBRHXSzsPSrVq30+UKvvPKiYuEeeWSmsjpAdXW1MqqZkJDgYrlQSUjgwohoTIzRqlnEviNK4wO4NL8BIGpsbBKO9FFKSkpxqWRcD04N+HFiYtIJ96qoqFDOxzX1+wAY3AuWNTo6qnXYX019aMHgnXI9NSfe0XoO3g15QcjT0fs1uBfeuampXnlnBAZWrFhGjz32kM/frsJcAVj+hQvfUiaheF7iHOMBdsUoSPET+NnZW/wCvSYLFsylL75Yq4AWA12oMADVNUnNqmR/YuQRaQGuYLQo+UEJCUkuS2RrKx8fOVJK6eldXNID0MMgZQLzU1NT0wzAtwlwlyr3BIj1AMQ23AuOOQaStPO0nB88I66nn/mEczBqihAirLkR+NiOd05JSVWul5e3x+8PtgH8N9xwjRKxaesaeM+KijJhSKL1ax1J8Rb4vtBXs40Y1MrNdZ24g9wTXwUAdyfl5WVu9wGs7qSo6IDpdiSEuROEFt0/o/vzSkqK23pFr5BZWPiLot4KGjDmFUvw+xHVcSMwOVq8DKCX/WpgYteFYrSyDVhA+fLz85WeCBRNSuDARwwOJg6xfIyQYsmHWFl8fgnAjrV4tLVjMIpdEayLA/yYDgrKJcEfOPAhBQx8WCesNHC5LD6/BFMazyZ1GRb0nL9QkCfoww8pKChQ/CJEtNAA5Mi6/8DH3NJa9gswKRupt/1kEfok+KDCeHJdjSEkS4pjOZW9e/dScXExVVVVKb8tMubpF/BBdTYwxWliBw0LAWEaXQIFuHrtaU5tEJDHxHUE9KPZ2iNtAV9VzAnVjRENwro8WD4Rn0OS1McpvkZ1sPgPFi3qzbw0jIGfyQ2jgeTwrV60TFAMa8cx4OsY9Fi5YcXJehBYfJlP5T/wAWysg4hVsc5lx6yKr9Ndgt6tNHFZ2bh31BZ9LTtpLVCCPiDgEwMdM66wmBIW9oznitXoj5QTJYIpDnwkTE9E4s4xWSynFvA1C/YJc/5BbP3T2aJJ0+LK71vYsuNTQ5jEUtoeD4LwJka3T+eBLbyfhw/8uVaMvguEA7Rt2zZ/nCBUcBSdnG8qnYo8H7y+uT0fAmHN031OLpx5rAmFDxL6BHwpUs4UkSFIKRL4UqRI4EuRIoEvRYoEvhQpEvhSpEjgS5EigS9FigS+FCkS+FKktLf8vwADAPYLv1CPrtvnAAAAAElFTkSuQmCC')}"
  },
  {
    "path": "test/expected/generateInline-external-extract.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <style>body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}</style>\n        <link rel=\"stylesheet\" href=\"styles/main.d41d8cd9.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.beffebca.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\" media=\"print\" onload=\"this.media='all'\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n        <noscript><link rel=\"stylesheet\" href=\"styles/main.d41d8cd9.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" href=\"styles/bootstrap.beffebca.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\"></noscript>\n    </body>\n</html>\n"
  },
  {
    "path": "test/expected/generateInline-external-extract2.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <style>body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}</style>\n        <link rel=\"stylesheet\" href=\"styles/main.d41d8cd9.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" href=\"https://raw.githubusercontent.com/twbs/bootstrap/v3.1.1/dist/css/bootstrap.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\" media=\"print\" onload=\"this.media='all'\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n        <noscript><link rel=\"stylesheet\" href=\"styles/main.d41d8cd9.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" href=\"https://raw.githubusercontent.com/twbs/bootstrap/v3.1.1/dist/css/bootstrap.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\"></noscript>\n    </body>\n</html>\n"
  },
  {
    "path": "test/expected/generateInline-external-minified.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <style>body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}</style>\n        <link rel=\"stylesheet\" href=\"styles/main.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\" media=\"print\" onload=\"this.media='all'\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n        <noscript><link rel=\"stylesheet\" href=\"styles/main.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" href=\"styles/bootstrap.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\"></noscript>\n    </body>\n</html>\n"
  },
  {
    "path": "test/expected/generateInline-external-minified2.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <style>body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}</style>\n        <link rel=\"stylesheet\" href=\"styles/main.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" href=\"https://raw.githubusercontent.com/twbs/bootstrap/v3.1.1/dist/css/bootstrap.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\" media=\"print\" onload=\"this.media='all'\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n        <noscript><link rel=\"stylesheet\" href=\"styles/main.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" href=\"https://raw.githubusercontent.com/twbs/bootstrap/v3.1.1/dist/css/bootstrap.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\"></noscript>\n    </body>\n</html>\n"
  },
  {
    "path": "test/expected/generateInline-extract.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <style>body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}</style>\n        <link rel=\"stylesheet\" href=\"styles/main.d41d8cd9.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.beffebca.css\" media=\"print\" onload=\"this.media='all'\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n        <noscript><link rel=\"stylesheet\" href=\"styles/main.d41d8cd9.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" href=\"styles/bootstrap.beffebca.css\"></noscript>\n    </body>\n</html>\n"
  },
  {
    "path": "test/expected/generateInline-svg.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>critical css test</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n    <style>body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}</style>\n    <link rel=\"stylesheet\" href=\"styles/critical-pregenerated.css\" media=\"print\" onload=\"this.media='all'\">\n\n</head>\n<body>\n<!--[if lt IE 10]>\n<p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n<![endif]-->\n\n<div class=\"container\">\n    <div class=\"header\">\n        <ul class=\"nav nav-pills pull-right\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">About</a></li>\n            <li><a href=\"#\">Contact</a></li>\n        </ul>\n        <h3 class=\"text-muted\">critical css test</h3>\n    </div>\n\n    <div class=\"jumbotron\">\n        <h1>'Allo, 'Allo!</h1>\n        <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n        <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n    </div>\n\n    <div class=\"row marketing\">\n        <div class=\"col-lg-6\">\n            <h4>HTML5 Boilerplate</h4>\n            <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n            <h4>Bootstrap</h4>\n            <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n        </div>\n    </div>\n\n    <div class=\"footer\">\n        <p>♥ from the Yeoman team</p>\n    </div>\n</div>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewbox=\"0 0 563 87.9\" enable-background=\"new 0 0 563 87.9\" xml:space=\"preserve\" width=\"167px\" height=\"26px\" fill=\"#fff\">\n      <g>\n          <g>\n              <path d=\"M137.6,23.6h-15.7v-3.1h34.8v3.1H141v42h-3.3V23.6z\"/>\n              <path d=\"M173.3,20.5h18.9c5.5,0,10,1.7,12.7,4.4c2.1,2.1,3.4,5.1,3.4,8.4v0.1c0,7.5-5.6,11.8-13.2,12.9L210,65.6h-4.2l-14.4-18.7h-0.1h-14.6v18.7h-3.3V20.5z M191.8,43.9c7.5,0,13.1-3.8,13.1-10.3v-0.1c0-6-4.8-9.8-12.9-9.8h-15.4v20.3H191.8z\"/>\n              <path d=\"M225.6,46.9V20.5h3.3v26c0,10.6,5.7,16.7,15.3,16.7c9.1,0,15-5.5,15-16.4V20.5h3.3v25.9c0,12.9-7.5,19.8-18.5,19.8C233.2,66.3,225.6,59.5,225.6,46.9z\"/>\n              <path d=\"M281.6,20.5h32.1v3.1H285v17.7h25.8v3.1H285v18.1h29v3.1h-32.4V20.5z\"/>\n              <path d=\"M326.1,20.5H337l11.8,31.7l11.8-31.7h10.7L353,65.9h-8.8L326.1,20.5z\"/>\n              <path d=\"M393.6,20.2h9.1l19.3,45.4h-10.4l-4.1-10.1h-19.1l-4.1,10.1h-10.1L393.6,20.2z M404.1,46.7l-6-14.6l-6,14.6H404.1z\"/>\n              <path d=\"M433.2,46.3V20.5h9.9V46c0,7.3,3.7,11.1,9.7,11.1c6.1,0,9.7-3.7,9.7-10.8V20.5h9.9V46c0,13.6-7.7,20.3-19.8,20.3C440.6,66.3,433.2,59.5,433.2,46.3z\"/>\n              <path d=\"M489,20.5h9.9v36h22.5v9H489V20.5z\"/>\n              <path d=\"M539.3,29.7h-13.7v-9.1H563v9.1h-13.7v35.9h-9.9V29.7z\"/>\n              <polygon fill=\"#DD7B27\" points=\"55.92,7 91.96,61.76 20.24,61.76 \"/>\n          </g>\n          <g>\n              <path d=\"M63.9,17.6H35.5L22.8,36.5l26.8,26.5l26.8-26.6L63.9,17.6z M60.1,41.1l-0.5,1l-0.4,0.6l-0.7-0.4l-6.7-3.7c-0.6,0.6-1.4,0.9-2.3,0.9c-0.9,0-1.7-0.3-2.3-0.9l-6.7,3.7L40,42.7l-0.4-0.6l-0.5-1l-0.4-0.7l0.7-0.4l6.9-3.8c0,0,0,0,0,0c0-1.3,0.8-2.5,2-3v-7v-0.7H49h1.1h0.7v0.7v7c1.2,0.5,2.1,1.7,2.1,3.1c0,0,0,0,0,0l6.9,3.8l0.7,0.4L60.1,41.1z\"/>\n              <path d=\"M73.3,0H26.1L0,38.8l49.6,49.1L99,38.8L73.3,0zM49.6,67.8L18.5,37l15.3-22.7h31.9l15,22.6L49.6,67.8z\"/>\n          </g>\n      </g>\n  </svg>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0\" height=\"0\" display=\"none\">\n    <symbol id=\"uniqueID\">\n      <title>Title</title>\n      <path d=\"M539.3,29.7h-13.7v-9.1H563v9.1h-13.7v35.9h-9.9V29.7z\" />\n      <path clip-rule=\"evenodd\" d=\"M539.3,29.7h-13.7v-9.1H563v9.1h-13.7v35.9h-9.9V29.7z\" fill-rule=\"evenodd\" />\n    </symbol>\n  </svg>\n        <noscript><link rel=\"stylesheet\" href=\"styles/critical-pregenerated.css\"></noscript>\n    </body>\n</html>\n"
  },
  {
    "path": "test/expected/generateInline.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <style>body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.lead{font-size:21px}.container{width:750px}}@media (min-width:992px){.container{width:970px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.container{width:1170px}.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}@-ms-viewport{width:device-width}</style>\n        <link rel=\"stylesheet\" href=\"styles/main.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css\" media=\"print\" onload=\"this.media='all'\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n        <noscript><link rel=\"stylesheet\" href=\"styles/main.css\"></noscript>\n        <noscript><link rel=\"stylesheet\" href=\"styles/bootstrap.css\"></noscript>\n    </body>\n</html>\n"
  },
  {
    "path": "test/expected/ignore.css",
    "content": ".ignored{color:orange}.in{color:green}"
  },
  {
    "path": "test/expected/inline-image.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <style>\nbody{padding-top:20px;padding-bottom:20px}.header{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}@media screen and (min-width:768px){.container{max-width:730px}.header{padding-left:0;padding-right:0}.header{margin-bottom:30px}}.header{background:transparent url(/images/critical.png)}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:transparent}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h3{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h3{margin-top:20px;margin-bottom:10px}h3{font-size:24px}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.container:after,.container:before,.nav:after,.nav:before{display:table;content:\" \"}.container:after,.nav:after{clear:both}.pull-right{float:right!important}\n</style>\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n\n        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n        <script>\n            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n            e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n            e.src='//www.google-analytics.com/analytics.js';\n            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n            ga('create','UA-XXXXX-X');ga('send','pageview');\n        </script>\n\n        <!-- build:js scripts/vendor.js -->\n        <!-- bower:js -->\n        <script src=\"bower_components/jquery/dist/jquery.js\"></script>\n        <script src=\"bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n        <!-- endbower -->\n        <!-- endbuild -->\n\n        <!-- build:js scripts/plugins.js -->\n        <script src=\"bower_components/bootstrap/js/affix.js\"></script>\n        <script src=\"bower_components/bootstrap/js/alert.js\"></script>\n        <script src=\"bower_components/bootstrap/js/dropdown.js\"></script>\n        <script src=\"bower_components/bootstrap/js/tooltip.js\"></script>\n        <script src=\"bower_components/bootstrap/js/modal.js\"></script>\n        <script src=\"bower_components/bootstrap/js/transition.js\"></script>\n        <script src=\"bower_components/bootstrap/js/button.js\"></script>\n        <script src=\"bower_components/bootstrap/js/popover.js\"></script>\n        <script src=\"bower_components/bootstrap/js/carousel.js\"></script>\n        <script src=\"bower_components/bootstrap/js/scrollspy.js\"></script>\n        <script src=\"bower_components/bootstrap/js/collapse.js\"></script>\n        <script src=\"bower_components/bootstrap/js/tab.js\"></script>\n        <!-- endbuild -->\n\n        <!-- build:js scripts/main.js -->\n        <script src=\"scripts/main.js\"></script>\n        <!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/expected/inline-minified.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>critical css test</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n    <style>\nbody{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:0 0}h1{margin:.67em 0;font-size:2em}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:transparent}body{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}a{color:#428bca;text-decoration:none}h1,h3,h4{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h3{margin-top:20px;margin-bottom:10px}h4{margin-top:10px;margin-bottom:10px}h1{font-size:36px}h3{font-size:24px}h4{font-size:18px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.text-muted{color:#999}ul{margin-top:0;margin-bottom:10px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-6{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:1200px){.col-lg-6{float:left}.col-lg-6{width:50%}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a{color:#fff;background-color:#428bca}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.container:after,.container:before,.nav:after,.nav:before,.row:after,.row:before{display:table;content:\" \"}.container:after,.nav:after,.row:after{clear:both}.pull-right{float:right!important}\n</style>\n\n</head>\n<body>\n<!--[if lt IE 10]>\n<p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n<![endif]-->\n\n<div class=\"container\">\n    <div class=\"header\">\n        <ul class=\"nav nav-pills pull-right\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">About</a></li>\n            <li><a href=\"#\">Contact</a></li>\n        </ul>\n        <h3 class=\"text-muted\">critical css test</h3>\n    </div>\n\n    <div class=\"jumbotron\">\n        <h1>'Allo, 'Allo!</h1>\n        <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n        <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n    </div>\n\n    <div class=\"row marketing\">\n        <div class=\"col-lg-6\">\n            <h4>HTML5 Boilerplate</h4>\n            <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n            <h4>Bootstrap</h4>\n            <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n        </div>\n    </div>\n\n    <div class=\"footer\">\n        <p>♥ from the Yeoman team</p>\n    </div>\n</div>\n\n<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n<script>\n    (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n        function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n        e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n        e.src='//www.google-analytics.com/analytics.js';\n        r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n    ga('create','UA-XXXXX-X');ga('send','pageview');\n</script>\n\n<!-- build:js scripts/vendor.js -->\n<!-- bower:js -->\n<script src=\"bower_components/jquery/dist/jquery.js\"></script>\n<script src=\"bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n<!-- endbower -->\n<!-- endbuild -->\n\n<!-- build:js scripts/plugins.js -->\n<script src=\"bower_components/bootstrap/js/affix.js\"></script>\n<script src=\"bower_components/bootstrap/js/alert.js\"></script>\n<script src=\"bower_components/bootstrap/js/dropdown.js\"></script>\n<script src=\"bower_components/bootstrap/js/tooltip.js\"></script>\n<script src=\"bower_components/bootstrap/js/modal.js\"></script>\n<script src=\"bower_components/bootstrap/js/transition.js\"></script>\n<script src=\"bower_components/bootstrap/js/button.js\"></script>\n<script src=\"bower_components/bootstrap/js/popover.js\"></script>\n<script src=\"bower_components/bootstrap/js/carousel.js\"></script>\n<script src=\"bower_components/bootstrap/js/scrollspy.js\"></script>\n<script src=\"bower_components/bootstrap/js/collapse.js\"></script>\n<script src=\"bower_components/bootstrap/js/tab.js\"></script>\n<!-- endbuild -->\n\n<!-- build:js scripts/main.js -->\n<script src=\"scripts/main.js\"></script>\n<!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/expected/inline.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>critical css test</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n    <style>\nbody {\n    padding-top: 20px;\n    padding-bottom: 20px;\n}\n\n\n.header,\n.marketing{\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n\n.header {\n    border-bottom: 1px solid #e5e5e5;\n}\n\n\n.header h3 {\n    margin-top: 0;\n    margin-bottom: 0;\n    line-height: 40px;\n    padding-bottom: 19px;\n}\n\n\n.jumbotron {\n    text-align: center;\n    border-bottom: 1px solid #e5e5e5;\n}\n\n.jumbotron .btn {\n    font-size: 21px;\n    padding: 14px 24px;\n}\n\n\n.marketing {\n    margin: 40px 0;\n}\n\n\n@media screen and (min-width: 768px) {\n    .container {\n        max-width: 730px;\n    }\n\n\n    .header,\n    .marketing{\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n\n    .header {\n        margin-bottom: 30px;\n    }\n\n\n    .jumbotron {\n        border-bottom: 0;\n    }\n}\n\n\n\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\na {\n  background: transparent;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 62.5%;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\nh1,\nh3,\nh4{\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1,\nh3{\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh4{\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh1{\n  font-size: 36px;\n}\nh3{\n  font-size: 24px;\n}\nh4{\n  font-size: 18px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\n.text-muted {\n  color: #999;\n}\nul{\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n} .col-lg-6{\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n@media (min-width: 1200px) { .col-lg-6{\n    float: left;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-lg{\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav>li {\n  position: relative;\n  display: block;\n}\n.nav>li>a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav-pills>li {\n  float: left;\n}\n.nav-pills>li>a {\n  border-radius: 4px;\n}\n.nav-pills>li+li {\n  margin-left: 2px;\n}\n.nav-pills>li.active>a{\n  color: #fff;\n  background-color: #428bca;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1{\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.container .jumbotron {\n  border-radius: 6px;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1{\n    font-size: 63px;\n  }\n}\n.container:before,\n.container:after,\n.row:before,\n.row:after,\n.nav:before,\n.nav:after{\n  display: table;\n  content: \" \";\n}\n.container:after,\n.row:after,\n.nav:after{\n  clear: both;\n}\n.pull-right {\n  float: right!important;\n}\n\n</style>\n\n</head>\n<body>\n<!--[if lt IE 10]>\n<p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n<![endif]-->\n\n<div class=\"container\">\n    <div class=\"header\">\n        <ul class=\"nav nav-pills pull-right\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">About</a></li>\n            <li><a href=\"#\">Contact</a></li>\n        </ul>\n        <h3 class=\"text-muted\">critical css test</h3>\n    </div>\n\n    <div class=\"jumbotron\">\n        <h1>'Allo, 'Allo!</h1>\n        <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n        <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n    </div>\n\n    <div class=\"row marketing\">\n        <div class=\"col-lg-6\">\n            <h4>HTML5 Boilerplate</h4>\n            <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n            <h4>Bootstrap</h4>\n            <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n        </div>\n    </div>\n\n    <div class=\"footer\">\n        <p>♥ from the Yeoman team</p>\n    </div>\n</div>\n\n<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n<script>\n    (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n        function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n        e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n        e.src='//www.google-analytics.com/analytics.js';\n        r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n    ga('create','UA-XXXXX-X');ga('send','pageview');\n</script>\n\n<!-- build:js scripts/vendor.js -->\n<!-- bower:js -->\n<script src=\"bower_components/jquery/dist/jquery.js\"></script>\n<script src=\"bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n<!-- endbower -->\n<!-- endbuild -->\n\n<!-- build:js scripts/plugins.js -->\n<script src=\"bower_components/bootstrap/js/affix.js\"></script>\n<script src=\"bower_components/bootstrap/js/alert.js\"></script>\n<script src=\"bower_components/bootstrap/js/dropdown.js\"></script>\n<script src=\"bower_components/bootstrap/js/tooltip.js\"></script>\n<script src=\"bower_components/bootstrap/js/modal.js\"></script>\n<script src=\"bower_components/bootstrap/js/transition.js\"></script>\n<script src=\"bower_components/bootstrap/js/button.js\"></script>\n<script src=\"bower_components/bootstrap/js/popover.js\"></script>\n<script src=\"bower_components/bootstrap/js/carousel.js\"></script>\n<script src=\"bower_components/bootstrap/js/scrollspy.js\"></script>\n<script src=\"bower_components/bootstrap/js/collapse.js\"></script>\n<script src=\"bower_components/bootstrap/js/tab.js\"></script>\n<!-- endbuild -->\n\n<!-- build:js scripts/main.js -->\n<script src=\"scripts/main.js\"></script>\n<!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/expected/issue-192.css",
    "content": ".deck,.hero-deck,.main-navigation,.search-box{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.search-box .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.hero-deck .form-control{display:inline-block;width:auto;vertical-align:middle}"
  },
  {
    "path": "test/expected/issue-395.css",
    "content": ".relative {\n  background-image: url(\"http://cdn.rcvc.io/image.jpeg\");\n  font-size: 100px;\n}\n.absolute {\n  background-image: url(\"http://cdn.rcvc.io/image.jpeg\");\n  font-size: 100px;\n}\n"
  },
  {
    "path": "test/expected/issue-566.css",
    "content": "#element{color:#0ff}"
  },
  {
    "path": "test/expected/main.css",
    "content": "body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}"
  },
  {
    "path": "test/expected/path-prefix.css",
    "content": ".header{background:url('images/critical.png')}"
  },
  {
    "path": "test/expected/streams-default.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <style>\n            body{padding-top:20px;padding-bottom:20px}.header,.marketing{padding-left:15px;padding-right:15px}.header{border-bottom:1px solid #e5e5e5}.header h3{margin-top:0;margin-bottom:0;line-height:40px;padding-bottom:19px}.jumbotron{text-align:center;border-bottom:1px solid #e5e5e5}.jumbotron .btn{font-size:21px;padding:14px 24px}.marketing{margin:40px 0}@media screen and (min-width:768px){.container{max-width:730px}.header,.marketing{padding-left:0;padding-right:0}.header{margin-bottom:30px}.jumbotron{border-bottom:0}}\n        </style>\n        <link rel=\"stylesheet\" href=\"styles/main.css\" media=\"print\" onload=\"this.media='all'\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css\" media=\"print\" onload=\"this.media='all'\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n<noscript><link rel=\"stylesheet\" href=\"styles/main.css\"></noscript>\n<noscript><link rel=\"stylesheet\" href=\"styles/bootstrap.css\"></noscript>\n</body>\n</html>\n"
  },
  {
    "path": "test/file.test.js",
    "content": "/* eslint-disable no-await-in-loop */\nimport {fileURLToPath} from 'node:url';\nimport {createServer} from 'node:http';\nimport {Buffer} from 'node:buffer';\nimport process from 'node:process';\nimport path from 'node:path';\nimport {promisify} from 'node:util';\nimport fs from 'node:fs';\nimport {jest} from '@jest/globals';\nimport getPort from 'get-port';\nimport Vinyl from 'vinyl';\nimport finalhandler from 'finalhandler';\nimport serveStatic from 'serve-static';\nimport {mapAsync} from '../src/array.js';\nimport {FileNotFoundError} from '../src/errors.js';\nimport {\n  BASE_WARNING,\n  isRemote,\n  isAbsolute,\n  checkCssOption,\n  fileExists,\n  joinPath,\n  urlParse,\n  resolve,\n  vinylize,\n  normalizePath,\n  getStylesheetHrefs,\n  getCss,\n  getAssets,\n  getDocumentPath,\n  getStylesheetPath,\n  getDocument,\n  getDocumentFromSource,\n  getStylesheet,\n} from '../src/file.js';\nimport {read, strip} from './helper/index.js';\n\nconst __dirname = fileURLToPath(new URL('.', import.meta.url));\n\nconst readFileAsync = promisify(fs.readFile);\n\n// Setup static fileserver to mimic remote requests\nlet server;\nlet port;\nbeforeAll(async () => {\n  const root = path.join(__dirname, 'fixtures');\n  const serve = serveStatic(root, {index: ['index.html', 'index.htm']});\n  port = await getPort();\n\n  server = createServer((req, res) => {\n    serve(req, res, finalhandler(req, res));\n  }).listen(port);\n});\n\nafterAll(() => server.close());\n\n// Prepare stderr mock\nlet stderr;\nbeforeEach(() => {\n  stderr = jest.spyOn(process.stderr, 'write').mockImplementation(() => true);\n});\n\nafterEach(() => {\n  stderr.mockRestore();\n});\n\ntest('checkCssOption', () => {\n  expect(checkCssOption(undefined)).toEqual(false);\n  expect(checkCssOption('')).toEqual(false);\n  expect(checkCssOption(false)).toEqual(false);\n  expect(checkCssOption([])).toEqual(false);\n  expect(checkCssOption(['abc'])).toEqual(true);\n  expect(checkCssOption('abc')).toEqual(true);\n});\n\ntest('Normalize paths', () => {\n  const plattform = process.platform;\n  Object.defineProperty(process, 'platform', {value: 'win32'});\n  expect(normalizePath('foo\\\\bar')).toBe('foo/bar');\n  expect(normalizePath('C:\\\\images\\\\critical.png')).toBe('/images/critical.png');\n  expect(normalizePath(`http://localhost:${port}/styles/main.css`)).toBe(`http://localhost:${port}/styles/main.css`);\n  Object.defineProperty(process, 'platform', {value: plattform});\n});\n\ntest('Remote file detection', () => {\n  const local = ['../test/foo.html', '/usr/tmp/bar'];\n  const remote = ['https://test.io/', '//test.io/styles/main.css'];\n\n  local.forEach((p) => expect(isRemote(p)).toBe(false));\n  remote.forEach((p) => expect(isRemote(p)).toBe(true));\n});\n\ntest('Absolute file detection', () => {\n  const invalid = ['', false, {}];\n  const absolute = ['/usr/tmp/bar'];\n  const relative = ['../test/foo.html', './usr/tmp/bar'];\n  const remote = ['https://test.io/', '//test.io/styles/main.css'];\n\n  invalid.forEach((p) => expect(isAbsolute(p)).toBe(false));\n  relative.forEach((p) => expect(isAbsolute(p)).toBe(false));\n  remote.forEach((p) => expect(isAbsolute(p)).toBe(false));\n  absolute.forEach((p) => expect(isAbsolute(p)).toBe(true));\n});\n\ntest('Error for file not found', () => {\n  expect(vinylize({filenpath: 'non-existant-file.html'})).rejects.toThrow(FileNotFoundError);\n});\n\ntest('fileExists', async () => {\n  const tests = [\n    {filepath: path.join(__dirname, 'fixtures/folder/subfolder/head.html'), expected: true},\n    {filepath: path.join(__dirname, 'fixtures/not-available'), expected: false},\n    {filepath: `http://localhost:${port}/head.html`, expected: true},\n    {filepath: `http://localhost:${port}/styles/main.css`, expected: true},\n    {filepath: `http://localhost:${port}/styles/nope.css`, expected: false},\n  ];\n\n  expect.assertions(tests.length);\n  for (const {filepath, expected} of tests) {\n    const result = await fileExists(filepath);\n    expect(result).toBe(expected);\n  }\n});\n\ntest('joinPath', () => {\n  const tests = [\n    {base: '/folder/subfolder/head', part: 'test.html', expected: '/folder/subfolder/head/test.html'},\n    {base: '/folder/subfolder/head', part: '../../test.html', expected: '/folder/test.html'},\n    {base: `http://localhost:${port}`, part: '../../test.html', expected: `http://localhost:${port}/test.html`},\n    {base: `http://localhost:${port}/a/b/c`, part: '../../test.html', expected: `http://localhost:${port}/test.html`},\n    {\n      base: `http://localhost:${port}/a/b/c/d.html`,\n      part: 'test.html',\n      expected: `http://localhost:${port}/a/b/c/test.html`,\n    },\n    {\n      base: `http://localhost:${port}/a/b/c/d.html`,\n      part: '../test.html',\n      expected: `http://localhost:${port}/a/b/test.html`,\n    },\n  ];\n\n  expect.assertions(tests.length);\n  for (const {base, part, expected} of tests) {\n    const result = joinPath(base, part);\n    expect(normalizePath(result)).toBe(expected);\n  }\n});\n\ntest('resolve', async () => {\n  const tests = [\n    {\n      filepath: '/folder/subfolder/head.html',\n      paths: [__dirname, path.join(__dirname, 'fixtures'), `http://localhost:${port}`],\n      expected: path.join(__dirname, 'fixtures/folder/subfolder/head.html'),\n    },\n    {\n      filepath: '/folder/subfolder/head.html',\n      paths: [__dirname, `http://localhost:${port}`, path.join(__dirname, 'fixtures/folder/subfolder/head.html')],\n      expected: `http://localhost:${port}/folder/subfolder/head.html`,\n    },\n    {\n      filepath: '../styles/main.css',\n      paths: [\n        __dirname,\n        `http://localhost:${port}`,\n        `http://localhost:${port}/folder/`,\n        path.join(__dirname, 'fixtures/folder/subfolder/head.html'),\n      ],\n      expected: `http://localhost:${port}/styles/main.css`,\n    },\n  ];\n\n  expect.assertions(tests.length);\n  for (const {filepath, paths, expected} of tests) {\n    const result = await resolve(filepath, paths);\n    expect(result).toBe(expected);\n  }\n});\n\ntest('resolve error', () => {\n  const paths = [__dirname, `http://localhost:${port}`];\n  expect(resolve('non-existant-file.html', paths)).rejects.toThrow(FileNotFoundError);\n});\n\ntest('Vinylize local file', async () => {\n  const files = [\n    path.join(__dirname, 'fixtures/folder/subfolder/head.html'),\n    path.join(__dirname, 'fixtures/head.html'),\n  ];\n\n  const contents = await Promise.all(files.map((f) => readFileAsync(f)));\n  const result = await Promise.all(files.map((filepath) => vinylize({filepath})));\n\n  expect.hasAssertions();\n  expect(result.length).toBe(files.length);\n\n  for (const [i, element] of result.entries()) {\n    expect(element.path).toBe(files[i]);\n    expect(element.remote).toBe(false);\n    expect(element.url).toBe(undefined);\n    expect(element.urlObj).toBe(undefined);\n    expect(element.contents.toString()).toBe(contents[i].toString());\n  }\n\n  return true;\n});\n\ntest('Vinylize remote file', async () => {\n  const files = [\n    'fixtures/folder/subfolder/head.html',\n    'fixtures/head.html',\n    'fixtures/styles/main.css',\n    'fixtures/images/critical.png',\n  ];\n\n  const contents = await Promise.all(files.map((f) => readFileAsync(path.join(__dirname, f))));\n\n  const urls = files.map((f) => f.replace(/^fixtures/, `http://localhost:${port}`));\n  const result = await Promise.all(urls.map((filepath) => vinylize({filepath})));\n\n  // expect.assertions(files.length * 4 + 1);\n  expect(result.length).toBe(files.length);\n\n  for (const [i, element] of result.entries()) {\n    expect(element.remote).toBe(true);\n    expect(element.url).toBe(urls[i]);\n    expect(element.urlObj).toEqual(urlParse(urls[i]));\n    expect(element.contents.toString()).toBe(contents[i].toString());\n  }\n\n  expect.hasAssertions();\n});\n\ntest('Append stylesheets to vinyl', async () => {\n  const files = [\n    'fixtures/folder/subfolder/head.html',\n    'fixtures/folder/generate-default.html',\n    'fixtures/head.html',\n    'fixtures/styles/main.css',\n    'fixtures/images/critical.png',\n  ];\n\n  const vinyls = await Promise.all(files.map((f) => vinylize({filepath: path.join(__dirname, f)})));\n  const result = vinyls.map((v) => getStylesheetHrefs(v));\n  expect.assertions(files.length + 6);\n  expect(result.length).toBe(5);\n  result.forEach((stylesheets) => expect(Array.isArray(stylesheets)).toBeTruthy());\n  expect(result[0].length).toBe(1);\n  expect(result[1].length).toBe(2);\n  expect(result[2].length).toBe(2);\n  expect(result[3].length).toBe(0);\n  expect(result[4].length).toBe(0);\n});\n\ntest('Append assets to vinyl', async () => {\n  const files = [\n    'fixtures/folder/subfolder/head.html',\n    'fixtures/head.html',\n    'fixtures/styles/bootstrap.css',\n    'fixtures/styles/image-relative.css',\n    'fixtures/images/critical.png',\n  ];\n\n  const vinyls = await Promise.all(files.map((f) => vinylize({filepath: path.join(__dirname, f)})));\n  const result = vinyls.map((v) => getAssets(v));\n  expect.assertions(files.length + 6);\n  expect(result.length).toBe(5);\n  result.forEach((assets) => expect(Array.isArray(assets)).toBeTruthy());\n  expect(result[0].length).toBe(0);\n  expect(result[1].length).toBe(0);\n  expect(result[2].length).toBe(5);\n  expect(result[3].length).toBe(1);\n  expect(result[4].length).toBe(0);\n});\n\ntest('Compute document base (with base option)', async () => {\n  const vinyls = await Promise.all(\n    [\n      {filepath: `http://localhost:${port}/folder/generate-default.html`, expected: '/folder'},\n      {filepath: `http://localhost:${port}/folder/head.html`, expected: '/folder'},\n      {filepath: `http://localhost:${port}/generate-default.html`, expected: '/'},\n      {filepath: `http://localhost:${port}/folder`, expected: '/folder'},\n      {filepath: `http://localhost:${port}/folder/`, expected: '/folder'},\n      {filepath: path.join(__dirname, 'fixtures/folder/subfolder/head.html'), expected: '/folder/subfolder'},\n      {filepath: path.join(__dirname, 'fixtures/folder/generate-default.html'), expected: '/folder'},\n      {filepath: path.join(__dirname, 'fixtures/head.html'), expected: '/'},\n      {filepath: path.join(__dirname, 'fixtures/folder/subfolder/relative.html'), expected: '/folder/subfolder'},\n      {filepath: path.join(__dirname, 'fixtures/folder/relative.html'), expected: '/folder'},\n    ].map((f) => vinylize(f).then((vinyl) => ({...f, vinyl})))\n  );\n\n  const files = vinyls.map((data) => {\n    data.vinyl.stylesheets = getStylesheetHrefs(data.vinyl);\n    return data;\n  });\n\n  expect.hasAssertions();\n  for (const file of files) {\n    const filepath = await getDocumentPath(file.vinyl, {base: path.join(__dirname, 'fixtures')});\n    expect(path.dirname(filepath)).toBe(file.expected);\n  }\n\n  expect(stderr).not.toHaveBeenCalled();\n});\n\ntest('Compute document base (without base option)', async () => {\n  const vinyls = await Promise.all(\n    [\n      {filepath: `http://localhost:${port}/folder`, expected: '/folder'},\n      {filepath: `http://localhost:${port}/folder/`, expected: '/folder'},\n      {filepath: path.join(__dirname, 'fixtures/folder/subfolder/head.html'), expected: '/folder/subfolder'},\n      {filepath: path.join(__dirname, 'fixtures/folder/generate-default.html'), expected: '/folder'},\n      {filepath: path.join(__dirname, 'fixtures/head.html'), expected: '/'},\n      {filepath: path.join(__dirname, 'fixtures/folder/subfolder/relative.html'), expected: '/folder/subfolder'},\n      {filepath: path.join(__dirname, 'fixtures/folder/relative.html'), expected: '/folder'},\n    ].map((f) => vinylize(f).then((vinyl) => ({...f, vinyl})))\n  );\n\n  const files = vinyls.map((data) => {\n    data.vinyl.stylesheets = getStylesheetHrefs(data.vinyl);\n    return data;\n  });\n\n  expect.hasAssertions();\n  for (const file of files) {\n    const filepath = await getDocumentPath(file.vinyl);\n    expect(path.dirname(filepath)).toBe(file.expected);\n    if (file.noBase) {\n      expect(stderr).toHaveBeenCalledWith(BASE_WARNING);\n    }\n  }\n});\n\ntest('Get document', async () => {\n  const file = path.join(__dirname, 'fixtures/folder/relative.html');\n  const vinyl = new Vinyl({\n    path: file,\n    contents: Buffer.from(read(file)),\n  });\n\n  const tests = [\n    {filepath: `http://localhost:${port}/folder`, expected: '/folder/index.html'},\n    {filepath: `http://localhost:${port}/folder/`, expected: '/folder/index.html'},\n    {filepath: path.join(__dirname, 'fixtures/folder/subfolder/head.html'), expected: '/folder/subfolder/head.html'},\n    {\n      filepath: path.join(__dirname, 'fixtures/folder/generate-default.html'),\n      expected: '/folder/generate-default.html',\n    },\n    {filepath: path.join(__dirname, 'fixtures/head.html'), expected: '/head.html'},\n    {\n      filepath: path.join(__dirname, 'fixtures/folder/subfolder/relative.html'),\n      expected: '/folder/subfolder/relative.html',\n    },\n    {filepath: path.join(__dirname, 'fixtures/folder/relative.html'), expected: '/folder/relative.html'},\n    {\n      filepath: 'folder/relative.html',\n      options: {base: path.join(__dirname, 'fixtures')},\n      expected: '/folder/relative.html',\n    },\n    {filepath: vinyl, options: {base: path.join(__dirname, 'fixtures')}, expected: '/folder/relative.html'},\n  ];\n\n  expect.hasAssertions();\n  for (const testdata of tests) {\n    const {filepath, expected, options} = testdata;\n    const file = await getDocument(filepath, options);\n    expect(file.virtualPath).toBe(expected);\n    if (testdata.noBase) {\n      expect(stderr).toHaveBeenCalledWith(BASE_WARNING);\n    }\n  }\n});\n\ntest('Get document from source with rebase option', async () => {\n  const base = path.join(__dirname, 'fixtures');\n  const tests = [\n    {filepath: path.join(__dirname, 'fixtures/folder/subfolder/head.html'), expected: '/folder/subfolder/head.html'},\n    {\n      filepath: path.join(__dirname, 'fixtures/folder/generate-default.html'),\n      expected: '/folder/generate-default.html',\n    },\n    {filepath: path.join(__dirname, 'fixtures/head.html'), expected: '/head.html'},\n    {\n      filepath: path.join(__dirname, 'fixtures/folder/subfolder/relative.html'),\n      expected: '/folder/subfolder/relative.html',\n    },\n    {filepath: path.join(__dirname, 'fixtures/folder/relative.html'), expected: '/folder/relative.html'},\n  ];\n\n  // expect.assertions(tests.length + 1);\n  for (const testdata of tests) {\n    const {filepath, expected} = testdata;\n    const rebase = {to: `/${normalizePath(path.relative(base, filepath))}`};\n    const source = await readFileAsync(filepath);\n    const file = await getDocumentFromSource(source, {rebase, base});\n    expect(file.virtualPath).toBe(expected);\n  }\n\n  expect(stderr).not.toHaveBeenCalled();\n});\n\ntest('Get document from source without path options', async () => {\n  const filepath = path.join(__dirname, 'fixtures/folder/subfolder/head.html');\n  const source = await readFileAsync(filepath);\n  const css = path.join(__dirname, 'fixtures/styles/image-relative.css');\n  const file = await getDocumentFromSource(source, {css});\n  const styles = await readFileAsync(css, 'utf8');\n\n  // expect(file.path).toBe(undefined);\n  expect(file.css).toMatch(styles);\n  expect(stderr).toHaveBeenCalled();\n});\n\ntest('Compute base for stylesheets', async () => {\n  const docs = await mapAsync(\n    [\n      `http://localhost:${port}/generate-image.html`,\n      path.join(__dirname, 'fixtures/folder/generate-image.html'),\n      `http://localhost:${port}/folder/relative-different.html`,\n      path.join(__dirname, 'fixtures/relative-different.html'),\n      path.join(__dirname, 'fixtures/remote-different.html'),\n    ],\n    async (filepath) => {\n      const document = await vinylize({filepath});\n      document.stylesheets = await getStylesheetHrefs(document);\n      document.virtualPath = await getDocumentPath(document);\n      return document;\n    }\n  );\n\n  const tests = [\n    {\n      filepath: `http://localhost:${port}/styles/image-relative.css`,\n      expected: [\n        '/styles/image-relative.css',\n        `http://localhost:${port}/styles/image-relative.css`,\n        `/styles/image-relative.css`,\n        `http://localhost:${port}/styles/image-relative.css`,\n        `http://localhost:${port}/styles/image-relative.css`,\n      ],\n    },\n    {\n      filepath: `http://127.0.0.1:${port}/styles/image-relative.css`,\n      expected: [\n        `http://127.0.0.1:${port}/styles/image-relative.css`,\n        `http://127.0.0.1:${port}/styles/image-relative.css`,\n        `http://127.0.0.1:${port}/styles/image-relative.css`,\n        `http://127.0.0.1:${port}/styles/image-relative.css`,\n        `http://127.0.0.1:${port}/styles/image-relative.css`,\n      ],\n    },\n    {\n      filepath: path.join(__dirname, 'fixtures/styles/image-relative.css'),\n      expected: [\n        '/styles/image-relative.css',\n        '/styles/image-relative.css',\n        '/folder/styles/image-relative.css',\n        '/styles/image-relative.css',\n        'http://www.cdn.somewhere/styles/image-relative.css',\n      ],\n    },\n  ];\n\n  expect.assertions(docs.length * tests.length);\n\n  for (const [index, document] of docs.entries()) {\n    for (const testdata of tests) {\n      const {filepath, expected} = testdata;\n      const file = await vinylize({filepath});\n      const result = await getStylesheetPath(document, file);\n\n      expect(result).toBe(expected[index]);\n    }\n  }\n});\n\ntest('Get styles', async () => {\n  const docs = await mapAsync(\n    [`http://localhost:${port}/generate-image.html`, path.join(__dirname, 'fixtures/folder/generate-image.html')],\n    (filepath) => getDocument(filepath)\n  );\n\n  const tests = [\n    {\n      filepath: `http://localhost:${port}/styles/image-relative.css`,\n      expected: ['images/critical.png', `http://localhost:${port}/images/critical.png`],\n    },\n    {\n      filepath: `http://localhost:${port}/folder/subfolder/issue-216.css`,\n      expected: [\n        `folder/fonts/fontawesome-webfont.woff`,\n        `http://localhost:${port}/folder/fonts/fontawesome-webfont.woff`,\n      ],\n    },\n    {\n      filepath: `http://127.0.0.1:${port}/styles/image-relative.css`,\n      expected: [`http://127.0.0.1:${port}/images/critical.png`, `http://127.0.0.1:${port}/images/critical.png`],\n    },\n    {\n      filepath: `http://127.0.0.1:${port}/folder/subfolder/issue-216.css`,\n      expected: [\n        `http://127.0.0.1:${port}/folder/fonts/fontawesome-webfont.woff`,\n        `http://127.0.0.1:${port}/folder/fonts/fontawesome-webfont.woff`,\n      ],\n    },\n    {\n      filepath: path.join(__dirname, 'fixtures/styles/image-relative.css'),\n      expected: ['images/critical.png', '../images/critical.png'],\n    },\n    {\n      filepath: path.join(__dirname, 'fixtures/styles/image-relative.css'),\n      options: {rebase: {from: '/styles/main.css', to: '/index.html'}},\n      expected: ['images/critical.png', 'images/critical.png'],\n    },\n    {\n      filepath: path.join(__dirname, 'fixtures/styles/image-relative.css'),\n      options: {rebase: {from: '/styles/main.css', to: '/a/b/c/index.html'}},\n      expected: ['../../../images/critical.png', '../../../images/critical.png'],\n    },\n\n    {\n      filepath: path.join(__dirname, 'fixtures/styles/image-relative.css'),\n      options: {rebase: (asset) => `https://my-cdn.com${asset.absolutePath}`},\n      expected: ['https://my-cdn.com/images/critical.png', 'https://my-cdn.com/images/critical.png'],\n    },\n  ];\n\n  for (const [index, document] of docs.entries()) {\n    for (const testdata of tests) {\n      const {filepath, expected, options = {}} = testdata;\n      const file = await getStylesheet(document, filepath, {\n        base: path.join(__dirname, 'fixtures'),\n        ...options,\n      });\n      expect(file.contents.toString()).toMatch(expected[index]);\n    }\n  }\n});\n\ntest('Get inline styles', async () => {\n  const docs = await mapAsync(\n    [\n      `http://localhost:${port}/generate-adaptive.html`,\n      `http://localhost:${port}/generate-adaptive-inline.html`,\n      path.join(__dirname, 'fixtures/generate-adaptive-inline.html'),\n    ],\n    (filepath) => getDocument(filepath)\n  );\n\n  const [expected, ...cssArray] = docs.map((doc) => strip(doc.css));\n\n  for (const css of cssArray) {\n    expect(css).toMatch(expected);\n  }\n});\n\ntest('Get styles with media attribute', async () => {\n  const docs = await mapAsync(\n    [`http://localhost:${port}/media-attr.html`, path.join(__dirname, 'fixtures/media-attr.html')],\n    (filepath) => getDocument(filepath)\n  );\n\n  const expected = `@media (max-width: 1024px) { .header {\n    display: flex;\n} }`;\n\n  for (const document of docs) {\n    expect(document.css.toString()).toMatch(expected);\n  }\n});\n\ntest('Get base64 styles', async () => {\n  const docs = await mapAsync(\n    [\n      `http://localhost:${port}/generate-adaptive.html`,\n      `http://localhost:${port}/generate-adaptive-base64.html`,\n      path.join(__dirname, 'fixtures/generate-adaptive-base64.html'),\n    ],\n    (filepath) => getDocument(filepath)\n  );\n\n  const [expected, ...cssArray] = docs.map((doc) => strip(doc.css));\n\n  for (const css of cssArray) {\n    expect(css).toMatch(expected);\n  }\n});\n\ntest('Get styles (without path)', async () => {\n  const docs = await mapAsync(\n    [\n      path.join(__dirname, 'fixtures/folder/generate-image.html'),\n      path.join(__dirname, 'fixtures/relative-different.html'),\n      path.join(__dirname, 'fixtures/remote-different.html'),\n    ],\n    (file) => readFileAsync(file)\n  );\n\n  const tests = [\n    {\n      filepath: `http://localhost:${port}/styles/image-relative.css`,\n      expected: [\n        `http://localhost:${port}/images/critical.png`,\n        `http://localhost:${port}/images/critical.png`,\n        `http://localhost:${port}/images/critical.png`,\n      ],\n    },\n    {\n      filepath: `http://127.0.0.1:${port}/styles/image-relative.css`,\n      expected: [\n        `http://127.0.0.1:${port}/images/critical.png`,\n        `http://127.0.0.1:${port}/images/critical.png`,\n        `http://127.0.0.1:${port}/images/critical.png`,\n      ],\n    },\n    {\n      filepath: path.join(__dirname, 'fixtures/styles/image-relative.css'),\n      expected: [`'/images/critical.png'`, `'/images/critical.png'`, `'/images/critical.png'`],\n    },\n  ];\n\n  for (const [index, element] of docs.entries()) {\n    for (const testdata of tests) {\n      const {filepath, expected} = testdata;\n      const document = await getDocumentFromSource(element, {css: filepath});\n      const file = await getStylesheet(document, filepath, {base: path.join(__dirname, 'fixtures')});\n      expect(file.contents.toString()).toMatch(expected[index]);\n    }\n  }\n});\n\ntest('Does not rebase when rebase is disabled via option', async () => {\n  const docs = await mapAsync(\n    [\n      path.join(__dirname, 'fixtures/folder/generate-image.html'),\n      path.join(__dirname, 'fixtures/relative-different.html'),\n      path.join(__dirname, 'fixtures/remote-different.html'),\n    ],\n    (file) => readFileAsync(file)\n  );\n\n  const tests = [\n    {\n      filepath: `http://localhost:${port}/styles/image-relative.css`,\n      expected: [`'../images/critical.png'`, `'../images/critical.png'`, `'../images/critical.png'`],\n    },\n    {\n      filepath: `http://127.0.0.1:${port}/styles/image-relative.css`,\n      expected: [`'../images/critical.png'`, `'../images/critical.png'`, `'../images/critical.png'`],\n    },\n    {\n      filepath: path.join(__dirname, 'fixtures/styles/image-relative.css'),\n      expected: [`'../images/critical.png'`, `'../images/critical.png'`, `'../images/critical.png'`],\n    },\n  ];\n\n  for (const [index, element] of docs.entries()) {\n    for (const testdata of tests) {\n      const {filepath, expected} = testdata;\n      const document = await getDocumentFromSource(element, {css: filepath});\n      const file = await getStylesheet(document, filepath, {base: path.join(__dirname, 'fixtures'), rebase: false});\n      expect(file.contents.toString()).toMatch(expected[index]);\n    }\n  }\n});\n\ntest('Handle css source option', async () => {\n  const document = await getDocument(path.join(__dirname, 'fixtures/generate-adaptive.html'));\n\n  const source1 = 'html{display:block;}';\n  const source2 = '.someclass{color:red}';\n  const css = await getCss(document, {\n    css: [source1, path.join(__dirname, 'fixtures/styles/adaptive.css'), source2],\n  });\n\n  expect(css.startsWith(source1)).toBeTruthy();\n  expect(css.endsWith(source2)).toBeTruthy();\n});\n"
  },
  {
    "path": "test/fixtures/403-css.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Title</title>\n    <link href=\"https://status.sommerlaune.com/403\" rel=\"stylesheet\" />\n  </head>\n  <body></body>\n</html>\n"
  },
  {
    "path": "test/fixtures/404-css.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Title</title>\n    <link href=\"https://status.sommerlaune.com/404\" rel=\"stylesheet\" />\n  </head>\n  <body></body>\n</html>\n"
  },
  {
    "path": "test/fixtures/error.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Title</title>\n    <link rel=\"stylesheet\" href=\"\">\n    <link rel=\"stylesheet\" href=\"styles/print.css\" media=\"print\">\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/folder/generate-default.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n        <!-- build:css styles/main.css -->\n        <link rel=\"stylesheet\" href=\"../styles/main.css\">\n        <link rel=\"stylesheet\" href=\"../styles/bootstrap.css\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n\n        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n        <script>\n            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n            e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n            e.src='//www.google-analytics.com/analytics.js';\n            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n            ga('create','UA-XXXXX-X');ga('send','pageview');\n        </script>\n\n        <!-- build:js scripts/vendor.js -->\n        <!-- bower:js -->\n        <script src=\"../old/fixture/bower_components/jquery/dist/jquery.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n        <!-- endbower -->\n        <!-- endbuild -->\n\n        <!-- build:js scripts/plugins.js -->\n        <script src=\"../old/fixture/bower_components/bootstrap/js/affix.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/alert.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/dropdown.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tooltip.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/modal.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/transition.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/button.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/popover.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/carousel.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/scrollspy.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/collapse.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tab.js\"></script>\n        <!-- endbuild -->\n\n        <!-- build:js scripts/main.js -->\n        <script src=\"../old/fixture/scripts/main.js\"></script>\n        <!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/folder/generate-image.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <link rel=\"stylesheet\" href=\"../styles/image-relative.css\">\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"header\"></div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/folder/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>TEST</title>\n    <link rel=\"stylesheet\" href=\"/styles/main.css\"/>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/folder/relative-different.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>TEST</title>\n    <link rel=\"stylesheet\" href=\"http://www.cdn.somewhere/styles/not-there.css\"/>\n    <link rel=\"stylesheet\" href=\"styles/not-there.css\"/>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/folder/relative.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>TEST</title>\n  <link rel=\"stylesheet\" href=\"../styles/main.css\">\n  <link rel=\"stylesheet\" href=\"../styles/bootstrap.css\" />\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/folder/styles/issue-566.css",
    "content": "#element {\n  color: aqua;\n}\n"
  },
  {
    "path": "test/fixtures/folder/subfolder/generate-image-absolute.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <link rel=\"stylesheet\" href=\"/styles/image-relative.css\">\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"header\"></div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/folder/subfolder/head.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>TEST</title>\n    <link rel=\"stylesheet\" href=\"/styles/main.css\"/>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/folder/subfolder/issue-216.css",
    "content": "@font-face {\n  font-family: FontAwesome;\n  src: url(../fonts/fontawesome-webfont.eot?v=4.7.0);\n  src: url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0)\n  format('embedded-opentype'),\n  url(../fonts/fontawesome-webfont.woff2?v=4.7.0)\n  format('woff2'),\n  url(../fonts/fontawesome-webfont.woff?v=4.7.0) format('woff'),\n  url(../fonts/fontawesome-webfont.ttf?v=4.7.0) format('truetype'),\n  url(../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format('svg');\n  font-weight: 400;\n  font-style: normal;\n}"
  },
  {
    "path": "test/fixtures/folder/subfolder/relative.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>TEST</title>\n  <link rel=\"stylesheet\" href=\"../../styles/main.css\">\n  <link rel=\"stylesheet\" href=\"../styles/bootstrap.css\" />\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generate-adaptive-base64.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <link rel=\"stylesheet\" href=\"data:text/css;charset=utf-8;base64,QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogOTAwcHgpIHsNCiAgICBkaXYgIHsNCiAgICAgICAgaGVpZ2h0OiA0MDBweDsNCiAgICAgICAgYmFja2dyb3VuZDogYnJvd247DQogICAgfQ0KfQ0KDQojcmV2ZW5nZSB7DQogICAgYmFja2dyb3VuZDogcGFwYXlhd2hpcDsNCn0NCg0KI29mIHsNCiAgICBiYWNrZ3JvdW5kOiB0ZWFsOw0KfQ0KDQojZ3V5YnJ1c2ggew0KICAgIGNvbG9yOiBwaW5rOw0KfQ0KDQojdGhyZWVwd29vZCB7DQogICAgYmFja2dyb3VuZDogb3JhbmdlOw0KICAgIGNvbnRlbnQ6ICdtb25rZXkgaXNsYW5kJzsNCn0=\">\n    </head>\n    <body>\n        <div id=\"revenge\"></div>\n        <div id=\"of\"></div>\n        <div id=\"guybrush\"></div>\n        <div id=\"threepwood\"></div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generate-adaptive-inline.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <style>\n@media screen and (min-width: 900px) {\n    div  {\n        height: 400px;\n        background: brown;\n    }\n}\n\n#revenge {\n    background: papayawhip;\n}\n\n#of {\n    background: teal;\n}\n\n#guybrush {\n    color: pink;\n}\n\n#threepwood {\n    background: orange;\n    content: 'monkey island';\n}\n        </style>\n    </head>\n    <body>\n        <div id=\"revenge\"></div>\n        <div id=\"of\"></div>\n        <div id=\"guybrush\"></div>\n        <div id=\"threepwood\"></div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generate-adaptive.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <link rel=\"stylesheet\" href=\"styles/adaptive.css\">\n        </head>\n    <body>\n        <div id=\"revenge\"></div>\n        <div id=\"of\"></div>\n        <div id=\"guybrush\"></div>\n        <div id=\"threepwood\"></div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generate-default-nostyle.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n\n        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n        <script>\n            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n            e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n            e.src='//www.google-analytics.com/analytics.js';\n            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n            ga('create','UA-XXXXX-X');ga('send','pageview');\n        </script>\n\n        <!-- build:js scripts/vendor.js -->\n        <!-- bower:js -->\n        <script src=\"../old/fixture/bower_components/jquery/dist/jquery.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n        <!-- endbower -->\n        <!-- endbuild -->\n\n        <!-- build:js scripts/plugins.js -->\n        <script src=\"../old/fixture/bower_components/bootstrap/js/affix.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/alert.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/dropdown.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tooltip.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/modal.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/transition.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/button.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/popover.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/carousel.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/scrollspy.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/collapse.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tab.js\"></script>\n        <!-- endbuild -->\n\n        <!-- build:js scripts/main.js -->\n        <script src=\"../old/fixture/scripts/main.js\"></script>\n        <!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generate-default-querystring.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <link rel=\"stylesheet\" href=\"styles/main.css?v=0118-999-8819-99119-7253\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css?notcached\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n\n        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n        <script>\n            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n            e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n            e.src='//www.google-analytics.com/analytics.js';\n            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n            ga('create','UA-XXXXX-X');ga('send','pageview');\n        </script>\n\n        <!-- build:js scripts/vendor.js -->\n        <!-- bower:js -->\n        <script src=\"../old/fixture/bower_components/jquery/dist/jquery.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n        <!-- endbower -->\n        <!-- endbuild -->\n\n        <!-- build:js scripts/plugins.js -->\n        <script src=\"../old/fixture/bower_components/bootstrap/js/affix.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/alert.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/dropdown.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tooltip.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/modal.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/transition.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/button.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/popover.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/carousel.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/scrollspy.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/collapse.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tab.js\"></script>\n        <!-- endbuild -->\n\n        <!-- build:js scripts/main.js -->\n        <script src=\"../old/fixture/scripts/main.js\"></script>\n        <!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generate-default.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n        <!-- build:css styles/main.css -->\n        <link rel=\"stylesheet\" href=\"styles/main.css\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n\n        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n        <script>\n            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n            e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n            e.src='//www.google-analytics.com/analytics.js';\n            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n            ga('create','UA-XXXXX-X');ga('send','pageview');\n        </script>\n\n        <!-- build:js scripts/vendor.js -->\n        <!-- bower:js -->\n        <script src=\"../old/fixture/bower_components/jquery/dist/jquery.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n        <!-- endbower -->\n        <!-- endbuild -->\n\n        <!-- build:js scripts/plugins.js -->\n        <script src=\"../old/fixture/bower_components/bootstrap/js/affix.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/alert.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/dropdown.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tooltip.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/modal.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/transition.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/button.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/popover.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/carousel.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/scrollspy.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/collapse.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tab.js\"></script>\n        <!-- endbuild -->\n\n        <!-- build:js scripts/main.js -->\n        <script src=\"../old/fixture/scripts/main.js\"></script>\n        <!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generate-ignorefont.html",
    "content": "<!doctype html>\n<html>\n<head lang=\"en\">\n    <meta charset=\"utf-8\">\n    <title>Font-face</title>\n    <link rel=\"stylesheet\" href=\"styles/font.css\">\n</head>\n<body>\n    <h1>should be styled by @font-face</h1>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generate-image.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <link rel=\"stylesheet\" href=\"styles/image-relative.css\">\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"header\"></div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generateInline-external.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <link rel=\"stylesheet\" href=\"styles/main.css\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generateInline-external2.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <link rel=\"stylesheet\" href=\"styles/main.css\">\n        <link rel=\"stylesheet\" href=\"https://raw.githubusercontent.com/twbs/bootstrap/v3.1.1/dist/css/bootstrap.css\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic%7cOpen+Sans:700,400\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generateInline-svg.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>critical css test</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n    <link rel=\"stylesheet\" href=\"styles/critical-pregenerated.css\">\n\n</head>\n<body>\n<!--[if lt IE 10]>\n<p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n<![endif]-->\n\n<div class=\"container\">\n    <div class=\"header\">\n        <ul class=\"nav nav-pills pull-right\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">About</a></li>\n            <li><a href=\"#\">Contact</a></li>\n        </ul>\n        <h3 class=\"text-muted\">critical css test</h3>\n    </div>\n\n    <div class=\"jumbotron\">\n        <h1>'Allo, 'Allo!</h1>\n        <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n        <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n    </div>\n\n    <div class=\"row marketing\">\n        <div class=\"col-lg-6\">\n            <h4>HTML5 Boilerplate</h4>\n            <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n            <h4>Bootstrap</h4>\n            <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n        </div>\n    </div>\n\n    <div class=\"footer\">\n        <p>♥ from the Yeoman team</p>\n    </div>\n</div>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewbox=\"0 0 563 87.9\" enable-background=\"new 0 0 563 87.9\" xml:space=\"preserve\" width=\"167px\" height=\"26px\" fill=\"#fff\">\n      <g>\n          <g>\n              <path d=\"M137.6,23.6h-15.7v-3.1h34.8v3.1H141v42h-3.3V23.6z\"/>\n              <path d=\"M173.3,20.5h18.9c5.5,0,10,1.7,12.7,4.4c2.1,2.1,3.4,5.1,3.4,8.4v0.1c0,7.5-5.6,11.8-13.2,12.9L210,65.6h-4.2l-14.4-18.7h-0.1h-14.6v18.7h-3.3V20.5z M191.8,43.9c7.5,0,13.1-3.8,13.1-10.3v-0.1c0-6-4.8-9.8-12.9-9.8h-15.4v20.3H191.8z\"/>\n              <path d=\"M225.6,46.9V20.5h3.3v26c0,10.6,5.7,16.7,15.3,16.7c9.1,0,15-5.5,15-16.4V20.5h3.3v25.9c0,12.9-7.5,19.8-18.5,19.8C233.2,66.3,225.6,59.5,225.6,46.9z\"/>\n              <path d=\"M281.6,20.5h32.1v3.1H285v17.7h25.8v3.1H285v18.1h29v3.1h-32.4V20.5z\"/>\n              <path d=\"M326.1,20.5H337l11.8,31.7l11.8-31.7h10.7L353,65.9h-8.8L326.1,20.5z\"/>\n              <path d=\"M393.6,20.2h9.1l19.3,45.4h-10.4l-4.1-10.1h-19.1l-4.1,10.1h-10.1L393.6,20.2z M404.1,46.7l-6-14.6l-6,14.6H404.1z\"/>\n              <path d=\"M433.2,46.3V20.5h9.9V46c0,7.3,3.7,11.1,9.7,11.1c6.1,0,9.7-3.7,9.7-10.8V20.5h9.9V46c0,13.6-7.7,20.3-19.8,20.3C440.6,66.3,433.2,59.5,433.2,46.3z\"/>\n              <path d=\"M489,20.5h9.9v36h22.5v9H489V20.5z\"/>\n              <path d=\"M539.3,29.7h-13.7v-9.1H563v9.1h-13.7v35.9h-9.9V29.7z\"/>\n              <polygon fill=\"#DD7B27\" points=\"55.92,7 91.96,61.76 20.24,61.76 \"/>\n          </g>\n          <g>\n              <path d=\"M63.9,17.6H35.5L22.8,36.5l26.8,26.5l26.8-26.6L63.9,17.6z M60.1,41.1l-0.5,1l-0.4,0.6l-0.7-0.4l-6.7-3.7c-0.6,0.6-1.4,0.9-2.3,0.9c-0.9,0-1.7-0.3-2.3-0.9l-6.7,3.7L40,42.7l-0.4-0.6l-0.5-1l-0.4-0.7l0.7-0.4l6.9-3.8c0,0,0,0,0,0c0-1.3,0.8-2.5,2-3v-7v-0.7H49h1.1h0.7v0.7v7c1.2,0.5,2.1,1.7,2.1,3.1c0,0,0,0,0,0l6.9,3.8l0.7,0.4L60.1,41.1z\"/>\n              <path d=\"M73.3,0H26.1L0,38.8l49.6,49.1L99,38.8L73.3,0zM49.6,67.8L18.5,37l15.3-22.7h31.9l15,22.6L49.6,67.8z\"/>\n          </g>\n      </g>\n  </svg>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0\" height=\"0\" display=\"none\">\n    <symbol id=\"uniqueID\">\n      <title>Title</title>\n      <path d=\"M539.3,29.7h-13.7v-9.1H563v9.1h-13.7v35.9h-9.9V29.7z\" />\n      <path clip-rule=\"evenodd\" d=\"M539.3,29.7h-13.7v-9.1H563v9.1h-13.7v35.9h-9.9V29.7z\" fill-rule=\"evenodd\" />\n    </symbol>\n  </svg>\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/generateInline.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <link rel=\"stylesheet\" href=\"styles/main.css\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/head.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>TEST</title>\n    <link rel=\"stylesheet\" href=\"/styles/main.css\"/>\n    <link rel=\"stylesheet\" href=\"styles/bootstrap.css\"/>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/ignore.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Ignore</title>\n    <link rel=\"stylesheet\" href=\"styles/ignore.css\">\n</head>\n<body>\n    <h1 class=\"in\">All green</h1>\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/ignoreInlinedStyles.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Ignore inlined stylesheet</title>\n    <style>\n      .test-selector {\n        color: blue;\n      }\n    </style>\n  </head>\n  <body>\n    <h1 class=\"test-selector\">All blue</h1>\n  </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/include.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Title</title>\n    <link rel=\"stylesheet\" href=\"styles/include.css\">\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/inline-image.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <link rel=\"stylesheet\" href=\"styles/critical-image-pregenerated.css\">\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n\n        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n        <script>\n            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n            e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n            e.src='//www.google-analytics.com/analytics.js';\n            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n            ga('create','UA-XXXXX-X');ga('send','pageview');\n        </script>\n\n        <!-- build:js scripts/vendor.js -->\n        <!-- bower:js -->\n        <script src=\"bower_components/jquery/dist/jquery.js\"></script>\n        <script src=\"bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n        <!-- endbower -->\n        <!-- endbuild -->\n\n        <!-- build:js scripts/plugins.js -->\n        <script src=\"bower_components/bootstrap/js/affix.js\"></script>\n        <script src=\"bower_components/bootstrap/js/alert.js\"></script>\n        <script src=\"bower_components/bootstrap/js/dropdown.js\"></script>\n        <script src=\"bower_components/bootstrap/js/tooltip.js\"></script>\n        <script src=\"bower_components/bootstrap/js/modal.js\"></script>\n        <script src=\"bower_components/bootstrap/js/transition.js\"></script>\n        <script src=\"bower_components/bootstrap/js/button.js\"></script>\n        <script src=\"bower_components/bootstrap/js/popover.js\"></script>\n        <script src=\"bower_components/bootstrap/js/carousel.js\"></script>\n        <script src=\"bower_components/bootstrap/js/scrollspy.js\"></script>\n        <script src=\"bower_components/bootstrap/js/collapse.js\"></script>\n        <script src=\"bower_components/bootstrap/js/tab.js\"></script>\n        <!-- endbuild -->\n\n        <!-- build:js scripts/main.js -->\n        <script src=\"scripts/main.js\"></script>\n        <!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/inline.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>critical css test</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n    <link rel=\"stylesheet\" href=\"styles/critical-pregenerated.css\">\n\n</head>\n<body>\n<!--[if lt IE 10]>\n<p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n<![endif]-->\n\n<div class=\"container\">\n    <div class=\"header\">\n        <ul class=\"nav nav-pills pull-right\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">About</a></li>\n            <li><a href=\"#\">Contact</a></li>\n        </ul>\n        <h3 class=\"text-muted\">critical css test</h3>\n    </div>\n\n    <div class=\"jumbotron\">\n        <h1>'Allo, 'Allo!</h1>\n        <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n        <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n    </div>\n\n    <div class=\"row marketing\">\n        <div class=\"col-lg-6\">\n            <h4>HTML5 Boilerplate</h4>\n            <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n            <h4>Bootstrap</h4>\n            <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n        </div>\n    </div>\n\n    <div class=\"footer\">\n        <p>♥ from the Yeoman team</p>\n    </div>\n</div>\n\n<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n<script>\n    (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n        function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n        e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n        e.src='//www.google-analytics.com/analytics.js';\n        r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n    ga('create','UA-XXXXX-X');ga('send','pageview');\n</script>\n\n<!-- build:js scripts/vendor.js -->\n<!-- bower:js -->\n<script src=\"bower_components/jquery/dist/jquery.js\"></script>\n<script src=\"bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n<!-- endbower -->\n<!-- endbuild -->\n\n<!-- build:js scripts/plugins.js -->\n<script src=\"bower_components/bootstrap/js/affix.js\"></script>\n<script src=\"bower_components/bootstrap/js/alert.js\"></script>\n<script src=\"bower_components/bootstrap/js/dropdown.js\"></script>\n<script src=\"bower_components/bootstrap/js/tooltip.js\"></script>\n<script src=\"bower_components/bootstrap/js/modal.js\"></script>\n<script src=\"bower_components/bootstrap/js/transition.js\"></script>\n<script src=\"bower_components/bootstrap/js/button.js\"></script>\n<script src=\"bower_components/bootstrap/js/popover.js\"></script>\n<script src=\"bower_components/bootstrap/js/carousel.js\"></script>\n<script src=\"bower_components/bootstrap/js/scrollspy.js\"></script>\n<script src=\"bower_components/bootstrap/js/collapse.js\"></script>\n<script src=\"bower_components/bootstrap/js/tab.js\"></script>\n<!-- endbuild -->\n\n<!-- build:js scripts/main.js -->\n<script src=\"scripts/main.js\"></script>\n<!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/issue-192.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>#192</title>\n    <link rel=\"stylesheet\" href=\"styles/issue-192.css\">\n</head>\n<body>\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/issue-304-nostyle.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n    <title>Document</title>\n  </head>\n  <body>\n    <div class=\"default a\"><div class=\"sub\">19.99</div></div>\n    <div class=\"default b\"><div class=\"sub\">39.99</div></div>\n  </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/issue-304.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n    <link rel=\"stylesheet\" href=\"styles/issue-304.css\" />\n    <title>Document</title>\n  </head>\n  <body>\n    <div class=\"default a\"><div class=\"sub\">19.99</div></div>\n    <div class=\"default b\"><div class=\"sub\">39.99</div></div>\n  </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/issue-314.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>https://status.sommerlaune.com/418</title>\n    <link rel=\"canonical\" href=\"https://status.sommerlaune.com/418\" />\n    <meta name=\"robots\" content=\"noindex\" />\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n    <!--\n    The next meta makes critical (or puppeteer) throw:\n    Protocol error (Runtime.callFunctionOn): Cannot find context with specified id undefined\n    -->\n    <meta http-equiv=\"refresh\" content=\"0; url=https://status.sommerlaune.com/418\" />\n  </head>\n</html>\n"
  },
  {
    "path": "test/fixtures/issue-395.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en-US\" class=\"no-js\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>Absolute path testing site</title>\n  </head>\n  <body class=\"home blog wp-embed-responsive\">\n    <div class=\"relative\">testing</div>\n    <div class=\"absolute\">testing</div>\n\n    <link rel=\"stylesheet\" href=\"http://cdn.rcvc.io/css/style.css\" />\n  </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/issue-415.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n    <title>Issue 415</title>\n    <link rel=\"stylesheet\" href=\"styles/issue-415.css\" />\n  </head>\n  <body>\n    <h1>Issue 415</h1>\n    <div id=\"element\"><p>Lorem ipsum</p></div>\n  </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/issue-562.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <link rel=\"stylesheet\" href=\"styles/issue-562.css\" />\n  </head>\n  <body>\n    <div class=\"block\">\n      <h1 class=\"title\">Hello World</h1>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/issue-566.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n    <title>Issue 566</title>\n    <base href=\"/folder/\">\n    <link rel=\"stylesheet\" href=\"/styles/issue-566.css\" />\n  </head>\n  <body>\n    <h1>Issue 566</h1>\n    <div id=\"element\"><p>Lorem ipsum</p></div>\n  </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/media-attr.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <link rel=\"stylesheet\" href=\"styles/media-attr.css\" media=\"(max-width: 1024px)\">\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"header\"></div>\n        </div>\n    </body>\n</html>"
  },
  {
    "path": "test/fixtures/path-prefix.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"header\"></div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "test/fixtures/preload.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Title</title>\n    <link rel=\"preload\" href=\"styles/include.css\" as=\"style\">\n    <link rel=\"preload\" href=\"styles/print.css\" as=\"style\" media=\"print\">\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/print.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>Title</title>\n    <link rel=\"stylesheet\" href=\"styles/include.css\">\n    <link rel=\"stylesheet\" href=\"styles/print.css\" media=\"print\">\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/relative-different.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>TEST</title>\n  <link rel=\"stylesheet\" href=\"styles/not-there.css\"/>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/remote-different.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>TEST</title>\n  <link rel=\"stylesheet\" href=\"http://www.cdn.somewhere/styles/not-there.css\"/>\n</head>\n<body>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/streams-default.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n\n        <!-- build:css styles/main.css -->\n        <link rel=\"stylesheet\" href=\"styles/main.css\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css\">\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/styles/adaptive.css",
    "content": "@media screen and (min-width: 900px) {\n    div  {\n        height: 400px;\n        background: brown;\n    }\n}\n\n#revenge {\n    background: papayawhip;\n}\n\n#of {\n    background: teal;\n}\n\n#guybrush {\n    color: pink;\n}\n\n#threepwood {\n    background: orange;\n    content: 'monkey island';\n}\n"
  },
  {
    "path": "test/fixtures/styles/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.1.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n@media print {\n  * {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 62.5%;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\ncite {\n  font-style: normal;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-muted {\n  color: #999;\n}\n.text-primary {\n  color: #428bca;\n}\na.text-primary:hover {\n  color: #3071a9;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #428bca;\n}\na.bg-primary:hover {\n  background-color: #3071a9;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #999;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  white-space: nowrap;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: 0;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: 0;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: 0;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: 0;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: 0;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: 0;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: 0;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: 0;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  max-width: 100%;\n  background-color: transparent;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n@media (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"] {\n  line-height: 34px;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  padding-left: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  display: inline;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.has-feedback .form-control-feedback {\n  position: absolute;\n  top: 25px;\n  right: 0;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.form-control-static {\n  margin-bottom: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.form-horizontal .form-control-static {\n  padding-top: 7px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  top: 0;\n  right: 15px;\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #ebebeb;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #47a447;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #39b3d7;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ed9c28;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #d2322d;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  cursor: pointer;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #999;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height .35s ease;\n          transition: height .35s ease;\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot');\n  src: url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #999;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #999;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #428bca;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #428bca;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: none;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n  .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-form.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n  .navbar-text.navbar-right:last-child {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #999;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #999;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #999;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #999;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #999;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #999;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #428bca;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #2a6496;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #fff;\n  cursor: default;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #999;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #999;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n.label[href]:hover,\n.label[href]:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #999;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #808080;\n}\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #999;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.container .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable {\n  padding-right: 35px;\n}\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\na.list-group-item.active,\na.list-group-item.active:hover,\na.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\na.list-group-item.active .list-group-item-heading,\na.list-group-item.active:hover .list-group-item-heading,\na.list-group-item.active:focus .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item.active .list-group-item-text,\na.list-group-item.active:hover .list-group-item-text,\na.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table {\n  margin-bottom: 0;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n     -moz-transition:    -moz-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: none;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n.modal-footer {\n  padding: 19px 20px 20px;\n  margin-top: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  visibility: visible;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: none;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "test/fixtures/styles/critical-image-pregenerated.css",
    "content": "body {\n    padding-top: 20px;\n    padding-bottom: 20px;\n}\n\n.header{\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n.header {\n    border-bottom: 1px solid #e5e5e5;\n}\n\n.header h3 {\n    margin-top: 0;\n    margin-bottom: 0;\n    line-height: 40px;\n    padding-bottom: 19px;\n}\n\n@media screen and (min-width: 768px) {\n    .container {\n        max-width: 730px;\n    }\n\n    .header{\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n    .header {\n        margin-bottom: 30px;\n    }\n}\n.header {\n    background: transparent url('/images/critical.png');\n}\n\n\n\n\nhtml {\n    font-family: sans-serif;\n    -webkit-text-size-adjust: 100%;\n    -ms-text-size-adjust: 100%;\n}\n\nbody {\n    margin: 0;\n}\n\na {\n    background: transparent;\n}\n\n* {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n*:before,\n*:after {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\nhtml {\n    font-size: 62.5%;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    font-size: 14px;\n    line-height: 1.42857143;\n    color: #333;\n    background-color: #fff;\n}\n\na {\n    color: #428bca;\n    text-decoration: none;\n}\nh3{\n    font-family: inherit;\n    font-weight: 500;\n    line-height: 1.1;\n    color: inherit;\n}\nh3{\n    margin-top: 20px;\n    margin-bottom: 10px;\n}\n\nh3{\n    font-size: 24px;\n}\n\n.text-muted {\n    color: #999;\n}\n\nul{\n    margin-top: 0;\n    margin-bottom: 10px;\n}\n\n.container {\n    padding-right: 15px;\n    padding-left: 15px;\n    margin-right: auto;\n    margin-left: auto;\n}\n\n@media (min-width: 768px) {\n    .container {\n        width: 750px;\n    }\n}\n\n@media (min-width: 992px) {\n    .container {\n        width: 970px;\n    }\n}\n\n@media (min-width: 1200px) {\n    .container {\n        width: 1170px;\n    }\n}\n\n\n\n.nav {\n    padding-left: 0;\n    margin-bottom: 0;\n    list-style: none;\n}\n\n.nav > li {\n    position: relative;\n    display: block;\n}\n\n.nav > li > a {\n    position: relative;\n    display: block;\n    padding: 10px 15px;\n}\n\n.nav-pills > li {\n    float: left;\n}\n\n.nav-pills > li > a {\n    border-radius: 4px;\n}\n\n.nav-pills > li + li {\n    margin-left: 2px;\n}\n\n.nav-pills > li.active > a{\n    color: #fff;\n    background-color: #428bca;\n}\n.container:before,\n.container:after,\n.nav:before,\n.nav:after{\n    display: table;\n    content: \" \";\n}\n.container:after,\n.nav:after{\n    clear: both;\n}\n\n.pull-right {\n    float: right !important;\n}\n"
  },
  {
    "path": "test/fixtures/styles/critical-pregenerated.css",
    "content": "body {\n    padding-top: 20px;\n    padding-bottom: 20px;\n}\n\n\n.header,\n.marketing{\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n\n.header {\n    border-bottom: 1px solid #e5e5e5;\n}\n\n\n.header h3 {\n    margin-top: 0;\n    margin-bottom: 0;\n    line-height: 40px;\n    padding-bottom: 19px;\n}\n\n\n.jumbotron {\n    text-align: center;\n    border-bottom: 1px solid #e5e5e5;\n}\n\n.jumbotron .btn {\n    font-size: 21px;\n    padding: 14px 24px;\n}\n\n\n.marketing {\n    margin: 40px 0;\n}\n\n\n@media screen and (min-width: 768px) {\n    .container {\n        max-width: 730px;\n    }\n\n\n    .header,\n    .marketing{\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n\n    .header {\n        margin-bottom: 30px;\n    }\n\n\n    .jumbotron {\n        border-bottom: 0;\n    }\n}\n\n\n\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\na {\n  background: transparent;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 62.5%;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\nh1,\nh3,\nh4{\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1,\nh3{\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh4{\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh1{\n  font-size: 36px;\n}\nh3{\n  font-size: 24px;\n}\nh4{\n  font-size: 18px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\n.text-muted {\n  color: #999;\n}\nul{\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n} .col-lg-6{\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n@media (min-width: 1200px) { .col-lg-6{\n    float: left;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-lg{\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a{\n  color: #fff;\n  background-color: #428bca;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1{\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.container .jumbotron {\n  border-radius: 6px;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1{\n    font-size: 63px;\n  }\n}\n.container:before,\n.container:after,\n.row:before,\n.row:after,\n.nav:before,\n.nav:after{\n  display: table;\n  content: \" \";\n}\n.container:after,\n.row:after,\n.nav:after{\n  clear: both;\n}\n.pull-right {\n  float: right !important;\n}\n"
  },
  {
    "path": "test/fixtures/styles/font.css",
    "content": "/* cyrillic-ext */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: normal;\n    font-weight: 400;\n    src: local('PT Sans'), local('PTSans-Regular'), url(http://fonts.gstatic.com/s/ptsans/v8/fhNmDCnjccoUYyU4ZASaLVKPGs1ZzpMvnHX-7fPOuAc.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: normal;\n    font-weight: 400;\n    src: local('PT Sans'), local('PTSans-Regular'), url(http://fonts.gstatic.com/s/ptsans/v8/BJVWev7_auVaQ__OU8Qih1KPGs1ZzpMvnHX-7fPOuAc.woff2) format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: normal;\n    font-weight: 400;\n    src: local('PT Sans'), local('PTSans-Regular'), url(http://fonts.gstatic.com/s/ptsans/v8/oysROHFTu1eTZ74Hcf8V-VKPGs1ZzpMvnHX-7fPOuAc.woff2) format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: normal;\n    font-weight: 400;\n    src: local('PT Sans'), local('PTSans-Regular'), url(http://fonts.gstatic.com/s/ptsans/v8/CWlc_g68BGYDSGdpJvpktgLUuEpTyoUstqEm5AMlJo4.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: normal;\n    font-weight: 700;\n    src: local('PT Sans Bold'), local('PTSans-Bold'), url(http://fonts.gstatic.com/s/ptsans/v8/kTYfCWJhlldPf5LnG4ZnHAsYbbCjybiHxArTLjt7FRU.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: normal;\n    font-weight: 700;\n    src: local('PT Sans Bold'), local('PTSans-Bold'), url(http://fonts.gstatic.com/s/ptsans/v8/g46X4VH_KHOWAAa-HpnGPgsYbbCjybiHxArTLjt7FRU.woff2) format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: normal;\n    font-weight: 700;\n    src: local('PT Sans Bold'), local('PTSans-Bold'), url(http://fonts.gstatic.com/s/ptsans/v8/hpORcvLZtemlH8gI-1S-7gsYbbCjybiHxArTLjt7FRU.woff2) format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: normal;\n    font-weight: 700;\n    src: local('PT Sans Bold'), local('PTSans-Bold'), url(http://fonts.gstatic.com/s/ptsans/v8/0XxGQsSc1g4rdRdjJKZrNAzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: italic;\n    font-weight: 400;\n    src: local('PT Sans Italic'), local('PTSans-Italic'), url(http://fonts.gstatic.com/s/ptsans/v8/GpWpM_6S4VQLPNAQ3iWvVYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: italic;\n    font-weight: 400;\n    src: local('PT Sans Italic'), local('PTSans-Italic'), url(http://fonts.gstatic.com/s/ptsans/v8/7dSh6BcuqDLzS2qAASIeuoX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: italic;\n    font-weight: 400;\n    src: local('PT Sans Italic'), local('PTSans-Italic'), url(http://fonts.gstatic.com/s/ptsans/v8/DVKQJxMmC9WF_oplMzlQqYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: italic;\n    font-weight: 400;\n    src: local('PT Sans Italic'), local('PTSans-Italic'), url(http://fonts.gstatic.com/s/ptsans/v8/PIPMHY90P7jtyjpXuZ2cLJBw1xU1rKptJj_0jans920.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: italic;\n    font-weight: 700;\n    src: local('PT Sans Bold Italic'), local('PTSans-BoldItalic'), url(http://fonts.gstatic.com/s/ptsans/v8/lILlYDvubYemzYzN7GbLkA7aC6SjiAOpAWOKfJDfVRY.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: italic;\n    font-weight: 700;\n    src: local('PT Sans Bold Italic'), local('PTSans-BoldItalic'), url(http://fonts.gstatic.com/s/ptsans/v8/lILlYDvubYemzYzN7GbLkBdwxCXfZpKo5kWAx_74bHs.woff2) format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: italic;\n    font-weight: 700;\n    src: local('PT Sans Bold Italic'), local('PTSans-BoldItalic'), url(http://fonts.gstatic.com/s/ptsans/v8/lILlYDvubYemzYzN7GbLkIjoYw3YTyktCCer_ilOlhE.woff2) format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'PT Sans';\n    font-style: italic;\n    font-weight: 700;\n    src: local('PT Sans Bold Italic'), local('PTSans-BoldItalic'), url(http://fonts.gstatic.com/s/ptsans/v8/lILlYDvubYemzYzN7GbLkBampu5_7CjHW5spxoeN3Vs.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n\nbody {\n    font-family: 'PT Sans', sans-serif;\n}"
  },
  {
    "path": "test/fixtures/styles/ignore.css",
    "content": ""
  },
  {
    "path": "test/fixtures/styles/image-absolute.css",
    "content": ".header {\n    background: transparent url('/images/critical.png');\n}"
  },
  {
    "path": "test/fixtures/styles/image-big.css",
    "content": ".header {\n    background: transparent url('../images/critical-big.png');\n}"
  },
  {
    "path": "test/fixtures/styles/image-relative.css",
    "content": ".header {\n    background: transparent url('../images/critical.png');\n}"
  },
  {
    "path": "test/fixtures/styles/include.css",
    "content": ".someRule{position:absolute}"
  },
  {
    "path": "test/fixtures/styles/issue-192.css",
    "content": ".main-navigation,\n.hero-deck,\n.deck,\n.search-box {\n  position: static;\n  float: none;\n  width: auto;\n  margin-top: 0;\n  background-color: transparent;\n  border: 0;\n  box-shadow: none;\n}\n\n.search-box .form-group {\n  display: inline-block;\n  margin-bottom: 0;\n  vertical-align: middle;\n}\n\n.hero-deck .form-control {\n  display: inline-block;\n  width: auto;\n  vertical-align: middle;\n}\n"
  },
  {
    "path": "test/fixtures/styles/issue-304.css",
    "content": ".default .sub {\n  background-color: #ffffff;\n}\n\n.a .sub {\n  background-color: #000000;\n}\n\n.b .sub {\n  background-color: #000000;\n}\n"
  },
  {
    "path": "test/fixtures/styles/issue-415.css",
    "content": "@media only screen and (max-width:55px){#element p{font-size:1px}}@media only screen and (max-width:150px){#element p{font-size:2px}}#element p{font-size:inherit}@media only screen and (min-width:50px){#element p{font-size:1px}}@media only screen and (min-width:200px){#element p{font-size:4px}}@media only screen and (min-width:100px){#element p{font-size:2px}}@media only screen and (min-width:300px){#element p{font-size:6px}}@media only screen and (min-width:70px){#element p{font-size:4px}}@media only screen and (min-width:500px){#element p{font-size:10px}}@media only screen and (min-width:400px){#element p{font-size:8px}}@media only screen and (max-width:250px){#element p{font-size:4px}}@media only screen and (max-width:350px){#element p{font-size:6px}}@media only screen and (max-width:450px){#element p{font-size:8px}}@media only screen and (max-width:550px){#element p{font-size:10px}}"
  },
  {
    "path": "test/fixtures/styles/issue-562.css",
    "content": "@media all and (min-width: 768px) {\n  .title {\n    width: 200px;\n    height: 100px;\n  }\n}\n@media all and (min-width: 768px) {\n  .block {\n    width: 100px;\n  }\n\n  .title {\n    width: 200px;\n    color: #ffffff;\n  }\n}\n"
  },
  {
    "path": "test/fixtures/styles/main.css",
    "content": "body {\n    padding-top: 20px;\n    padding-bottom: 20px;\n}\n\n\n.header,\n.marketing{\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n\n.header {\n    border-bottom: 1px solid #e5e5e5;\n}\n\n\n.header h3 {\n    margin-top: 0;\n    margin-bottom: 0;\n    line-height: 40px;\n    padding-bottom: 19px;\n}\n\n\n.jumbotron {\n    text-align: center;\n    border-bottom: 1px solid #e5e5e5;\n}\n\n.jumbotron .btn {\n    font-size: 21px;\n    padding: 14px 24px;\n}\n\n\n.marketing {\n    margin: 40px 0;\n}\n\n\n@media screen and (min-width: 768px) {\n    .container {\n        max-width: 730px;\n    }\n\n    \n    .header,\n    .marketing{\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n    \n    .header {\n        margin-bottom: 30px;\n    }\n    \n    \n    .jumbotron {\n        border-bottom: 0;\n    }\n}\n"
  },
  {
    "path": "test/fixtures/styles/media-attr.css",
    "content": ".header {\n    display: flex;\n}"
  },
  {
    "path": "test/fixtures/styles/path-prefix.css",
    "content": ".header {\n    background: transparent url('../images/critical.png');\n}"
  },
  {
    "path": "test/fixtures/styles/print.css",
    "content": ".someRule {\n    color: #000;\n}\n"
  },
  {
    "path": "test/fixtures/styles/some/path/image.css",
    "content": ".header {\n    background: transparent url('../../../images/critical.png');\n}"
  },
  {
    "path": "test/fixtures/useragent/generate-default-useragent.html",
    "content": "<!doctype html>\n<html class=\"no-js\">\n    <head>\n        <meta charset=\"utf-8\">\n        <title>critical css test</title>\n        <meta name=\"description\" content=\"\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n        <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n        <!-- build:css styles/main.css -->\n        <link rel=\"stylesheet\" href=\"styles/main.css\">\n        <link rel=\"stylesheet\" href=\"styles/bootstrap.css\" >\n        <!-- endbuild -->\n\n    </head>\n    <body>\n        <!--[if lt IE 10]>\n            <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n        <![endif]-->\n\n        <div class=\"container\">\n            <div class=\"header\">\n                <ul class=\"nav nav-pills pull-right\">\n                    <li class=\"active\"><a href=\"#\">Home</a></li>\n                    <li><a href=\"#\">About</a></li>\n                    <li><a href=\"#\">Contact</a></li>\n                </ul>\n                <h3 class=\"text-muted\">critical css test</h3>\n            </div>\n\n            <div class=\"jumbotron\">\n                <h1>'Allo, 'Allo!</h1>\n                <p class=\"lead\">Always a pleasure scaffolding your apps.</p>\n                <p><a class=\"btn btn-lg btn-success\" href=\"#\">Splendid!</a></p>\n            </div>\n\n            <div class=\"row marketing\">\n                <div class=\"col-lg-6\">\n                    <h4>HTML5 Boilerplate</h4>\n                    <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>\n\n                    <h4>Bootstrap</h4>\n                    <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n                </div>\n            </div>\n\n            <div class=\"footer\">\n                <p>♥ from the Yeoman team</p>\n            </div>\n        </div>\n\n        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->\n        <script>\n            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=\n            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;\n            e=o.createElement(i);r=o.getElementsByTagName(i)[0];\n            e.src='//www.google-analytics.com/analytics.js';\n            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n            ga('create','UA-XXXXX-X');ga('send','pageview');\n        </script>\n\n        <!-- build:js scripts/vendor.js -->\n        <!-- bower:js -->\n        <script src=\"../old/fixture/bower_components/jquery/dist/jquery.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n        <!-- endbower -->\n        <!-- endbuild -->\n\n        <!-- build:js scripts/plugins.js -->\n        <script src=\"../old/fixture/bower_components/bootstrap/js/affix.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/alert.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/dropdown.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tooltip.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/modal.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/transition.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/button.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/popover.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/carousel.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/scrollspy.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/collapse.js\"></script>\n        <script src=\"../old/fixture/bower_components/bootstrap/js/tab.js\"></script>\n        <!-- endbuild -->\n\n        <!-- build:js scripts/main.js -->\n        <script src=\"../old/fixture/scripts/main.js\"></script>\n        <!-- endbuild -->\n</body>\n</html>\n"
  },
  {
    "path": "test/fixtures/useragent/styles/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.1.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n@media print {\n  * {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 62.5%;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\ncite {\n  font-style: normal;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-muted {\n  color: #999;\n}\n.text-primary {\n  color: #428bca;\n}\na.text-primary:hover {\n  color: #3071a9;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #428bca;\n}\na.bg-primary:hover {\n  background-color: #3071a9;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #999;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  white-space: nowrap;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: 0;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: 0;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: 0;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: 0;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: 0;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: 0;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: 0;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: 0;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  max-width: 100%;\n  background-color: transparent;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n@media (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"] {\n  line-height: 34px;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  padding-left: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  display: inline;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.has-feedback .form-control-feedback {\n  position: absolute;\n  top: 25px;\n  right: 0;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.form-control-static {\n  margin-bottom: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.form-horizontal .form-control-static {\n  padding-top: 7px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  top: 0;\n  right: 15px;\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #ebebeb;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #47a447;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #39b3d7;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ed9c28;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #d2322d;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  cursor: pointer;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #999;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height .35s ease;\n          transition: height .35s ease;\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot');\n  src: url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../old/fixture/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #999;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #999;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #428bca;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #428bca;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: none;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n  .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-form.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n  .navbar-text.navbar-right:last-child {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #999;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #999;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #999;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #999;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #999;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #999;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #428bca;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #2a6496;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #fff;\n  cursor: default;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #999;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #999;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n.label[href]:hover,\n.label[href]:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #999;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #808080;\n}\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #999;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.container .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable {\n  padding-right: 35px;\n}\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\na.list-group-item.active,\na.list-group-item.active:hover,\na.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\na.list-group-item.active .list-group-item-heading,\na.list-group-item.active:hover .list-group-item-heading,\na.list-group-item.active:focus .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item.active .list-group-item-text,\na.list-group-item.active:hover .list-group-item-text,\na.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table {\n  margin-bottom: 0;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n     -moz-transition:    -moz-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: none;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n.modal-footer {\n  padding: 19px 20px 20px;\n  margin-top: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  visibility: visible;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: none;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "test/fixtures/useragent/styles/main.css",
    "content": "body {\n    padding-top: 20px;\n    padding-bottom: 20px;\n}\n\n\n.header,\n.marketing{\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n\n.header {\n    border-bottom: 1px solid #e5e5e5;\n}\n\n\n.header h3 {\n    margin-top: 0;\n    margin-bottom: 0;\n    line-height: 40px;\n    padding-bottom: 19px;\n}\n\n\n.jumbotron {\n    text-align: center;\n    border-bottom: 1px solid #e5e5e5;\n}\n\n.jumbotron .btn {\n    font-size: 21px;\n    padding: 14px 24px;\n}\n\n\n.marketing {\n    margin: 40px 0;\n}\n\n\n@media screen and (min-width: 768px) {\n    .container {\n        max-width: 730px;\n    }\n\n    \n    .header,\n    .marketing{\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n    \n    .header {\n        margin-bottom: 30px;\n    }\n    \n    \n    .jumbotron {\n        border-bottom: 0;\n    }\n}\n"
  },
  {
    "path": "test/helper/index.js",
    "content": "import {Buffer} from 'node:buffer';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport array from 'stream-array';\nimport Vinyl from 'vinyl';\nimport nn from 'normalize-newline';\n\nexport const __dirname = fileURLToPath(new URL('.', import.meta.url));\n\nfunction getFile(file) {\n  const testBase = path.join(__dirname, '..');\n  if (fs.existsSync(path.join(testBase, file))) {\n    return path.join(testBase, file);\n  }\n\n  return file;\n}\n\nexport function getPkg() {\n  const content = fs.readFileSync(path.join(__dirname, '../../package.json'), 'utf8');\n  return JSON.parse(content);\n}\n\nexport function readAndRemove(file) {\n  const fp = getFile(file);\n  const content = read(fp);\n\n  fs.unlinkSync(fp);\n\n  return content;\n}\n\nexport function read(file) {\n  const content = fs.readFileSync(getFile(file), 'utf8');\n\n  return nn(content);\n}\n\nexport function getVinyl(...args) {\n  function create(filepath) {\n    if (filepath) {\n      const file = path.join(__dirname, '../fixtures', filepath);\n      return new Vinyl({\n        cwd: __dirname,\n        base: path.dirname(file),\n        path: file,\n        contents: Buffer.from(read(file)),\n      });\n    }\n\n    return new Vinyl();\n  }\n\n  return array(args.map((value) => create(value)));\n}\n\nexport function strip(string) {\n  return nn(string.replaceAll(/[\\r\\n]+/gm, ' ').replaceAll(/\\s+/gm, ''));\n}\n"
  },
  {
    "path": "test/index.test.js",
    "content": "import process from 'node:process';\nimport path from 'node:path';\nimport {promisify} from 'node:util';\nimport {fileURLToPath} from 'node:url';\nimport fs from 'node:fs';\nimport {jest} from '@jest/globals';\nimport vinylStream from 'vinyl-source-stream';\nimport Vinyl from 'vinyl';\nimport PluginError from 'plugin-error';\nimport nn from 'normalize-newline';\nimport streamAssert from 'stream-assert';\nimport {temporaryDirectory} from 'tempy';\nimport {ConfigError, FileNotFoundError, NoCssError} from '../src/errors.js';\nimport {generate, stream} from '../index.js';\nimport {getVinyl, readAndRemove, read} from './helper/index.js';\n\njest.setTimeout(100_000);\n\nconst __dirname = fileURLToPath(new URL('.', import.meta.url));\nconst unlinkAsync = promisify(fs.unlink);\n\nlet stderr;\nbeforeEach(() => {\n  stderr = jest.spyOn(process.stderr, 'write').mockImplementation(() => true);\n});\n\nafterEach(() => {\n  stderr.mockRestore();\n});\ntest('Handle errors with passed callback method', (done) => {\n  const tmp = generate({}, (error, data) => {\n    expect(data).toBeFalsy();\n    expect(error).toBeInstanceOf(Error);\n    done();\n  });\n\n  expect(tmp).resolves.toBeUndefined();\n});\n\ntest('Call callback function with object containing html, css and uncritical props', (done) => {\n  generate({src: path.join(__dirname, 'fixtures/generate-default.html')}, (error, data) => {\n    expect(error).toBeFalsy();\n    expect(data).toHaveProperty('css');\n    expect(data).toHaveProperty('html');\n    expect(data).toHaveProperty('uncritical');\n    done();\n  });\n});\n\ntest('Write css target', async () => {\n  const data = await generate({src: path.join(__dirname, 'fixtures/generate-default.html'), target: '.test.css'});\n  expect(data).toHaveProperty('css');\n  expect(data).toHaveProperty('html');\n  expect(fs.existsSync('.test.css')).toBeTruthy();\n\n  const content = readAndRemove('.test.css');\n  expect(content).toBe(data.css);\n});\n\ntest('Write html target', async () => {\n  const data = await generate({src: path.join(__dirname, 'fixtures/generate-default.html'), target: '.test.html'});\n  expect(data).toHaveProperty('css');\n  expect(data).toHaveProperty('html');\n  expect(fs.existsSync('.test.html')).toBeTruthy();\n\n  const content = readAndRemove('.test.html');\n  expect(content).toBe(data.html);\n});\n\ntest('Write all targets', async () => {\n  const data = await generate({\n    src: path.join(__dirname, 'fixtures/generate-default.html'),\n    target: {html: '.test.html', css: '.test.css', uncritical: '.uncritical.css'},\n  });\n  expect(data).toHaveProperty('css');\n  expect(data).toHaveProperty('html');\n  expect(fs.existsSync('.test.css')).toBeTruthy();\n  expect(fs.existsSync('.uncritical.css')).toBeTruthy();\n  expect(fs.existsSync('.test.html')).toBeTruthy();\n\n  const html = readAndRemove('.test.html');\n  const css = readAndRemove('.test.css');\n  readAndRemove('.uncritical.css');\n  expect(html).toBe(data.html);\n  expect(css).toBe(data.css);\n});\n\ntest('Write all targets relative to base', async () => {\n  const base = temporaryDirectory();\n  const getFile = (f) => path.join(base, f);\n  const data = await generate({\n    base,\n    src: path.join(__dirname, 'fixtures/generate-default.html'),\n    target: {html: '.test.html', css: '.test.css', uncritical: '.uncritical.css'},\n  });\n  expect(data).toHaveProperty('css');\n  expect(data).toHaveProperty('html');\n  expect(data).toHaveProperty('uncritical');\n  expect(fs.existsSync(getFile('.test.css'))).toBeTruthy();\n  expect(fs.existsSync(getFile('.uncritical.css'))).toBeTruthy();\n  expect(fs.existsSync(getFile('.test.html'))).toBeTruthy();\n\n  const html = readAndRemove(getFile('.test.html'));\n  const css = readAndRemove(getFile('.test.css'));\n  const uncritical = readAndRemove(getFile('.uncritical.css'));\n  expect(uncritical).toBe(data.uncritical);\n  expect(html).toBe(data.html);\n  expect(css).toBe(data.css);\n\n  try {\n    await unlinkAsync(base);\n  } catch {\n    // file not  there\n  }\n});\n\ntest('Write all targets respecting absolute paths', async () => {\n  const base = temporaryDirectory();\n  const fileBase = temporaryDirectory();\n  const getFile = (f) => path.join(fileBase, f);\n  const data = await generate({\n    base,\n    src: path.join(__dirname, 'fixtures/generate-default.html'),\n    target: {html: getFile('.test.html'), css: getFile('.test.css'), uncritical: getFile('.uncritical.css')},\n  });\n  expect(data).toHaveProperty('css');\n  expect(data).toHaveProperty('html');\n  expect(data).toHaveProperty('uncritical');\n  expect(fs.existsSync(getFile('.test.css'))).toBeTruthy();\n  expect(fs.existsSync(getFile('.uncritical.css'))).toBeTruthy();\n  expect(fs.existsSync(getFile('.test.html'))).toBeTruthy();\n\n  const html = readAndRemove(getFile('.test.html'));\n  const css = readAndRemove(getFile('.test.css'));\n  const uncritical = readAndRemove(getFile('.uncritical.css'));\n  expect(uncritical).toBe(data.uncritical);\n  expect(html).toBe(data.html);\n  expect(css).toBe(data.css);\n\n  try {\n    await unlinkAsync(base);\n    await unlinkAsync(fileBase);\n  } catch {\n    // file already deleted\n  }\n});\n\ntest('Reject with ConfigError on invalid config', () => {\n  expect(generate({})).rejects.toThrow(ConfigError);\n});\n\ntest('Throws FileNotFound error on missing file', () => {\n  expect(generate({src: 'not-found.html'})).rejects.toThrow(FileNotFoundError);\n});\n\ntest('Throws NoCssError error on empty styles in strict mode', () => {\n  expect(generate({src: path.join(__dirname, 'fixtures/error.html'), strict: true})).rejects.toThrow(NoCssError);\n});\n\ntest('Emit error on streamed file', (done) => {\n  const critical = stream({base: path.join(__dirname, 'fixtures')});\n  const fakeFilePath = path.join(__dirname, 'fixtures', 'generate-default.html');\n\n  expect.hasAssertions();\n  fs.createReadStream(fakeFilePath)\n    .pipe(vinylStream())\n    .pipe(critical)\n    .on('data', () => done.fail(new Error('Should not emit data')))\n    .on('error', ({message}) => {\n      expect(message).toBe('Streaming not supported');\n      done();\n    });\n});\n\ntest('Throws PluginError on critical.stream error', (done) => {\n  const critical = stream({invalidOption: true});\n\n  getVinyl('error.html')\n    .pipe(critical)\n    .on('data', () => done.fail(new Error('Should not emit data')))\n    .on('error', (error) => {\n      expect(error).toBeInstanceOf(PluginError);\n      expect(error.plugin).toBe('critical');\n      done();\n    });\n});\n\ntest('Support vinyl buffer streams and return critical css vinyl', (done) => {\n  const critical = stream({base: path.join(__dirname, 'fixtures')});\n\n  getVinyl('generate-default.html')\n    .pipe(critical)\n    .on('data', (data) => {\n      expect(data).toBeTruthy();\n      expect(data).toBeInstanceOf(Vinyl);\n      expect(data.path).toMatch(/\\.css/);\n      done();\n    })\n    .on('error', () => {\n      done.fail(new Error('Should not emit error'));\n      done();\n    });\n});\n\ntest('Support vinyl buffer streams and returns html vinyl with inlined css', (done) => {\n  const critical = stream({base: path.join(__dirname, 'fixtures'), inline: true});\n\n  getVinyl('generate-default.html')\n    .pipe(critical)\n    .on('data', (data) => {\n      expect(data).toBeTruthy();\n      expect(data).toBeInstanceOf(Vinyl);\n      expect(data.path).toMatch(/\\.html/);\n      expect(data.contents.toString()).toMatch(/<style>/);\n      done();\n    })\n    .on('error', () => {\n      done.fail(new Error('Should not emit error'));\n      done();\n    });\n});\n\ntest('Return empty vinyl on empty vinyl', (done) => {\n  const critical = stream({base: path.join(__dirname, 'fixtures')});\n\n  getVinyl(false)\n    .pipe(critical)\n    .on('data', (data) => {\n      expect(data).toBeTruthy();\n      expect(data).toBeInstanceOf(Vinyl);\n      expect(data.isNull).toBeTruthy();\n      done();\n    })\n    .on('error', () => {\n      done.fail(new Error('Should not emit error'));\n      done();\n    });\n});\n\ntest('#192 - include option - stream', (done) => {\n  const critical = stream({\n    base: path.join(__dirname, 'fixtures'),\n    css: ['fixtures/styles/issue-192.css'],\n    extract: false,\n    ignore: ['@font-face', /url\\(/],\n    dimensions: [\n      {\n        width: 320,\n        height: 480,\n      },\n      {\n        width: 768,\n        height: 1024,\n      },\n      {\n        width: 1280,\n        height: 960,\n      },\n      {\n        width: 1920,\n        height: 1080,\n      },\n    ],\n    include: [/^\\.main-navigation.*$/, /^\\.hero-deck.*$/, /^\\.deck.*$/, /^\\.search-box.*$/],\n    width: 1300,\n    height: 900,\n  });\n\n  const expected = read('expected/issue-192.css');\n\n  getVinyl('issue-192.html')\n    .pipe(critical)\n    .pipe(streamAssert.length(1))\n    .pipe(\n      streamAssert.nth(0, (d) => {\n        expect(path.extname(d.path)).toBe('.css');\n        expect(nn(d.contents.toString('utf8'))).toBe(expected);\n      })\n    )\n    .pipe(streamAssert.end(done));\n});\n\ntest('should generate multi-dimension critical-path CSS in stream mode', (done) => {\n  const expected = read('expected/generate-adaptive.css', 'utf8');\n\n  const critical = stream({\n    base: 'fixtures/',\n    dimensions: [\n      {\n        width: 100,\n        height: 70,\n      },\n      {\n        width: 1000,\n        height: 70,\n      },\n    ],\n  });\n\n  getVinyl('generate-adaptive.html')\n    .pipe(critical)\n    .pipe(streamAssert.length(1))\n    .pipe(\n      streamAssert.nth(0, (d) => {\n        expect(path.extname(d.path)).toBe('.css');\n        expect(nn(d.contents.toString('utf8'))).toBe(expected);\n      })\n    )\n    .pipe(streamAssert.end(done));\n});\n\ntest('issue 341', async () => {\n  const expected = [];\n  const sources = [\n    read('fixtures/generate-adaptive.html', 'utf8'),\n    read('fixtures/generate-default.html', 'utf8'),\n    read('fixtures/generate-image.html', 'utf8'),\n  ];\n\n  const options = {\n    base: path.join(__dirname, 'fixtures'),\n    extract: false,\n    inline: false,\n    dimensions: [\n      {\n        width: 100,\n        height: 70,\n      },\n      {\n        width: 1000,\n        height: 70,\n      },\n    ],\n  };\n\n  // first await all results regularly\n  expected[0] = await generate({...options, html: sources[0]});\n  expected[1] = await generate({...options, html: sources[1]});\n  expected[2] = await generate({...options, html: sources[2]});\n\n  // limit concurrency and run all processes in parallel\n  const promises = sources.map((html) => generate({...options, html, concurrency: 2}));\n  const results = await Promise.all(promises);\n\n  expect(results[0].css).toBe(expected[0].css);\n  expect(results[1].css).toBe(expected[1].css);\n  expect(results[2].css).toBe(expected[2].css);\n});\n\ntest('Replace stylesheet on extract-target', async () => {\n  const target = path.join(__dirname, 'fixtures/styles/uncritical.css');\n  const result = await generate({\n    html: read('fixtures/generate-adaptive.html'),\n    base: path.join(__dirname, 'fixtures'),\n    target: {uncritical: target},\n    extract: true,\n    inline: true,\n  });\n\n  const uncritical = readAndRemove(target);\n\n  expect(result.html).toMatch('\"/styles/uncritical.css\"');\n  expect(uncritical).toBe(result.uncritical);\n});\n\ntest('Remove stylesheet on empty uncritical css', async () => {\n  const result = await generate({\n    html: read('fixtures/issue-304.html'),\n    base: path.join(__dirname, 'fixtures'),\n    extract: true,\n    inline: true,\n  });\n\n  expect(result.html).not.toMatch('<link');\n  expect(result.uncritical).toBe(result.uncritical);\n});\n\ntest('Use async cb result for inline.replaceStylesheets', async () => {\n  const cb = () => Promise.resolve(['ab.css']);\n  const result = await generate({\n    html: read('fixtures/issue-304.html'),\n    base: path.join(__dirname, 'fixtures'),\n    extract: true,\n    inline: {\n      replaceStylesheets: cb,\n    },\n  });\n\n  expect(result.html).toMatch('\"ab.css\"');\n  expect(result.uncritical).toBe(result.uncritical);\n});\n"
  }
]